morpher 0.2.6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of morpher might be problematic. Click here for more details.

Files changed (106) hide show
  1. checksums.yaml +7 -0
  2. data/.circle.yml +6 -0
  3. data/.gitignore +5 -0
  4. data/.rspec +4 -0
  5. data/.rubocop.yml +8 -0
  6. data/Changelog.md +60 -0
  7. data/Gemfile +3 -0
  8. data/LICENSE +20 -0
  9. data/README.md +56 -0
  10. data/Rakefile +95 -0
  11. data/circle.yml +7 -0
  12. data/config/devtools.yml +2 -0
  13. data/config/flay.yml +3 -0
  14. data/config/flog.yml +2 -0
  15. data/config/heckle.yml +3 -0
  16. data/config/mutant.yml +8 -0
  17. data/config/reek.yml +109 -0
  18. data/config/rubocop.yml +138 -0
  19. data/config/yardstick.yml +2 -0
  20. data/examples/README.md +13 -0
  21. data/examples/a.rb +25 -0
  22. data/examples/b.rb +35 -0
  23. data/lib/morpher.rb +111 -0
  24. data/lib/morpher/compiler.rb +17 -0
  25. data/lib/morpher/compiler/emitter.rb +82 -0
  26. data/lib/morpher/compiler/error.rb +84 -0
  27. data/lib/morpher/compiler/evaluator.rb +63 -0
  28. data/lib/morpher/compiler/evaluator/emitter.rb +224 -0
  29. data/lib/morpher/compiler/preprocessor.rb +29 -0
  30. data/lib/morpher/compiler/preprocessor/emitter.rb +54 -0
  31. data/lib/morpher/compiler/preprocessor/emitter/anima.rb +69 -0
  32. data/lib/morpher/compiler/preprocessor/emitter/boolean.rb +31 -0
  33. data/lib/morpher/compiler/preprocessor/emitter/key.rb +87 -0
  34. data/lib/morpher/compiler/preprocessor/emitter/noop.rb +45 -0
  35. data/lib/morpher/compiler/preprocessor/emitter/param.rb +50 -0
  36. data/lib/morpher/evaluation.rb +118 -0
  37. data/lib/morpher/evaluator.rb +40 -0
  38. data/lib/morpher/evaluator/binary.rb +46 -0
  39. data/lib/morpher/evaluator/nary.rb +97 -0
  40. data/lib/morpher/evaluator/nullary.rb +92 -0
  41. data/lib/morpher/evaluator/nullary/parameterized.rb +48 -0
  42. data/lib/morpher/evaluator/predicate.rb +22 -0
  43. data/lib/morpher/evaluator/predicate/boolean.rb +76 -0
  44. data/lib/morpher/evaluator/predicate/contradiction.rb +36 -0
  45. data/lib/morpher/evaluator/predicate/eql.rb +50 -0
  46. data/lib/morpher/evaluator/predicate/negation.rb +52 -0
  47. data/lib/morpher/evaluator/predicate/primitive.rb +49 -0
  48. data/lib/morpher/evaluator/predicate/tautology.rb +36 -0
  49. data/lib/morpher/evaluator/transformer.rb +75 -0
  50. data/lib/morpher/evaluator/transformer/attribute.rb +25 -0
  51. data/lib/morpher/evaluator/transformer/block.rb +81 -0
  52. data/lib/morpher/evaluator/transformer/coerce.rb +166 -0
  53. data/lib/morpher/evaluator/transformer/custom.rb +34 -0
  54. data/lib/morpher/evaluator/transformer/domain.rb +86 -0
  55. data/lib/morpher/evaluator/transformer/domain/attribute_accessors.rb +60 -0
  56. data/lib/morpher/evaluator/transformer/domain/attribute_hash.rb +52 -0
  57. data/lib/morpher/evaluator/transformer/domain/instance_variables.rb +60 -0
  58. data/lib/morpher/evaluator/transformer/domain/param.rb +54 -0
  59. data/lib/morpher/evaluator/transformer/guard.rb +62 -0
  60. data/lib/morpher/evaluator/transformer/hash_transform.rb +149 -0
  61. data/lib/morpher/evaluator/transformer/input.rb +37 -0
  62. data/lib/morpher/evaluator/transformer/key.rb +86 -0
  63. data/lib/morpher/evaluator/transformer/map.rb +100 -0
  64. data/lib/morpher/evaluator/transformer/merge.rb +25 -0
  65. data/lib/morpher/evaluator/transformer/static.rb +27 -0
  66. data/lib/morpher/evaluator/unary.rb +79 -0
  67. data/lib/morpher/node_helpers.rb +19 -0
  68. data/lib/morpher/printer.rb +233 -0
  69. data/lib/morpher/printer/mixin.rb +58 -0
  70. data/lib/morpher/registry.rb +51 -0
  71. data/lib/morpher/type_lookup.rb +51 -0
  72. data/morpher.gemspec +29 -0
  73. data/spec/integration_spec.rb +184 -0
  74. data/spec/rcov.opts +7 -0
  75. data/spec/shared/evaluator_behavior.rb +155 -0
  76. data/spec/spec_helper.rb +36 -0
  77. data/spec/support/ice_nine_config.rb +8 -0
  78. data/spec/support/let_mock_helper.rb +8 -0
  79. data/spec/support/strip_helper.rb +12 -0
  80. data/spec/unit/morpher/compiler/preprocessor_spec.rb +46 -0
  81. data/spec/unit/morpher/evaluator/nullary/parameterized_spec.rb +25 -0
  82. data/spec/unit/morpher/evaluator/predicate/boolean/and_spec.rb +11 -0
  83. data/spec/unit/morpher/evaluator/predicate/boolean/or_spec.rb +26 -0
  84. data/spec/unit/morpher/evaluator/predicate/boolean/xor_spec.rb +26 -0
  85. data/spec/unit/morpher/evaluator/predicate/contrandiction_spec.rb +7 -0
  86. data/spec/unit/morpher/evaluator/predicate/eql_spec.rb +11 -0
  87. data/spec/unit/morpher/evaluator/predicate/negation_spec.rb +10 -0
  88. data/spec/unit/morpher/evaluator/predicate/primitive_spec.rb +17 -0
  89. data/spec/unit/morpher/evaluator/predicate/tautology_spec.rb +7 -0
  90. data/spec/unit/morpher/evaluator/transformer/attribute_spec.rb +9 -0
  91. data/spec/unit/morpher/evaluator/transformer/block_spec.rb +92 -0
  92. data/spec/unit/morpher/evaluator/transformer/coerce/parse_int_spec.rb +23 -0
  93. data/spec/unit/morpher/evaluator/transformer/custom_spec.rb +13 -0
  94. data/spec/unit/morpher/evaluator/transformer/domain/attribute_accessors_spec.rb +48 -0
  95. data/spec/unit/morpher/evaluator/transformer/domain/attribute_hash_spec.rb +40 -0
  96. data/spec/unit/morpher/evaluator/transformer/domain/instance_variables_spec.rb +47 -0
  97. data/spec/unit/morpher/evaluator/transformer/guard_spec.rb +12 -0
  98. data/spec/unit/morpher/evaluator/transformer/hash_transform_spec.rb +47 -0
  99. data/spec/unit/morpher/evaluator/transformer/input_spec.rb +11 -0
  100. data/spec/unit/morpher/evaluator/transformer/map_spec.rb +25 -0
  101. data/spec/unit/morpher/evaluator/transformer/static_spec.rb +10 -0
  102. data/spec/unit/morpher/evaluator_spec.rb +15 -0
  103. data/spec/unit/morpher/printer_spec.rb +21 -0
  104. data/spec/unit/morpher/registry_spec.rb +11 -0
  105. data/spec/unit/morpher_spec.rb +53 -0
  106. metadata +302 -0
