Module: SimpleAMS::Options::Concerns::Filterable

Included in:
Fields, Forms, Generics, Includes, Links, Metas
Defined in:
lib/simple_ams/options/concerns/filterable.rb

Overview

works for arrays that can hold either elements or object that respond_to? :name

Instance Method Summary collapse

Instance Method Details

#&(other_filterables) ⇒ Object

for optimizing performance, ask only the first element other idea is to create another module just for (Name)ValueHash objects



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/simple_ams/options/concerns/filterable.rb', line 9

def &(other_filterables)
  other_is_object = other_filterables[0].respond_to?(:name)

  return self.class.new(
    self.select{|m|
      if other_is_object
        other_filterables.include?(m.name)
      else
        other_filterables.include?(m)
      end
    }
  )
end

#include?(member) ⇒ Boolean

for optimizing performance, ask only the first element of self and save it as state

Returns:

  • (Boolean)


24
25
26
27
28
29
30
31
32
33
34
# File 'lib/simple_ams/options/concerns/filterable.rb', line 24

def include?(member)
  unless defined?(@self_is_object)
    @self_is_object = self[0].respond_to?(:name)
  end

  if @self_is_object
    self.any?{|s| s.name == member}
  else
    super
  end
end

#rawObject



36
37
38
39
40
41
42
# File 'lib/simple_ams/options/concerns/filterable.rb', line 36

def raw
  if self[0].respond_to?(:raw)
    self.map(&:raw)
  else
    self.map{|i| i}
  end
end