Class: MultiSet

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/multi_set.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*sets) ⇒ MultiSet

Returns a new instance of MultiSet.



7
8
9
# File 'lib/multi_set.rb', line 7

def initialize(*sets)
  @sets = sets
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/multi_set.rb', line 22

def method_missing(method_name, *args)
  method_name = method_name.to_s
  if method_name =~ /\!$/
    sets.each do |set|
      set.send(method_name, *args)
    end
    self 
  else
    sets.collect do |set|
      set.send(method_name, *args)
    end
  end
end

Instance Attribute Details

#setsObject

Returns the value of attribute sets.



5
6
7
# File 'lib/multi_set.rb', line 5

def sets
  @sets
end

Instance Method Details

#add!(other) ⇒ Object Also known as: <<



11
12
13
14
15
16
17
18
# File 'lib/multi_set.rb', line 11

def add!(other)
  if other.kind_of?(MultiSet)
    sets.concat(other.sets)
  else
    sets << other
  end
  self
end

#eachObject



56
57
58
59
60
61
62
# File 'lib/multi_set.rb', line 56

def each
  sets.each do |set|
    set.each do |model|
      yield model
    end
  end
end

#idsObject



48
49
50
51
52
53
54
# File 'lib/multi_set.rb', line 48

def ids
  ids = OrderedSet.new
  sets.each do |set|
    ids.concat(set.ids)
  end
  ids.to_a
end

#ids_by_classObject



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/multi_set.rb', line 36

def ids_by_class
  ids_by_class = {}
  sets.each do |set|
    ids_by_class[set.model_class] ||= OrderedSet.new
    ids_by_class[set.model_class].concat(set.ids)
  end
  ids_by_class.keys.each do |model_class|
    ids_by_class[model_class] = ids_by_class[model_class].to_a
  end
  ids_by_class
end