Class: CachedSerializer::AttrSerializerCollection

Inherits:
Object
  • Object
show all
Defined in:
lib/cached_serializer/attr_serializer_collection.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(collection = []) ⇒ AttrSerializerCollection

Returns a new instance of AttrSerializerCollection.



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

def initialize(collection = [])
  self.collection = collection
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



32
33
34
# File 'lib/cached_serializer/attr_serializer_collection.rb', line 32

def method_missing(method, *args, &block)
  collection.send(method, *args, &block)
end

Instance Attribute Details

#collectionObject

Returns the value of attribute collection.



3
4
5
# File 'lib/cached_serializer/attr_serializer_collection.rb', line 3

def collection
  @collection
end

Instance Method Details

#<<(item) ⇒ Object



24
25
26
# File 'lib/cached_serializer/attr_serializer_collection.rb', line 24

def <<(item)
  add(item)
end

#add(*attr_serializers) ⇒ Object Also known as: push



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/cached_serializer/attr_serializer_collection.rb', line 9

def add(*attr_serializers)
  attr_serializers.each do |attr_serializer|
    existing = collection.find { |serializer| serializer.attr_name == attr_serializer.attr_name }
    if existing
      existing.recompute_ifs.concat(attr_serializer.recompute_ifs)
      existing.recompute = attr_serializer.recompute # shadowed attrs override the blocks of previously-declared ones
      existing.expires_in = attr_serializer.expires_in # shadowed attrs override the expires_in of previously-declared ones
    else
      collection << attr_serializer
    end
  end
end

#concat(items) ⇒ Object



28
29
30
# File 'lib/cached_serializer/attr_serializer_collection.rb', line 28

def concat(items)
  add(*items)
end

#respond_to?(method, *args) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/cached_serializer/attr_serializer_collection.rb', line 36

def respond_to?(method, *args)
  collection.respond_to?(method, *args)
end

#serialize_for(subject) ⇒ Object



40
41
42
43
44
# File 'lib/cached_serializer/attr_serializer_collection.rb', line 40

def serialize_for(subject)
  collection.reduce({}) do |memo, attr_serializer|
    memo.merge(attr_serializer.serialize_for(subject))
  end
end