ducktrap 0.0.1 → 0.0.2
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/Gemfile.devtools +19 -23
- data/ducktrap.gemspec +7 -7
- data/lib/ducktrap.rb +1 -1
- data/lib/ducktrap/nary.rb +2 -2
- data/lib/ducktrap/node/primitive.rb +1 -1
- data/lib/ducktrap/registry.rb +2 -2
- data/spec/support/let_mock_helper.rb +4 -9
- data/spec/unit/ducktrap/builder/class_methods/new_spec.rb +1 -1
- data/spec/unit/ducktrap/builder/new_spec.rb +1 -1
- data/spec/unit/ducktrap/evaluator/assert_successful_spec.rb +2 -2
- data/spec/unit/ducktrap/evaluator/invalid/output_spec.rb +2 -2
- data/spec/unit/ducktrap/evaluator/noop/output_spec.rb +2 -2
- data/spec/unit/ducktrap/evaluator/output_spec.rb +3 -3
- data/spec/unit/ducktrap/evaluator/successful_predicate_spec.rb +3 -3
- data/spec/unit/ducktrap/failed_transformation_error/message_spec.rb +2 -2
- data/spec/unit/ducktrap/formatter/name_spec.rb +1 -1
- data/spec/unit/ducktrap/formatter/nest_spec.rb +2 -2
- data/spec/unit/ducktrap/mapper/builder/dumper_spec.rb +4 -4
- data/spec/unit/ducktrap/mapper/builder/loader_spec.rb +4 -4
- data/spec/unit/ducktrap/mapper/builder/object_spec.rb +5 -5
- data/spec/unit/ducktrap/mapper/class_methods/build_spec.rb +3 -3
- data/spec/unit/ducktrap/nary/class_methods/build_spec.rb +2 -2
- data/spec/unit/ducktrap/nary/evaluator/output_spec.rb +5 -5
- data/spec/unit/ducktrap/node/anima/dump/evaluator/output_spec.rb +2 -2
- data/spec/unit/ducktrap/node/anima/dump/inverse_spec.rb +1 -1
- data/spec/unit/ducktrap/node/anima/evaluator/output_spec.rb +2 -2
- data/spec/unit/ducktrap/node/anima/load/evaluator/output_spec.rb +1 -1
- data/spec/unit/ducktrap/node/anima/load/inverse_spec.rb +1 -1
- data/spec/unit/ducktrap/node/block/evaluator/output_spec.rb +5 -5
- data/spec/unit/ducktrap/node/call_spec.rb +1 -1
- data/spec/unit/ducktrap/node/custom/call_spec.rb +4 -4
- data/spec/unit/ducktrap/node/custom/class_methods/build_spec.rb +2 -2
- data/spec/unit/ducktrap/node/forward/evaluator/output_spec.rb +2 -2
- data/spec/unit/ducktrap/node/guard_nil/evaluator/output_spec.rb +3 -3
- data/spec/unit/ducktrap/node/hash/transform/evaluator/output_spec.rb +1 -1
- data/spec/unit/ducktrap/node/invalid/call_spec.rb +3 -3
- data/spec/unit/ducktrap/node/inverse/call_spec.rb +1 -1
- data/spec/unit/ducktrap/node/key/add/call_spec.rb +6 -6
- data/spec/unit/ducktrap/node/key/add/evaluator/call_spec.rb +6 -6
- data/spec/unit/ducktrap/node/key/add/inverse_spec.rb +2 -2
- data/spec/unit/ducktrap/node/key/delete/call_spec.rb +3 -3
- data/spec/unit/ducktrap/node/key/delete/evaluator/call_spec.rb +3 -3
- data/spec/unit/ducktrap/node/key/delete/inverse_spec.rb +2 -2
- data/spec/unit/ducktrap/node/key/dump/evaluator/output_spec.rb +4 -4
- data/spec/unit/ducktrap/node/key/dump/inverse_spec.rb +1 -1
- data/spec/unit/ducktrap/node/key/evaluator/key_spec.rb +3 -3
- data/spec/unit/ducktrap/node/key/fetch/evaluator/output_spec.rb +3 -3
- data/spec/unit/ducktrap/node/key/fetch/inverse_spec.rb +1 -1
- data/spec/unit/ducktrap/node/map/evaluator/output_spec.rb +1 -1
- data/spec/unit/ducktrap/node/noop/call_spec.rb +1 -1
- data/spec/unit/ducktrap/node/primitive/inverse_spec.rb +2 -3
- data/spec/unit/ducktrap/node/run_spec.rb +2 -2
- data/spec/unit/ducktrap/node/static/call_spec.rb +3 -3
- data/spec/unit/ducktrap/node/static/inverse_spec.rb +2 -2
- data/spec/unit/ducktrap/registry/lookup_spec.rb +3 -3
- data/spec/unit/ducktrap/registry/register_spec.rb +2 -2
- data/spec/unit/ducktrap/unary/evaluator/output2_spec.rb +3 -3
- data/spec/unit/ducktrap/unary/evaluator/output_spec.rb +4 -4
- metadata +14 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abf74921a4fd96233b746a958969e8445071d285
|
4
|
+
data.tar.gz: 07ee183763f64286f40fd20d828559a0528c53bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46a7d51c7a5ecc80c53eda3c5fb1d4e3fef122f1599517deb324812d1032c9da9bc49cdfee52f6913c6ae6bed70400fcfc0ba06f79dea1072486564e7e9cc0f7
|
7
|
+
data.tar.gz: 680028cc151267272c7ef85fb0322cf0bb2caaa8dc2e55b94914599ff0f137698e49f05fd8aca0eb6cb615101e9c29ca794da83414f9c8ebfdcdbe2251b513a8
|
data/Gemfile.devtools
CHANGED
@@ -2,49 +2,45 @@
|
|
2
2
|
|
3
3
|
group :development do
|
4
4
|
gem 'rake', '~> 10.1.0'
|
5
|
-
gem 'rspec', '~> 2.
|
6
|
-
gem 'yard', '~> 0.8.
|
5
|
+
gem 'rspec', '~> 2.14.1'
|
6
|
+
gem 'yard', '~> 0.8.7'
|
7
7
|
end
|
8
8
|
|
9
9
|
group :yard do
|
10
|
-
gem 'kramdown', '~> 1.
|
10
|
+
gem 'kramdown', '~> 1.2.0'
|
11
11
|
end
|
12
12
|
|
13
13
|
group :guard do
|
14
14
|
gem 'guard', '~> 1.8.1'
|
15
15
|
gem 'guard-bundler', '~> 1.0.0'
|
16
16
|
gem 'guard-rspec', '~> 3.0.2'
|
17
|
+
gem 'guard-rubocop', '~> 0.2.0'
|
18
|
+
gem 'guard-mutant', '~> 0.0.1'
|
17
19
|
|
18
20
|
# file system change event handling
|
19
|
-
gem 'listen', '~> 1.
|
20
|
-
gem 'rb-fchange', '~> 0.0.6', :
|
21
|
-
gem 'rb-fsevent', '~> 0.9.3', :
|
22
|
-
gem 'rb-inotify', '~> 0.9.0', :
|
21
|
+
gem 'listen', '~> 1.3.0'
|
22
|
+
gem 'rb-fchange', '~> 0.0.6', require: false
|
23
|
+
gem 'rb-fsevent', '~> 0.9.3', require: false
|
24
|
+
gem 'rb-inotify', '~> 0.9.0', require: false
|
23
25
|
|
24
26
|
# notification handling
|
25
|
-
gem 'libnotify', '~> 0.8.0', :
|
26
|
-
gem 'rb-notifu', '~> 0.0.4', :
|
27
|
-
gem 'terminal-notifier-guard', '~> 1.5.3', :
|
27
|
+
gem 'libnotify', '~> 0.8.0', require: false
|
28
|
+
gem 'rb-notifu', '~> 0.0.4', require: false
|
29
|
+
gem 'terminal-notifier-guard', '~> 1.5.3', require: false
|
28
30
|
end
|
29
31
|
|
30
32
|
group :metrics do
|
31
33
|
gem 'coveralls', '~> 0.6.7'
|
32
|
-
gem 'flay', '~> 2.
|
33
|
-
gem 'flog', '~> 4.1.
|
34
|
-
gem 'reek', '~> 1.3.
|
34
|
+
gem 'flay', '~> 2.4.0'
|
35
|
+
gem 'flog', '~> 4.1.1'
|
36
|
+
gem 'reek', '~> 1.3.2'
|
37
|
+
gem 'rubocop', '~> 0.13.0'
|
35
38
|
gem 'simplecov', '~> 0.7.1'
|
36
|
-
gem 'yardstick', '~> 0.9.
|
37
|
-
|
38
|
-
platforms :ruby_19 do
|
39
|
-
gem 'yard-spellcheck', '~> 0.1.5'
|
40
|
-
end
|
39
|
+
gem 'yardstick', '~> 0.9.7', git: 'https://github.com/dkubb/yardstick.git'
|
41
40
|
|
42
41
|
platforms :ruby_19, :ruby_20 do
|
43
|
-
gem 'mutant', '
|
44
|
-
|
45
|
-
|
46
|
-
platforms :rbx do
|
47
|
-
gem 'pelusa', '~> 0.2.2'
|
42
|
+
gem 'mutant', git: 'https://github.com/mbj/mutant.git'
|
43
|
+
gem 'yard-spellcheck', '~> 0.1.5'
|
48
44
|
end
|
49
45
|
end
|
50
46
|
|
data/ducktrap.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
4
|
gem.name = 'ducktrap'
|
5
|
-
gem.version = '0.0.
|
5
|
+
gem.version = '0.0.2'
|
6
6
|
gem.authors = [ 'Markus Schirp' ]
|
7
7
|
gem.email = [ 'mbj@schir-dso.com' ]
|
8
8
|
gem.description = 'Invertible data filter/mutator on data structures'
|
@@ -14,10 +14,10 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.test_files = `git ls-files -- spec`.split("\n")
|
15
15
|
gem.extra_rdoc_files = %w[TODO]
|
16
16
|
|
17
|
-
gem.add_runtime_dependency('adamantium', '~> 0.0
|
18
|
-
gem.add_runtime_dependency('equalizer', '~> 0.0.
|
19
|
-
gem.add_runtime_dependency('abstract_type', '~> 0.0.
|
20
|
-
gem.add_runtime_dependency('anima', '~> 0.
|
21
|
-
gem.add_runtime_dependency('addressable', '~> 2.3.
|
22
|
-
gem.add_runtime_dependency('concord', '~> 0.1.
|
17
|
+
gem.add_runtime_dependency('adamantium', '~> 0.1.0')
|
18
|
+
gem.add_runtime_dependency('equalizer', '~> 0.0.7')
|
19
|
+
gem.add_runtime_dependency('abstract_type', '~> 0.0.6')
|
20
|
+
gem.add_runtime_dependency('anima', '~> 0.1.1')
|
21
|
+
gem.add_runtime_dependency('addressable', '~> 2.3.5')
|
22
|
+
gem.add_runtime_dependency('concord', '~> 0.1.4')
|
23
23
|
end
|
data/lib/ducktrap.rb
CHANGED
data/lib/ducktrap/nary.rb
CHANGED
data/lib/ducktrap/registry.rb
CHANGED
@@ -14,7 +14,7 @@ module Ducktrap
|
|
14
14
|
#
|
15
15
|
def register(name, ducktrap)
|
16
16
|
if @index.key?(name)
|
17
|
-
raise "name: #{name.inspect} does already exist"
|
17
|
+
raise "name: #{name.inspect} does already exist"
|
18
18
|
end
|
19
19
|
|
20
20
|
@index[name] = ducktrap
|
@@ -32,7 +32,7 @@ module Ducktrap
|
|
32
32
|
# @return [self]
|
33
33
|
# otherwise
|
34
34
|
#
|
35
|
-
# @yield
|
35
|
+
# @yield
|
36
36
|
# if no ducktrap found for name
|
37
37
|
#
|
38
38
|
# @api private
|
@@ -1,13 +1,8 @@
|
|
1
1
|
module LetMockHelper
|
2
|
-
def let_mock(name
|
3
|
-
let(name) do
|
4
|
-
stubs =
|
5
|
-
|
6
|
-
instance_exec(mock,&block)
|
7
|
-
else
|
8
|
-
{}
|
9
|
-
end
|
10
|
-
mock(name.to_s.capitalize,stubs)
|
2
|
+
def let_mock(name, &block)
|
3
|
+
let(name) do
|
4
|
+
stubs = block ? instance_exec(double, &block) : {}
|
5
|
+
double(name.to_s.capitalize, stubs)
|
11
6
|
end
|
12
7
|
end
|
13
8
|
end
|
@@ -2,9 +2,9 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Ducktrap::Evaluator, '#assert_successful' do
|
4
4
|
let(:object) { class_under_test.new(context, input) }
|
5
|
-
|
5
|
+
|
6
6
|
let(:context) { Ducktrap::Node::Noop.instance }
|
7
|
-
let(:input) {
|
7
|
+
let(:input) { double('Input') }
|
8
8
|
|
9
9
|
subject { object.assert_successful }
|
10
10
|
|
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Evaluator::Invalid, '#output' do
|
4
4
|
let(:object) { described_class.new(context, input) }
|
5
5
|
|
6
|
-
let(:context) {
|
7
|
-
let(:input) {
|
6
|
+
let(:context) { double('Context') }
|
7
|
+
let(:input) { double('Input') }
|
8
8
|
|
9
9
|
subject { object.output }
|
10
10
|
|
@@ -5,12 +5,12 @@ describe Ducktrap::Evaluator, '#output' do
|
|
5
5
|
|
6
6
|
subject { object.output }
|
7
7
|
|
8
|
-
let(:context) {
|
9
|
-
let(:input) {
|
8
|
+
let(:context) { double('Context') }
|
9
|
+
let(:input) { double('Input') }
|
10
10
|
|
11
11
|
context 'when using nested error' do
|
12
12
|
|
13
|
-
let(:inner) {
|
13
|
+
let(:inner) { double('Inner') }
|
14
14
|
|
15
15
|
let(:class_under_test) do
|
16
16
|
inner = self.inner
|
@@ -2,9 +2,9 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Ducktrap::Evaluator, '#successful?' do
|
4
4
|
let(:object) { class_under_test.new(context, input) }
|
5
|
-
|
6
|
-
let(:context) {
|
7
|
-
let(:input) {
|
5
|
+
|
6
|
+
let(:context) { double('Context') }
|
7
|
+
let(:input) { double('Input') }
|
8
8
|
|
9
9
|
subject { object.successful? }
|
10
10
|
|
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::FailedTransformationError, '#message' do
|
4
4
|
subject { object.message }
|
5
5
|
|
6
|
-
let(:evaluator) {
|
7
|
-
let(:object)
|
6
|
+
let(:evaluator) { double('Evaluator', :pretty_inspect => 'blah') }
|
7
|
+
let(:object) { described_class.new(evaluator) }
|
8
8
|
|
9
9
|
it { should eql('blah') }
|
10
10
|
end
|
@@ -4,7 +4,7 @@ describe Ducktrap::Formatter, '#nest' do
|
|
4
4
|
subject { object.nest(label, nested) }
|
5
5
|
|
6
6
|
let(:label) { 'the-label' }
|
7
|
-
let(:nested) {
|
7
|
+
let(:nested) { double }
|
8
8
|
|
9
9
|
let(:object) { described_class.new(io) }
|
10
10
|
let(:io) { StringIO.new }
|
@@ -17,7 +17,7 @@ describe Ducktrap::Formatter, '#nest' do
|
|
17
17
|
io.rewind
|
18
18
|
io.read
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
let(:string) { 'the-string' }
|
22
22
|
|
23
23
|
before { subject }
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Ducktrap::Mapper::Builder, '#dumper' do
|
4
|
-
subject do
|
4
|
+
subject do
|
5
5
|
block = self.block
|
6
6
|
described_class.new(Ducktrap::Mapper) do |mapper|
|
7
7
|
mapper.dumper(&block).should be(mapper)
|
@@ -9,10 +9,10 @@ describe Ducktrap::Mapper::Builder, '#dumper' do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
let(:block) { dumper = self.dumper; proc { add(dumper) } }
|
12
|
-
let(:dumper) {
|
13
|
-
let(:loader) {
|
12
|
+
let(:dumper) { double('Dumper', :inverse => loader, :frozen? => true) }
|
13
|
+
let(:loader) { double('Loader') }
|
14
14
|
|
15
|
-
its(:object) do
|
15
|
+
its(:object) do
|
16
16
|
loader = Ducktrap::Node::Block.new([self.loader])
|
17
17
|
dumper = Ducktrap::Node::Block.new([self.dumper])
|
18
18
|
should eql(Ducktrap::Mapper.new(loader, dumper))
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Ducktrap::Mapper::Builder, '#loader' do
|
4
|
-
subject do
|
4
|
+
subject do
|
5
5
|
block = self.block
|
6
6
|
described_class.new(Ducktrap::Mapper) do |mapper|
|
7
7
|
mapper.loader(&block).should be(mapper)
|
@@ -9,10 +9,10 @@ describe Ducktrap::Mapper::Builder, '#loader' do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
let(:block) { loader = self.loader; proc { add(loader) } }
|
12
|
-
let(:loader) {
|
13
|
-
let(:dumper) {
|
12
|
+
let(:loader) { double('Loader', :inverse => dumper, :frozen? => true) }
|
13
|
+
let(:dumper) { double('Dumper') }
|
14
14
|
|
15
|
-
its(:object) do
|
15
|
+
its(:object) do
|
16
16
|
loader = Ducktrap::Node::Block.new([self.loader])
|
17
17
|
dumper = Ducktrap::Node::Block.new([self.dumper])
|
18
18
|
should eql(Ducktrap::Mapper.new(loader, dumper))
|
@@ -7,8 +7,8 @@ describe Ducktrap::Mapper::Builder, '#object' do
|
|
7
7
|
|
8
8
|
subject { object.object }
|
9
9
|
|
10
|
-
let(:loader) {
|
11
|
-
let(:dumper) {
|
10
|
+
let(:loader) { double('Loader', :frozen? => true) }
|
11
|
+
let(:dumper) { double('Dumper', :frozen? => true) }
|
12
12
|
|
13
13
|
context 'with loader' do
|
14
14
|
let(:block) do
|
@@ -24,7 +24,7 @@ describe Ducktrap::Mapper::Builder, '#object' do
|
|
24
24
|
loader.stub(:inverse => dumper)
|
25
25
|
end
|
26
26
|
|
27
|
-
specify do
|
27
|
+
specify do
|
28
28
|
loader = Ducktrap::Node::Block.new([self.loader])
|
29
29
|
dumper = Ducktrap::Node::Block.new([self.dumper])
|
30
30
|
should eql(Ducktrap::Mapper.new(loader, dumper))
|
@@ -45,7 +45,7 @@ describe Ducktrap::Mapper::Builder, '#object' do
|
|
45
45
|
dumper.stub(:inverse => loader)
|
46
46
|
end
|
47
47
|
|
48
|
-
specify do
|
48
|
+
specify do
|
49
49
|
loader = Ducktrap::Node::Block.new([self.loader])
|
50
50
|
dumper = Ducktrap::Node::Block.new([self.dumper])
|
51
51
|
should eql(Ducktrap::Mapper.new(loader, dumper))
|
@@ -72,7 +72,7 @@ describe Ducktrap::Mapper::Builder, '#object' do
|
|
72
72
|
loader.stub(:inverse => dumper)
|
73
73
|
end
|
74
74
|
|
75
|
-
specify do
|
75
|
+
specify do
|
76
76
|
loader = Ducktrap::Node::Block.new([self.loader])
|
77
77
|
dumper = Ducktrap::Node::Block.new([self.dumper])
|
78
78
|
should eql(Ducktrap::Mapper.new(loader, dumper))
|
@@ -3,12 +3,12 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Mapper do
|
4
4
|
|
5
5
|
let(:object) { described_class }
|
6
|
-
|
6
|
+
|
7
7
|
subject { described_class.build(&block) }
|
8
8
|
|
9
9
|
let(:block) { proc {} }
|
10
|
-
let(:builder) {
|
11
|
-
let(:mapper) {
|
10
|
+
let(:builder) { double('Builder', :object => mapper) }
|
11
|
+
let(:mapper) { double('Mapper') }
|
12
12
|
|
13
13
|
it 'should call Ducktrap::Mapper::Builder' do
|
14
14
|
Ducktrap::Mapper::Builder.should_receive(:new).with(described_class) do |&block|
|
@@ -7,7 +7,7 @@ describe Ducktrap::Nary::ClassMethods, '#build' do
|
|
7
7
|
|
8
8
|
let(:block) { proc {} }
|
9
9
|
|
10
|
-
let(:output) {
|
10
|
+
let(:output) { double('Output') }
|
11
11
|
|
12
12
|
it 'should delegate to nary builder' do
|
13
13
|
Ducktrap::Nary::Builder.should_receive(:new) do |first, second, third, &block|
|
@@ -15,7 +15,7 @@ describe Ducktrap::Nary::ClassMethods, '#build' do
|
|
15
15
|
second.should be(:foo)
|
16
16
|
third.should be(:bar)
|
17
17
|
block.should be(self.block)
|
18
|
-
|
18
|
+
double(:object => output)
|
19
19
|
end
|
20
20
|
subject.should be(output)
|
21
21
|
end
|
@@ -8,7 +8,7 @@ describe Ducktrap::Node::Block::Evaluator, '#output' do
|
|
8
8
|
let(:input) { :input }
|
9
9
|
|
10
10
|
def mymock(name, attributes={})
|
11
|
-
|
11
|
+
double(name, attributes.merge(:frozen? => true))
|
12
12
|
end
|
13
13
|
|
14
14
|
context 'without elements in block' do
|
@@ -27,7 +27,7 @@ describe Ducktrap::Node::Block::Evaluator, '#output' do
|
|
27
27
|
let(:trap_b) { Ducktrap::Node::Noop.instance }
|
28
28
|
|
29
29
|
it { should be(input) }
|
30
|
-
|
30
|
+
|
31
31
|
it_should_behave_like 'an idempotent method'
|
32
32
|
end
|
33
33
|
|
@@ -35,7 +35,7 @@ describe Ducktrap::Node::Block::Evaluator, '#output' do
|
|
35
35
|
let(:trap_a) { Ducktrap::Node::Static.new(:forward, :inverse) }
|
36
36
|
let(:trap_b) { Ducktrap::Node::Invalid.instance }
|
37
37
|
|
38
|
-
its(:pretty_inspect) do
|
38
|
+
its(:pretty_inspect) do
|
39
39
|
should eql(strip(<<-STR))
|
40
40
|
Ducktrap::Error
|
41
41
|
input: :input
|
@@ -55,9 +55,9 @@ describe Ducktrap::Node::Block::Evaluator, '#output' do
|
|
55
55
|
|
56
56
|
context 'with early failure' do
|
57
57
|
let(:trap_a) { Ducktrap::Node::Invalid.instance }
|
58
|
-
let(:trap_b) {
|
58
|
+
let(:trap_b) { double('Late Node') }
|
59
59
|
|
60
|
-
its(:pretty_inspect) do
|
60
|
+
its(:pretty_inspect) do
|
61
61
|
should eql(strip(<<-STR))
|
62
62
|
Ducktrap::Error
|
63
63
|
input: :input
|
@@ -7,8 +7,8 @@ describe Ducktrap::Node::Anima::Dump::Evaluator, '#output' do
|
|
7
7
|
include Anima.new(:foo)
|
8
8
|
end
|
9
9
|
end
|
10
|
-
let(:context) {
|
11
|
-
let(:input)
|
10
|
+
let(:context) { double('Context', :model => model) }
|
11
|
+
let(:input) { model.new(:foo => :bar) }
|
12
12
|
|
13
13
|
subject { object.output }
|
14
14
|
|
@@ -7,8 +7,8 @@ describe Ducktrap::Node::Anima::Dump::Evaluator, '#output' do
|
|
7
7
|
include Anima.new(:foo)
|
8
8
|
end
|
9
9
|
end
|
10
|
-
let(:context) {
|
11
|
-
let(:input)
|
10
|
+
let(:context) { double('Context', :model => model) }
|
11
|
+
let(:input) { model.new(:foo => :bar) }
|
12
12
|
|
13
13
|
subject { object.output }
|
14
14
|
|
@@ -8,7 +8,7 @@ describe Ducktrap::Node::Block::Evaluator, '#output' do
|
|
8
8
|
let(:input) { :input }
|
9
9
|
|
10
10
|
def mymock(name, attributes={})
|
11
|
-
|
11
|
+
double(name, attributes.merge(:frozen? => true))
|
12
12
|
end
|
13
13
|
|
14
14
|
context 'without elements in block' do
|
@@ -27,7 +27,7 @@ describe Ducktrap::Node::Block::Evaluator, '#output' do
|
|
27
27
|
let(:trap_b) { Ducktrap::Node::Noop.instance }
|
28
28
|
|
29
29
|
it { should be(input) }
|
30
|
-
|
30
|
+
|
31
31
|
it_should_behave_like 'an idempotent method'
|
32
32
|
end
|
33
33
|
|
@@ -35,7 +35,7 @@ describe Ducktrap::Node::Block::Evaluator, '#output' do
|
|
35
35
|
let(:trap_a) { Ducktrap::Node::Static.new(:forward, :inverse) }
|
36
36
|
let(:trap_b) { Ducktrap::Node::Invalid.instance }
|
37
37
|
|
38
|
-
its(:pretty_inspect) do
|
38
|
+
its(:pretty_inspect) do
|
39
39
|
should eql(strip(<<-STR))
|
40
40
|
Ducktrap::Error
|
41
41
|
input: :input
|
@@ -55,9 +55,9 @@ describe Ducktrap::Node::Block::Evaluator, '#output' do
|
|
55
55
|
|
56
56
|
context 'with early failure' do
|
57
57
|
let(:trap_a) { Ducktrap::Node::Invalid.instance }
|
58
|
-
let(:trap_b) {
|
58
|
+
let(:trap_b) { double('Late Node') }
|
59
59
|
|
60
|
-
its(:pretty_inspect) do
|
60
|
+
its(:pretty_inspect) do
|
61
61
|
should eql(strip(<<-STR))
|
62
62
|
Ducktrap::Error
|
63
63
|
input: :input
|
@@ -1,15 +1,15 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Ducktrap::Node::Custom, '#call' do
|
3
|
+
describe Ducktrap::Node::Custom, '#call' do
|
4
4
|
let(:object) { described_class.new(forward, inverse) }
|
5
5
|
|
6
|
-
let(:input) {
|
7
|
-
let(:output) {
|
6
|
+
let(:input) { double('Input') }
|
7
|
+
let(:output) { double('Output') }
|
8
8
|
|
9
9
|
let(:arguments) { [] }
|
10
10
|
|
11
11
|
let(:forward) { lambda { |input| arguments << input; output } }
|
12
|
-
let(:inverse) {
|
12
|
+
let(:inverse) { double('Inverse') }
|
13
13
|
|
14
14
|
subject { object.call(input) }
|
15
15
|
|
@@ -7,12 +7,12 @@ describe Ducktrap::Node::Custom, '.build' do
|
|
7
7
|
|
8
8
|
let(:block) { proc {} }
|
9
9
|
|
10
|
-
let(:result) {
|
10
|
+
let(:result) { double('Result') }
|
11
11
|
|
12
12
|
it 'should call custom builder and return its object' do
|
13
13
|
Ducktrap::Node::Custom::Builder.should_receive(:new) do |&block|
|
14
14
|
block.should be(self.block)
|
15
|
-
|
15
|
+
double(:object => result)
|
16
16
|
end
|
17
17
|
should be(result)
|
18
18
|
end
|
@@ -3,9 +3,9 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::Forward::Evaluator, '#output' do
|
4
4
|
let(:object) { described_class.new(context, input) }
|
5
5
|
|
6
|
-
let(:context) {
|
6
|
+
let(:context) { double('Context', :operand => operand) }
|
7
7
|
let(:operand) { Ducktrap::Node::Static.new(:forward, :inverse) }
|
8
|
-
let(:input) {
|
8
|
+
let(:input) { double('Input') }
|
9
9
|
|
10
10
|
subject { object.output }
|
11
11
|
|
@@ -3,12 +3,12 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::GuardNil::Evaluator, '#output' do
|
4
4
|
let(:object) { described_class.new(context, input) }
|
5
5
|
|
6
|
-
let(:context) {
|
6
|
+
let(:context) { double('Context', :operand => operand) }
|
7
7
|
|
8
8
|
subject { object.output }
|
9
9
|
|
10
10
|
context 'when input is nil' do
|
11
|
-
let(:operand) {
|
11
|
+
let(:operand) { double('Operand') }
|
12
12
|
let(:input) { nil }
|
13
13
|
|
14
14
|
it { should be(nil) }
|
@@ -18,7 +18,7 @@ describe Ducktrap::Node::GuardNil::Evaluator, '#output' do
|
|
18
18
|
|
19
19
|
context 'when input is not nil' do
|
20
20
|
let(:operand) { Ducktrap::Node::Noop.instance }
|
21
|
-
let(:input) {
|
21
|
+
let(:input) { double('Input', :frozen? => true) }
|
22
22
|
|
23
23
|
it { should be(input) }
|
24
24
|
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::Hash::Transform::Evaluator, '#output' do
|
4
4
|
let(:object) { described_class.new(context, input) }
|
5
5
|
|
6
|
-
let(:context) {
|
6
|
+
let(:context) { double('Context', :body => body) }
|
7
7
|
|
8
8
|
let(:noop) { Ducktrap::Node::Noop.instance }
|
9
9
|
|
@@ -3,9 +3,9 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::Invalid, '#call' do
|
4
4
|
let(:object) { described_class.instance }
|
5
5
|
|
6
|
-
let(:value) {
|
7
|
-
let(:inverse_value) {
|
8
|
-
let(:input) {
|
6
|
+
let(:value) { double('Value') }
|
7
|
+
let(:inverse_value) { double('Inverse Value') }
|
8
|
+
let(:input) { double('Input') }
|
9
9
|
|
10
10
|
subject { object.call(input) }
|
11
11
|
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::Inverse, '#call' do
|
4
4
|
let(:object) { described_class.new(operand) }
|
5
5
|
let(:operand) { Ducktrap::Node::Noop.instance }
|
6
|
-
let(:input) {
|
6
|
+
let(:input) { double('Input', :frozen? => true) }
|
7
7
|
|
8
8
|
subject { object.call(input) }
|
9
9
|
|
@@ -3,12 +3,12 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::Key::Add, '#call' do
|
4
4
|
subject { object.call(input) }
|
5
5
|
|
6
|
-
let(:object)
|
7
|
-
let(:key)
|
8
|
-
let(:operand)
|
9
|
-
let(:operand_evaluator) {
|
10
|
-
let(:operand_output)
|
11
|
-
let(:input)
|
6
|
+
let(:object) { described_class.new(operand, key) }
|
7
|
+
let(:key) { double('Key') }
|
8
|
+
let(:operand) { double('Operand', :call => operand_evaluator) }
|
9
|
+
let(:operand_evaluator) { double('Operand Evaluator', :output => operand_output, :successful? => true, :frozen? => true) }
|
10
|
+
let(:operand_output) { double('Operand Output') }
|
11
|
+
let(:input) { { :foo => :bar }.freeze }
|
12
12
|
|
13
13
|
|
14
14
|
its(:output) { should eql(:foo => :bar, key => operand_output) }
|
@@ -3,12 +3,12 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::Key::Add, '#call' do
|
4
4
|
subject { object.call(input) }
|
5
5
|
|
6
|
-
let(:object)
|
7
|
-
let(:key)
|
8
|
-
let(:operand)
|
9
|
-
let(:operand_evaluator) {
|
10
|
-
let(:operand_output)
|
11
|
-
let(:input)
|
6
|
+
let(:object) { described_class.new(operand, key) }
|
7
|
+
let(:key) { double('Key') }
|
8
|
+
let(:operand) { double('Operand', :call => operand_evaluator) }
|
9
|
+
let(:operand_evaluator) { double('Operand Evaluator', :output => operand_output, :successful? => true, :frozen? => true) }
|
10
|
+
let(:operand_output) { double('Operand Output') }
|
11
|
+
let(:input) { { :foo => :bar }.freeze }
|
12
12
|
|
13
13
|
|
14
14
|
its(:output) { should eql(:foo => :bar, key => operand_output) }
|
@@ -5,8 +5,8 @@ describe Ducktrap::Node::Key::Add, '#inverse' do
|
|
5
5
|
subject { object.inverse }
|
6
6
|
|
7
7
|
let(:object) { described_class.new(inverse, key) }
|
8
|
-
let(:key) {
|
9
|
-
let(:inverse) {
|
8
|
+
let(:key) { double('Key') }
|
9
|
+
let(:inverse) { double('Inverse') }
|
10
10
|
|
11
11
|
it { should eql(Ducktrap::Node::Key::Delete.new(inverse, key)) }
|
12
12
|
|
@@ -4,10 +4,10 @@ describe Ducktrap::Node::Key::Delete, '#call' do
|
|
4
4
|
subject { object.call(input) }
|
5
5
|
|
6
6
|
let(:object) { described_class.new(inverse, key) }
|
7
|
-
let(:key) {
|
7
|
+
let(:key) { double('Key') }
|
8
8
|
|
9
|
-
let(:input) { { key =>
|
10
|
-
let(:inverse) {
|
9
|
+
let(:input) { { key => double('Value') }.freeze }
|
10
|
+
let(:inverse) { double('Inverse') }
|
11
11
|
|
12
12
|
its(:output) { should eql({}) }
|
13
13
|
end
|
@@ -4,10 +4,10 @@ describe Ducktrap::Node::Key::Delete, '#call' do
|
|
4
4
|
subject { object.call(input) }
|
5
5
|
|
6
6
|
let(:object) { described_class.new(inverse, key) }
|
7
|
-
let(:key) {
|
7
|
+
let(:key) { double('Key') }
|
8
8
|
|
9
|
-
let(:input) { { key =>
|
10
|
-
let(:inverse) {
|
9
|
+
let(:input) { { key => double('Value') }.freeze }
|
10
|
+
let(:inverse) { double('Inverse') }
|
11
11
|
|
12
12
|
its(:output) { should eql({}) }
|
13
13
|
end
|
@@ -4,8 +4,8 @@ describe Ducktrap::Node::Key::Delete, '#inverse' do
|
|
4
4
|
subject { object.inverse }
|
5
5
|
|
6
6
|
let(:object) { described_class.new(inverse, key) }
|
7
|
-
let(:key) {
|
8
|
-
let(:inverse) {
|
7
|
+
let(:key) { double('Key') }
|
8
|
+
let(:inverse) { double('Inverse') }
|
9
9
|
|
10
10
|
it { should eql(Ducktrap::Node::Key::Add.new(inverse, key)) }
|
11
11
|
|
@@ -3,14 +3,14 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::Key::Dump::Evaluator, '#output' do
|
4
4
|
|
5
5
|
let(:object) { described_class.new(context, input) }
|
6
|
-
let(:context) {
|
6
|
+
let(:context) { double('Context', :operand => operand, :key => key) }
|
7
7
|
let(:operand) { Ducktrap::Node::Noop.instance }
|
8
8
|
|
9
9
|
subject { object.output }
|
10
10
|
|
11
|
-
let(:key) {
|
12
|
-
let(:value) {
|
13
|
-
|
11
|
+
let(:key) { double('Key', :frozen? => true) }
|
12
|
+
let(:value) { double('Value', :frozen? => true) }
|
13
|
+
|
14
14
|
let(:input) { value }
|
15
15
|
|
16
16
|
context 'when operand does NOT modify value' do
|
@@ -12,10 +12,10 @@ describe Ducktrap::Node::Key::Evaluator, '#output' do
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
let(:key) {
|
16
|
-
let(:value) {
|
15
|
+
let(:key) { double('Key') }
|
16
|
+
let(:value) { double('Value') }
|
17
17
|
|
18
|
-
let(:context) {
|
18
|
+
let(:context) { double('Context', :key => key, :operand => operand) }
|
19
19
|
let(:operand) { Ducktrap::Node::Static.new(:forward, :inverse) }
|
20
20
|
|
21
21
|
let(:input) { { key => value } }
|
@@ -3,13 +3,13 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::Key::Fetch::Evaluator, '#output' do
|
4
4
|
|
5
5
|
let(:object) { described_class.new(context, input) }
|
6
|
-
let(:context) {
|
6
|
+
let(:context) { double('Context', :operand => operand, :key => key) }
|
7
7
|
let(:operand) { Ducktrap::Node::Noop.instance }
|
8
8
|
|
9
9
|
subject { object.output }
|
10
10
|
|
11
|
-
let(:key) {
|
12
|
-
let(:value) {
|
11
|
+
let(:key) { double('Key', :frozen? => true) }
|
12
|
+
let(:value) { double('Value', :frozen? => true) }
|
13
13
|
|
14
14
|
|
15
15
|
context 'when key is present' do
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::Map::Evaluator, '#output' do
|
4
4
|
let(:object) { described_class.new(context, input) }
|
5
5
|
|
6
|
-
let(:context) {
|
6
|
+
let(:context) { double('Context', :operand => operand) }
|
7
7
|
let(:input) { [:foo, :bar ] }
|
8
8
|
|
9
9
|
subject { object.output }
|
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Ducktrap::Node::Primitive, '#inverse' do
|
4
|
-
let(:object)
|
5
|
-
|
6
|
-
let(:primitive) { mock('Primitive') }
|
4
|
+
let(:object) { described_class.new(primitive) }
|
5
|
+
let(:primitive) { double('Primitive') }
|
7
6
|
|
8
7
|
subject { object.inverse }
|
9
8
|
|
@@ -27,8 +27,8 @@ describe Ducktrap::Node, '#run' do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
let(:evaluator) { Evaluator.new(output, successful?) }
|
30
|
-
let(:input) {
|
31
|
-
let(:output) {
|
30
|
+
let(:input) { double('Input') }
|
31
|
+
let(:output) { double('Output') }
|
32
32
|
|
33
33
|
context 'when evaluator is successful' do
|
34
34
|
let(:successful?) { true }
|
@@ -3,9 +3,9 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::Static, '#call' do
|
4
4
|
let(:object) { described_class.new(value, inverse_value) }
|
5
5
|
|
6
|
-
let(:value) {
|
7
|
-
let(:inverse_value) {
|
8
|
-
let(:input) {
|
6
|
+
let(:value) { double('Value') }
|
7
|
+
let(:inverse_value) { double('Inverse Value') }
|
8
|
+
let(:input) { double('Input') }
|
9
9
|
|
10
10
|
subject { object.call(input) }
|
11
11
|
|
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::Static, '#inverse' do
|
4
4
|
let(:object) { described_class.new(value, inverse_value) }
|
5
5
|
|
6
|
-
let(:value) {
|
7
|
-
let(:inverse_value) {
|
6
|
+
let(:value) { double('Value') }
|
7
|
+
let(:inverse_value) { double('Inverse Value') }
|
8
8
|
|
9
9
|
subject { object.inverse }
|
10
10
|
|
@@ -5,8 +5,8 @@ describe Ducktrap::Registry, '#lookup' do
|
|
5
5
|
|
6
6
|
let(:object) { described_class.new }
|
7
7
|
|
8
|
-
let(:name) {
|
9
|
-
let(:node) {
|
8
|
+
let(:name) { double('Name') }
|
9
|
+
let(:node) { double('Node') }
|
10
10
|
|
11
11
|
let(:block) { nil }
|
12
12
|
|
@@ -19,7 +19,7 @@ describe Ducktrap::Registry, '#lookup' do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
context 'when name is NOT registred' do
|
22
|
-
let(:other) {
|
22
|
+
let(:other) { double('Other') }
|
23
23
|
let(:block) { proc { other } }
|
24
24
|
|
25
25
|
it { should be(other) }
|
@@ -4,8 +4,8 @@ describe Ducktrap::Registry, '#register' do
|
|
4
4
|
subject { object.register(name, node) }
|
5
5
|
|
6
6
|
let(:object) { Ducktrap::Registry.new }
|
7
|
-
let(:name) {
|
8
|
-
let(:node) {
|
7
|
+
let(:name) { double('Name') }
|
8
|
+
let(:node) { double('Node') }
|
9
9
|
|
10
10
|
it_should_behave_like 'a command method'
|
11
11
|
|
@@ -3,13 +3,13 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::Key::Fetch::Evaluator, '#output' do
|
4
4
|
|
5
5
|
let(:object) { described_class.new(context, input) }
|
6
|
-
let(:context) {
|
6
|
+
let(:context) { double('Context', :operand => operand, :key => key) }
|
7
7
|
let(:operand) { Ducktrap::Node::Noop.instance }
|
8
8
|
|
9
9
|
subject { object.output }
|
10
10
|
|
11
|
-
let(:key) {
|
12
|
-
let(:value) {
|
11
|
+
let(:key) { double('Key', :frozen? => true) }
|
12
|
+
let(:value) { double('Value', :frozen? => true) }
|
13
13
|
|
14
14
|
|
15
15
|
context 'when key is present' do
|
@@ -3,14 +3,14 @@ require 'spec_helper'
|
|
3
3
|
describe Ducktrap::Node::Key::Dump::Evaluator, '#output' do
|
4
4
|
|
5
5
|
let(:object) { described_class.new(context, input) }
|
6
|
-
let(:context) {
|
6
|
+
let(:context) { double('Context', :operand => operand, :key => key) }
|
7
7
|
let(:operand) { Ducktrap::Node::Noop.instance }
|
8
8
|
|
9
9
|
subject { object.output }
|
10
10
|
|
11
|
-
let(:key) {
|
12
|
-
let(:value) {
|
13
|
-
|
11
|
+
let(:key) { double('Key', :frozen? => true) }
|
12
|
+
let(:value) { double('Value', :frozen? => true) }
|
13
|
+
|
14
14
|
let(:input) { value }
|
15
15
|
|
16
16
|
context 'when operand does NOT modify value' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ducktrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Markus Schirp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: adamantium
|
@@ -16,84 +16,84 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.0
|
19
|
+
version: 0.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.0
|
26
|
+
version: 0.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: equalizer
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.0.
|
33
|
+
version: 0.0.7
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.0.
|
40
|
+
version: 0.0.7
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: abstract_type
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.0.
|
47
|
+
version: 0.0.6
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.0.
|
54
|
+
version: 0.0.6
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: anima
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.1.1
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 0.1.1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: addressable
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 2.3.
|
75
|
+
version: 2.3.5
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 2.3.
|
82
|
+
version: 2.3.5
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: concord
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.1.
|
89
|
+
version: 0.1.4
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.1.
|
96
|
+
version: 0.1.4
|
97
97
|
description: Invertible data filter/mutator on data structures
|
98
98
|
email:
|
99
99
|
- mbj@schir-dso.com
|