yaoc 0.0.13 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +5 -1
- data/Guardfile +5 -0
- data/Rakefile +3 -0
- data/examples/01_hash_enabled_constructors.rb +8 -8
- data/examples/02_procs_as_constructors.rb +11 -13
- data/examples/03_positional_constructors.rb +7 -13
- data/examples/04_compositions.rb +3 -8
- data/examples/05_fill_existing_objects.rb +2 -8
- data/examples/06_lazy_loading.rb +0 -7
- data/examples/all_examples.rb +2 -2
- data/lib/yaoc.rb +2 -3
- data/lib/yaoc/converter_builder.rb +14 -21
- data/lib/yaoc/helper/struct_hash_constructor.rb +3 -4
- data/lib/yaoc/helper/to_proc_delegator.rb +4 -6
- data/lib/yaoc/many_to_one_mapper_chain.rb +11 -13
- data/lib/yaoc/mapper_registry.rb +3 -4
- data/lib/yaoc/mapping_base.rb +11 -12
- data/lib/yaoc/mapping_to_class.rb +7 -9
- data/lib/yaoc/object_mapper.rb +10 -13
- data/lib/yaoc/one_to_many_mapper_chain.rb +4 -6
- data/lib/yaoc/strategies/to_array_mapping.rb +1 -3
- data/lib/yaoc/strategies/to_hash_mapping.rb +1 -3
- data/lib/yaoc/transformation_command.rb +27 -8
- data/lib/yaoc/transformation_deferred_command.rb +3 -5
- data/lib/yaoc/version.rb +1 -1
- data/rubocop-todo.yml +96 -0
- data/spec/acceptance/fill_existing_objects_spec.rb +30 -30
- data/spec/acceptance/map_multiple_objects_to_one_in_a_chain_spec.rb +15 -15
- data/spec/acceptance/map_objects_spec.rb +22 -22
- data/spec/acceptance/map_one_object_to_many_in_a_chain_spec.rb +15 -15
- data/spec/acceptance/map_to_objects_using_other_converters_spec.rb +53 -55
- data/spec/acceptance/map_to_objects_with_lazy_loading_spec.rb +17 -17
- data/spec/acceptance/map_to_objects_with_positional_constructors_spec.rb +19 -19
- data/spec/integration/lib/yaoc/converter_builder_spec.rb +21 -21
- data/spec/spec_helper.rb +7 -7
- data/spec/support/feature.rb +1 -2
- data/spec/unit/lib/yaoc/converter_builder_spec.rb +42 -44
- data/spec/unit/lib/yaoc/helper/struct_hash_constructor_spec.rb +15 -15
- data/spec/unit/lib/yaoc/helper/to_proc_delegator_spec.rb +11 -11
- data/spec/unit/lib/yaoc/many_to_one_mapper_chain_spec.rb +19 -20
- data/spec/unit/lib/yaoc/mapper_registry_spec.rb +6 -6
- data/spec/unit/lib/yaoc/mapping_base_spec.rb +36 -36
- data/spec/unit/lib/yaoc/mapping_to_class_spec.rb +19 -21
- data/spec/unit/lib/yaoc/object_mapper_spec.rb +45 -49
- data/spec/unit/lib/yaoc/one_to_many_mapper_chain_spec.rb +17 -18
- data/spec/unit/lib/yaoc/strategies/to_array_mapping_spec.rb +23 -24
- data/spec/unit/lib/yaoc/strategies/to_hash_mapping_spec.rb +25 -25
- data/spec/unit/lib/yaoc/transformation_command_spec.rb +13 -13
- data/spec/unit/lib/yaoc/transformation_deferred_command_spec.rb +9 -9
- data/yaoc.gemspec +1 -0
- metadata +18 -2
@@ -1,33 +1,32 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Yaoc::ConverterBuilder do
|
4
|
-
subject
|
5
|
-
Yaoc::ConverterBuilder.new
|
4
|
+
subject do
|
5
|
+
Yaoc::ConverterBuilder.new.tap do|converter|
|
6
6
|
converter.stub(:converter_class).and_return(converter_class)
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
end
|
8
|
+
end
|
10
9
|
|
11
|
-
let(:converter_class)
|
12
|
-
double(
|
13
|
-
|
10
|
+
let(:converter_class)do
|
11
|
+
double('converter_class', map: nil, new: converter)
|
12
|
+
end
|
14
13
|
|
15
|
-
let(:converter)
|
16
|
-
double(
|
17
|
-
|
14
|
+
let(:converter)do
|
15
|
+
double('converter', call: nil)
|
16
|
+
end
|
18
17
|
|
19
|
-
let(:default_map_args)
|
18
|
+
let(:default_map_args)do
|
20
19
|
{
|
21
20
|
to: :id,
|
22
21
|
from: :id,
|
23
22
|
converter: nil,
|
24
23
|
lazy_loading: false
|
25
24
|
}
|
26
|
-
|
25
|
+
end
|
27
26
|
|
28
|
-
describe
|
27
|
+
describe '#command_order' do
|
29
28
|
|
30
|
-
it
|
29
|
+
it 'applies command in recorded order as default' do
|
31
30
|
subject.command_order = :recorded_order
|
32
31
|
|
33
32
|
expected_args_first = default_map_args.clone
|
@@ -45,10 +44,10 @@ describe Yaoc::ConverterBuilder do
|
|
45
44
|
|
46
45
|
end
|
47
46
|
|
48
|
-
it
|
47
|
+
it 'applies command in reverse recorded order when wanted' do
|
49
48
|
subject.command_order = :reverse_order
|
50
49
|
|
51
|
-
expected_args_first = default_map_args.clone.merge(
|
50
|
+
expected_args_first = default_map_args.clone.merge(to: :name, from: :name)
|
52
51
|
expected_args_second = default_map_args.clone
|
53
52
|
|
54
53
|
expect(converter_class).to receive(:map).ordered.with(expected_args_first)
|
@@ -62,9 +61,9 @@ describe Yaoc::ConverterBuilder do
|
|
62
61
|
end
|
63
62
|
end
|
64
63
|
|
65
|
-
describe
|
64
|
+
describe '#add_mapping' do
|
66
65
|
|
67
|
-
it
|
66
|
+
it 'delegates to internal methods' do
|
68
67
|
expect(subject).to receive(:rule).with(to: :id, from: :from, converter: :converter)
|
69
68
|
|
70
69
|
subject.add_mapping do
|
@@ -79,8 +78,8 @@ describe Yaoc::ConverterBuilder do
|
|
79
78
|
|
80
79
|
end
|
81
80
|
|
82
|
-
describe
|
83
|
-
it
|
81
|
+
describe '#rule' do
|
82
|
+
it 'creates a converter' do
|
84
83
|
expect(converter_class).to receive(:map).with(to: :id, from: :id2, converter: :some_proc, lazy_loading: false)
|
85
84
|
|
86
85
|
subject.add_mapping do
|
@@ -91,7 +90,7 @@ describe Yaoc::ConverterBuilder do
|
|
91
90
|
|
92
91
|
end
|
93
92
|
|
94
|
-
it
|
93
|
+
it 'uses defaults' do
|
95
94
|
expect(converter_class).to receive(:map).with(default_map_args)
|
96
95
|
|
97
96
|
subject.add_mapping do
|
@@ -100,9 +99,9 @@ describe Yaoc::ConverterBuilder do
|
|
100
99
|
|
101
100
|
end
|
102
101
|
|
103
|
-
it
|
102
|
+
it 'allows to use array of attributes' do
|
104
103
|
expected_args_first = default_map_args.clone
|
105
|
-
expected_args_second = default_map_args.clone.merge(
|
104
|
+
expected_args_second = default_map_args.clone.merge(to: :name, from: :name)
|
106
105
|
|
107
106
|
expect(converter_class).to receive(:map).ordered.with(expected_args_first)
|
108
107
|
expect(converter_class).to receive(:map).ordered.with(expected_args_second)
|
@@ -113,9 +112,8 @@ describe Yaoc::ConverterBuilder do
|
|
113
112
|
end
|
114
113
|
|
115
114
|
it "use the right 'to' when 'from' in arrays is missing" do
|
116
|
-
expected_args_first = default_map_args.clone.merge(
|
117
|
-
expected_args_second = default_map_args.clone.merge(
|
118
|
-
|
115
|
+
expected_args_first = default_map_args.clone.merge(from: :r_id)
|
116
|
+
expected_args_second = default_map_args.clone.merge(to: :name, from: :name)
|
119
117
|
|
120
118
|
expect(converter_class).to receive(:map).ordered.with(expected_args_first)
|
121
119
|
expect(converter_class).to receive(:map).ordered.with(expected_args_second)
|
@@ -126,7 +124,7 @@ describe Yaoc::ConverterBuilder do
|
|
126
124
|
end
|
127
125
|
end
|
128
126
|
|
129
|
-
it
|
127
|
+
it 'supports the use of a object converter' do
|
130
128
|
expect(converter_class).to receive(:map).ordered.with(to: :id, from: :id, converter: kind_of(Proc), lazy_loading: false)
|
131
129
|
other_converter = :some_converter
|
132
130
|
|
@@ -137,8 +135,8 @@ describe Yaoc::ConverterBuilder do
|
|
137
135
|
|
138
136
|
end
|
139
137
|
|
140
|
-
it
|
141
|
-
expected_args = default_map_args.clone.merge(
|
138
|
+
it 'supports the collection flag for object converters' do
|
139
|
+
expected_args = default_map_args.clone.merge(converter: kind_of(Proc))
|
142
140
|
|
143
141
|
expect(converter_class).to receive(:map).ordered.with(expected_args)
|
144
142
|
other_converter = :some_converter
|
@@ -151,8 +149,8 @@ describe Yaoc::ConverterBuilder do
|
|
151
149
|
|
152
150
|
end
|
153
151
|
|
154
|
-
it
|
155
|
-
expected_args = default_map_args.clone.merge(
|
152
|
+
it 'supports lazy loading' do
|
153
|
+
expected_args = default_map_args.clone.merge(lazy_loading: true)
|
156
154
|
|
157
155
|
expect(converter_class).to receive(:map).ordered.with(expected_args)
|
158
156
|
|
@@ -162,8 +160,8 @@ describe Yaoc::ConverterBuilder do
|
|
162
160
|
end
|
163
161
|
end
|
164
162
|
|
165
|
-
it
|
166
|
-
expected_args = default_map_args.clone.merge(
|
163
|
+
it 'supports a do nothing' do
|
164
|
+
expected_args = default_map_args.clone.merge(converter: kind_of(Proc))
|
167
165
|
|
168
166
|
expect(converter_class).to receive(:map).ordered.with(expected_args)
|
169
167
|
|
@@ -174,9 +172,9 @@ describe Yaoc::ConverterBuilder do
|
|
174
172
|
end
|
175
173
|
end
|
176
174
|
|
177
|
-
describe
|
178
|
-
it
|
179
|
-
subject = Yaoc::ConverterBuilder.new
|
175
|
+
describe '#converter' do
|
176
|
+
it 'creates a new converter class with the wanted strategy' do
|
177
|
+
subject = Yaoc::ConverterBuilder.new
|
180
178
|
subject.add_mapping do
|
181
179
|
with_strategy :to_array_mapping
|
182
180
|
end
|
@@ -184,18 +182,18 @@ describe Yaoc::ConverterBuilder do
|
|
184
182
|
expect(subject.send(:converter_class).mapping_strategy).to eq(Yaoc::Strategies::ToArrayMapping)
|
185
183
|
end
|
186
184
|
|
187
|
-
it
|
188
|
-
subject = Yaoc::ConverterBuilder.new
|
185
|
+
it 'raises an exception when not all commands are applied' do
|
186
|
+
subject = Yaoc::ConverterBuilder.new
|
189
187
|
subject.strategy = :to_array_mapping
|
190
188
|
|
191
|
-
expect{subject.converter({})}.to raise_exception
|
189
|
+
expect { subject.converter({}) }.to raise_exception
|
192
190
|
end
|
193
191
|
end
|
194
192
|
|
195
|
-
describe
|
196
|
-
it
|
193
|
+
describe '#noop' do
|
194
|
+
it 'returns the input' do
|
197
195
|
expect(subject.noop.call(:some_thing, :expected_value)).to eq :expected_value
|
198
196
|
end
|
199
197
|
end
|
200
198
|
|
201
|
-
end
|
199
|
+
end
|
@@ -1,33 +1,33 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Yaoc::Helper::StructHashConstructor do
|
4
|
-
subject
|
5
|
-
Yaoc::Helper::StructH(:id, :name).new(id: 1, name:
|
6
|
-
|
4
|
+
subject do
|
5
|
+
Yaoc::Helper::StructH(:id, :name).new(id: 1, name: 'no name')
|
6
|
+
end
|
7
7
|
|
8
|
-
it
|
8
|
+
it 'creates a struct with a hash enabled constructor' do
|
9
9
|
expect(subject.id).to eq 1
|
10
|
-
expect(subject.name).to eq
|
10
|
+
expect(subject.name).to eq 'no name'
|
11
11
|
end
|
12
12
|
|
13
|
-
context
|
14
|
-
subject
|
13
|
+
context 'with equal support' do
|
14
|
+
subject do
|
15
15
|
Yaoc::Helper::StructHE(:id, :name)
|
16
|
-
|
16
|
+
end
|
17
17
|
|
18
|
-
it
|
19
|
-
first = subject.new(id: 1, name:
|
20
|
-
second = subject.new(id: 1, name:
|
18
|
+
it 'returns true when all attributes are equal' do
|
19
|
+
first = subject.new(id: 1, name: 'no name')
|
20
|
+
second = subject.new(id: 1, name: 'no name')
|
21
21
|
|
22
22
|
expect(first).to eq second
|
23
23
|
end
|
24
24
|
|
25
|
-
it
|
26
|
-
first = subject.new(id: 1, name:
|
27
|
-
second = subject.new(id: 1, name:
|
25
|
+
it 'returns false when not all atributes are equal' do
|
26
|
+
first = subject.new(id: 1, name: 'no name')
|
27
|
+
second = subject.new(id: 1, name: 'no name2')
|
28
28
|
|
29
29
|
expect(first).not_to eq second
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
end
|
33
|
+
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Yaoc::Helper::ToProcDelegator do
|
4
|
-
subject
|
4
|
+
subject do
|
5
5
|
Yaoc::Helper::ToProcDelegator.new(lazy_proc)
|
6
|
-
|
6
|
+
end
|
7
7
|
|
8
|
-
let(:lazy_proc)
|
9
|
-
->
|
8
|
+
let(:lazy_proc)do
|
9
|
+
->do
|
10
10
|
[:some_value]
|
11
|
-
|
12
|
-
|
11
|
+
end
|
12
|
+
end
|
13
13
|
|
14
14
|
it 'evaluates a proc not with initialisation' do
|
15
15
|
expect(lazy_proc).not_to receive :call
|
@@ -48,18 +48,18 @@ describe Yaoc::Helper::ToProcDelegator do
|
|
48
48
|
end
|
49
49
|
|
50
50
|
describe '#nil?' do
|
51
|
-
it
|
52
|
-
subject = Yaoc::Helper::ToProcDelegator.new(->{nil})
|
51
|
+
it 'returns true when delegate value is nil' do
|
52
|
+
subject = Yaoc::Helper::ToProcDelegator.new(-> { nil })
|
53
53
|
expect(subject).to be_nil
|
54
54
|
end
|
55
55
|
|
56
|
-
it
|
56
|
+
it 'returns false when delegate value is not nil' do
|
57
57
|
expect(subject).not_to be_nil
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
61
|
describe '#_initialisation_proc_loaded?' do
|
62
|
-
it
|
62
|
+
it 'returns true, when __getobj__ was accessed' do
|
63
63
|
expect(subject._initialisation_proc_loaded?).to be_falsy
|
64
64
|
subject.__getobj__
|
65
65
|
expect(subject._initialisation_proc_loaded?).to be_truthy
|
@@ -83,4 +83,4 @@ describe Yaoc::Helper::ToProcDelegator do
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
-
end
|
86
|
+
end
|
@@ -2,11 +2,11 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Yaoc::ManyToOneMapperChain do
|
4
4
|
|
5
|
-
subject
|
5
|
+
subject do
|
6
6
|
Yaoc::ManyToOneMapperChain.new(first_mapper, second_mapper)
|
7
|
-
|
7
|
+
end
|
8
8
|
|
9
|
-
let(:first_mapper)
|
9
|
+
let(:first_mapper)do
|
10
10
|
Yaoc::ObjectMapper.new(new_user_class, old_user_class).tap do |mapper|
|
11
11
|
mapper.add_mapping do
|
12
12
|
fetcher :public_send
|
@@ -14,9 +14,9 @@ describe Yaoc::ManyToOneMapperChain do
|
|
14
14
|
from: :o_id
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
17
|
+
end
|
18
18
|
|
19
|
-
let(:second_mapper)
|
19
|
+
let(:second_mapper)do
|
20
20
|
Yaoc::ObjectMapper.new(new_user_class, old_user_class).tap do |mapper|
|
21
21
|
mapper.add_mapping do
|
22
22
|
fetcher :public_send
|
@@ -24,34 +24,34 @@ describe Yaoc::ManyToOneMapperChain do
|
|
24
24
|
from: :o_names
|
25
25
|
end
|
26
26
|
end
|
27
|
-
|
27
|
+
end
|
28
28
|
|
29
|
-
let(:new_user_class)
|
29
|
+
let(:new_user_class)do
|
30
30
|
Yaoc::Helper::StructHE(:id, :names)
|
31
|
-
|
31
|
+
end
|
32
32
|
|
33
|
-
let(:old_user_class)
|
33
|
+
let(:old_user_class)do
|
34
34
|
Yaoc::Helper::StructHE(:o_id, :o_names)
|
35
|
-
|
35
|
+
end
|
36
36
|
|
37
|
-
let(:existing_old_user)
|
37
|
+
let(:existing_old_user)do
|
38
38
|
old_user_class.new(
|
39
39
|
o_id: 'existing_user_2',
|
40
40
|
o_names: ['first_name', 'second_name']
|
41
41
|
)
|
42
|
-
|
42
|
+
end
|
43
43
|
|
44
|
-
let(:existing_user)
|
44
|
+
let(:existing_user)do
|
45
45
|
new_user_class.new(
|
46
46
|
id: 'existing_user_2',
|
47
47
|
names: ['first_name', 'second_name']
|
48
48
|
)
|
49
|
-
|
49
|
+
end
|
50
50
|
|
51
51
|
describe '.new' do
|
52
|
-
subject
|
52
|
+
subject do
|
53
53
|
Yaoc::ManyToOneMapperChain
|
54
|
-
|
54
|
+
end
|
55
55
|
|
56
56
|
it 'converts symbols into converter' do
|
57
57
|
registry = double('registry')
|
@@ -101,14 +101,14 @@ describe Yaoc::ManyToOneMapperChain do
|
|
101
101
|
converted_user = subject.load_next(existing_old_user)
|
102
102
|
|
103
103
|
expect(converted_user.id).to eq 'existing_user_2'
|
104
|
-
expect(converted_user.names).to eq [
|
104
|
+
expect(converted_user.names).to eq ['first_name', 'second_name']
|
105
105
|
end
|
106
106
|
|
107
107
|
it 'raises an exception when too many values are passed' do
|
108
108
|
subject.load_first(existing_old_user)
|
109
109
|
subject.load_next(existing_old_user)
|
110
110
|
|
111
|
-
expect{subject.load_next(existing_old_user)}.to raise_error
|
111
|
+
expect { subject.load_next(existing_old_user) }.to raise_error 'ToManyInputObjects'
|
112
112
|
end
|
113
113
|
|
114
114
|
end
|
@@ -132,7 +132,6 @@ describe Yaoc::ManyToOneMapperChain do
|
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
135
|
-
|
136
135
|
describe '#dump_first' do
|
137
136
|
it 'dumps the first object into the result object' do
|
138
137
|
converted_user = subject.dump_first(existing_user)
|
@@ -151,4 +150,4 @@ describe Yaoc::ManyToOneMapperChain do
|
|
151
150
|
expect(converted_user.o_names).to eq ['first_name', 'second_name']
|
152
151
|
end
|
153
152
|
end
|
154
|
-
end
|
153
|
+
end
|
@@ -1,19 +1,19 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Yaoc::MapperRegistry do
|
4
|
-
subject
|
4
|
+
subject do
|
5
5
|
Yaoc::MapperRegistry
|
6
|
-
|
6
|
+
end
|
7
7
|
|
8
8
|
describe '.add' do
|
9
|
-
it
|
9
|
+
it 'registers an object' do
|
10
10
|
subject.add(:my_key, Object)
|
11
11
|
expect(subject.for(:my_key)).to eq Object
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
describe '.for' do
|
16
|
-
it
|
16
|
+
it 'returns the registered object' do
|
17
17
|
subject.add(:my_key, Object)
|
18
18
|
expect(subject.for(:my_key)).to eq Object
|
19
19
|
end
|
@@ -21,9 +21,9 @@ describe Yaoc::MapperRegistry do
|
|
21
21
|
|
22
22
|
describe '.scope_storage' do
|
23
23
|
it 'supports the change of scope storage' do
|
24
|
-
expect {subject.scope_storage(ScopedStorage::ThreadLocalStorage)}.not_to raise_error
|
24
|
+
expect { subject.scope_storage(ScopedStorage::ThreadLocalStorage) }.not_to raise_error
|
25
25
|
end
|
26
26
|
|
27
27
|
end
|
28
28
|
|
29
|
-
end
|
29
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Yaoc::MappingBase do
|
4
|
-
subject
|
4
|
+
subject do
|
5
5
|
Struct.new(:to_convert) do
|
6
6
|
include Yaoc::MappingBase
|
7
7
|
|
@@ -13,84 +13,84 @@ describe Yaoc::MappingBase do
|
|
13
13
|
}
|
14
14
|
|
15
15
|
end
|
16
|
-
|
16
|
+
end
|
17
17
|
|
18
|
-
describe
|
19
|
-
it
|
18
|
+
describe 'created module' do
|
19
|
+
it 'can be inspected' do
|
20
20
|
subject.map(to: :foo, from: :bar)
|
21
|
-
expect(subject.class_private_module.inspect).to include(
|
21
|
+
expect(subject.class_private_module.inspect).to include('map_0000_bar_to_foo')
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
describe
|
25
|
+
describe '.map' do
|
26
26
|
|
27
|
-
it
|
27
|
+
it 'creates a bunch of mapping methods' do
|
28
28
|
subject.map(to: :foo, from: :bar)
|
29
29
|
subject.map(to: :bar, from: :foo)
|
30
30
|
|
31
|
-
expect(subject.new(
|
32
|
-
|
31
|
+
expect(subject.new(bar: :my_to_convert, foo: :my_result).call).to eq [{ foo: :my_to_convert, bar: :my_result },
|
32
|
+
{ foo: :my_to_convert, bar: :my_result }]
|
33
33
|
end
|
34
34
|
|
35
|
-
it
|
36
|
-
expect(Yaoc::TransformationCommand).to receive(:create).with(to: :bar, from: :foo, deferred: false, conversion_proc: kind_of(Proc)).and_return(->(*){})
|
37
|
-
subject.map(to: :bar, from: :foo, converter: ->(*){})
|
35
|
+
it 'delegates to TransformationCommand.create' do
|
36
|
+
expect(Yaoc::TransformationCommand).to receive(:create).with(to: :bar, from: :foo, deferred: false, conversion_proc: kind_of(Proc)).and_return(->(*) {})
|
37
|
+
subject.map(to: :bar, from: :foo, converter: ->(*) {})
|
38
38
|
end
|
39
39
|
|
40
40
|
end
|
41
41
|
|
42
|
-
describe
|
43
|
-
it
|
44
|
-
subject.map(to: 0, from: 1, converter: ->(*){})
|
45
|
-
subject.map(to: 1, from: :a, converter: ->(*){})
|
42
|
+
describe '#converter_methods' do
|
43
|
+
it 'preserves method order' do
|
44
|
+
subject.map(to: 0, from: 1, converter: ->(*) {})
|
45
|
+
subject.map(to: 1, from: :a, converter: ->(*) {})
|
46
46
|
|
47
47
|
expect(subject.converter_methods).to eq [:map_0000_1_to_0, :map_0001_a_to_1]
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
describe
|
52
|
-
let(:subject_with_fetcher)
|
51
|
+
describe '#fetcher' do
|
52
|
+
let(:subject_with_fetcher)do
|
53
53
|
Struct.new(:to_convert) do
|
54
54
|
include Yaoc::MappingBase
|
55
55
|
|
56
56
|
def fetcher
|
57
|
-
|
57
|
+
'my_fetcher'
|
58
58
|
end
|
59
59
|
|
60
60
|
end
|
61
|
-
|
61
|
+
end
|
62
62
|
|
63
|
-
it
|
64
|
-
expect(subject_with_fetcher.new
|
63
|
+
it 'uses in class declared fetcher' do
|
64
|
+
expect(subject_with_fetcher.new.fetcher).to eq 'my_fetcher'
|
65
65
|
end
|
66
66
|
|
67
|
-
it
|
68
|
-
expect(subject.new
|
67
|
+
it 'uses build in fetcher without a fetcher definition' do
|
68
|
+
expect(subject.new.fetcher).to eq :fetch
|
69
69
|
end
|
70
70
|
|
71
71
|
end
|
72
72
|
|
73
|
-
describe
|
74
|
-
let(:mapper)
|
73
|
+
describe '#call' do
|
74
|
+
let(:mapper)do
|
75
75
|
subject.new(:some_thing)
|
76
|
-
|
76
|
+
end
|
77
77
|
|
78
|
-
it
|
78
|
+
it 'delegates execution to strategy' do
|
79
79
|
expect(subject.mapping_strategy).to receive(:call).with mapper
|
80
80
|
|
81
81
|
mapper.call
|
82
82
|
end
|
83
83
|
|
84
|
-
it
|
84
|
+
it 'return nil when to_convert is nil' do
|
85
85
|
mapper.to_convert = nil
|
86
86
|
expect(mapper.call).to be_nil
|
87
87
|
end
|
88
88
|
|
89
89
|
end
|
90
90
|
|
91
|
-
describe
|
92
|
-
it
|
93
|
-
mapper = subject.new
|
91
|
+
describe '#to_proc' do
|
92
|
+
it 'creates a wrapper around call' do
|
93
|
+
mapper = subject.new
|
94
94
|
mapper_as_proc = mapper.to_proc
|
95
95
|
expect(mapper).to receive :call
|
96
96
|
|
@@ -112,14 +112,14 @@ describe Yaoc::MappingBase do
|
|
112
112
|
mapper_as_proc = mapper.to_proc
|
113
113
|
|
114
114
|
mapper.stub(:call) do
|
115
|
-
|
115
|
+
fail 'MyException'
|
116
116
|
end
|
117
117
|
|
118
118
|
expect(mapper).to receive(:to_convert=).ordered.with(:some_thing)
|
119
119
|
expect(mapper).to receive(:to_convert=).ordered.with(:old_some_thing)
|
120
120
|
|
121
|
-
expect{mapper_as_proc.call(:some_thing)}.to raise_error
|
121
|
+
expect { mapper_as_proc.call(:some_thing) }.to raise_error 'MyException'
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
|
-
end
|
125
|
+
end
|