Module: QueryableArray::Shorthand
- Included in:
- QueryableArray
- Defined in:
- lib/queryable_array/shorthand.rb
Overview
Makes [search_hash]
and [[search_hash]]
behave as an alias for find_by
and find_all
respectively
Instance Method Summary collapse
-
#[](key) ⇒ Object
If
key
is aHash
,Proc
, or anArray
containing aHash
orProc
then it acts like an alias forfind_by
orfind_all
respectively.
Instance Method Details
#[](key) ⇒ Object
If key
is a Hash
, Proc
, or an Array
containing a Hash
or Proc
then it acts like an alias for find_by
or find_all
respectively. It delegates the call to super
in all other cases.
pages = QueryableArray.new Page.all
pages[uri: '/'] # => #<Page @uri='/' @name='Home'>
pages[uri: '/', name: 'Home'] # => #<Page @uri='/' @name='Home'>
pages[uri: '/', name: 'Typo'] # => nil
pages[[uri: '/']] # => [#<Page @uri='/' @name='Home'>]
pages[[uri: '/', name: 'Typo']] # => []
pages[uri: proc { |uri| uri.count('/') > 1 }] # => #<Page @uri='/users/bob' @name='Bob'>
19 20 21 22 23 24 25 26 |
# File 'lib/queryable_array/shorthand.rb', line 19 def [](key) # Try to handle numeric indexes, ranges, and anything else that is # natively supported by +Array+ first super rescue TypeError => error method, key = key.is_a?(Array) ? [:find_all, key.first] : [:find_by, key] key.is_a?(Hash) ? send(method, key) : raise(error) end |