rom 0.9.1 → 1.0.0.beta1
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/.rubocop_todo.yml +30 -12
- data/.travis.yml +1 -1
- data/CHANGELOG.md +24 -0
- data/Gemfile +7 -3
- data/README.md +24 -11
- data/lib/rom.rb +9 -26
- data/lib/rom/command.rb +113 -75
- data/lib/rom/commands/class_interface.rb +115 -0
- data/lib/rom/commands/graph.rb +17 -23
- data/lib/rom/commands/graph/builder.rb +176 -0
- data/lib/rom/commands/graph/class_interface.rb +8 -2
- data/lib/rom/commands/graph/input_evaluator.rb +13 -9
- data/lib/rom/commands/lazy.rb +23 -17
- data/lib/rom/commands/lazy/create.rb +23 -0
- data/lib/rom/commands/lazy/delete.rb +27 -0
- data/lib/rom/commands/lazy/update.rb +34 -0
- data/lib/rom/commands/result.rb +14 -0
- data/lib/rom/commands/update.rb +0 -4
- data/lib/rom/configuration.rb +86 -0
- data/lib/rom/{setup_dsl/setup.rb → configuration_dsl.rb} +9 -7
- data/lib/rom/configuration_dsl/command.rb +43 -0
- data/lib/rom/{setup_dsl → configuration_dsl}/command_dsl.rb +5 -4
- data/lib/rom/configuration_dsl/mapper.rb +37 -0
- data/lib/rom/{setup_dsl → configuration_dsl}/mapper_dsl.rb +11 -5
- data/lib/rom/configuration_dsl/relation.rb +26 -0
- data/lib/rom/configuration_plugin.rb +17 -0
- data/lib/rom/constants.rb +5 -12
- data/lib/rom/container.rb +11 -8
- data/lib/rom/create_container.rb +61 -0
- data/lib/rom/environment.rb +27 -241
- data/lib/rom/gateway.rb +18 -2
- data/lib/rom/global.rb +24 -0
- data/lib/rom/global/plugin_dsl.rb +2 -0
- data/lib/rom/lint/spec.rb +0 -12
- data/lib/rom/lint/test.rb +0 -31
- data/lib/rom/memory/commands.rb +2 -2
- data/lib/rom/memory/gateway.rb +2 -0
- data/lib/rom/pipeline.rb +1 -1
- data/lib/rom/plugin_base.rb +1 -1
- data/lib/rom/plugin_registry.rb +12 -10
- data/lib/rom/plugins/configuration/configuration_dsl.rb +16 -0
- data/lib/rom/plugins/relation/key_inference.rb +31 -0
- data/lib/rom/plugins/relation/view.rb +90 -0
- data/lib/rom/plugins/relation/view/dsl.rb +32 -0
- data/lib/rom/relation.rb +1 -11
- data/lib/rom/relation/class_interface.rb +37 -50
- data/lib/rom/setup.rb +13 -104
- data/lib/rom/setup/auto_registration.rb +55 -0
- data/lib/rom/setup/finalize.rb +113 -127
- data/lib/rom/setup/finalize/commands.rb +67 -0
- data/lib/rom/setup/finalize/mappers.rb +36 -0
- data/lib/rom/setup/finalize/relations.rb +53 -0
- data/lib/rom/support/configurable.rb +21 -7
- data/lib/rom/version.rb +1 -1
- data/rakelib/mutant.rake +4 -1
- data/rom.gemspec +3 -4
- data/spec/fixtures/app/commands/create_user.rb +2 -0
- data/spec/fixtures/app/mappers/user_list.rb +2 -0
- data/spec/fixtures/app/relations/users.rb +2 -0
- data/spec/fixtures/lib/persistence/commands/create_user.rb +6 -0
- data/spec/fixtures/lib/persistence/mappers/user_list.rb +6 -0
- data/spec/fixtures/lib/persistence/relations/users.rb +6 -0
- data/spec/{unit/rom → integration}/command_registry_spec.rb +8 -9
- data/spec/integration/commands/create_spec.rb +17 -13
- data/spec/integration/commands/delete_spec.rb +12 -11
- data/spec/integration/commands/error_handling_spec.rb +5 -4
- data/spec/integration/commands/graph_builder_spec.rb +213 -0
- data/spec/integration/commands/graph_spec.rb +112 -49
- data/spec/integration/commands/update_spec.rb +14 -11
- data/spec/integration/commands_spec.rb +60 -0
- data/spec/integration/mappers/combine_spec.rb +7 -6
- data/spec/integration/mappers/deep_embedded_spec.rb +5 -6
- data/spec/integration/mappers/definition_dsl_spec.rb +19 -18
- data/spec/integration/mappers/embedded_spec.rb +11 -12
- data/spec/integration/mappers/exclude_spec.rb +5 -6
- data/spec/integration/mappers/fold_spec.rb +8 -7
- data/spec/integration/mappers/group_spec.rb +16 -15
- data/spec/integration/mappers/overwrite_attributes_value_spec.rb +5 -5
- data/spec/integration/mappers/prefix_separator_spec.rb +5 -7
- data/spec/integration/mappers/prefix_spec.rb +5 -7
- data/spec/integration/mappers/prefixing_attributes_spec.rb +7 -7
- data/spec/integration/mappers/registering_custom_mappers_spec.rb +4 -5
- data/spec/integration/mappers/renaming_attributes_spec.rb +18 -18
- data/spec/integration/mappers/step_spec.rb +11 -12
- data/spec/integration/mappers/symbolizing_attributes_spec.rb +11 -8
- data/spec/integration/mappers/unfold_spec.rb +9 -10
- data/spec/integration/mappers/ungroup_spec.rb +10 -11
- data/spec/integration/mappers/unwrap_spec.rb +10 -15
- data/spec/integration/mappers/wrap_spec.rb +16 -15
- data/spec/{unit/rom → integration}/memory/commands/create_spec.rb +7 -5
- data/spec/{unit/rom → integration}/memory/commands/delete_spec.rb +7 -5
- data/spec/{unit/rom → integration}/memory/commands/update_spec.rb +7 -5
- data/spec/integration/multi_env_spec.rb +16 -124
- data/spec/integration/multi_repo_spec.rb +9 -9
- data/spec/integration/relations/default_dataset_spec.rb +15 -0
- data/spec/integration/relations/inheritance_spec.rb +5 -7
- data/spec/integration/relations/reading_spec.rb +32 -65
- data/spec/integration/relations/registry_dsl_spec.rb +5 -4
- data/spec/integration/repositories/extending_relations_spec.rb +6 -7
- data/spec/integration/repositories/setting_logger_spec.rb +5 -7
- data/spec/integration/setup_spec.rb +49 -61
- data/spec/shared/command_graph.rb +50 -0
- data/spec/shared/container.rb +9 -0
- data/spec/shared/gateway_only.rb +6 -0
- data/spec/shared/no_container.rb +16 -0
- data/spec/shared/one_behavior.rb +4 -4
- data/spec/shared/users_and_tasks.rb +5 -17
- data/spec/spec_helper.rb +5 -3
- data/spec/test/memory_repository_lint_test.rb +1 -1
- data/spec/unit/rom/auto_registration_spec.rb +54 -0
- data/spec/unit/rom/commands/graph_spec.rb +18 -44
- data/spec/unit/rom/commands/lazy_spec.rb +246 -35
- data/spec/unit/rom/commands/result_spec.rb +56 -0
- data/spec/unit/rom/commands_spec.rb +9 -73
- data/spec/unit/rom/configurable_spec.rb +49 -0
- data/spec/unit/rom/configuration_spec.rb +61 -0
- data/spec/unit/rom/container_spec.rb +39 -33
- data/spec/unit/rom/create_container_spec.rb +151 -0
- data/spec/unit/rom/environment_spec.rb +123 -0
- data/spec/unit/rom/gateway_spec.rb +58 -2
- data/spec/unit/rom/global_spec.rb +10 -7
- data/spec/unit/rom/plugin_spec.rb +44 -25
- data/spec/unit/rom/plugins/relation/key_inference_spec.rb +27 -0
- data/spec/unit/rom/plugins/relation/view_spec.rb +47 -0
- data/spec/unit/rom/relation/composite_spec.rb +20 -20
- data/spec/unit/rom/relation/curried_spec.rb +10 -11
- data/spec/unit/rom/relation/graph_spec.rb +27 -27
- data/spec/unit/rom/relation/lazy/combine_spec.rb +26 -20
- data/spec/unit/rom/relation/lazy_spec.rb +38 -38
- data/spec/unit/rom/relation/loaded_spec.rb +2 -3
- data/spec/unit/rom/relation_spec.rb +39 -2
- metadata +58 -66
- data/lib/rom/commands/abstract.rb +0 -184
- data/lib/rom/environment_plugin.rb +0 -17
- data/lib/rom/environment_plugins/auto_registration.rb +0 -38
- data/lib/rom/repository.rb +0 -16
- data/lib/rom/setup_dsl/command.rb +0 -36
- data/lib/rom/setup_dsl/mapper.rb +0 -32
- data/lib/rom/setup_dsl/relation.rb +0 -30
- data/spec/integration/inline_setup_spec.rb +0 -65
- data/spec/unit/rom/repository_spec.rb +0 -12
- data/spec/unit/rom/setup_spec.rb +0 -253
@@ -1,32 +1,33 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Mapper definition DSL' do
|
4
|
+
include_context 'container'
|
4
5
|
include_context 'users and tasks'
|
5
6
|
|
6
7
|
let(:header) { mapper.header }
|
7
8
|
|
8
9
|
describe 'folded relation mapper' do
|
9
10
|
before do
|
10
|
-
|
11
|
+
configuration.relation(:tasks) do
|
11
12
|
def with_users
|
12
13
|
join(users)
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
|
+
configuration.relation(:users) do
|
17
18
|
def with_tasks
|
18
19
|
join(tasks)
|
19
20
|
end
|
20
21
|
end
|
21
22
|
end
|
22
23
|
|
23
|
-
let(:
|
24
|
+
let(:container) { ROM.container(configuration) }
|
24
25
|
let(:actual) do
|
25
|
-
|
26
|
+
container.relation(:users).with_tasks.map_with(:users).to_a
|
26
27
|
end
|
27
28
|
|
28
29
|
it 'groups all attributes and folds the first key' do
|
29
|
-
|
30
|
+
configuration.mappers do
|
30
31
|
define(:users) do
|
31
32
|
fold tasks: [:title, :priority]
|
32
33
|
end
|
@@ -39,7 +40,7 @@ describe 'Mapper definition DSL' do
|
|
39
40
|
end
|
40
41
|
|
41
42
|
it 'is sensitive to the order of keys' do
|
42
|
-
|
43
|
+
configuration.mappers do
|
43
44
|
define(:users) do
|
44
45
|
fold priorities: [:priority, :title]
|
45
46
|
end
|
@@ -52,7 +53,7 @@ describe 'Mapper definition DSL' do
|
|
52
53
|
end
|
53
54
|
|
54
55
|
it 'accepts the block syntax' do
|
55
|
-
|
56
|
+
configuration.mappers do
|
56
57
|
define(:users) do
|
57
58
|
fold :priorities do
|
58
59
|
attribute :priority
|
@@ -1,25 +1,26 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Mapper definition DSL' do
|
4
|
+
include_context 'container'
|
4
5
|
include_context 'users and tasks'
|
5
6
|
|
6
7
|
let(:header) { mapper.header }
|
7
8
|
|
8
9
|
describe 'grouped relation mapper' do
|
9
10
|
before do
|
10
|
-
|
11
|
+
configuration.relation(:tasks) do
|
11
12
|
def with_users
|
12
13
|
join(users)
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
|
+
configuration.relation(:users) do
|
17
18
|
def with_tasks
|
18
19
|
join(tasks)
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
22
|
-
|
23
|
+
configuration.mappers do
|
23
24
|
define(:users) do
|
24
25
|
model name: 'Test::User'
|
25
26
|
|
@@ -30,7 +31,7 @@ describe 'Mapper definition DSL' do
|
|
30
31
|
end
|
31
32
|
|
32
33
|
it 'allows defining grouped attributes via options hash' do
|
33
|
-
|
34
|
+
configuration.mappers do
|
34
35
|
define(:with_tasks, parent: :users) do
|
35
36
|
model name: 'Test::UserWithTasks'
|
36
37
|
|
@@ -41,11 +42,11 @@ describe 'Mapper definition DSL' do
|
|
41
42
|
end
|
42
43
|
end
|
43
44
|
|
44
|
-
|
45
|
+
container
|
45
46
|
|
46
47
|
Test::UserWithTasks.send(:include, Equalizer.new(:name, :email, :tasks))
|
47
48
|
|
48
|
-
jane =
|
49
|
+
jane = container.relation(:users).with_tasks.map_with(:with_tasks).to_a.last
|
49
50
|
|
50
51
|
expect(jane).to eql(
|
51
52
|
Test::UserWithTasks.new(
|
@@ -57,7 +58,7 @@ describe 'Mapper definition DSL' do
|
|
57
58
|
end
|
58
59
|
|
59
60
|
it 'allows defining grouped attributes via block' do
|
60
|
-
|
61
|
+
configuration.mappers do
|
61
62
|
define(:with_tasks, parent: :users) do
|
62
63
|
model name: 'Test::UserWithTasks'
|
63
64
|
|
@@ -71,11 +72,11 @@ describe 'Mapper definition DSL' do
|
|
71
72
|
end
|
72
73
|
end
|
73
74
|
|
74
|
-
|
75
|
+
container
|
75
76
|
|
76
77
|
Test::UserWithTasks.send(:include, Equalizer.new(:name, :email, :tasks))
|
77
78
|
|
78
|
-
jane =
|
79
|
+
jane = container.relation(:users).with_tasks.map_with(:with_tasks).to_a.last
|
79
80
|
|
80
81
|
expect(jane).to eql(
|
81
82
|
Test::UserWithTasks.new(
|
@@ -87,7 +88,7 @@ describe 'Mapper definition DSL' do
|
|
87
88
|
end
|
88
89
|
|
89
90
|
it 'allows defining grouped attributes mapped to a model via block' do
|
90
|
-
|
91
|
+
configuration.mappers do
|
91
92
|
define(:with_tasks, parent: :users) do
|
92
93
|
model name: 'Test::UserWithTasks'
|
93
94
|
|
@@ -103,12 +104,12 @@ describe 'Mapper definition DSL' do
|
|
103
104
|
end
|
104
105
|
end
|
105
106
|
|
106
|
-
|
107
|
+
container
|
107
108
|
|
108
109
|
Test::UserWithTasks.send(:include, Equalizer.new(:name, :email, :tasks))
|
109
110
|
Test::Task.send(:include, Equalizer.new(:title, :priority))
|
110
111
|
|
111
|
-
jane =
|
112
|
+
jane = container.relation(:users).with_tasks.map_with(:with_tasks).to_a.last
|
112
113
|
|
113
114
|
expect(jane).to eql(
|
114
115
|
Test::UserWithTasks.new(
|
@@ -120,7 +121,7 @@ describe 'Mapper definition DSL' do
|
|
120
121
|
end
|
121
122
|
|
122
123
|
it 'allows defining nested grouped attributes mapped to a model via block' do
|
123
|
-
|
124
|
+
configuration.mappers do
|
124
125
|
define(:tasks)
|
125
126
|
|
126
127
|
define(:with_users, parent: :tasks, inherit_header: false) do
|
@@ -142,13 +143,13 @@ describe 'Mapper definition DSL' do
|
|
142
143
|
end
|
143
144
|
end
|
144
145
|
|
145
|
-
|
146
|
+
container
|
146
147
|
|
147
148
|
Test::TaskWithUsers.send(:include, Equalizer.new(:title, :priority, :users))
|
148
149
|
Test::TaskUser.send(:include, Equalizer.new(:name, :contacts))
|
149
150
|
Test::Contact.send(:include, Equalizer.new(:email))
|
150
151
|
|
151
|
-
task =
|
152
|
+
task = container.relation(:tasks).with_users.map_with(:with_users).first
|
152
153
|
|
153
154
|
expect(task).to eql(
|
154
155
|
Test::TaskWithUsers.new(title: 'be nice', priority: 1, users: [
|
@@ -2,10 +2,10 @@ require 'spec_helper'
|
|
2
2
|
require 'rom/memory'
|
3
3
|
|
4
4
|
describe 'Mappers / Attributes value' do
|
5
|
-
|
5
|
+
include_context 'container'
|
6
6
|
|
7
7
|
before do
|
8
|
-
|
8
|
+
configuration.relation(:users)
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'allows to manipulate attribute value' do
|
@@ -24,15 +24,15 @@ describe 'Mappers / Attributes value' do
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
|
27
|
+
configuration.register_mapper(Test::UserMapper)
|
28
28
|
|
29
|
-
|
29
|
+
container.relations.users << {
|
30
30
|
id: 123,
|
31
31
|
first_name: 'Jane',
|
32
32
|
weight: 75
|
33
33
|
}
|
34
34
|
|
35
|
-
jane =
|
35
|
+
jane = container.relation(:users).as(:users).first
|
36
36
|
|
37
37
|
expect(jane).to eql(id: 123, name: 'John', weight: 90, age: 18)
|
38
38
|
end
|
@@ -2,13 +2,12 @@ require 'spec_helper'
|
|
2
2
|
require 'rom/memory'
|
3
3
|
|
4
4
|
describe 'Mapper definition DSL' do
|
5
|
-
|
6
|
-
let(:rom) { ROM.finalize.env }
|
5
|
+
include_context 'container'
|
7
6
|
|
8
7
|
before do
|
9
|
-
|
8
|
+
configuration.relation(:users)
|
10
9
|
|
11
|
-
users =
|
10
|
+
users = configuration.default.dataset(:users)
|
12
11
|
users.insert(
|
13
12
|
user_id: 1,
|
14
13
|
user_name: 'Joe',
|
@@ -19,12 +18,11 @@ describe 'Mapper definition DSL' do
|
|
19
18
|
end
|
20
19
|
|
21
20
|
describe 'prefix' do
|
22
|
-
subject(:mapped_users) {
|
21
|
+
subject(:mapped_users) { container.relation(:users).as(:users).to_a }
|
23
22
|
|
24
23
|
it 'applies new separator to the attributes following it' do
|
25
|
-
|
24
|
+
configuration.mappers do
|
26
25
|
define(:users) do
|
27
|
-
|
28
26
|
prefix :user
|
29
27
|
attribute :id
|
30
28
|
attribute :name
|
@@ -2,13 +2,12 @@ require 'spec_helper'
|
|
2
2
|
require 'rom/memory'
|
3
3
|
|
4
4
|
describe 'Mapper definition DSL' do
|
5
|
-
|
6
|
-
let(:rom) { ROM.finalize.env }
|
5
|
+
include_context 'container'
|
7
6
|
|
8
7
|
before do
|
9
|
-
|
8
|
+
configuration.relation(:users)
|
10
9
|
|
11
|
-
users =
|
10
|
+
users = configuration.default.dataset(:users)
|
12
11
|
users.insert(
|
13
12
|
user_id: 1,
|
14
13
|
user_name: 'Joe',
|
@@ -19,12 +18,11 @@ describe 'Mapper definition DSL' do
|
|
19
18
|
end
|
20
19
|
|
21
20
|
describe 'prefix' do
|
22
|
-
subject(:mapped_users) {
|
21
|
+
subject(:mapped_users) { container.relation(:users).as(:users).to_a }
|
23
22
|
|
24
23
|
it 'applies new prefix to the attributes following it' do
|
25
|
-
|
24
|
+
configuration.mappers do
|
26
25
|
define(:users) do
|
27
|
-
|
28
26
|
prefix :user
|
29
27
|
attribute :id
|
30
28
|
attribute :name
|
@@ -2,10 +2,10 @@ require 'spec_helper'
|
|
2
2
|
require 'rom/memory'
|
3
3
|
|
4
4
|
describe 'Mappers / Prefixing attributes' do
|
5
|
-
|
5
|
+
include_context 'container'
|
6
6
|
|
7
7
|
before do
|
8
|
-
|
8
|
+
configuration.relation(:users)
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'automatically maps all attributes using the provided prefix' do
|
@@ -20,17 +20,17 @@ describe 'Mappers / Prefixing attributes' do
|
|
20
20
|
attribute :email
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
configuration.register_mapper(Test::UserMapper)
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
rom.relations.users << {
|
25
|
+
container.relations.users << {
|
28
26
|
user_id: 123,
|
29
27
|
user_name: 'Jane',
|
30
28
|
user_email: 'jane@doe.org'
|
31
29
|
}
|
32
30
|
|
33
|
-
|
31
|
+
Test::User.send(:include, Equalizer.new(:id, :name, :email))
|
32
|
+
|
33
|
+
jane = container.relation(:users).as(:users).first
|
34
34
|
|
35
35
|
expect(jane).to eql(Test::User.new(id: 123, name: 'Jane', email: 'jane@doe.org'))
|
36
36
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Registering Custom Mappers' do
|
4
|
+
include_context 'container'
|
4
5
|
include_context 'users and tasks'
|
5
6
|
|
6
7
|
it 'allows registering arbitrary objects as mappers' do
|
@@ -10,19 +11,17 @@ describe 'Registering Custom Mappers' do
|
|
10
11
|
users.map { |tuple| model.new(*tuple.values_at(:name, :email)) }
|
11
12
|
}
|
12
13
|
|
13
|
-
|
14
|
+
configuration.relation(:users) do
|
14
15
|
def by_name(name)
|
15
16
|
restrict(name: name)
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
19
|
-
|
20
|
+
configuration.mappers do
|
20
21
|
register(:users, entity: mapper)
|
21
22
|
end
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
users = rom.relation(:users).by_name('Jane').as(:entity)
|
24
|
+
users = container.relation(:users).by_name('Jane').as(:entity)
|
26
25
|
|
27
26
|
expect(users).to match_array([model.new('Jane', 'jane@doe.org')])
|
28
27
|
end
|
@@ -2,12 +2,12 @@ require 'spec_helper'
|
|
2
2
|
require 'rom/memory'
|
3
3
|
|
4
4
|
describe 'Mappers / Renaming attributes' do
|
5
|
-
|
5
|
+
include_context 'container'
|
6
6
|
|
7
7
|
before do
|
8
|
-
|
8
|
+
configuration.relation(:addresses)
|
9
9
|
|
10
|
-
|
10
|
+
configuration.relation(:users) do
|
11
11
|
def with_address
|
12
12
|
join(addresses)
|
13
13
|
end
|
@@ -19,7 +19,7 @@ describe 'Mappers / Renaming attributes' do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'maps renamed attributes for a base relation' do
|
22
|
-
|
22
|
+
configuration.mappers do
|
23
23
|
define(:users) do
|
24
24
|
model name: 'Test::User'
|
25
25
|
|
@@ -28,19 +28,19 @@ describe 'Mappers / Renaming attributes' do
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
|
31
|
+
container
|
32
32
|
|
33
33
|
Test::User.send(:include, Equalizer.new(:id, :name))
|
34
34
|
|
35
|
-
|
35
|
+
container.relations.users << { _id: 123, user_name: 'Jane' }
|
36
36
|
|
37
|
-
jane =
|
37
|
+
jane = container.relation(:users).as(:users).first
|
38
38
|
|
39
39
|
expect(jane).to eql(Test::User.new(id: 123, name: 'Jane'))
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'maps renamed attributes for a wrapped relation' do
|
43
|
-
|
43
|
+
configuration.mappers do
|
44
44
|
define(:users) do
|
45
45
|
model name: 'Test::User'
|
46
46
|
|
@@ -61,16 +61,16 @@ describe 'Mappers / Renaming attributes' do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
|
64
|
+
container
|
65
65
|
|
66
66
|
Test::UserWithAddress.send(:include, Equalizer.new(:id, :name, :address))
|
67
67
|
|
68
|
-
|
68
|
+
container.relations.users << { _id: 123, user_name: 'Jane' }
|
69
69
|
|
70
|
-
|
70
|
+
container.relations.addresses <<
|
71
71
|
{ _id: 123, address_id: 321, address_street: 'Street 1' }
|
72
72
|
|
73
|
-
jane =
|
73
|
+
jane = container.relation(:users).with_address.as(:with_address).first
|
74
74
|
|
75
75
|
expect(jane).to eql(
|
76
76
|
Test::UserWithAddress.new(id: 123, name: 'Jane',
|
@@ -79,7 +79,7 @@ describe 'Mappers / Renaming attributes' do
|
|
79
79
|
end
|
80
80
|
|
81
81
|
it 'maps renamed attributes for a grouped relation' do
|
82
|
-
|
82
|
+
configuration.mappers do
|
83
83
|
define(:users) do
|
84
84
|
model name: 'Test::User'
|
85
85
|
|
@@ -100,18 +100,18 @@ describe 'Mappers / Renaming attributes' do
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
-
|
103
|
+
container
|
104
104
|
|
105
105
|
Test::UserWithAddresses.send(:include, Equalizer.new(:id, :name, :addresses))
|
106
106
|
|
107
|
-
|
107
|
+
container.relations.users << { _id: 123, user_name: 'Jane' }
|
108
108
|
|
109
|
-
|
109
|
+
container.relations.addresses <<
|
110
110
|
{ _id: 123, address_id: 321, address_street: 'Street 1' }
|
111
|
-
|
111
|
+
container.relations.addresses <<
|
112
112
|
{ _id: 123, address_id: 654, address_street: 'Street 2' }
|
113
113
|
|
114
|
-
jane =
|
114
|
+
jane = container.relation(:users).with_addresses.as(:with_addresses).first
|
115
115
|
|
116
116
|
expect(jane).to eql(
|
117
117
|
Test::UserWithAddresses.new(
|
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Mapper definition DSL' do
|
4
|
-
|
5
|
-
|
4
|
+
include_context 'container'
|
5
|
+
include_context 'users and tasks'
|
6
6
|
|
7
7
|
before do
|
8
|
-
|
8
|
+
configuration.relation(:lists)
|
9
9
|
|
10
|
-
|
10
|
+
configuration.default.dataset(:lists).insert(
|
11
11
|
list_id: 1,
|
12
12
|
list_tasks: [
|
13
13
|
{ user: 'Jacob', task_id: 1, task_title: 'be nice' },
|
@@ -17,10 +17,10 @@ describe 'Mapper definition DSL' do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
describe 'step' do
|
20
|
-
let(:mapped) {
|
20
|
+
let(:mapped) { container.relation(:lists).as(:lists).to_a }
|
21
21
|
|
22
22
|
it 'applies transformations one by one' do
|
23
|
-
|
23
|
+
configuration.mappers do
|
24
24
|
define(:lists) do
|
25
25
|
step do
|
26
26
|
prefix 'list'
|
@@ -68,9 +68,8 @@ describe 'Mapper definition DSL' do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
it 'applies settings from root' do
|
71
|
-
|
71
|
+
configuration.mappers do
|
72
72
|
define(:lists) do
|
73
|
-
|
74
73
|
prefix 'list'
|
75
74
|
|
76
75
|
step do
|
@@ -92,7 +91,7 @@ describe 'Mapper definition DSL' do
|
|
92
91
|
end
|
93
92
|
|
94
93
|
it 'cannot precede attributes' do
|
95
|
-
|
94
|
+
configuration.mappers do
|
96
95
|
define(:lists) do
|
97
96
|
step do
|
98
97
|
unfold :tasks, from: :list_tasks
|
@@ -101,11 +100,11 @@ describe 'Mapper definition DSL' do
|
|
101
100
|
end
|
102
101
|
end
|
103
102
|
|
104
|
-
expect {
|
103
|
+
expect { container }.to raise_error ROM::MapperMisconfiguredError
|
105
104
|
end
|
106
105
|
|
107
106
|
it 'cannot succeed attributes' do
|
108
|
-
|
107
|
+
configuration.mappers do
|
109
108
|
define(:lists) do
|
110
109
|
attribute :id, from: :list_id
|
111
110
|
step do
|
@@ -114,7 +113,7 @@ describe 'Mapper definition DSL' do
|
|
114
113
|
end
|
115
114
|
end
|
116
115
|
|
117
|
-
expect {
|
116
|
+
expect { container }.to raise_error ROM::MapperMisconfiguredError
|
118
117
|
end
|
119
118
|
end
|
120
119
|
end
|