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
@@ -3,9 +3,10 @@ require 'spec_helper'
|
|
3
3
|
require 'ostruct'
|
4
4
|
|
5
5
|
describe 'Commands / Update' do
|
6
|
+
include_context 'container'
|
6
7
|
include_context 'users and tasks'
|
7
8
|
|
8
|
-
subject(:users) {
|
9
|
+
subject(:users) { container.commands.users }
|
9
10
|
|
10
11
|
before do
|
11
12
|
module Test
|
@@ -18,7 +19,9 @@ describe 'Commands / Update' do
|
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
|
-
|
22
|
+
configuration.relation(:users) do
|
23
|
+
register_as :users
|
24
|
+
|
22
25
|
def all(criteria)
|
23
26
|
restrict(criteria)
|
24
27
|
end
|
@@ -28,7 +31,7 @@ describe 'Commands / Update' do
|
|
28
31
|
end
|
29
32
|
end
|
30
33
|
|
31
|
-
|
34
|
+
configuration.commands(:users) do
|
32
35
|
define(:update) do
|
33
36
|
validator Test::UserValidator
|
34
37
|
end
|
@@ -50,14 +53,14 @@ describe 'Commands / Update' do
|
|
50
53
|
expect(result.error).to be_instance_of(Test::ValidationError)
|
51
54
|
expect(result.error.message).to eql(':email is required')
|
52
55
|
|
53
|
-
expect(
|
56
|
+
expect(container.relations.users.restrict(name: 'Jane')).to match_array([
|
54
57
|
{ name: 'Jane', email: 'jane@doe.org' }
|
55
58
|
])
|
56
59
|
end
|
57
60
|
|
58
61
|
describe '"result" option' do
|
59
62
|
it 'returns a single tuple when set to :one' do
|
60
|
-
|
63
|
+
configuration.commands(:users) do
|
61
64
|
define(:update_one, type: :update) do
|
62
65
|
result :one
|
63
66
|
end
|
@@ -71,7 +74,7 @@ describe 'Commands / Update' do
|
|
71
74
|
end
|
72
75
|
|
73
76
|
it 'raises when there is more than one tuple and result is set to :one' do
|
74
|
-
|
77
|
+
configuration.commands(:users) do
|
75
78
|
define(:update_one, type: :update) do
|
76
79
|
result :one
|
77
80
|
end
|
@@ -83,7 +86,7 @@ describe 'Commands / Update' do
|
|
83
86
|
|
84
87
|
expect(result.error).to be_instance_of(ROM::TupleCountMismatchError)
|
85
88
|
|
86
|
-
expect(
|
89
|
+
expect(container.relations.users).to match_array([
|
87
90
|
{ name: 'Jane', email: 'jane@doe.org' },
|
88
91
|
{ name: 'Joe', email: 'joe@doe.org' }
|
89
92
|
])
|
@@ -91,12 +94,12 @@ describe 'Commands / Update' do
|
|
91
94
|
|
92
95
|
it 'allows only valid result types' do
|
93
96
|
expect {
|
94
|
-
|
97
|
+
configuration.commands(:users) do
|
95
98
|
define(:create_one, type: :create) do
|
96
99
|
result :invalid_type
|
97
100
|
end
|
98
101
|
end
|
99
|
-
|
102
|
+
container
|
100
103
|
}.to raise_error(ROM::Options::InvalidOptionValueError)
|
101
104
|
end
|
102
105
|
end
|
@@ -105,14 +108,14 @@ describe 'Commands / Update' do
|
|
105
108
|
it 'allows scoping to a virtual relation' do
|
106
109
|
user_model = Class.new { include Anima.new(:name, :email) }
|
107
110
|
|
108
|
-
|
111
|
+
configuration.mappers do
|
109
112
|
define(:users) do
|
110
113
|
model user_model
|
111
114
|
register_as :entity
|
112
115
|
end
|
113
116
|
end
|
114
117
|
|
115
|
-
command =
|
118
|
+
command = container.command(:users).as(:entity).update.by_name('Jane')
|
116
119
|
|
117
120
|
attributes = { name: 'Jane Doe', email: 'jane@doe.org' }
|
118
121
|
result = command[attributes]
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Commands' do
|
4
|
+
include_context 'container'
|
5
|
+
include_context 'users and tasks'
|
6
|
+
|
7
|
+
before do
|
8
|
+
configuration.relation(:users) do
|
9
|
+
def by_id(id)
|
10
|
+
restrict(id: id)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
configuration.commands(:users) do
|
14
|
+
define(:update)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:command) { container.command(:users)[:update] }
|
19
|
+
|
20
|
+
describe '#method_missing' do
|
21
|
+
it 'forwards known relation view methods' do
|
22
|
+
expect(command.by_id(1).relation).to eql(users_relation.by_id(1))
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'raises no-method error when a non-view relation method was sent' do
|
26
|
+
expect { command.as(:foo) }.to raise_error(NoMethodError, /as/)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'extending command with a db-specific behavior' do
|
31
|
+
before do
|
32
|
+
gateway.instance_exec do
|
33
|
+
def extend_command_class(klass, _)
|
34
|
+
klass.class_eval do
|
35
|
+
def super_command?
|
36
|
+
true
|
37
|
+
end
|
38
|
+
end
|
39
|
+
klass
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'applies to defined classes' do
|
45
|
+
klass = Class.new(ROM::Commands::Create[:memory]) { relation :users }
|
46
|
+
configuration.register_command(klass)
|
47
|
+
container
|
48
|
+
command = klass.build(users_relation)
|
49
|
+
expect(command).to be_super_command
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'applies to generated classes' do
|
53
|
+
klass = ROM::ConfigurationDSL::Command.build_class(:create, :users, adapter: :memory)
|
54
|
+
configuration.register_command(klass)
|
55
|
+
container
|
56
|
+
command = klass.build(users_relation)
|
57
|
+
expect(command).to be_super_command
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -1,11 +1,12 @@
|
|
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
|
describe 'combine' do
|
7
8
|
before do
|
8
|
-
|
9
|
+
configuration.relation(:tasks) do
|
9
10
|
def for_users(users)
|
10
11
|
names = users.map { |user| user[:name] }
|
11
12
|
restrict { |task| names.include?(task[:name]) }
|
@@ -16,7 +17,7 @@ describe 'Mapper definition DSL' do
|
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
19
|
-
|
20
|
+
configuration.relation(:users) do
|
20
21
|
def addresses(_users)
|
21
22
|
[{ city: 'NYC', user: 'Jane' }, { city: 'Boston', user: 'Joe' }]
|
22
23
|
end
|
@@ -26,7 +27,7 @@ describe 'Mapper definition DSL' do
|
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
29
|
-
|
30
|
+
configuration.mappers do
|
30
31
|
define(:users) do
|
31
32
|
register_as :entity
|
32
33
|
|
@@ -63,8 +64,8 @@ describe 'Mapper definition DSL' do
|
|
63
64
|
end
|
64
65
|
end
|
65
66
|
|
66
|
-
let(:users) {
|
67
|
-
let(:tasks) {
|
67
|
+
let(:users) { container.relation(:users) }
|
68
|
+
let(:tasks) { container.relation(:tasks) }
|
68
69
|
|
69
70
|
let(:joe) {
|
70
71
|
Test::User.new(
|
@@ -98,7 +99,7 @@ describe 'Mapper definition DSL' do
|
|
98
99
|
}
|
99
100
|
|
100
101
|
it 'works' do
|
101
|
-
|
102
|
+
container
|
102
103
|
|
103
104
|
Test::User.send(:include, Equalizer.new(:name, :email, :tasks, :address, :book))
|
104
105
|
Test::Task.send(:include, Equalizer.new(:title, :meta))
|
@@ -2,13 +2,12 @@ require 'spec_helper'
|
|
2
2
|
require 'rom/memory'
|
3
3
|
|
4
4
|
describe 'Mappers / deeply embedded tuples' do
|
5
|
-
|
6
|
-
let(:rom) { setup.finalize }
|
5
|
+
include_context 'container'
|
7
6
|
|
8
7
|
it 'allows mapping embedded tuples' do
|
9
|
-
|
8
|
+
configuration.relation(:users)
|
10
9
|
|
11
|
-
|
10
|
+
configuration.mappers do
|
12
11
|
define(:users) do
|
13
12
|
model name: 'Test::User'
|
14
13
|
|
@@ -25,7 +24,7 @@ describe 'Mappers / deeply embedded tuples' do
|
|
25
24
|
end
|
26
25
|
end
|
27
26
|
|
28
|
-
|
27
|
+
container.relations.users << {
|
29
28
|
'name' => 'Jane',
|
30
29
|
'tasks' => [
|
31
30
|
{ 'title' => 'Task One', 'priority' => { 'value' => 1, 'desc' => 'high' } },
|
@@ -33,7 +32,7 @@ describe 'Mappers / deeply embedded tuples' do
|
|
33
32
|
]
|
34
33
|
}
|
35
34
|
|
36
|
-
jane =
|
35
|
+
jane = container.relation(:users).as(:users).first
|
37
36
|
|
38
37
|
expect(jane.name).to eql('Jane')
|
39
38
|
|
@@ -1,12 +1,13 @@
|
|
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
|
before do
|
9
|
-
|
10
|
+
configuration.relation(:users) do
|
10
11
|
def email_index
|
11
12
|
project(:email)
|
12
13
|
end
|
@@ -14,10 +15,10 @@ describe 'Mapper definition DSL' do
|
|
14
15
|
end
|
15
16
|
|
16
17
|
describe 'default PORO mapper' do
|
17
|
-
subject(:mapper) {
|
18
|
+
subject(:mapper) { container.mappers.users.entity }
|
18
19
|
|
19
20
|
before do
|
20
|
-
|
21
|
+
configuration.mappers do
|
21
22
|
define(:users) do
|
22
23
|
model name: 'Test::User'
|
23
24
|
|
@@ -40,10 +41,10 @@ describe 'Mapper definition DSL' do
|
|
40
41
|
|
41
42
|
describe 'excluding attributes' do
|
42
43
|
context 'by setting :inherit_header to false' do
|
43
|
-
subject(:mapper) {
|
44
|
+
subject(:mapper) { container.mappers.users.email_index }
|
44
45
|
|
45
46
|
before do
|
46
|
-
|
47
|
+
configuration.mappers do
|
47
48
|
define(:users) do
|
48
49
|
model name: 'Test::User'
|
49
50
|
|
@@ -65,10 +66,10 @@ describe 'Mapper definition DSL' do
|
|
65
66
|
end
|
66
67
|
|
67
68
|
describe 'virtual relation mapper' do
|
68
|
-
subject(:mapper) {
|
69
|
+
subject(:mapper) { container.mappers.users.email_index }
|
69
70
|
|
70
71
|
before do
|
71
|
-
|
72
|
+
configuration.mappers do
|
72
73
|
define(:users) do
|
73
74
|
model name: 'Test::User'
|
74
75
|
|
@@ -99,13 +100,13 @@ describe 'Mapper definition DSL' do
|
|
99
100
|
|
100
101
|
describe 'wrapped relation mapper' do
|
101
102
|
before do
|
102
|
-
|
103
|
+
configuration.relation(:tasks) do
|
103
104
|
def with_user
|
104
105
|
join(users)
|
105
106
|
end
|
106
107
|
end
|
107
108
|
|
108
|
-
|
109
|
+
configuration.mappers do
|
109
110
|
define(:tasks) do
|
110
111
|
model name: 'Test::Task'
|
111
112
|
|
@@ -116,7 +117,7 @@ describe 'Mapper definition DSL' do
|
|
116
117
|
end
|
117
118
|
|
118
119
|
it 'allows defining wrapped attributes via options hash' do
|
119
|
-
|
120
|
+
configuration.mappers do
|
120
121
|
define(:with_user, parent: :tasks) do
|
121
122
|
model name: 'Test::TaskWithUser'
|
122
123
|
|
@@ -127,11 +128,11 @@ describe 'Mapper definition DSL' do
|
|
127
128
|
end
|
128
129
|
end
|
129
130
|
|
130
|
-
|
131
|
+
container
|
131
132
|
|
132
133
|
Test::TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
|
133
134
|
|
134
|
-
jane =
|
135
|
+
jane = container.relation(:tasks).with_user.as(:with_user).to_a.last
|
135
136
|
|
136
137
|
expect(jane).to eql(
|
137
138
|
Test::TaskWithUser.new(
|
@@ -143,7 +144,7 @@ describe 'Mapper definition DSL' do
|
|
143
144
|
end
|
144
145
|
|
145
146
|
it 'allows defining wrapped attributes via options block' do
|
146
|
-
|
147
|
+
configuration.mappers do
|
147
148
|
define(:with_user, parent: :tasks) do
|
148
149
|
model name: 'Test::TaskWithUser'
|
149
150
|
|
@@ -156,11 +157,11 @@ describe 'Mapper definition DSL' do
|
|
156
157
|
end
|
157
158
|
end
|
158
159
|
|
159
|
-
|
160
|
+
container
|
160
161
|
|
161
162
|
Test::TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
|
162
163
|
|
163
|
-
jane =
|
164
|
+
jane = container.relation(:tasks).with_user.as(:with_user).to_a.last
|
164
165
|
|
165
166
|
expect(jane).to eql(
|
166
167
|
Test::TaskWithUser.new(
|
@@ -172,7 +173,7 @@ describe 'Mapper definition DSL' do
|
|
172
173
|
end
|
173
174
|
|
174
175
|
it 'allows defining wrapped attributes mapped to a model' do
|
175
|
-
|
176
|
+
configuration.mappers do
|
176
177
|
define(:with_user, parent: :tasks) do
|
177
178
|
model name: 'Test::TaskWithUser'
|
178
179
|
|
@@ -186,12 +187,12 @@ describe 'Mapper definition DSL' do
|
|
186
187
|
end
|
187
188
|
end
|
188
189
|
|
189
|
-
|
190
|
+
container
|
190
191
|
|
191
192
|
Test::TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
|
192
193
|
Test::User.send(:include, Equalizer.new(:email))
|
193
194
|
|
194
|
-
jane =
|
195
|
+
jane = container.relation(:tasks).with_user.as(:with_user).to_a.last
|
195
196
|
|
196
197
|
expect(jane).to eql(
|
197
198
|
Test::TaskWithUser.new(
|
@@ -2,13 +2,14 @@ require 'spec_helper'
|
|
2
2
|
require 'rom/memory'
|
3
3
|
|
4
4
|
describe 'Mappers / embedded' do
|
5
|
-
|
6
|
-
let(:rom) { setup.finalize }
|
5
|
+
include_context 'container'
|
7
6
|
|
8
|
-
|
9
|
-
|
7
|
+
before do
|
8
|
+
configuration.relation(:users)
|
9
|
+
end
|
10
10
|
|
11
|
-
|
11
|
+
it 'allows mapping embedded tuples' do
|
12
|
+
configuration.mappers do
|
12
13
|
define(:users) do
|
13
14
|
model name: 'Test::User'
|
14
15
|
|
@@ -20,21 +21,19 @@ describe 'Mappers / embedded' do
|
|
20
21
|
end
|
21
22
|
end
|
22
23
|
|
23
|
-
|
24
|
+
container.relations.users << {
|
24
25
|
'name' => 'Jane',
|
25
26
|
'tasks' => [{ 'title' => 'Task One' }, { 'title' => 'Task Two' }]
|
26
27
|
}
|
27
28
|
|
28
|
-
jane =
|
29
|
+
jane = container.relation(:users).map_with(:users).first
|
29
30
|
|
30
31
|
expect(jane.name).to eql('Jane')
|
31
32
|
expect(jane.tasks).to eql([{ title: 'Task One' }, { title: 'Task Two' }])
|
32
33
|
end
|
33
34
|
|
34
35
|
it 'allows mapping embedded tuple' do
|
35
|
-
|
36
|
-
|
37
|
-
setup.mappers do
|
36
|
+
configuration.mappers do
|
38
37
|
define(:users) do
|
39
38
|
model name: 'Test::User'
|
40
39
|
|
@@ -48,12 +47,12 @@ describe 'Mappers / embedded' do
|
|
48
47
|
end
|
49
48
|
end
|
50
49
|
|
51
|
-
|
50
|
+
container.relations.users << {
|
52
51
|
'name' => 'Jane',
|
53
52
|
'address' => { 'street' => 'Somewhere 1', 'city' => 'NYC' }
|
54
53
|
}
|
55
54
|
|
56
|
-
jane =
|
55
|
+
jane = container.relation(:users).as(:users).first
|
57
56
|
|
58
57
|
Test::Address.send(:include, Equalizer.new(:street, :city))
|
59
58
|
|
@@ -2,23 +2,22 @@ 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
|
|
13
12
|
users.insert(name: 'Joe', email: 'joe@doe.com')
|
14
13
|
users.insert(name: 'Jane', email: 'jane@doe.com')
|
15
14
|
end
|
16
15
|
|
17
16
|
describe 'exclude' do
|
18
|
-
let(:mapped_users) {
|
17
|
+
let(:mapped_users) { container.relation(:users).as(:users).to_a }
|
19
18
|
|
20
19
|
it 'removes the attribute' do
|
21
|
-
|
20
|
+
configuration.mappers do
|
22
21
|
define(:users) { exclude :email }
|
23
22
|
end
|
24
23
|
|