babl-json 0.1.4 → 0.2.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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG.md +6 -0
  4. data/README.md +1 -3
  5. data/babl.gemspec +3 -1
  6. data/lib/babl.rb +4 -6
  7. data/lib/babl/builder/chain_builder.rb +6 -2
  8. data/lib/babl/builder/template_base.rb +16 -3
  9. data/lib/babl/errors.rb +7 -0
  10. data/lib/babl/nodes/create_pin.rb +24 -0
  11. data/lib/babl/nodes/dep.rb +38 -0
  12. data/lib/babl/nodes/each.rb +29 -0
  13. data/lib/babl/nodes/fixed_array.rb +25 -0
  14. data/lib/babl/nodes/goto_pin.rb +24 -0
  15. data/lib/babl/{rendering/internal_value_node.rb → nodes/internal_value.rb} +6 -5
  16. data/lib/babl/nodes/merge.rb +102 -0
  17. data/lib/babl/nodes/nav.rb +33 -0
  18. data/lib/babl/nodes/object.rb +26 -0
  19. data/lib/babl/nodes/parent.rb +64 -0
  20. data/lib/babl/nodes/static.rb +34 -0
  21. data/lib/babl/nodes/switch.rb +29 -0
  22. data/lib/babl/nodes/terminal_value.rb +76 -0
  23. data/lib/babl/nodes/with.rb +28 -0
  24. data/lib/babl/operators/array.rb +5 -28
  25. data/lib/babl/operators/call.rb +4 -2
  26. data/lib/babl/operators/continue.rb +19 -0
  27. data/lib/babl/operators/default.rb +13 -0
  28. data/lib/babl/operators/dep.rb +3 -36
  29. data/lib/babl/operators/each.rb +3 -33
  30. data/lib/babl/operators/enter.rb +4 -2
  31. data/lib/babl/operators/extends.rb +4 -1
  32. data/lib/babl/operators/merge.rb +7 -30
  33. data/lib/babl/operators/nav.rb +4 -36
  34. data/lib/babl/operators/object.rb +7 -29
  35. data/lib/babl/operators/parent.rb +4 -73
  36. data/lib/babl/operators/partial.rb +4 -2
  37. data/lib/babl/operators/pin.rb +14 -58
  38. data/lib/babl/operators/static.rb +11 -30
  39. data/lib/babl/operators/switch.rb +8 -51
  40. data/lib/babl/operators/with.rb +5 -34
  41. data/lib/babl/railtie.rb +2 -2
  42. data/lib/babl/rendering/compiled_template.rb +5 -13
  43. data/lib/babl/rendering/context.rb +13 -7
  44. data/lib/babl/schema/any_of.rb +137 -0
  45. data/lib/babl/schema/anything.rb +13 -0
  46. data/lib/babl/schema/dyn_array.rb +11 -0
  47. data/lib/babl/schema/fixed_array.rb +13 -0
  48. data/lib/babl/schema/object.rb +35 -0
  49. data/lib/babl/schema/static.rb +14 -0
  50. data/lib/babl/schema/typed.rb +0 -0
  51. data/lib/babl/template.rb +4 -9
  52. data/lib/babl/utils/ref.rb +6 -0
  53. data/lib/babl/version.rb +1 -1
  54. data/spec/operators/array_spec.rb +31 -7
  55. data/spec/operators/call_spec.rb +16 -14
  56. data/spec/operators/continue_spec.rb +25 -0
  57. data/spec/operators/default_spec.rb +15 -0
  58. data/spec/operators/dep_spec.rb +4 -8
  59. data/spec/operators/each_spec.rb +24 -5
  60. data/spec/operators/enter_spec.rb +9 -7
  61. data/spec/operators/extends_spec.rb +19 -5
  62. data/spec/operators/merge_spec.rb +105 -12
  63. data/spec/operators/nav_spec.rb +22 -10
  64. data/spec/operators/null_spec.rb +5 -4
  65. data/spec/operators/nullable_spec.rb +13 -13
  66. data/spec/operators/object_spec.rb +17 -6
  67. data/spec/operators/parent_spec.rb +18 -22
  68. data/spec/operators/partial_spec.rb +8 -6
  69. data/spec/operators/pin_spec.rb +100 -61
  70. data/spec/operators/source_spec.rb +10 -6
  71. data/spec/operators/static_spec.rb +17 -9
  72. data/spec/operators/switch_spec.rb +85 -45
  73. data/spec/operators/with_spec.rb +13 -15
  74. data/spec/spec_helper.rb +2 -31
  75. data/spec/spec_helper/operator_testing.rb +46 -0
  76. data/spec/spec_helper/schema_utils.rb +33 -0
  77. metadata +63 -4
  78. data/lib/babl/rendering/terminal_value_node.rb +0 -54
