Class: ActiveSerializer::Serializers::ObjectSerializer
- Inherits:
-
Object
- Object
- ActiveSerializer::Serializers::ObjectSerializer
show all
- Defined in:
- lib/active_serializer/serializers/object_serializer.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
-
#attribute(attr, val = nil, &block) ⇒ Object
-
#attributes(*attrs, &block) ⇒ Object
-
#initialize(object, options = {}) ⇒ ObjectSerializer
constructor
A new instance of ObjectSerializer.
-
#namespace(name, &block) ⇒ Object
-
#resource(name, object = nil, &block) ⇒ Object
-
#resources(name, objects = nil, &block) ⇒ Object
-
#serialize_collection(name, objects, klass, *args) ⇒ Object
-
#serialize_entity(name, object, klass, *args) ⇒ Object
Constructor Details
#initialize(object, options = {}) ⇒ ObjectSerializer
Returns a new instance of ObjectSerializer.
4
5
6
7
|
# File 'lib/active_serializer/serializers/object_serializer.rb', line 4
def initialize(object, options = {})
@object, @options = object, options
@attrs = {}
end
|
Instance Attribute Details
#attrs ⇒ Object
Returns the value of attribute attrs.
2
3
4
|
# File 'lib/active_serializer/serializers/object_serializer.rb', line 2
def attrs
@attrs
end
|
Instance Method Details
#attribute(attr, val = nil, &block) ⇒ Object
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/active_serializer/serializers/object_serializer.rb', line 77
def attribute(attr, val = nil, &block)
if block_given?
self.attrs[attr] = yield
return
end
if @object.blank?
raise ArgumentError, "Neither object was specified nor block was given"
end
self.attrs[attr] = val || @object.send(attr.to_s)
end
|
#attributes(*attrs, &block) ⇒ Object
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/active_serializer/serializers/object_serializer.rb', line 62
def attributes(*attrs, &block)
if !attrs.last.is_a?(Symbol) && !attrs.last.is_a?(String)
object = attrs.last
attrs.delete(attrs.last)
end
if !@object && !object
raise ArgumentError, "Object was not specified"
end
target = object || @object
Array.wrap(attrs).flatten.each do |attribute|
serialize_attribute(attribute, target)
end
end
|
#namespace(name, &block) ⇒ Object
22
23
24
25
26
|
# File 'lib/active_serializer/serializers/object_serializer.rb', line 22
def namespace(name, &block)
serializer = self.class.new(@object, @options)
serializer.instance_exec(@object, &block)
self.attrs[name] = serializer.attrs
end
|
#resource(name, object = nil, &block) ⇒ Object
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/active_serializer/serializers/object_serializer.rb', line 28
def resource(name, object = nil, &block)
raise "You should set name for resource" unless name
raise "You should specify object" if @object.nil? && object.nil?
nested_name = name
nested_object = object || @object.send(nested_name)
unless nested_object
self.attrs[nested_name] = {}
else
if block_given?
self.attrs[nested_name] = nested_resource(nested_name, nested_object, @options, &block)
elsif nested_object.respond_to?(:to_hash)
self.attrs[nested_name] = nested_object.to_hash
elsif nested_object.is_a?(String)
self.attrs[nested_name] = nested_object
else
raise "You should specify block or declare 'to_hash' method"
end
end
end
|
#resources(name, objects = nil, &block) ⇒ Object
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/active_serializer/serializers/object_serializer.rb', line 48
def resources(name, objects = nil, &block)
raise "You should specify object" if @object.nil? && objects.nil?
objects = objects.flatten unless objects.nil?
nested_objects = objects || @object.send(name.to_s)
unless nested_objects
self.attrs[name] = []
else
self.attrs[name] = (nested_objects || []).inject([]) do |result, obj|
resource = nested_resource(name, obj, @options, &block)
resource.empty? ? result : (result << resource)
end
end
end
|
#serialize_collection(name, objects, klass, *args) ⇒ Object
9
10
11
12
13
14
15
|
# File 'lib/active_serializer/serializers/object_serializer.rb', line 9
def serialize_collection(name, objects, klass, *args)
raise ArgumentError, "You should provide serializer klass" if !klass
self.attrs[name] = []
objects.each do |object|
self.attrs[name] << klass.serialize(object, *args)
end
end
|
#serialize_entity(name, object, klass, *args) ⇒ Object
17
18
19
20
|
# File 'lib/active_serializer/serializers/object_serializer.rb', line 17
def serialize_entity(name, object, klass, *args)
raise ArgumentError, "You should provide serializer klass" if !klass
self.attrs[name] = klass.serialize(object, *args)
end
|