diff options
author | George Claghorn <george.claghorn@gmail.com> | 2015-03-10 01:00:37 -0400 |
---|---|---|
committer | George Claghorn <george@basecamp.com> | 2015-03-24 13:33:01 -0500 |
commit | c64b99ecc98341d504aced72448bee758f3cfdaf (patch) | |
tree | d704a17a440c57e6e45a4005e7e331a7dc00672f /actionpack/lib | |
parent | 9d9cc4777be3787ed3645d704f02e5ba1228be13 (diff) | |
download | rails-c64b99ecc98341d504aced72448bee758f3cfdaf.tar.gz rails-c64b99ecc98341d504aced72448bee758f3cfdaf.tar.bz2 rails-c64b99ecc98341d504aced72448bee758f3cfdaf.zip |
Add ActiveSupport::ArrayInquirer and Array#inquiry
Wrapping an array in an `ArrayInquirer` gives a friendlier way to check its
string-like contents. For example, `request.variant` returns an `ArrayInquirer`
object. To check a request's variants, you can call:
request.variant.phone?
request.variant.any?(:phone, :tablet)
...instead of:
request.variant.include?(:phone)
request.variant.any? { |v| v.in?([:phone, :tablet]) }
`Array#inquiry` is a shortcut for wrapping the receiving array in an
`ArrayInquirer`:
pets = [:cat, :dog]
pets.cat? # => true
pets.ferret? # => false
pets.any?(:cat, :ferret} # => true
Diffstat (limited to 'actionpack/lib')
-rw-r--r-- | actionpack/lib/action_dispatch/http/mime_negotiation.rb | 29 |
1 files changed, 2 insertions, 27 deletions
diff --git a/actionpack/lib/action_dispatch/http/mime_negotiation.rb b/actionpack/lib/action_dispatch/http/mime_negotiation.rb index 6544aff7d2..ff336b7354 100644 --- a/actionpack/lib/action_dispatch/http/mime_negotiation.rb +++ b/actionpack/lib/action_dispatch/http/mime_negotiation.rb @@ -76,7 +76,7 @@ module ActionDispatch variant = Array(variant) if variant.all? { |v| v.is_a?(Symbol) } - @variant = VariantInquirer.new(variant) + @variant = ActiveSupport::ArrayInquirer.new(variant) else raise ArgumentError, "request.variant must be set to a Symbol or an Array of Symbols. " \ "For security reasons, never directly set the variant to a user-provided value, " \ @@ -86,7 +86,7 @@ module ActionDispatch end def variant - @variant ||= VariantInquirer.new + @variant ||= ActiveSupport::ArrayInquirer.new end # Sets the \format by string extension, which can be used to force custom formats @@ -141,31 +141,6 @@ module ActionDispatch order.include?(Mime::ALL) ? format : nil end - class VariantInquirer # :nodoc: - delegate :each, :empty?, to: :@variants - - def initialize(variants = []) - @variants = variants - end - - def any?(*candidates) - (@variants & candidates).any? - end - - def to_ary - @variants - end - - private - def method_missing(name, *args) - if name[-1] == '?' - any? name[0..-2].to_sym - else - super - end - end - end - protected BROWSER_LIKE_ACCEPTS = /,\s*\*\/\*|\*\/\*\s*,/ |