@@ -1,28 +1,32 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ::Babl::Operators::Source do
4
- include SpecHelper::Operators
3
+ describe Babl::Operators::Source do
4
+ extend SpecHelper::OperatorTesting
5
5
 
6
6
  describe '#source' do
7
7
  let(:object) { { abc: { def: 12 } } }
8
8
 
9
9
  context 'block returning primitive' do
10
- let(:template) { dsl.source { true } }
10
+ template { source { true } }
11
+
11
12
  it { expect(json).to eq(true) }
12
13
  end
13
14
 
14
15
  context 'block using operators' do
15
- let(:template) { dsl.source { static(3) } }
16
+ template { source { static(3) } }
17
+
16
18
  it { expect(json).to eq(3) }
17
19
  end
18
20
 
19
21
  context 'two level sourcing' do
20
- let(:template) { dsl.source { nav(:abc).source { nav(:def) } } }
22
+ template { source { nav(:abc).source { nav(:def) } } }
23
+
21
24
  it { expect(json).to eq(12) }
22
25
  end
23
26
 
24
27
  context 'string template' do
25
- let(:template) { dsl.source('object(a: static(true))') }
28
+ template { source('object(a: static(true))') }
29
+
26
30
  it { expect(json).to eq('a' => true) }
27
31
  end
28
32
  end
@@ -1,19 +1,27 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ::Babl::Operators::Static do
4
- include SpecHelper::Operators
3
+ describe Babl::Operators::Static do
4
+ extend SpecHelper::OperatorTesting
5
5
 
6
6
  describe '#static' do
7
- let(:template) { dsl.source { static('1': 'cava') } }
8
- let(:object) { nil }
7
+ context 'static object' do
8
+ template { static('1': 'cava') }
9
9
 
10
- it { expect(json).to eq('1' => 'cava') }
11
- it { expect(dependencies).to eq({}) }
12
- it { expect(documentation).to eq('1': 'cava') }
10
+ it { expect(json).to eq('1' => 'cava') }
11
+ it { expect(dependencies).to eq({}) }
12
+ it { expect(schema).to eq s_object(s_property(:'1', s_static('cava'))) }
13
+ end
14
+
15
+ context 'static primitive' do
16
+ template { static('ok') }
17
+
18
+ it { expect(schema).to eq s_static('ok') }
19
+ end
13
20
 
14
21
  context 'invalid' do
15
- let(:template) { dsl.source { static(test: Object.new) } }
16
- it { expect { compiled }.to raise_error Babl::InvalidTemplateError }
22
+ template { static(test: Object.new) }
23
+
24
+ it { expect { compiled }.to raise_error Babl::Errors::InvalidTemplateError }
17
25
  end
18
26
  end
19
27
  end
@@ -1,81 +1,121 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ::Babl::Operators::Switch do
4
- include SpecHelper::Operators
3
+ describe Babl::Operators::Switch do
4
+ extend SpecHelper::OperatorTesting
5
5
 
6
6
  describe '#switch' do
