aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2016-01-28 14:14:17 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2016-01-28 14:14:32 -0800
commitf8c9ef8401ab11db5f64fc1e13e8b1fe5a0803ce (patch)
tree0ab7d457b66fc26a5dc0e36d60d142fae16d98d7 /actionpack
parentc6d251f3a2114599d5aa49f2087c33ea37918d8b (diff)
downloadrails-f8c9ef8401ab11db5f64fc1e13e8b1fe5a0803ce.tar.gz
rails-f8c9ef8401ab11db5f64fc1e13e8b1fe5a0803ce.tar.bz2
rails-f8c9ef8401ab11db5f64fc1e13e8b1fe5a0803ce.zip
convert AcceptList to a regular class
we never use this custom array outside the mime type `parse` method. We can reduce the interaction to just a regular array, so we should use that instead (IOW, there was nothing special about AcceptList so we should remove it).
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_dispatch/http/mime_type.rb39
1 files changed, 19 insertions, 20 deletions
diff --git a/actionpack/lib/action_dispatch/http/mime_type.rb b/actionpack/lib/action_dispatch/http/mime_type.rb
index 463b5fe405..065d7dd355 100644
--- a/actionpack/lib/action_dispatch/http/mime_type.rb
+++ b/actionpack/lib/action_dispatch/http/mime_type.rb
@@ -108,51 +108,50 @@ module Mime
end
end
- class AcceptList < Array #:nodoc:
- def assort!
- sort!
+ class AcceptList #:nodoc:
+ def self.sort!(list)
+ list.sort!
- text_xml_idx = find_item_by_name self, 'text/xml'
- app_xml_idx = find_item_by_name self, Mime[:xml].to_s
+ text_xml_idx = find_item_by_name list, 'text/xml'
+ app_xml_idx = find_item_by_name list, Mime[:xml].to_s
# Take care of the broken text/xml entry by renaming or deleting it
if text_xml_idx && app_xml_idx
- app_xml = self[app_xml_idx]
- text_xml = self[text_xml_idx]
+ app_xml = list[app_xml_idx]
+ text_xml = list[text_xml_idx]
app_xml.q = [text_xml.q, app_xml.q].max # set the q value to the max of the two
if app_xml_idx > text_xml_idx # make sure app_xml is ahead of text_xml in the list
- self[app_xml_idx], self[text_xml_idx] = text_xml, app_xml
+ list[app_xml_idx], list[text_xml_idx] = text_xml, app_xml
app_xml_idx, text_xml_idx = text_xml_idx, app_xml_idx
end
- delete_at(text_xml_idx) # delete text_xml from the list
+ list.delete_at(text_xml_idx) # delete text_xml from the list
elsif text_xml_idx
- self[text_xml_idx].name = Mime[:xml].to_s
+ list[text_xml_idx].name = Mime[:xml].to_s
end
# Look for more specific XML-based types and sort them ahead of app/xml
if app_xml_idx
- app_xml = self[app_xml_idx]
+ app_xml = list[app_xml_idx]
idx = app_xml_idx
- while idx < length
- type = self[idx]
+ while idx < list.length
+ type = list[idx]
break if type.q < app_xml.q
if type.name.ends_with? '+xml'
- self[app_xml_idx], self[idx] = self[idx], app_xml
+ list[app_xml_idx], list[idx] = list[idx], app_xml
app_xml_idx = idx
end
idx += 1
end
end
- map! { |i| Mime::Type.lookup(i.name) }.uniq!
- to_a
+ list.map! { |i| Mime::Type.lookup(i.name) }.uniq!
+ list
end
- private
- def find_item_by_name(array, name)
+ def self.find_item_by_name(array, name)
array.index { |item| item.name == name }
end
end
@@ -198,7 +197,7 @@ module Mime
accept_header = accept_header.split(PARAMETER_SEPARATOR_REGEXP).first
parse_trailing_star(accept_header) || [Mime::Type.lookup(accept_header)].compact
else
- list, index = AcceptList.new, 0
+ list, index = [], 0
accept_header.split(',').each do |header|
params, q = header.split(PARAMETER_SEPARATOR_REGEXP)
if params.present?
@@ -212,7 +211,7 @@ module Mime
end
end
end
- list.assort!
+ AcceptList.sort! list
end
end