@@ -0,0 +1,40 @@
1
+ describe Morpher::Evaluator::Transformer::Domain::AttributeHash do
2
+
3
+ let(:model) do
4
+ Class.new do
5
+ include Anima.new(:foo, :bar)
6
+ end
7
+ end
8
+
9
+ let(:param) do
10
+ described_class::Param.new(model, %i[foo bar])
11
+ end
12
+
13
+ describe Morpher::Evaluator::Transformer::Domain::AttributeHash::Dump do
14
+
15
+ let(:object) { described_class::Dump.new(param) }
16
+
17
+ let(:expected_output) { { foo: :foo, bar: :bar } }
18
+
19
+ let(:valid_input) do
20
+ model.new(foo: :foo, bar: :bar)
21
+ end
22
+
23
+ include_examples 'transforming evaluator on valid input'
24
+ include_examples 'transitive evaluator'
25
+
26
+ end
27
+
28
+ describe Morpher::Evaluator::Transformer::Domain::AttributeHash::Load do
29
+ let(:object) { described_class::Load.new(param) }
30
+
31
+ let(:valid_input) { { foo: :foo, bar: :bar } }
32
+
33
+ let(:expected_output) do
34
+ model.new(foo: :foo, bar: :bar)
35
+ end
36
+
37
+ include_examples 'transforming evaluator on valid input'
38
+ include_examples 'transitive evaluator'
39
+ end
40
+ end
@@ -0,0 +1,47 @@
1
+ describe Morpher::Evaluator::Transformer::Domain::InstanceVariables do
2
+
3
+ let(:model) do
4
+ Class.new do
5
+ include Equalizer.new(:foo, :bar)
6
+
7
+ attr_accessor :foo, :bar
8
+ end
9
+ end
10
+
11
+ let(:param) do
12
+ described_class::Param.new(model, %i[foo bar])
13
+ end
14
+
15
+ describe Morpher::Evaluator::Transformer::Domain::InstanceVariables::Dump do
16
+
17
+ let(:object) { described_class::Dump.new(param) }
18
+
19
+ let(:expected_output) { { foo: :foo, bar: :bar } }
20
+
21
+ let(:valid_input) do
22
+ object = model.allocate
23
+ object.foo = :foo
24
+ object.bar = :bar
25
+ object
26
+ end
27
+
28
+ include_examples 'transforming evaluator on valid input'
29
+ include_examples 'transitive evaluator'
30
+ end
31
+
32
+ describe Morpher::Evaluator::Transformer::Domain::InstanceVariables::Load do
33
+ let(:object) { described_class::Load.new(param) }
34
+
35
+ let(:valid_input) { { foo: :foo, bar: :bar } }
36
+
37
+ let(:expected_output) do
38
+ object = model.allocate
39
+ object.foo = :foo
40
+ object.bar = :bar
41
+ object
42
+ end
43
+
44
+ include_examples 'transforming evaluator on valid input'
45
+ include_examples 'transitive evaluator'
46
+ end
47
+ end
@@ -0,0 +1,12 @@
1
+ describe Morpher::Evaluator::Transformer::Guard do
2
+ let(:object) { described_class.new(predicate) }
3
+
4
+ let(:predicate) { Morpher.compile(s(:primitive, String)) }
5
+
6
+ let(:valid_input) { 'foo' }
7
+ let(:invalid_input) { :foo }
8
+ let(:expected_output) { valid_input }
9
+
10
+ include_examples 'transforming evaluator on valid input'
11
+ include_examples 'transitive evaluator'
12
+ end
@@ -0,0 +1,47 @@
1
+ describe Morpher::Evaluator::Transformer::HashTransform do
2
+
3
+ let(:ast) do
4
+ s(:hash_transform, body_a)
5
+ end
6
+
7
+ let(:object) do
8
+ Morpher.compile(ast)
9
+ end
10
+
11
+ let(:evaluator_a) do
12
+ Morpher.compile(body_a)
13
+ end
14
+
15
+ context 'intransitive' do
16
+
17
+ let(:valid_input) { { 'foo' => 'bar' } }
18
+ let(:invalid_input) { {} }
19
+ let(:expected_output) { { foo: String } }
20
+
21
+ let(:body_a) do
22
+ s(:key_symbolize, 'foo', s(:attribute, :class))
23
+ end
24
+
25
+ let(:expected_exception) do
26
+ Morpher::Evaluator::Transformer::TransformError.new(object.body.first.body.first, invalid_input)
27
+ end
28
+
29
+ include_examples 'intransitive evaluator'
30
+ end
31
+
32
+ context 'transitive' do
33
+ let(:body_a) do
34
+ s(:key_symbolize, 'foo', s(:guard, s(:primitive, String)))
35
+ end
36
+
37
+ let(:valid_input) { { 'foo' => 'bar' } }
38
+ let(:invalid_input) { {} }
39
+ let(:expected_output) { { foo: 'bar' } }
40
+
41
+ let(:expected_exception) do
42
+ Morpher::Evaluator::Transformer::TransformError.new(object.body.first.body.first, invalid_input)
43
+ end
44
+
45
+ include_examples 'transitive evaluator'
46
+ end
47
+ end
@@ -0,0 +1,11 @@
1
+ describe Morpher::Evaluator::Transformer::Input do
2
+ let(:object) { described_class.new }
3
+
4
+ let(:valid_input) { double('Input') }
5
+ let(:expected_output) { valid_input }
6
+
7
+ include_examples 'transforming evaluator on valid input'
8
+ include_examples 'inverse evaluator' do
9
+ let(:expected_inverse) { object }
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ describe Morpher::Evaluator::Transformer::Map do
2
+ let(:object) { described_class.new(operand) }
3
+
4
+ context '#intransitive' do
5
+ let(:operand) { Morpher.compile(s(:attribute, :length)) }
6
+
7
+ include_examples 'transforming evaluator on valid input'
8
+ include_examples 'intransitive evaluator'
9
+
10
+ let(:valid_input) { ['foo'] }
11
+ let(:expected_output) { [3] }
12
+ end
13
+
14
+ context '#transitive' do
15
+ let(:operand) { Morpher.compile(s(:guard, s(:primitive, String))) }
16
+
17
+ include_examples 'transforming evaluator on valid input'
18
+ include_examples 'transitive evaluator'
19
+
20
+ let(:valid_input) { ['foo'] }
21
+ let(:invalid_input) { [nil] }
22
+ let(:expected_output) { ['foo'] }
23
+ end
24
+
25
+ end
@@ -0,0 +1,10 @@
1
+ describe Morpher::Evaluator::Transformer::Static do
2
+ let(:object) { described_class.new(value) }
3
+
4
+ let(:value) { double('Value') }
5
+
6
+ let(:valid_input) { double('Input') }
7
+ let(:expected_output) { value }
8
+
9
+ include_examples 'transforming evaluator on valid input'
10
+ end
@@ -0,0 +1,15 @@
1
+ describe Morpher::Evaluator do
2
+ describe '.register' do
3
+ let(:object) do
4
+ Class.new(described_class) do
5
+ public_class_method :register
6
+ end
7
+ end
8
+
9
+ subject { object.register(:foo) }
10
+
11
+ it 'registers evaluator' do
12
+ expect { subject }.to change { Morpher::Evaluator::REGISTRY[:foo] }.from(nil).to(object)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ describe Morpher::Printer::Mixin do
2
+ describe '#description' do
3
+ let(:object) do
4
+ Class.new do
5
+ include Morpher::Printer::Mixin, Adamantium::Flat
6
+
7
+ def self.name
8
+ 'Foo'
9
+ end
10
+
11
+ printer do
12
+ name
13
+ end
14
+ end
15
+ end
16
+
17
+ subject { object.new.description }
18
+
19
+ it { should eql("Foo\n") }
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ describe Morpher::Registry do
2
+
3
+ specify do
4
+ klass = Class.new do
5
+ include Morpher::Registry
6
+ register :foo
7
+ end
8
+
9
+ expect(klass::REGISTRY).to eql(foo: klass)
10
+ end
11
+ end
@@ -0,0 +1,53 @@
1
+ describe Morpher do
2
+ let(:object) { described_class }
3
+
4
+ describe '.sexp' do
5
+ subject { object.sexp(&block) }
6
+
7
+ context 'with no block given' do
8
+ let(:block) { nil }
9
+
10
+ it 'raises an exception' do
11
+ expect { subject }.to raise_error(ArgumentError)
12
+ end
13
+ end
14
+
15
+ context 'with block given' do
16
+ let(:block) do
17
+ proc do
18
+ s(:foo)
19
+ s(:bar)
20
+ end
21
+ end
22
+
23
+ it 'allows to use sexp dsl and returns last value' do
24
+ should == AST::Node.new(:bar)
25
+ end
26
+ end
27
+ end
28
+
29
+ describe '.build' do
30
+ subject { object.build(&block) }
31
+
32
+ context 'with no block given' do
33
+ let(:block) { nil }
34
+
35
+ it 'raises an exception' do
36
+ expect { subject }.to raise_error(ArgumentError)
37
+ end
38
+ end
39
+
40
+ context 'with block given' do
41
+ let(:block) do
42
+ proc do
43
+ s(:foo)
44
+ s(:true)
45
+ end
46
+ end
47
+
48
+ it 'allows to use sexp dsl and returns last value compiled' do
49
+ should eql(Morpher.compile(s(:true)))
50
+ end
51
+ end
52
+ end
53
+ end
metadata ADDED
@@ -0,0 +1,302 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: morpher
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.6
5
+ platform: ruby
6
+ authors:
7
+ - Markus Schirp
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: abstract_type
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.7
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.7
27
+ - !ruby/object:Gem::Dependency
28
+ name: adamantium
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: anima
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.3.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.3.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: ast
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: concord
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.1.5
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.1.5
83
+ - !ruby/object:Gem::Dependency
84
+ name: equalizer
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.0.9
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.0.9
97
+ - !ruby/object:Gem::Dependency
98
+ name: ice_nine
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.11.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.11.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: procto
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.0.2
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.0.2
125
+ - !ruby/object:Gem::Dependency
126
+ name: devtools
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.1.3
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.1.3
139
+ description: Composeable predicates on POROs
140
+ email:
141
+ - mbj@schirp-dso.com
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files:
145
+ - LICENSE
146
+ files:
147
+ - ".circle.yml"
148
+ - ".gitignore"
149
+ - ".rspec"
150
+ - ".rubocop.yml"
151
+ - Changelog.md
152
+ - Gemfile
153
+ - LICENSE
154
+ - README.md
155
+ - Rakefile
156
+ - circle.yml
157
+ - config/devtools.yml
158
+ - config/flay.yml
159
+ - config/flog.yml
160
+ - config/heckle.yml
161
+ - config/mutant.yml
162
+ - config/reek.yml
163
+ - config/rubocop.yml
164
+ - config/yardstick.yml
165
+ - examples/README.md
166
+ - examples/a.rb
167
+ - examples/b.rb
168
+ - lib/morpher.rb
169
+ - lib/morpher/compiler.rb
170
+ - lib/morpher/compiler/emitter.rb
171
+ - lib/morpher/compiler/error.rb
172
+ - lib/morpher/compiler/evaluator.rb
173
+ - lib/morpher/compiler/evaluator/emitter.rb
174
+ - lib/morpher/compiler/preprocessor.rb
175
+ - lib/morpher/compiler/preprocessor/emitter.rb
176
+ - lib/morpher/compiler/preprocessor/emitter/anima.rb
177
+ - lib/morpher/compiler/preprocessor/emitter/boolean.rb
178
+ - lib/morpher/compiler/preprocessor/emitter/key.rb
179
+ - lib/morpher/compiler/preprocessor/emitter/noop.rb
180
+ - lib/morpher/compiler/preprocessor/emitter/param.rb
181
+ - lib/morpher/evaluation.rb
182
+ - lib/morpher/evaluator.rb
183
+ - lib/morpher/evaluator/binary.rb
184
+ - lib/morpher/evaluator/nary.rb
185
+ - lib/morpher/evaluator/nullary.rb
186
+ - lib/morpher/evaluator/nullary/parameterized.rb
187
+ - lib/morpher/evaluator/predicate.rb
188
+ - lib/morpher/evaluator/predicate/boolean.rb
189
+ - lib/morpher/evaluator/predicate/contradiction.rb
190
+ - lib/morpher/evaluator/predicate/eql.rb
191
+ - lib/morpher/evaluator/predicate/negation.rb
192
+ - lib/morpher/evaluator/predicate/primitive.rb
193
+ - lib/morpher/evaluator/predicate/tautology.rb
194
+ - lib/morpher/evaluator/transformer.rb
195
+ - lib/morpher/evaluator/transformer/attribute.rb
196
+ - lib/morpher/evaluator/transformer/block.rb
197
+ - lib/morpher/evaluator/transformer/coerce.rb
198
+ - lib/morpher/evaluator/transformer/custom.rb
199
+ - lib/morpher/evaluator/transformer/domain.rb
200
+ - lib/morpher/evaluator/transformer/domain/attribute_accessors.rb
201
+ - lib/morpher/evaluator/transformer/domain/attribute_hash.rb
202
+ - lib/morpher/evaluator/transformer/domain/instance_variables.rb
203
+ - lib/morpher/evaluator/transformer/domain/param.rb
204
+ - lib/morpher/evaluator/transformer/guard.rb
205
+ - lib/morpher/evaluator/transformer/hash_transform.rb
206
+ - lib/morpher/evaluator/transformer/input.rb
207
+ - lib/morpher/evaluator/transformer/key.rb
208
+ - lib/morpher/evaluator/transformer/map.rb
209
+ - lib/morpher/evaluator/transformer/merge.rb
210
+ - lib/morpher/evaluator/transformer/static.rb
211
+ - lib/morpher/evaluator/unary.rb
212
+ - lib/morpher/node_helpers.rb
213
+ - lib/morpher/printer.rb
214
+ - lib/morpher/printer/mixin.rb
215
+ - lib/morpher/registry.rb
216
+ - lib/morpher/type_lookup.rb
217
+ - morpher.gemspec
218
+ - spec/integration_spec.rb
219
+ - spec/rcov.opts
220
+ - spec/shared/evaluator_behavior.rb
221
+ - spec/spec_helper.rb
222
+ - spec/support/ice_nine_config.rb
223
+ - spec/support/let_mock_helper.rb
224
+ - spec/support/strip_helper.rb
225
+ - spec/unit/morpher/compiler/preprocessor_spec.rb
226
+ - spec/unit/morpher/evaluator/nullary/parameterized_spec.rb
227
+ - spec/unit/morpher/evaluator/predicate/boolean/and_spec.rb
228
+ - spec/unit/morpher/evaluator/predicate/boolean/or_spec.rb
229
+ - spec/unit/morpher/evaluator/predicate/boolean/xor_spec.rb
230
+ - spec/unit/morpher/evaluator/predicate/contrandiction_spec.rb
231
+ - spec/unit/morpher/evaluator/predicate/eql_spec.rb
232
+ - spec/unit/morpher/evaluator/predicate/negation_spec.rb
233
+ - spec/unit/morpher/evaluator/predicate/primitive_spec.rb
234
+ - spec/unit/morpher/evaluator/predicate/tautology_spec.rb
235
+ - spec/unit/morpher/evaluator/transformer/attribute_spec.rb
236
+ - spec/unit/morpher/evaluator/transformer/block_spec.rb
237
+ - spec/unit/morpher/evaluator/transformer/coerce/parse_int_spec.rb
238
+ - spec/unit/morpher/evaluator/transformer/custom_spec.rb
239
+ - spec/unit/morpher/evaluator/transformer/domain/attribute_accessors_spec.rb
240
+ - spec/unit/morpher/evaluator/transformer/domain/attribute_hash_spec.rb
241
+ - spec/unit/morpher/evaluator/transformer/domain/instance_variables_spec.rb
242
+ - spec/unit/morpher/evaluator/transformer/guard_spec.rb
243
+ - spec/unit/morpher/evaluator/transformer/hash_transform_spec.rb
244
+ - spec/unit/morpher/evaluator/transformer/input_spec.rb
245
+ - spec/unit/morpher/evaluator/transformer/map_spec.rb
246
+ - spec/unit/morpher/evaluator/transformer/static_spec.rb
247
+ - spec/unit/morpher/evaluator_spec.rb
248
+ - spec/unit/morpher/printer_spec.rb
249
+ - spec/unit/morpher/registry_spec.rb
250
+ - spec/unit/morpher_spec.rb
251
+ homepage: https://github.com/mbj/morpher
252
+ licenses:
253
+ - MIT
254
+ metadata: {}
255
+ post_install_message:
256
+ rdoc_options: []
257
+ require_paths:
258
+ - lib
259
+ required_ruby_version: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - ">="
262
+ - !ruby/object:Gem::Version
263
+ version: '2.1'
264
+ required_rubygems_version: !ruby/object:Gem::Requirement
265
+ requirements:
266
+ - - ">="
267
+ - !ruby/object:Gem::Version
268
+ version: '0'
269
+ requirements: []
270
+ rubyforge_project:
271
+ rubygems_version: 2.5.1
272
+ signing_key:
273
+ specification_version: 4
274
+ summary: Composeable predicates on POROs
275
+ test_files:
276
+ - spec/unit/morpher/compiler/preprocessor_spec.rb
277
+ - spec/unit/morpher/evaluator/nullary/parameterized_spec.rb
278
+ - spec/unit/morpher/evaluator/predicate/boolean/and_spec.rb
279
+ - spec/unit/morpher/evaluator/predicate/boolean/or_spec.rb
280
+ - spec/unit/morpher/evaluator/predicate/boolean/xor_spec.rb
281
+ - spec/unit/morpher/evaluator/predicate/contrandiction_spec.rb
282
+ - spec/unit/morpher/evaluator/predicate/eql_spec.rb
283
+ - spec/unit/morpher/evaluator/predicate/negation_spec.rb
284
+ - spec/unit/morpher/evaluator/predicate/primitive_spec.rb
285
+ - spec/unit/morpher/evaluator/predicate/tautology_spec.rb
286
+ - spec/unit/morpher/evaluator/transformer/attribute_spec.rb
287
+ - spec/unit/morpher/evaluator/transformer/block_spec.rb
288
+ - spec/unit/morpher/evaluator/transformer/coerce/parse_int_spec.rb
289
+ - spec/unit/morpher/evaluator/transformer/custom_spec.rb
290
+ - spec/unit/morpher/evaluator/transformer/domain/attribute_accessors_spec.rb
291
+ - spec/unit/morpher/evaluator/transformer/domain/attribute_hash_spec.rb
292
+ - spec/unit/morpher/evaluator/transformer/domain/instance_variables_spec.rb
293
+ - spec/unit/morpher/evaluator/transformer/guard_spec.rb
294
+ - spec/unit/morpher/evaluator/transformer/hash_transform_spec.rb
295
+ - spec/unit/morpher/evaluator/transformer/input_spec.rb
296
+ - spec/unit/morpher/evaluator/transformer/map_spec.rb
297
+ - spec/unit/morpher/evaluator/transformer/static_spec.rb
298
+ - spec/unit/morpher/evaluator_spec.rb
299
+ - spec/unit/morpher/printer_spec.rb
300
+ - spec/unit/morpher/registry_spec.rb
301
+ - spec/unit/morpher_spec.rb
302
+ has_rdoc: