babl-json 0.5.3 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/babl/builder/template_base.rb +6 -0
- data/lib/babl/nodes/concat.rb +3 -3
- data/lib/babl/nodes/constant.rb +1 -1
- data/lib/babl/nodes/create_pin.rb +3 -3
- data/lib/babl/nodes/dep.rb +2 -2
- data/lib/babl/nodes/each.rb +5 -5
- data/lib/babl/nodes/fixed_array.rb +2 -2
- data/lib/babl/nodes/goto_pin.rb +3 -3
- data/lib/babl/nodes/internal_value.rb +1 -1
- data/lib/babl/nodes/is_null.rb +1 -1
- data/lib/babl/nodes/merge.rb +3 -3
- data/lib/babl/nodes/nav.rb +4 -4
- data/lib/babl/nodes/object.rb +2 -2
- data/lib/babl/nodes/parent.rb +3 -27
- data/lib/babl/nodes/switch.rb +2 -2
- data/lib/babl/nodes/terminal_value.rb +2 -2
- data/lib/babl/nodes/typed.rb +8 -8
- data/lib/babl/nodes/with.rb +5 -5
- data/lib/babl/operators/parent.rb +5 -3
- data/lib/babl/operators/pin.rb +18 -12
- data/lib/babl/railtie.rb +10 -5
- data/lib/babl/rendering/compiled_template.rb +3 -3
- data/lib/babl/rendering/context.rb +50 -57
- data/lib/babl/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 310b4377dc2e8962bd245804fd9ca8ede567748a
|
4
|
+
data.tar.gz: 39aa36ae900752cabc18f484d1dc047439f60391
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 88716be5c080dd4a545234561898aa6c6ae63194d3b5be8de37721a2473934b185ba2f7bb0accf07a811111250c07fd05ffbab2838bda63dbb1e79e9c11bef59
|
7
|
+
data.tar.gz: 7a993254d2dede29615e414a9c82ad1d3023a03aeecd1d6ba512bf3465d61f7f1f2d2addc1ca8c0758e9c11cab9aa356b21ec2276a36e4730a0dd27aaf525d23
|
@@ -22,6 +22,8 @@ module Babl
|
|
22
22
|
# Compute dependencies & schema on the non-simplified node tree in order
|
23
23
|
# to catch all errors.
|
24
24
|
tree = precompile(lookup_context: lookup_context)
|
25
|
+
validate(tree)
|
26
|
+
|
25
27
|
dependencies = tree.dependencies
|
26
28
|
schema = tree.schema
|
27
29
|
|
@@ -48,6 +50,10 @@ module Babl
|
|
48
50
|
|
49
51
|
protected
|
50
52
|
|
53
|
+
def validate(tree)
|
54
|
+
# NOOP
|
55
|
+
end
|
56
|
+
|
51
57
|
def precompile(node = Nodes::TerminalValue.instance, **context)
|
52
58
|
builder.precompile(node, **context)
|
53
59
|
end
|
data/lib/babl/nodes/concat.rb
CHANGED
@@ -18,14 +18,14 @@ module Babl
|
|
18
18
|
nodes.map(&:schema).reduce(Schema::FixedArray::EMPTY) { |a, b| merge_doc(a, b) }
|
19
19
|
end
|
20
20
|
|
21
|
-
def render(
|
21
|
+
def render(frame)
|
22
22
|
out = []
|
23
23
|
nodes.each { |node|
|
24
|
-
values = node.render(
|
24
|
+
values = node.render(frame)
|
25
25
|
case values
|
26
26
|
when ::NilClass then nil
|
27
27
|
when ::Array then out.concat(values)
|
28
|
-
else raise Errors::RenderingError, "Only arrays can be concatenated\n" +
|
28
|
+
else raise Errors::RenderingError, "Only arrays can be concatenated\n" + frame.formatted_stack
|
29
29
|
end
|
30
30
|
}
|
31
31
|
out
|
data/lib/babl/nodes/constant.rb
CHANGED
@@ -4,9 +4,9 @@ require 'babl/utils'
|
|
4
4
|
module Babl
|
5
5
|
module Nodes
|
6
6
|
class CreatePin < Utils::Value.new(:node, :ref)
|
7
|
-
def render(
|
8
|
-
|
9
|
-
node.render(
|
7
|
+
def render(frame)
|
8
|
+
frame.create_pin(ref) do |new_frame|
|
9
|
+
node.render(new_frame)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
data/lib/babl/nodes/dep.rb
CHANGED
data/lib/babl/nodes/each.rb
CHANGED
@@ -24,15 +24,15 @@ module Babl
|
|
24
24
|
node.pinned_dependencies
|
25
25
|
end
|
26
26
|
|
27
|
-
def render(
|
27
|
+
def render(frame)
|
28
28
|
collection = frame.object
|
29
29
|
unless Enumerable === collection
|
30
|
-
raise Errors::RenderingError, "Not enumerable : #{collection.inspect}\n#{
|
30
|
+
raise Errors::RenderingError, "Not enumerable : #{collection.inspect}\n#{frame.formatted_stack}"
|
31
31
|
end
|
32
32
|
|
33
|
-
collection.
|
34
|
-
|
35
|
-
node.render(
|
33
|
+
collection.map.with_index do |value, idx|
|
34
|
+
frame.move_forward(value, idx) do |new_frame|
|
35
|
+
node.render(new_frame)
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -20,8 +20,8 @@ module Babl
|
|
20
20
|
nodes.map(&:pinned_dependencies).reduce(Utils::Hash::EMPTY) { |a, b| Babl::Utils::Hash.deep_merge(a, b) }
|
21
21
|
end
|
22
22
|
|
23
|
-
def render(
|
24
|
-
nodes.map { |node| node.render(
|
23
|
+
def render(frame)
|
24
|
+
nodes.map { |node| node.render(frame) }
|
25
25
|
end
|
26
26
|
|
27
27
|
def optimize
|
data/lib/babl/nodes/goto_pin.rb
CHANGED
data/lib/babl/nodes/is_null.rb
CHANGED
data/lib/babl/nodes/merge.rb
CHANGED
@@ -19,10 +19,10 @@ module Babl
|
|
19
19
|
nodes.map(&:schema).reduce(Schema::Object::EMPTY) { |a, b| merge_doc(a, b) }
|
20
20
|
end
|
21
21
|
|
22
|
-
def render(
|
23
|
-
nodes.map { |node| node.render(
|
22
|
+
def render(frame)
|
23
|
+
nodes.map { |node| node.render(frame) }.compact.reduce({}) { |acc, val|
|
24
24
|
raise Errors::RenderingError, "Only objects can be merged\n" +
|
25
|
-
|
25
|
+
frame.formatted_stack unless ::Hash === val
|
26
26
|
acc.merge!(val)
|
27
27
|
}
|
28
28
|
end
|
data/lib/babl/nodes/nav.rb
CHANGED
@@ -24,16 +24,16 @@ module Babl
|
|
24
24
|
node.pinned_dependencies
|
25
25
|
end
|
26
26
|
|
27
|
-
def render(
|
27
|
+
def render(frame)
|
28
28
|
value = begin
|
29
29
|
object = frame.object
|
30
30
|
::Hash === object ? object.fetch(property) : object.send(property)
|
31
31
|
rescue StandardError => e
|
32
|
-
raise Errors::RenderingError, "#{e.message}\n" +
|
32
|
+
raise Errors::RenderingError, "#{e.message}\n" + frame.formatted_stack(property), e.backtrace
|
33
33
|
end
|
34
34
|
|
35
|
-
|
36
|
-
node.render(
|
35
|
+
frame.move_forward(value, property) do |new_frame|
|
36
|
+
node.render(new_frame)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
data/lib/babl/nodes/object.rb
CHANGED
data/lib/babl/nodes/parent.rb
CHANGED
@@ -7,30 +7,6 @@ module Babl
|
|
7
7
|
class Parent < Utils::Value.new(:node)
|
8
8
|
PARENT_MARKER = Utils::Ref.new
|
9
9
|
|
10
|
-
class Verifier < Utils::Value.new(:node)
|
11
|
-
def dependencies
|
12
|
-
deps = node.dependencies
|
13
|
-
raise Errors::InvalidTemplate, 'Out of context parent dependency' if deps.key? PARENT_MARKER
|
14
|
-
deps
|
15
|
-
end
|
16
|
-
|
17
|
-
def schema
|
18
|
-
node.schema
|
19
|
-
end
|
20
|
-
|
21
|
-
def pinned_dependencies
|
22
|
-
node.pinned_dependencies
|
23
|
-
end
|
24
|
-
|
25
|
-
def render(context, frame)
|
26
|
-
node.render(context, frame)
|
27
|
-
end
|
28
|
-
|
29
|
-
def optimize
|
30
|
-
Verifier.new(node.optimize)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
10
|
def schema
|
35
11
|
node.schema
|
36
12
|
end
|
@@ -43,9 +19,9 @@ module Babl
|
|
43
19
|
{ PARENT_MARKER => node.dependencies }
|
44
20
|
end
|
45
21
|
|
46
|
-
def render(
|
47
|
-
|
48
|
-
node.render(
|
22
|
+
def render(frame)
|
23
|
+
frame.move_backward do |new_frame|
|
24
|
+
node.render(new_frame)
|
49
25
|
end
|
50
26
|
end
|
51
27
|
|
data/lib/babl/nodes/switch.rb
CHANGED
@@ -27,8 +27,8 @@ module Babl
|
|
27
27
|
Schema::AnyOf.canonicalized(nodes.map(&:last).map(&:schema))
|
28
28
|
end
|
29
29
|
|
30
|
-
def render(
|
31
|
-
nodes.each { |cond, value| return value.render(
|
30
|
+
def render(frame)
|
31
|
+
nodes.each { |cond, value| return value.render(frame) if cond.render(frame) }
|
32
32
|
raise Errors::RenderingError, 'A least one switch() condition must be taken'
|
33
33
|
end
|
34
34
|
|
@@ -24,10 +24,10 @@ module Babl
|
|
24
24
|
Utils::Hash::EMPTY
|
25
25
|
end
|
26
26
|
|
27
|
-
def render(
|
27
|
+
def render(frame)
|
28
28
|
render_object(frame.object)
|
29
29
|
rescue TerminalValueError => e
|
30
|
-
raise Errors::RenderingError, "#{e.message}\n" +
|
30
|
+
raise Errors::RenderingError, "#{e.message}\n" + frame.formatted_stack(e.babl_stack), e.backtrace
|
31
31
|
end
|
32
32
|
|
33
33
|
def render_object(obj, stack = nil)
|
data/lib/babl/nodes/typed.rb
CHANGED
@@ -28,13 +28,13 @@ module Babl
|
|
28
28
|
Schema::Typed::STRING
|
29
29
|
end
|
30
30
|
|
31
|
-
def render(
|
31
|
+
def render(frame)
|
32
32
|
value = frame.object
|
33
33
|
return value if ::String === value
|
34
34
|
return value.to_s if ::Symbol === value
|
35
35
|
|
36
36
|
raise Errors::RenderingError,
|
37
|
-
"Expected a string, got #{value.inspect}\n#{
|
37
|
+
"Expected a string, got #{value.inspect}\n#{frame.formatted_stack}"
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -43,12 +43,12 @@ module Babl
|
|
43
43
|
Schema::Typed::INTEGER
|
44
44
|
end
|
45
45
|
|
46
|
-
def render(
|
46
|
+
def render(frame)
|
47
47
|
value = frame.object
|
48
48
|
return value if ::Integer === value
|
49
49
|
|
50
50
|
raise Errors::RenderingError,
|
51
|
-
"Expected an integer, got #{value.inspect}\n#{
|
51
|
+
"Expected an integer, got #{value.inspect}\n#{frame.formatted_stack}"
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -57,13 +57,13 @@ module Babl
|
|
57
57
|
Schema::Typed::NUMBER
|
58
58
|
end
|
59
59
|
|
60
|
-
def render(
|
60
|
+
def render(frame)
|
61
61
|
value = frame.object
|
62
62
|
return value if ::Integer === value
|
63
63
|
return value.to_f if ::Numeric === value
|
64
64
|
|
65
65
|
raise Errors::RenderingError,
|
66
|
-
"Expected a number, got #{value.inspect}\n#{
|
66
|
+
"Expected a number, got #{value.inspect}\n#{frame.formatted_stack}"
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
@@ -72,12 +72,12 @@ module Babl
|
|
72
72
|
Schema::Typed::BOOLEAN
|
73
73
|
end
|
74
74
|
|
75
|
-
def render(
|
75
|
+
def render(frame)
|
76
76
|
value = frame.object
|
77
77
|
return value if true == value || false == value
|
78
78
|
|
79
79
|
raise Errors::RenderingError,
|
80
|
-
"Expected a boolean, got #{value.inspect}\n#{
|
80
|
+
"Expected a boolean, got #{value.inspect}\n#{frame.formatted_stack}"
|
81
81
|
end
|
82
82
|
end
|
83
83
|
end
|
data/lib/babl/nodes/with.rb
CHANGED
@@ -23,16 +23,16 @@ module Babl
|
|
23
23
|
.reduce(Utils::Hash::EMPTY) { |a, b| Babl::Utils::Hash.deep_merge(a, b) }
|
24
24
|
end
|
25
25
|
|
26
|
-
def render(
|
27
|
-
values = nodes.map { |n| n.render(
|
26
|
+
def render(frame)
|
27
|
+
values = nodes.map { |n| n.render(frame) }
|
28
28
|
value = begin
|
29
29
|
block.arity.zero? ? frame.object.instance_exec(&block) : block.call(*values)
|
30
30
|
rescue StandardError => e
|
31
|
-
raise Errors::RenderingError, "#{e.message}\n" +
|
31
|
+
raise Errors::RenderingError, "#{e.message}\n" + frame.formatted_stack(:__block__), e.backtrace
|
32
32
|
end
|
33
33
|
|
34
|
-
|
35
|
-
node.render(
|
34
|
+
frame.move_forward(value, :__block__) do |new_frame|
|
35
|
+
node.render(new_frame)
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
@@ -12,9 +12,11 @@ module Babl
|
|
12
12
|
|
13
13
|
protected
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
def validate(tree)
|
16
|
+
if tree.dependencies.key? Nodes::Parent::PARENT_MARKER
|
17
|
+
raise Errors::InvalidTemplate, 'Out of context parent dependency'
|
18
|
+
end
|
19
|
+
super
|
18
20
|
end
|
19
21
|
end
|
20
22
|
end
|
data/lib/babl/operators/pin.rb
CHANGED
@@ -8,25 +8,31 @@ module Babl
|
|
8
8
|
module Pin
|
9
9
|
module DSL
|
10
10
|
# Create a pin
|
11
|
-
def pin(navigation =
|
12
|
-
return pin { |p| block[p.call(navigation)] } if navigation
|
11
|
+
def pin(navigation = unscoped, &block)
|
13
12
|
ref = Utils::Ref.new
|
13
|
+
named_pin(ref).call(block[unscoped.goto_pin(ref).call(navigation)])
|
14
|
+
end
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
}
|
18
|
-
|
16
|
+
def named_pin(ref)
|
17
|
+
check_pin_ref(ref)
|
19
18
|
construct_node(continue: nil) { |node| Nodes::CreatePin.new(node, ref) }
|
20
|
-
|
19
|
+
end
|
20
|
+
|
21
|
+
def goto_pin(ref)
|
22
|
+
check_pin_ref(ref)
|
23
|
+
construct_node(key: nil, continue: nil) { |node| Nodes::GotoPin.new(node, ref) }
|
21
24
|
end
|
22
25
|
|
23
26
|
protected
|
24
27
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
def validate(tree)
|
29
|
+
name = tree.pinned_dependencies.keys.first
|
30
|
+
raise Errors::InvalidTemplate, "Unresolved pin: #{name}" if name
|
31
|
+
super
|
32
|
+
end
|
33
|
+
|
34
|
+
def check_pin_ref(ref)
|
35
|
+
raise Errors::InvalidTemplate, 'Pin name must be a symbol' unless Utils::Ref === ref || ::Symbol === ref
|
30
36
|
end
|
31
37
|
end
|
32
38
|
end
|
data/lib/babl/railtie.rb
CHANGED
@@ -18,23 +18,28 @@ module Babl
|
|
18
18
|
|
19
19
|
def cached_call(template)
|
20
20
|
cached_templates[template.identifier] ||= Babl.compile {
|
21
|
-
|
21
|
+
pin { |root|
|
22
|
+
nav(:context).named_pin(:rails_context).call(root.nav(:locals))
|
23
|
+
.source(template.source, template.identifier)
|
24
|
+
}
|
22
25
|
}
|
23
26
|
|
24
27
|
<<-RUBY
|
25
28
|
compiled = ::Babl::ActionView::TemplateHandler.cached_templates[#{template.identifier.inspect}]
|
26
|
-
compiled.json(local_assigns)
|
29
|
+
compiled.json(locals: local_assigns, context: self)
|
27
30
|
RUBY
|
28
31
|
end
|
29
32
|
|
30
33
|
def uncached_call(template)
|
31
34
|
<<-RUBY
|
32
35
|
Babl.compile {
|
33
|
-
|
36
|
+
pin do |root|
|
37
|
+
nav(:context).named_pin(:rails_context).call(root.nav(:locals)).source(
|
34
38
|
#{template.source.inspect},
|
35
39
|
#{template.identifier.inspect}
|
36
|
-
|
37
|
-
|
40
|
+
)
|
41
|
+
end
|
42
|
+
}.json(locals: local_assigns, context: self)
|
38
43
|
RUBY
|
39
44
|
end
|
40
45
|
end
|
@@ -13,9 +13,9 @@ module Babl
|
|
13
13
|
|
14
14
|
def render(root)
|
15
15
|
preloaded_data = preloader.preload([root], dependencies).first
|
16
|
-
|
17
|
-
frame =
|
18
|
-
node.render(
|
16
|
+
frame = Context.new
|
17
|
+
frame.object = preloaded_data
|
18
|
+
node.render(frame)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -5,86 +5,79 @@ require 'babl/utils'
|
|
5
5
|
module Babl
|
6
6
|
module Rendering
|
7
7
|
class Context
|
8
|
-
|
9
|
-
attr_accessor :object, :key, :parent, :pins
|
8
|
+
attr_accessor :object, :key, :parent, :pins, :freelist
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
end
|
10
|
+
def initialize(freelist = [])
|
11
|
+
@freelist = freelist
|
14
12
|
end
|
15
13
|
|
16
|
-
def
|
17
|
-
@freelist
|
18
|
-
end
|
14
|
+
def move_forward(new_object, key)
|
15
|
+
new_frame = @freelist.pop || Context.new(freelist)
|
19
16
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
new_frame.parent = current_frame
|
25
|
-
new_frame.pins = current_frame.pins
|
17
|
+
new_frame.object = new_object
|
18
|
+
new_frame.key = key
|
19
|
+
new_frame.parent = self
|
20
|
+
new_frame.pins = pins
|
26
21
|
|
27
|
-
|
28
|
-
|
22
|
+
yield new_frame
|
23
|
+
ensure
|
24
|
+
@freelist << new_frame
|
29
25
|
end
|
30
26
|
|
31
|
-
def move_backward
|
32
|
-
|
33
|
-
|
34
|
-
|
27
|
+
def move_backward
|
28
|
+
new_frame = @freelist.pop || Context.new(freelist)
|
29
|
+
|
30
|
+
parent_frame = parent
|
31
|
+
raise Errors::RenderingError, 'There is no parent element' unless parent_frame
|
35
32
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
33
|
+
new_frame.object = parent_frame.object
|
34
|
+
new_frame.parent = parent_frame.parent
|
35
|
+
new_frame.key = parent_frame.key
|
36
|
+
new_frame.pins = pins
|
40
37
|
|
41
|
-
|
42
|
-
|
38
|
+
yield new_frame
|
39
|
+
ensure
|
40
|
+
@freelist << new_frame
|
43
41
|
end
|
44
42
|
|
45
|
-
def goto_pin(
|
46
|
-
current_pins =
|
43
|
+
def goto_pin(ref)
|
44
|
+
current_pins = pins || Utils::Hash::EMPTY
|
47
45
|
pin_frame = current_pins[ref]
|
48
46
|
raise Errors::RenderingError, 'Pin reference cannot be used here' unless pin_frame
|
49
47
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
48
|
+
new_frame = @freelist.pop || Context.new(freelist)
|
49
|
+
|
50
|
+
new_frame.object = pin_frame.object
|
51
|
+
new_frame.parent = pin_frame.parent
|
52
|
+
new_frame.key = pin_frame.key
|
53
|
+
new_frame.pins = (pin_frame.pins || Utils::Hash::EMPTY).merge(current_pins)
|
55
54
|
|
56
|
-
|
57
|
-
|
55
|
+
yield new_frame
|
56
|
+
ensure
|
57
|
+
@freelist << new_frame
|
58
58
|
end
|
59
59
|
|
60
|
-
def create_pin(
|
61
|
-
|
62
|
-
new_frame.parent = current_frame.parent
|
63
|
-
new_frame.object = current_frame.object
|
64
|
-
new_frame.key = current_frame.key
|
65
|
-
new_frame.pins = (current_frame.pins || Utils::Hash::EMPTY).merge(ref => new_frame)
|
60
|
+
def create_pin(ref)
|
61
|
+
new_frame = @freelist.pop || Context.new(freelist)
|
66
62
|
|
67
|
-
|
68
|
-
|
69
|
-
|
63
|
+
new_frame.parent = parent
|
64
|
+
new_frame.object = object
|
65
|
+
new_frame.key = key
|
66
|
+
new_frame.pins = (pins || Utils::Hash::EMPTY).merge(ref => new_frame)
|
70
67
|
|
71
|
-
|
72
|
-
|
73
|
-
|
68
|
+
yield new_frame
|
69
|
+
ensure
|
70
|
+
@freelist << new_frame
|
74
71
|
end
|
75
72
|
|
76
|
-
def
|
77
|
-
|
78
|
-
|
73
|
+
def stack
|
74
|
+
parent_frame = parent
|
75
|
+
(parent_frame ? parent_frame.stack : Utils::Array::EMPTY) + [key].compact
|
79
76
|
end
|
80
77
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
frame = @freelist.pop || Frame.new
|
85
|
-
yield frame
|
86
|
-
ensure
|
87
|
-
@freelist << frame
|
78
|
+
def formatted_stack(*additional_stack_items)
|
79
|
+
stack_trace = ([:__root__] + stack + additional_stack_items).join('.')
|
80
|
+
"BABL @ #{stack_trace}"
|
88
81
|
end
|
89
82
|
end
|
90
83
|
end
|
data/lib/babl/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: babl-json
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Frederic Terrazzoni
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coveralls
|