7
- context do
8
- let(:template) {
9
- dsl.source {
10
- even = nullable.nav(:even?)
11
- odd = nullable.nav(:odd?)
12
-
13
- each.switch(
14
- even => nav { |x| "#{x} is even" },
15
- odd => nav { |x| "#{x} is odd" },
16
- default => continue
17
- ).static('WTF')
18
- }
7
+ context 'realistic use case' do
8
+ template {
9
+ even = nullable.nav(:even?)
10
+ odd = nullable.nav(:odd?)
11
+
12
+ each.switch(
13
+ even => nav { |x| "#{x} is even" },
14
+ odd => nav { |x| "#{x} is odd" },
15
+ default => continue
16
+ ).static('WTF')
19
17
  }
20
18
 
21
19
  let(:object) { [1, 2, nil, 5] }
22
20
 
23
21
  it { expect(json).to eq ['1 is odd', '2 is even', 'WTF', '5 is odd'] }
24
22
  it { expect(dependencies).to eq(__each__: { even?: {}, odd?: {} }) }
25
- it {
26
- expect(documentation).to eq [
27
- 'Case 1': :__value__,
28
- 'Case 2': :__value__,
29
- 'Case 3': 'WTF'
30
- ]
31
- }
23
+ it { expect(schema).to eq s_dyn_array(s_any_of(s_static('WTF'), s_anything)) }
32
24
  end
33
25
 
34
26
  context 'static condition' do
35
- let(:template) { dsl.source { switch(true => 42) } }
27
+ template { switch(true => 42) }
28
+
36
29
  let(:object) { {} }
30
+
37
31
  it { expect(json).to eq 42 }
38
32
  end
39
33
 
40
- context 'navigation before continue' do
41
- let(:template) { dsl.source { nav(:abc).switch(false => 1, default => nav(:lol).continue).object(val: nav(:ok)) } }
34
+ context 'only one output possible' do
35
+ template { switch(false => 2, true => 2) }
42
36
 
43
- it { expect { compiled }.to raise_error Babl::InvalidTemplateError }
37
+ it { expect(schema).to eq s_static(2) }
44
38
  end
45
39
 
46
- context 'continue in sub-object' do
47
- let(:template) { dsl.source { object(a: switch(default => object(x: continue))) } }
40
+ context 'no branch taken' do
41
+ template { switch(false => 1) }
48
42
 
49
- it { expect { compiled }.to raise_error Babl::InvalidTemplateError }
50
- end
51
-
52
- context 'unhandled default' do
53
43
  let(:object) { { abc: { lol: { ok: 42 } } } }
54
- let(:template) { dsl.source { switch(false => 1) } }
55
44
 
56
45
  it { expect(dependencies).to eq({}) }
57
- it { expect { json }.to raise_error Babl::RenderingError }
58
- end
59
-
60
- context 'continue without switch' do
61
- let(:template) { dsl.source { continue } }
62
-
63
- it { expect { compiled }.to raise_error Babl::InvalidTemplateError }
46
+ it { expect { json }.to raise_error Babl::Errors::RenderingError }
64
47
  end
65
48
 
66
49
  context 'non serializable objects are allowed internally' do
67
- let(:template) { dsl.source { switch(test: 42) } }
50
+ template { switch(test: 42) }
51
+
68
52
  let(:object) { { test: Object.new } }
69
53
 
70
54
  it { expect(json).to eq 42 }
71
55
  end
72
56
 
73
- context do
74
- let(:template) {
75
- dsl.source {
76
- nav(:test).switch(nav(:keke) => parent.nav(:lol))
77
- }
57
+ context 'switch between empty array and a dyn array' do
58
+ template { switch(1 => each.object(a: 1), 2 => []) }
59
+
60
+ let(:object) { [nil] }
61
+
62
+ it { expect(json).to eq(['a' => 1]) }
63
+ it { expect(schema).to eq s_dyn_array(s_object(s_property(:a, s_static(1)))) }
64
+ end
65
+
66
+ context 'switch between fixed array and a dyn array producing different output' do
67
+ template { switch(1 => each.static(1), 2 => [2]) }
68
+
69
+ it {
70
+ expect(schema).to eq s_any_of(
71
+ s_dyn_array(s_static(1)), s_fixed_array(s_static(2))
72
+ )
78
73
  }
74
+ end
75
+
76
+ context 'switch between fixed array and a dyn array producing identical output' do
77
+ template { switch(1 => nullable.each.static(1), 2 => [1]) }
78
+
79
+ it { expect(schema).to eq s_dyn_array(s_static(1), nullable: true) }
80
+ end
81
+
82
+ context 'switch between similar objects having only one different property' do
83
+ template { switch(1 => { a: 34, b: 3 }, 2 => { a: 34, b: 1 }, 3 => { b: 2, a: 34 }) }
84
+
85
+ it {
86
+ expect(schema).to eq s_object(
87
+ s_property(:a, s_static(34)),
88
+ s_property(:b, s_any_of(s_static(1), s_static(2), s_static(3)))
89
+ )
90
+ }
91
+ end
92
+
93
+ context 'switch between similar objects having more than one different property' do
94
+ template { switch(1 => { a: 35, b: 1 }, 2 => { a: 34, b: 2 }) }
95
+
96
+ it {
97
+ expect(schema).to eq s_any_of(
98
+ s_object(
99
+ s_property(:a, s_static(35)),
100
+ s_property(:b, s_static(1))
101
+ ),
102
+ s_object(
103
+ s_property(:a, s_static(34)),
104
+ s_property(:b, s_static(2))
105
+ )
106
+ )
107
+ }
108
+ end
109
+
110
+ context 'switch between two possible dyn arrays' do
111
+ template { switch(1 => each.static('a'), 2 => each.static('b')) }
112
+
113
+ it { expect(schema).to eq s_dyn_array(s_any_of(s_static('a'), s_static('b'))) }
114
+ end
115
+
116
+ context 'with dependencies' do
117
+ template { nav(:test).switch(nav(:keke) => parent.nav(:lol)) }
118
+
79
119
  it { expect(dependencies).to eq(test: { keke: {} }, lol: {}) }
80
120
  end
81
121
  end
@@ -1,32 +1,30 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ::Babl::Operators::With do
4
- include SpecHelper::Operators
3
+ describe Babl::Operators::With do
4
+ extend SpecHelper::OperatorTesting
5
5
 
6
6
  describe '#with' do
7
7
  context 'everything is fine' do
8
- let(:template) {
9
- dsl.source {
10
- object(
11
- result: with(
12
- unscoped,
13
- :msg,
14
- _.parent.nav(:msg).dep(:lol)
15
- ) { |obj, a, b| "#{a} #{b} #{obj[:msg]}" }
16
- )
17
- }
8
+ template {
9
+ object(
10
+ result: with(
11
+ unscoped,
12
+ :msg,
13
+ _.parent.nav(:msg).dep(:lol)
14
+ ) { |obj, a, b| "#{a} #{b} #{obj[:msg]}" }
15
+ )
18
16
  }
19
17
 
20
18
  let(:object) { { result: 42, msg: 'Hello C' } }
21
19
 
22
20
  it { expect(json).to eq('result' => 'Hello C Hello C Hello C') }
23
21
  it { expect(dependencies).to eq(result: {}, msg: { lol: {} }) }
24
- it { expect(documentation).to eq(result: :__value__) }
22
+ it { expect(schema).to eq s_object(s_property(:result, s_anything)) }
25
23
  end
26
24
 
27
25
  context 'when the block raise an exception' do
28
- let(:object) { nil }
29
- let(:template) { dsl.source { with { raise 'lol' } } }
26
+ template { with { raise 'lol' } }
27
+
30
28
  it { expect { json }.to raise_error(/\__root__\.__block__/) }
31
29
  end
32
30
  end
data/spec/spec_helper.rb CHANGED
@@ -1,31 +1,2 @@
1
- require 'babl'
2
- require 'oj'
3
-
4
- module SpecHelper
5
- module Operators
6
- def self.included(base)
7
- base.let(:dsl) { ::Babl::Template.new }
8
- base.let(:compiled) { template.compile }
9
- base.let(:json) { ::Oj.load(compiled.json(object)) }
10
- base.let(:dependencies) { compiled.dependencies }
11
- base.let(:documentation) { compiled.documentation }
12
-
13
- base.before {
14
- stub_const('TestLookupContext', Class.new {
15
- attr_reader :code, :childs
16
-
17
- def initialize(code = nil, **childs)
18
- @code = code
19
- @childs = childs
20
- end
21
-
22
- def find(name)
23
- name = name.to_sym
24
- return unless childs[name]
25
- [name.to_s, childs[name].code, childs[name]]
26
- end
27
- })
28
- }
29
- end
30
- end
31
- end
1
+ require 'spec_helper/operator_testing'
2
+ require 'spec_helper/schema_utils'
@@ -0,0 +1,46 @@
1
+ require 'babl'
2
+ require 'oj'
3
+ require 'json-schema'
4
+ require 'spec_helper/schema_utils'
5
+
6
+ module SpecHelper
7
+ module OperatorTesting
8
+ def template(*args, &block)
9
+ let(:template) { dsl.source(*args, &block) }
10
+ end
11
+
12
+ def self.extended(base)
13
+ base.include SchemaUtils
14
+
15
+ base.let(:dsl) { Babl::Template.new }
16
+ base.let(:compiled) { template.compile }
17
+ base.let(:unchecked_json) { ::Oj.load(compiled.json(object)) }
18
+ base.let(:dependencies) { compiled.send(:dependencies) }
19
+ base.let(:schema) { compiled.send(:node).schema }
20
+ base.let(:json_schema) { compiled.json_schema }
21
+ base.let(:object) { nil }
22
+
23
+ base.let(:json) {
24
+ JSON::Validator.validate!(json_schema, unchecked_json, validate_schema: true)
25
+ unchecked_json
26
+ }
27
+
28
+ base.before {
29
+ stub_const('TestLookupContext', Class.new {
30
+ attr_reader :code, :childs
31
+
32
+ def initialize(code = nil, **childs)
33
+ @code = code
34
+ @childs = childs
35
+ end
36
+
37
+ def find(name)
38
+ name = name.to_sym
39
+ return unless childs[name]
40
+ [name.to_s, childs[name].code, childs[name]]
41
+ end
42
+ })
43
+ }
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,33 @@
1
+ require 'babl'
2
+
3
+ module SpecHelper
4
+ module SchemaUtils
5
+ def s_any_of(*args)
6
+ Babl::Schema::AnyOf.new(args)
7
+ end
8
+
9
+ def s_anything
10
+ Babl::Schema::Anything.instance
11
+ end
12
+
13
+ def s_dyn_array(schema, nullable: false)
14
+ Babl::Schema::DynArray.new(schema, nullable)
15
+ end
16
+
17
+ def s_fixed_array(*schemas, nullable: false)
18
+ Babl::Schema::FixedArray.new(schemas, nullable)
19
+ end
20
+
21
+ def s_object(*properties, additional: false, nullable: false)
22
+ Babl::Schema::Object.new(properties, additional, nullable)
23
+ end
24
+
25
+ def s_static(value)
26
+ Babl::Schema::Static.new(value)
27
+ end
28
+
29
+ def s_property(name, value, required: true)
30
+ Babl::Schema::Object::Property.new(name, value, required)
31
+ end
32
+ end
33
+ end
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.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Frederic Terrazzoni
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-06 00:00:00.000000000 Z
11
+ date: 2017-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.48'
55
+ - !ruby/object:Gem::Dependency
56
+ name: json-schema
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.8'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: oj
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,20 @@ dependencies:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: values
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.8'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.8'
69
97
  description: JSON templating on steroids
70
98
  email:
71
99
  - frederic.terrazzoni@gmail.com
@@ -85,8 +113,25 @@ files:
85
113
  - lib/babl.rb
86
114
  - lib/babl/builder/chain_builder.rb
87
115
  - lib/babl/builder/template_base.rb
116
+ - lib/babl/errors.rb
117
+ - lib/babl/nodes/create_pin.rb
118
+ - lib/babl/nodes/dep.rb
119
+ - lib/babl/nodes/each.rb
120
+ - lib/babl/nodes/fixed_array.rb
121
+ - lib/babl/nodes/goto_pin.rb
122
+ - lib/babl/nodes/internal_value.rb
123
+ - lib/babl/nodes/merge.rb
124
+ - lib/babl/nodes/nav.rb
125
+ - lib/babl/nodes/object.rb
126
+ - lib/babl/nodes/parent.rb
127
+ - lib/babl/nodes/static.rb
128
+ - lib/babl/nodes/switch.rb
129
+ - lib/babl/nodes/terminal_value.rb
130
+ - lib/babl/nodes/with.rb
88
131
  - lib/babl/operators/array.rb
89
132
  - lib/babl/operators/call.rb
133
+ - lib/babl/operators/continue.rb
134
+ - lib/babl/operators/default.rb
90
135
  - lib/babl/operators/dep.rb
91
136
  - lib/babl/operators/each.rb
92
137
  - lib/babl/operators/enter.rb
@@ -106,14 +151,22 @@ files:
106
151
  - lib/babl/railtie.rb
107
152
  - lib/babl/rendering/compiled_template.rb
108
153
  - lib/babl/rendering/context.rb
109
- - lib/babl/rendering/internal_value_node.rb
110
154
  - lib/babl/rendering/noop_preloader.rb
111
- - lib/babl/rendering/terminal_value_node.rb
155
+ - lib/babl/schema/any_of.rb
156
+ - lib/babl/schema/anything.rb
157
+ - lib/babl/schema/dyn_array.rb
158
+ - lib/babl/schema/fixed_array.rb
159
+ - lib/babl/schema/object.rb
160
+ - lib/babl/schema/static.rb
161
+ - lib/babl/schema/typed.rb
112
162
  - lib/babl/template.rb
113
163
  - lib/babl/utils/hash.rb
164
+ - lib/babl/utils/ref.rb
114
165
  - lib/babl/version.rb
115
166
  - spec/operators/array_spec.rb
116
167
  - spec/operators/call_spec.rb
168
+ - spec/operators/continue_spec.rb
169
+ - spec/operators/default_spec.rb
117
170
  - spec/operators/dep_spec.rb
118
171
  - spec/operators/each_spec.rb
119
172
  - spec/operators/enter_spec.rb
@@ -131,6 +184,8 @@ files:
131
184
  - spec/operators/switch_spec.rb
132
185
  - spec/operators/with_spec.rb
133
186
  - spec/spec_helper.rb
187
+ - spec/spec_helper/operator_testing.rb
188
+ - spec/spec_helper/schema_utils.rb
134
189
  homepage: https://github.com/getbannerman/babl
135
190
  licenses:
136
191
  - MIT
@@ -158,6 +213,8 @@ summary: JSON templating on steroids
158
213
  test_files:
159
214
  - spec/operators/array_spec.rb
160
215
  - spec/operators/call_spec.rb
216
+ - spec/operators/continue_spec.rb
217
+ - spec/operators/default_spec.rb
161
218
  - spec/operators/dep_spec.rb
162
219
  - spec/operators/each_spec.rb
163
220
  - spec/operators/enter_spec.rb
@@ -175,3 +232,5 @@ test_files:
175
232
  - spec/operators/switch_spec.rb
176
233
  - spec/operators/with_spec.rb
177
234
  - spec/spec_helper.rb
235
+ - spec/spec_helper/operator_testing.rb
236
+ - spec/spec_helper/schema_utils.rb