conglomerate 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/conglomerate.gemspec +2 -0
- data/lib/conglomerate.rb +0 -2
- data/lib/conglomerate/builder_call.rb +10 -7
- data/lib/conglomerate/builder_serializer.rb +3 -3
- data/lib/conglomerate/particle.rb +11 -2
- data/lib/conglomerate/serializer.rb +42 -16
- data/lib/conglomerate/version.rb +1 -1
- data/spec/builder_call_spec.rb +14 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2c95c7a91ce4333ee2a9301b1b284767a3e6ed8
|
4
|
+
data.tar.gz: 8abe345a90637675d59b04694983788786a48a04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 248bfbc02447751ca4340211f07a6dcc7853ca73100b4fa5b92331563173496188eda3f39a023cbbf8499e4692f46467ef7dae98b17982c0002d3bc65b02267a
|
7
|
+
data.tar.gz: 61bca009ebf37f1a5fb42aacf03790dfce70b31948bba07f9697a6e9ca6c27ef46567cb3e7826f2851d6f72d8ce1d4dde20ce401a0f0d1560d4ee96c7ddf4dbf
|
data/conglomerate.gemspec
CHANGED
data/lib/conglomerate.rb
CHANGED
@@ -12,10 +12,8 @@ require_relative "conglomerate/command"
|
|
12
12
|
require_relative "conglomerate/collection"
|
13
13
|
require_relative "conglomerate/tree_deserializer"
|
14
14
|
require_relative "conglomerate/root"
|
15
|
-
|
16
15
|
require_relative "conglomerate/mixin_ivar_helper"
|
17
16
|
require_relative "conglomerate/builder_call"
|
18
|
-
|
19
17
|
require_relative "conglomerate/builder_serializer"
|
20
18
|
require_relative "conglomerate/particle_builder"
|
21
19
|
require_relative "conglomerate/link_builder"
|
@@ -2,13 +2,16 @@ module Conglomerate
|
|
2
2
|
class BuilderCall
|
3
3
|
attr_accessor :name, :opts, :block, :builder, :array, :iterates
|
4
4
|
|
5
|
-
def initialize(
|
6
|
-
self.name = name
|
7
|
-
self.opts = opts
|
8
|
-
self.block = block
|
9
|
-
self.builder = builder
|
10
|
-
self.array = array
|
11
|
-
self.iterates = iterates
|
5
|
+
def initialize(options = {})
|
6
|
+
self.name = options.fetch(:name, nil)
|
7
|
+
self.opts = options.fetch(:opts, {})
|
8
|
+
self.block = options.fetch(:block)
|
9
|
+
self.builder = options.fetch(:builder)
|
10
|
+
self.array = options.fetch(:array)
|
11
|
+
self.iterates = options.fetch(:iterates)
|
12
|
+
|
13
|
+
rescue KeyError => e
|
14
|
+
raise ArgumentError, e.message.gsub("key not found", "missing argument")
|
12
15
|
end
|
13
16
|
|
14
17
|
def run(context, objects, attrs, attr_name)
|
@@ -4,10 +4,10 @@ module Conglomerate
|
|
4
4
|
|
5
5
|
mi_ivar_accessor :objects, :context, :_builder_name
|
6
6
|
|
7
|
-
def initialize(objects,
|
7
|
+
def initialize(objects, options = {})
|
8
8
|
self.objects = [*objects].compact
|
9
|
-
self.context = context
|
10
|
-
self._builder_name = name.to_s
|
9
|
+
self.context = options.fetch(:context, nil)
|
10
|
+
self._builder_name = options.fetch(:name, nil).to_s
|
11
11
|
end
|
12
12
|
|
13
13
|
def build(attrs = {})
|
@@ -41,11 +41,20 @@ module Conglomerate
|
|
41
41
|
|
42
42
|
private
|
43
43
|
|
44
|
-
def array(attr,
|
44
|
+
def array(attr, options = {})
|
45
|
+
contains = options.fetch(:contains, nil)
|
46
|
+
cull = options.fetch(:cull, true)
|
47
|
+
|
45
48
|
attribute(attr, :type => :array, :contains => contains, :cull => cull)
|
46
49
|
end
|
47
50
|
|
48
|
-
def attribute(attr,
|
51
|
+
def attribute(attr, options = {})
|
52
|
+
default = options.fetch(:default, nil)
|
53
|
+
type = options.fetch(:type, nil)
|
54
|
+
contains = options.fetch(:contains, nil)
|
55
|
+
cull = options.fetch(:cull, true)
|
56
|
+
required = options.fetch(:required, nil)
|
57
|
+
|
49
58
|
instance_variable_get("@attributes")[attr] = {
|
50
59
|
:default => default,
|
51
60
|
:type => type,
|
@@ -4,9 +4,9 @@ module Conglomerate
|
|
4
4
|
descendant.extend(ClassMethods)
|
5
5
|
end
|
6
6
|
|
7
|
-
def initialize(objects,
|
7
|
+
def initialize(objects, options = {})
|
8
8
|
self.objects = [*objects].compact
|
9
|
-
self.context = context
|
9
|
+
self.context = options.fetch(:context, nil)
|
10
10
|
end
|
11
11
|
|
12
12
|
def serialize
|
@@ -29,7 +29,10 @@ module Conglomerate
|
|
29
29
|
collection.merge({"version" => "1.0"})
|
30
30
|
end
|
31
31
|
|
32
|
-
def apply_href(collection,
|
32
|
+
def apply_href(collection, options = {})
|
33
|
+
proc = options.fetch(:proc, self.class._href)
|
34
|
+
object = options.fetch(:object, nil)
|
35
|
+
|
33
36
|
if proc
|
34
37
|
if object
|
35
38
|
collection.merge({"href" => context.instance_exec(object, &proc)})
|
@@ -41,10 +44,12 @@ module Conglomerate
|
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
44
|
-
def apply_data(
|
45
|
-
|
46
|
-
|
47
|
-
|
47
|
+
def apply_data(collection, options = {})
|
48
|
+
data = options.fetch(:data, [])
|
49
|
+
object = options.fetch(:object, nil)
|
50
|
+
default_value = options.fetch(:default_value, nil)
|
51
|
+
build_template = options.fetch(:build_template, false)
|
52
|
+
|
48
53
|
data = data.map do |datum|
|
49
54
|
name = datum[:name]
|
50
55
|
type = datum.fetch(:type, :value)
|
@@ -141,7 +146,10 @@ module Conglomerate
|
|
141
146
|
end
|
142
147
|
end
|
143
148
|
|
144
|
-
def apply_links(collection,
|
149
|
+
def apply_links(collection, options = {})
|
150
|
+
links = options.fetch(:links, self.class._links)
|
151
|
+
object = options.fetch(:object, nil)
|
152
|
+
|
145
153
|
if object && !links.empty?
|
146
154
|
links = links.map do |link|
|
147
155
|
if !link.has_key?(:name) || present?(object.send(link[:name]))
|
@@ -187,12 +195,19 @@ module Conglomerate
|
|
187
195
|
apply_data(command, :data => data, :default_value => "")
|
188
196
|
end
|
189
197
|
|
190
|
-
def build_item_link(rel,
|
198
|
+
def build_item_link(rel, options = {})
|
199
|
+
proc = options.fetch(:proc, nil)
|
200
|
+
object = options.fetch(:object, nil)
|
201
|
+
|
191
202
|
link = {"rel" => rel.to_s}
|
192
203
|
apply_href(link, :proc => proc, :object => object)
|
193
204
|
end
|
194
205
|
|
195
|
-
def sanitize_value(object,
|
206
|
+
def sanitize_value(object, options = {})
|
207
|
+
name = options.fetch(:name)
|
208
|
+
type = options.fetch(:type, :value)
|
209
|
+
default_value = options.fetch(:default_value, nil)
|
210
|
+
|
196
211
|
if object.nil? || object.send(name).nil?
|
197
212
|
if type == :array
|
198
213
|
[]
|
@@ -240,7 +255,9 @@ module Conglomerate
|
|
240
255
|
self._item_href = block
|
241
256
|
end
|
242
257
|
|
243
|
-
def query(rel,
|
258
|
+
def query(rel, options = {}, &block)
|
259
|
+
data = options.fetch(:data, [])
|
260
|
+
|
244
261
|
data = [*data]
|
245
262
|
data = data.map { |datum| {:name => datum} }
|
246
263
|
self._queries = self._queries << {
|
@@ -248,7 +265,10 @@ module Conglomerate
|
|
248
265
|
}
|
249
266
|
end
|
250
267
|
|
251
|
-
def command(rel,
|
268
|
+
def command(rel, options = {}, &block)
|
269
|
+
data = options.fetch(:data, [])
|
270
|
+
prompt = options.fetch(:prompt, nil)
|
271
|
+
|
252
272
|
data = [*data]
|
253
273
|
data = data.map { |datum| {:name => datum} }
|
254
274
|
self._commands = self._commands << {
|
@@ -256,9 +276,12 @@ module Conglomerate
|
|
256
276
|
}
|
257
277
|
end
|
258
278
|
|
259
|
-
def attribute(
|
260
|
-
|
261
|
-
|
279
|
+
def attribute(name, options = {}, &block)
|
280
|
+
template = options.fetch(:template, false)
|
281
|
+
rel = options.fetch(:rel, nil)
|
282
|
+
type = options.fetch(:type, :value)
|
283
|
+
prompt = options.fetch(:prompt, nil)
|
284
|
+
|
262
285
|
self._attributes = self._attributes << {
|
263
286
|
:name => name, :template => template, :rel => rel, :type => type,
|
264
287
|
:prompt => prompt, :block => block
|
@@ -277,7 +300,10 @@ module Conglomerate
|
|
277
300
|
}
|
278
301
|
end
|
279
302
|
|
280
|
-
def template(name,
|
303
|
+
def template(name, options = {})
|
304
|
+
type = options.fetch(:type, :value)
|
305
|
+
prompt = options.fetch(:prompt, nil)
|
306
|
+
|
281
307
|
self._templates = self._templates << {
|
282
308
|
:name => name, :type => type, :prompt => prompt, :template => true
|
283
309
|
}
|
data/lib/conglomerate/version.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative "spec_helper"
|
2
|
+
require_relative "../lib/conglomerate"
|
3
|
+
|
4
|
+
describe Conglomerate::BuilderCall do
|
5
|
+
let(:builder_call) {
|
6
|
+
Conglomerate::BuilderCall.new
|
7
|
+
}
|
8
|
+
|
9
|
+
context "required arguments" do
|
10
|
+
specify "block" do
|
11
|
+
expect { builder_call }.to raise_error(ArgumentError)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: conglomerate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane Emmons
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-10-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -95,6 +95,7 @@ files:
|
|
95
95
|
- lib/conglomerate/tree_deserializer.rb
|
96
96
|
- lib/conglomerate/tree_serializer.rb
|
97
97
|
- lib/conglomerate/version.rb
|
98
|
+
- spec/builder_call_spec.rb
|
98
99
|
- spec/collection_spec.rb
|
99
100
|
- spec/command_ext_spec.rb
|
100
101
|
- spec/command_spec.rb
|
@@ -119,7 +120,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
119
120
|
requirements:
|
120
121
|
- - ">="
|
121
122
|
- !ruby/object:Gem::Version
|
122
|
-
version:
|
123
|
+
version: 1.9.3
|
123
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
125
|
requirements:
|
125
126
|
- - ">="
|
@@ -132,6 +133,7 @@ signing_key:
|
|
132
133
|
specification_version: 4
|
133
134
|
summary: A library to serialize Ruby objects into collection+json
|
134
135
|
test_files:
|
136
|
+
- spec/builder_call_spec.rb
|
135
137
|
- spec/collection_spec.rb
|
136
138
|
- spec/command_ext_spec.rb
|
137
139
|
- spec/command_spec.rb
|
@@ -144,3 +146,4 @@ test_files:
|
|
144
146
|
- spec/query_spec.rb
|
145
147
|
- spec/spec_helper.rb
|
146
148
|
- spec/tree_deserializer_spec.rb
|
149
|
+
has_rdoc:
|