Class: ActiveSerializer::Serializers::HashSerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/active_serializer/serializers/hash_serializer.rb

Direct Known Subclasses

IgnoreBlankHashSerializer

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root_hash, options = {}) ⇒ HashSerializer

Returns a new instance of HashSerializer.



4
5
6
7
8
# File 'lib/active_serializer/serializers/hash_serializer.rb', line 4

def initialize(root_hash, options = {})
  @root_hash       = root_hash
  @options         = options
  @serialized_data = {}
end

Instance Attribute Details

#serialized_dataObject (readonly)

Returns the value of attribute serialized_data.



2
3
4
# File 'lib/active_serializer/serializers/hash_serializer.rb', line 2

def serialized_data
  @serialized_data
end

Instance Method Details

#attribute(name, value = nil, &block) ⇒ Object



10
11
12
13
14
15
16
17
# File 'lib/active_serializer/serializers/hash_serializer.rb', line 10

def attribute(name, value = nil, &block)
  if block_given?
    value = yield
  elsif !value
    value = @root_hash[name]
  end
  set_value(name, value)
end

#attributes(*serialized_data, &block) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/active_serializer/serializers/hash_serializer.rb', line 32

def attributes(*serialized_data, &block)
  if !serialized_data.last.is_a?(Symbol)
    source_hash = serialized_data.delete_at(-1)
  else
    source_hash = @root_hash
  end

  serialized_data.each do |attr_name|
    set_value(attr_name, source_hash[attr_name])
  end
end

#namespace(name, &block) ⇒ Object



44
45
46
47
48
# File 'lib/active_serializer/serializers/hash_serializer.rb', line 44

def namespace(name, &block)
  serializer = self.class.new(@root_hash, @options)
  serializer.instance_exec(@root_hash, &block)
  set_value(name, serializer.serialized_data)
end

#resource(name, source_hash = nil, &block) ⇒ Object



50
51
52
53
# File 'lib/active_serializer/serializers/hash_serializer.rb', line 50

def resource(name, source_hash = nil, &block)
  source_hash ||= @root_hash[name]
  set_value(name, serialize_resource(source_hash, &block))
end

#resources(name, source_hashes = nil, &block) ⇒ Object



55
56
57
58
59
60
61
62
# File 'lib/active_serializer/serializers/hash_serializer.rb', line 55

def resources(name, source_hashes = nil, &block)
  source_hashes ||= @root_hash[name]

  self.serialized_data[name] = (source_hashes || []).inject([]) do |result, source_hash|
    data = serialize_resource(source_hash, &block)
    data.empty? ? result : (result << data)
  end
end

#serialize_collection(name, objects, klass, *args) ⇒ Object

Raises:

  • (ArgumentError)


19
20
21
22
23
24
25
# File 'lib/active_serializer/serializers/hash_serializer.rb', line 19

def serialize_collection(name, objects, klass, *args)
  raise ArgumentError, "You should provide serializer klass" if !klass
  self.serialized_data[name] = []
  objects.each do |object|
   self.serialized_data[name] << klass.serialize(object, *args)
  end
end

#serialize_entity(name, object, klass, *args) ⇒ Object

Raises:

  • (ArgumentError)


27
28
29
30
# File 'lib/active_serializer/serializers/hash_serializer.rb', line 27

def serialize_entity(name, object, klass, *args)
  raise ArgumentError, "You should provide serializer klass" if !klass
  self.serialized_data[name] = klass.serialize(object, *args)
end