Class: SimpleAMS::Options
- Inherits:
-
Object
- Object
- SimpleAMS::Options
show all
- Defined in:
- lib/simple_ams/options.rb,
lib/simple_ams/options/type.rb,
lib/simple_ams/options/forms.rb,
lib/simple_ams/options/links.rb,
lib/simple_ams/options/metas.rb,
lib/simple_ams/options/fields.rb,
lib/simple_ams/options/adapter.rb,
lib/simple_ams/options/generics.rb,
lib/simple_ams/options/includes.rb,
lib/simple_ams/options/relations.rb,
lib/simple_ams/options/primary_id.rb,
lib/simple_ams/options/concerns/filterable.rb,
lib/simple_ams/options/concerns/value_hash.rb,
lib/simple_ams/options/concerns/name_value_hash.rb
Defined Under Namespace
Modules: Concerns
Classes: Adapter, Collection, EmptySerializer, Fields, Forms, Generics, Includes, Links, Metas, PrimaryId, Relations, Type
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(resource = nil, injected_options: {}, allowed_options: nil) ⇒ Options
injected_options is always a Hash object
10
11
12
13
14
15
|
# File 'lib/simple_ams/options.rb', line 10
def initialize(resource = nil, injected_options: {}, allowed_options: nil)
@resource = resource
@injected_options = injected_options || {}
@_internal = @injected_options[:_internal] || {}
@allowed_options = allowed_options || fetch_allowed_options
end
|
Instance Attribute Details
#allowed_options ⇒ Object
Returns the value of attribute allowed_options.
7
8
9
|
# File 'lib/simple_ams/options.rb', line 7
def allowed_options
@allowed_options
end
|
#injected_options ⇒ Object
Returns the value of attribute injected_options.
7
8
9
|
# File 'lib/simple_ams/options.rb', line 7
def injected_options
@injected_options
end
|
#resource ⇒ Object
Also known as:
collection
Returns the value of attribute resource.
7
8
9
|
# File 'lib/simple_ams/options.rb', line 7
def resource
@resource
end
|
Instance Method Details
#adapter(_serializer: nil) ⇒ Object
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/simple_ams/options.rb', line 103
def adapter(_serializer: nil)
return @adapter if defined?(@adapter) && _serializer.nil?
serializer = _serializer || serializer
@adapter = Adapter.new(*injected_options.fetch(:adapter, [nil]), {
resource: resource, serializer: serializer
})
if @adapter.value.nil?
@adapter = Adapter.new(*allowed_options.fetch(:adapter, [nil]), {
resource: resource, serializer: serializer
})
end
if @adapter.value.nil?
@adapter = Adapter.new(SimpleAMS::Adapters::AMS, {
resource: resource, serializer: serializer
})
end
return @adapter
end
|
#as_hash ⇒ Object
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
# File 'lib/simple_ams/options.rb', line 129
def as_hash
{
adapter: adapter.raw,
primary_id: primary_id.raw,
type: type.raw,
name: name,
fields: fields.raw,
serializer: serializer_class,
includes: includes.raw,
links: links.raw,
metas: metas.raw,
expose: expose,
_internal: _internal
}
end
|
#collection_options ⇒ Object
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
# File 'lib/simple_ams/options.rb', line 146
def collection_options
return @collection_options if defined?(@collection_options)
_injected_options = @injected_options.fetch(:collection, {}).merge({
serializer: collection_serializer_class,
adapter: adapter(_serializer: collection_serializer_class).raw
})
_allowed_options = @allowed_options.fetch(:collection).options
return @collection_options = self.class::Collection.new(
resource,
injected_options: _injected_options,
allowed_options: _allowed_options
)
end
|
#collection_serializer_class ⇒ Object
TODO: maybe have that inside :collection? (isomorphism)
174
175
176
177
178
179
180
181
182
183
184
185
186
187
|
# File 'lib/simple_ams/options.rb', line 174
def collection_serializer_class
return @collection_serializer_class if defined?(@collection_serializer_class)
if serializer_class.is_a?(Proc)
@collection_serializer_class = injected_options[:collection_serializer]
if @collection_serializer_class.nil?
raise "In case of a proc serializer, you need to specify a collection_serializer"
end
else
@collection_serializer_class = serializer_class
end
return @collection_serializer_class
end
|
#expose ⇒ Object
the following should be the same for all (nested) serializers of the same document
125
126
127
|
# File 'lib/simple_ams/options.rb', line 125
def expose
@expose ||= injected_options.fetch(:expose, {})
end
|
#fields ⇒ Object
TODO: optimize for nested fields?
46
47
48
49
50
|
# File 'lib/simple_ams/options.rb', line 46
def fields
return @fields if defined?(@fields)
return @fields = array_of_items_for(Fields, :fields)
end
|
80
81
82
83
84
|
# File 'lib/simple_ams/options.rb', line 80
def forms
return @forms if defined?(@forms)
return @forms = array_of_name_value_hash_for(Forms, Forms::Form, :forms)
end
|
#generics ⇒ Object
86
87
88
89
90
91
92
|
# File 'lib/simple_ams/options.rb', line 86
def generics
return @generics if defined?(@generics)
return @generics = array_of_name_value_hash_for(
Generics, Generics::Option, :generics
)
end
|
#includes ⇒ Object
52
53
54
55
56
|
# File 'lib/simple_ams/options.rb', line 52
def includes
return @includes if defined?(@includes)
return @includes = array_of_items_for(Includes, :includes)
end
|
#links ⇒ Object
68
69
70
71
72
|
# File 'lib/simple_ams/options.rb', line 68
def links
return @links if defined?(@links)
return @links = array_of_name_value_hash_for(Links, Links::Link, :links)
end
|
74
75
76
77
78
|
# File 'lib/simple_ams/options.rb', line 74
def metas
return @metas if defined?(@metas)
return @metas = array_of_name_value_hash_for(Metas, Metas::Meta, :metas)
end
|
#name ⇒ Object
41
42
43
|
# File 'lib/simple_ams/options.rb', line 41
def name
@name ||= injected_options[:name] || allowed_options[:name] || type.name
end
|
#primary_id ⇒ Object
29
30
31
32
33
|
# File 'lib/simple_ams/options.rb', line 29
def primary_id
return @primary_id if defined?(@primary_id)
return @primary_id = array_of_value_hash_for(PrimaryId, :primary_id)
end
|
#relation_options_for(relation_name) ⇒ Object
25
26
27
|
# File 'lib/simple_ams/options.rb', line 25
def relation_options_for(relation_name)
return _relation_options[relation_name] || {}
end
|
#relations ⇒ Object
TODO: correctly loop over injected relations, although should be a rarely used feature
59
60
61
62
63
64
65
66
|
# File 'lib/simple_ams/options.rb', line 59
def relations
return @relations if defined?(@relations)
relations = injected_options.fetch(:relations, nil)
relations = allowed_options.fetch(:relations, []) if relations.nil?
return @relations = Relations.new(relations, includes)
end
|
#serializer ⇒ Object
TODO: handle case of proc
95
96
97
98
99
100
101
|
# File 'lib/simple_ams/options.rb', line 95
def serializer
return @serializer if defined?(@serializer)
_serializer = injected_options.fetch(:serializer, serializer_class)
return @serializer = instantiated_serializer_for(_serializer)
end
|
#serializer_class ⇒ Object
163
164
165
166
167
168
169
170
171
|
# File 'lib/simple_ams/options.rb', line 163
def serializer_class
return @serializer_class if defined?(@serializer_class)
@serializer_class = injected_options.fetch(:serializer, nil)
return @serializer_class if @serializer_class
return @serializer_class = infer_serializer
end
|
#type ⇒ Object
35
36
37
38
39
|
# File 'lib/simple_ams/options.rb', line 35
def type
return @type if defined?(@type)
return @type = array_of_value_hash_for(Type, :type)
end
|
#with_resource(resource) ⇒ Object
performance enchancement method for non-polymorphic collections
19
20
21
22
23
|
# File 'lib/simple_ams/options.rb', line 19
def with_resource(resource)
@resource = resource
return self
end
|