rom 0.5.0 → 0.6.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.yml +19 -15
- data/.rubocop_todo.yml +28 -0
- data/.travis.yml +8 -1
- data/CHANGELOG.md +40 -0
- data/Gemfile +10 -2
- data/Guardfile +12 -10
- data/README.md +42 -43
- data/Rakefile +13 -23
- data/lib/rom.rb +19 -27
- data/lib/rom/command.rb +118 -0
- data/lib/rom/command_registry.rb +13 -27
- data/lib/rom/commands.rb +1 -59
- data/lib/rom/commands/abstract.rb +147 -0
- data/lib/rom/commands/composite.rb +47 -0
- data/lib/rom/commands/create.rb +2 -17
- data/lib/rom/commands/delete.rb +5 -25
- data/lib/rom/commands/result.rb +5 -5
- data/lib/rom/commands/update.rb +3 -27
- data/lib/rom/constants.rb +19 -0
- data/lib/rom/env.rb +85 -35
- data/lib/rom/global.rb +173 -42
- data/lib/rom/header.rb +5 -5
- data/lib/rom/header/attribute.rb +2 -2
- data/lib/rom/lint/enumerable_dataset.rb +52 -0
- data/lib/rom/lint/linter.rb +64 -0
- data/lib/rom/lint/repository.rb +78 -0
- data/lib/rom/lint/spec.rb +20 -0
- data/lib/rom/lint/test.rb +98 -0
- data/lib/rom/mapper.rb +32 -5
- data/lib/rom/mapper/attribute_dsl.rb +240 -0
- data/lib/rom/mapper/dsl.rb +100 -0
- data/lib/rom/mapper/model_dsl.rb +55 -0
- data/lib/rom/mapper_registry.rb +8 -1
- data/lib/rom/memory.rb +4 -0
- data/lib/rom/memory/commands.rb +46 -0
- data/lib/rom/memory/dataset.rb +72 -0
- data/lib/rom/memory/relation.rb +44 -0
- data/lib/rom/memory/repository.rb +62 -0
- data/lib/rom/memory/storage.rb +57 -0
- data/lib/rom/model_builder.rb +44 -5
- data/lib/rom/processor.rb +1 -1
- data/lib/rom/processor/transproc.rb +109 -16
- data/lib/rom/reader.rb +91 -39
- data/lib/rom/relation.rb +165 -26
- data/lib/rom/relation/composite.rb +132 -0
- data/lib/rom/relation/curried.rb +48 -0
- data/lib/rom/relation/lazy.rb +173 -0
- data/lib/rom/relation/loaded.rb +75 -0
- data/lib/rom/relation/registry_reader.rb +23 -0
- data/lib/rom/repository.rb +93 -34
- data/lib/rom/setup.rb +54 -98
- data/lib/rom/setup/finalize.rb +85 -76
- data/lib/rom/setup_dsl/command.rb +36 -0
- data/lib/rom/setup_dsl/command_dsl.rb +34 -0
- data/lib/rom/setup_dsl/mapper.rb +32 -0
- data/lib/rom/setup_dsl/mapper_dsl.rb +30 -0
- data/lib/rom/setup_dsl/relation.rb +21 -0
- data/lib/rom/setup_dsl/setup.rb +75 -0
- data/lib/rom/support/array_dataset.rb +38 -0
- data/lib/rom/support/class_builder.rb +44 -0
- data/lib/rom/support/class_macros.rb +56 -0
- data/lib/rom/support/data_proxy.rb +102 -0
- data/lib/rom/support/enumerable_dataset.rb +58 -0
- data/lib/rom/support/inflector.rb +73 -0
- data/lib/rom/support/options.rb +188 -0
- data/lib/rom/support/registry.rb +4 -8
- data/lib/rom/version.rb +1 -1
- data/rakelib/benchmark.rake +13 -0
- data/rakelib/mutant.rake +16 -0
- data/rakelib/rubocop.rake +18 -0
- data/rom.gemspec +4 -7
- data/spec/integration/commands/create_spec.rb +32 -24
- data/spec/integration/commands/delete_spec.rb +15 -7
- data/spec/integration/commands/update_spec.rb +13 -11
- data/spec/integration/mappers/deep_embedded_spec.rb +4 -11
- data/spec/integration/mappers/definition_dsl_spec.rb +31 -44
- data/spec/integration/mappers/embedded_spec.rb +9 -24
- data/spec/integration/mappers/group_spec.rb +22 -30
- data/spec/integration/mappers/prefixing_attributes_spec.rb +18 -23
- data/spec/integration/mappers/renaming_attributes_spec.rb +23 -38
- data/spec/integration/mappers/symbolizing_attributes_spec.rb +18 -24
- data/spec/integration/mappers/wrap_spec.rb +22 -30
- data/spec/integration/multi_repo_spec.rb +15 -37
- data/spec/integration/relations/reading_spec.rb +82 -14
- data/spec/integration/repositories/extending_relations_spec.rb +50 -0
- data/spec/integration/{adapters → repositories}/setting_logger_spec.rb +6 -5
- data/spec/integration/setup_spec.rb +59 -62
- data/spec/shared/enumerable_dataset.rb +49 -0
- data/spec/shared/one_behavior.rb +26 -0
- data/spec/shared/users_and_tasks.rb +11 -23
- data/spec/spec_helper.rb +16 -7
- data/spec/support/constant_leak_finder.rb +14 -0
- data/spec/test/memory_repository_lint_test.rb +27 -0
- data/spec/unit/rom/command_registry_spec.rb +44 -0
- data/spec/unit/rom/commands/result_spec.rb +14 -0
- data/spec/unit/rom/commands_spec.rb +174 -0
- data/spec/unit/rom/env_spec.rb +40 -7
- data/spec/unit/rom/global_spec.rb +14 -0
- data/spec/unit/rom/{mapper_builder_spec.rb → mapper/dsl_spec.rb} +52 -38
- data/spec/unit/rom/mapper_spec.rb +51 -10
- data/spec/unit/rom/{adapter/memory → memory}/dataset_spec.rb +6 -4
- data/spec/unit/rom/memory/repository_spec.rb +12 -0
- data/spec/unit/rom/memory/storage_spec.rb +45 -0
- data/spec/unit/rom/model_builder_spec.rb +4 -3
- data/spec/unit/rom/processor/transproc_spec.rb +1 -0
- data/spec/unit/rom/reader_spec.rb +97 -24
- data/spec/unit/rom/relation/composite_spec.rb +65 -0
- data/spec/unit/rom/relation/lazy_spec.rb +145 -0
- data/spec/unit/rom/relation/loaded_spec.rb +28 -0
- data/spec/unit/rom/relation_spec.rb +111 -6
- data/spec/unit/rom/repository_spec.rb +59 -9
- data/spec/unit/rom/setup_spec.rb +99 -11
- data/spec/unit/rom/support/array_dataset_spec.rb +59 -0
- data/spec/unit/rom/support/class_builder_spec.rb +42 -0
- data/spec/unit/rom/support/enumerable_dataset_spec.rb +17 -0
- data/spec/unit/rom/support/inflector_spec.rb +89 -0
- data/spec/unit/rom/support/options_spec.rb +119 -0
- metadata +74 -112
- data/lib/rom/adapter.rb +0 -191
- data/lib/rom/adapter/memory.rb +0 -32
- data/lib/rom/adapter/memory/commands.rb +0 -31
- data/lib/rom/adapter/memory/dataset.rb +0 -67
- data/lib/rom/adapter/memory/storage.rb +0 -26
- data/lib/rom/commands/with_options.rb +0 -18
- data/lib/rom/config.rb +0 -70
- data/lib/rom/mapper_builder.rb +0 -52
- data/lib/rom/mapper_builder/mapper_dsl.rb +0 -114
- data/lib/rom/mapper_builder/model_dsl.rb +0 -29
- data/lib/rom/reader_builder.rb +0 -48
- data/lib/rom/relation_builder.rb +0 -62
- data/lib/rom/setup/base_relation_dsl.rb +0 -46
- data/lib/rom/setup/command_dsl.rb +0 -46
- data/lib/rom/setup/mapper_dsl.rb +0 -19
- data/lib/rom/setup/relation_dsl.rb +0 -20
- data/lib/rom/setup/schema_dsl.rb +0 -33
- data/spec/integration/adapters/extending_relations_spec.rb +0 -41
- data/spec/integration/commands/try_spec.rb +0 -27
- data/spec/integration/schema_spec.rb +0 -77
- data/spec/unit/config_spec.rb +0 -60
- data/spec/unit/rom/adapter_spec.rb +0 -79
- data/spec/unit/rom_spec.rb +0 -14
@@ -1,23 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'rom/memory'
|
2
3
|
|
3
4
|
describe 'Mappers / embedded' do
|
4
|
-
let(:setup) { ROM.setup(
|
5
|
+
let(:setup) { ROM.setup(:memory) }
|
5
6
|
let(:rom) { setup.finalize }
|
6
7
|
|
7
8
|
it 'allows mapping embedded tuples' do
|
8
|
-
setup.schema do
|
9
|
-
base_relation(:users) do
|
10
|
-
repository :default
|
11
|
-
attribute 'name'
|
12
|
-
attribute 'tasks'
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
9
|
setup.relation(:users)
|
17
10
|
|
18
11
|
setup.mappers do
|
19
12
|
define(:users) do
|
20
|
-
model name: 'User'
|
13
|
+
model name: 'Test::User'
|
21
14
|
|
22
15
|
attribute :name, from: 'name'
|
23
16
|
|
@@ -27,7 +20,7 @@ describe 'Mappers / embedded' do
|
|
27
20
|
end
|
28
21
|
end
|
29
22
|
|
30
|
-
rom.
|
23
|
+
rom.relations.users << {
|
31
24
|
'name' => 'Jane',
|
32
25
|
'tasks' => [{ 'title' => 'Task One' }, { 'title' => 'Task Two' }]
|
33
26
|
}
|
@@ -41,31 +34,23 @@ describe 'Mappers / embedded' do
|
|
41
34
|
end
|
42
35
|
|
43
36
|
it 'allows mapping embedded tuple' do
|
44
|
-
setup.schema do
|
45
|
-
base_relation(:users) do
|
46
|
-
repository :default
|
47
|
-
attribute 'name'
|
48
|
-
attribute 'address'
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
37
|
setup.relation(:users)
|
53
38
|
|
54
39
|
setup.mappers do
|
55
40
|
define(:users) do
|
56
|
-
model name: 'User'
|
41
|
+
model name: 'Test::User'
|
57
42
|
|
58
43
|
attribute :name, from: 'name'
|
59
44
|
|
60
45
|
embedded :address, from: 'address', type: :hash do
|
61
|
-
model name: 'Address'
|
46
|
+
model name: 'Test::Address'
|
62
47
|
attribute :street, from: 'street'
|
63
48
|
attribute :city, from: 'city'
|
64
49
|
end
|
65
50
|
end
|
66
51
|
end
|
67
52
|
|
68
|
-
rom.
|
53
|
+
rom.relations.users << {
|
69
54
|
'name' => 'Jane',
|
70
55
|
'address' => { 'street' => 'Somewhere 1', 'city' => 'NYC' }
|
71
56
|
}
|
@@ -74,9 +59,9 @@ describe 'Mappers / embedded' do
|
|
74
59
|
|
75
60
|
expect(rom.read(:users).mapper.header.map(&:name)).to eql([:name, :address])
|
76
61
|
|
77
|
-
Address.send(:include, Equalizer.new(:street, :city))
|
62
|
+
Test::Address.send(:include, Equalizer.new(:street, :city))
|
78
63
|
|
79
64
|
expect(jane.name).to eql('Jane')
|
80
|
-
expect(jane.address).to eql(Address.new(street: 'Somewhere 1', city: 'NYC'))
|
65
|
+
expect(jane.address).to eql(Test::Address.new(street: 'Somewhere 1', city: 'NYC'))
|
81
66
|
end
|
82
67
|
end
|
@@ -5,14 +5,6 @@ describe 'Mapper definition DSL' do
|
|
5
5
|
|
6
6
|
let(:header) { mapper.header }
|
7
7
|
|
8
|
-
before do
|
9
|
-
setup.relation(:users) do
|
10
|
-
def email_index
|
11
|
-
project(:email)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
8
|
describe 'grouped relation mapper' do
|
17
9
|
before do
|
18
10
|
setup.relation(:tasks) do
|
@@ -29,7 +21,7 @@ describe 'Mapper definition DSL' do
|
|
29
21
|
|
30
22
|
setup.mappers do
|
31
23
|
define(:users) do
|
32
|
-
model name: 'User'
|
24
|
+
model name: 'Test::User'
|
33
25
|
|
34
26
|
attribute :name
|
35
27
|
attribute :email
|
@@ -40,7 +32,7 @@ describe 'Mapper definition DSL' do
|
|
40
32
|
it 'allows defining grouped attributes via options hash' do
|
41
33
|
setup.mappers do
|
42
34
|
define(:with_tasks, parent: :users) do
|
43
|
-
model name: 'UserWithTasks'
|
35
|
+
model name: 'Test::UserWithTasks'
|
44
36
|
|
45
37
|
attribute :name
|
46
38
|
attribute :email
|
@@ -51,12 +43,12 @@ describe 'Mapper definition DSL' do
|
|
51
43
|
|
52
44
|
rom = setup.finalize
|
53
45
|
|
54
|
-
UserWithTasks.send(:include, Equalizer.new(:name, :email, :tasks))
|
46
|
+
Test::UserWithTasks.send(:include, Equalizer.new(:name, :email, :tasks))
|
55
47
|
|
56
48
|
jane = rom.read(:users).with_tasks.to_a.last
|
57
49
|
|
58
50
|
expect(jane).to eql(
|
59
|
-
UserWithTasks.new(
|
51
|
+
Test::UserWithTasks.new(
|
60
52
|
name: 'Jane',
|
61
53
|
email: 'jane@doe.org',
|
62
54
|
tasks: [{ title: 'be cool', priority: 2 }]
|
@@ -67,7 +59,7 @@ describe 'Mapper definition DSL' do
|
|
67
59
|
it 'allows defining grouped attributes via block' do
|
68
60
|
setup.mappers do
|
69
61
|
define(:with_tasks, parent: :users) do
|
70
|
-
model name: 'UserWithTasks'
|
62
|
+
model name: 'Test::UserWithTasks'
|
71
63
|
|
72
64
|
attribute :name
|
73
65
|
attribute :email
|
@@ -81,12 +73,12 @@ describe 'Mapper definition DSL' do
|
|
81
73
|
|
82
74
|
rom = setup.finalize
|
83
75
|
|
84
|
-
UserWithTasks.send(:include, Equalizer.new(:name, :email, :tasks))
|
76
|
+
Test::UserWithTasks.send(:include, Equalizer.new(:name, :email, :tasks))
|
85
77
|
|
86
78
|
jane = rom.read(:users).with_tasks.to_a.last
|
87
79
|
|
88
80
|
expect(jane).to eql(
|
89
|
-
UserWithTasks.new(
|
81
|
+
Test::UserWithTasks.new(
|
90
82
|
name: 'Jane',
|
91
83
|
email: 'jane@doe.org',
|
92
84
|
tasks: [{ title: 'be cool', priority: 2 }]
|
@@ -97,13 +89,13 @@ describe 'Mapper definition DSL' do
|
|
97
89
|
it 'allows defining grouped attributes mapped to a model via block' do
|
98
90
|
setup.mappers do
|
99
91
|
define(:with_tasks, parent: :users) do
|
100
|
-
model name: 'UserWithTasks'
|
92
|
+
model name: 'Test::UserWithTasks'
|
101
93
|
|
102
94
|
attribute :name
|
103
95
|
attribute :email
|
104
96
|
|
105
97
|
group :tasks do
|
106
|
-
model name: 'Task'
|
98
|
+
model name: 'Test::Task'
|
107
99
|
|
108
100
|
attribute :title
|
109
101
|
attribute :priority
|
@@ -113,16 +105,16 @@ describe 'Mapper definition DSL' do
|
|
113
105
|
|
114
106
|
rom = setup.finalize
|
115
107
|
|
116
|
-
UserWithTasks.send(:include, Equalizer.new(:name, :email, :tasks))
|
117
|
-
Task.send(:include, Equalizer.new(:title, :priority))
|
108
|
+
Test::UserWithTasks.send(:include, Equalizer.new(:name, :email, :tasks))
|
109
|
+
Test::Task.send(:include, Equalizer.new(:title, :priority))
|
118
110
|
|
119
111
|
jane = rom.read(:users).with_tasks.to_a.last
|
120
112
|
|
121
113
|
expect(jane).to eql(
|
122
|
-
UserWithTasks.new(
|
114
|
+
Test::UserWithTasks.new(
|
123
115
|
name: 'Jane',
|
124
116
|
email: 'jane@doe.org',
|
125
|
-
tasks: [Task.new(title: 'be cool', priority: 2)]
|
117
|
+
tasks: [Test::Task.new(title: 'be cool', priority: 2)]
|
126
118
|
)
|
127
119
|
)
|
128
120
|
end
|
@@ -132,18 +124,18 @@ describe 'Mapper definition DSL' do
|
|
132
124
|
define(:tasks)
|
133
125
|
|
134
126
|
define(:with_users, parent: :tasks, inherit_header: false) do
|
135
|
-
model name: 'TaskWithUsers'
|
127
|
+
model name: 'Test::TaskWithUsers'
|
136
128
|
|
137
129
|
attribute :title
|
138
130
|
attribute :priority
|
139
131
|
|
140
132
|
group :users do
|
141
|
-
model name: 'TaskUser'
|
133
|
+
model name: 'Test::TaskUser'
|
142
134
|
|
143
135
|
attribute :name
|
144
136
|
|
145
137
|
group :contacts do
|
146
|
-
model name: 'Contact'
|
138
|
+
model name: 'Test::Contact'
|
147
139
|
attribute :email
|
148
140
|
end
|
149
141
|
end
|
@@ -152,16 +144,16 @@ describe 'Mapper definition DSL' do
|
|
152
144
|
|
153
145
|
rom = setup.finalize
|
154
146
|
|
155
|
-
TaskWithUsers.send(:include, Equalizer.new(:title, :priority, :users))
|
156
|
-
TaskUser.send(:include, Equalizer.new(:name, :contacts))
|
157
|
-
Contact.send(:include, Equalizer.new(:email))
|
147
|
+
Test::TaskWithUsers.send(:include, Equalizer.new(:title, :priority, :users))
|
148
|
+
Test::TaskUser.send(:include, Equalizer.new(:name, :contacts))
|
149
|
+
Test::Contact.send(:include, Equalizer.new(:email))
|
158
150
|
|
159
151
|
task = rom.read(:tasks).with_users.to_a.first
|
160
152
|
|
161
153
|
expect(task).to eql(
|
162
|
-
TaskWithUsers.new(title: 'be nice', priority: 1, users: [
|
163
|
-
TaskUser.new(name: 'Joe', contacts: [
|
164
|
-
Contact.new(email: 'joe@doe.org')
|
154
|
+
Test::TaskWithUsers.new(title: 'be nice', priority: 1, users: [
|
155
|
+
Test::TaskUser.new(name: 'Joe', contacts: [
|
156
|
+
Test::Contact.new(email: 'joe@doe.org')
|
165
157
|
])
|
166
158
|
])
|
167
159
|
)
|
@@ -1,42 +1,37 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'rom/memory'
|
2
3
|
|
3
4
|
describe 'Mappers / Prefixing attributes' do
|
4
|
-
let(:setup) { ROM.setup(
|
5
|
+
let(:setup) { ROM.setup(:memory) }
|
5
6
|
|
6
7
|
before do
|
7
|
-
setup.schema do
|
8
|
-
base_relation(:users) do
|
9
|
-
repository :memory
|
10
|
-
|
11
|
-
attribute :user_id
|
12
|
-
attribute :user_name
|
13
|
-
attribute :user_email
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
8
|
setup.relation(:users)
|
18
9
|
end
|
19
10
|
|
20
11
|
it 'automatically maps all attributes using the provided prefix' do
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
12
|
+
class Test::UserMapper < ROM::Mapper
|
13
|
+
relation :users
|
14
|
+
prefix :user
|
15
|
+
|
16
|
+
model name: 'Test::User'
|
17
|
+
|
18
|
+
attribute :id
|
19
|
+
attribute :name
|
20
|
+
attribute :email
|
29
21
|
end
|
30
22
|
|
31
23
|
rom = setup.finalize
|
32
24
|
|
33
|
-
User.send(:include, Equalizer.new(:id, :name, :email))
|
25
|
+
Test::User.send(:include, Equalizer.new(:id, :name, :email))
|
34
26
|
|
35
|
-
rom.
|
36
|
-
|
27
|
+
rom.relations.users << {
|
28
|
+
user_id: 123,
|
29
|
+
user_name: 'Jane',
|
30
|
+
user_email: 'jane@doe.org'
|
31
|
+
}
|
37
32
|
|
38
33
|
jane = rom.read(:users).to_a.first
|
39
34
|
|
40
|
-
expect(jane).to eql(User.new(id: 123, name: 'Jane', email: 'jane@doe.org'))
|
35
|
+
expect(jane).to eql(Test::User.new(id: 123, name: 'Jane', email: 'jane@doe.org'))
|
41
36
|
end
|
42
37
|
end
|
@@ -1,25 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'rom/memory'
|
2
3
|
|
3
4
|
describe 'Mappers / Renaming attributes' do
|
4
|
-
let(:setup) { ROM.setup(
|
5
|
+
let(:setup) { ROM.setup(:memory) }
|
5
6
|
|
6
7
|
before do
|
7
|
-
setup.schema do
|
8
|
-
base_relation(:users) do
|
9
|
-
repository :memory
|
10
|
-
|
11
|
-
attribute :_id
|
12
|
-
attribute :user_name
|
13
|
-
end
|
14
|
-
|
15
|
-
base_relation(:addresses) do
|
16
|
-
repository :memory
|
17
|
-
|
18
|
-
attribute :address_id
|
19
|
-
attribute :address_street
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
8
|
setup.relation(:addresses)
|
24
9
|
|
25
10
|
setup.relation(:users) do
|
@@ -36,7 +21,7 @@ describe 'Mappers / Renaming attributes' do
|
|
36
21
|
it 'maps renamed attributes for a base relation' do
|
37
22
|
setup.mappers do
|
38
23
|
define(:users) do
|
39
|
-
model name: 'User'
|
24
|
+
model name: 'Test::User'
|
40
25
|
|
41
26
|
attribute :id, from: :_id
|
42
27
|
attribute :name, from: :user_name
|
@@ -45,26 +30,26 @@ describe 'Mappers / Renaming attributes' do
|
|
45
30
|
|
46
31
|
rom = setup.finalize
|
47
32
|
|
48
|
-
User.send(:include, Equalizer.new(:id, :name))
|
33
|
+
Test::User.send(:include, Equalizer.new(:id, :name))
|
49
34
|
|
50
|
-
rom.
|
35
|
+
rom.relations.users << { _id: 123, user_name: 'Jane' }
|
51
36
|
|
52
37
|
jane = rom.read(:users).to_a.first
|
53
38
|
|
54
|
-
expect(jane).to eql(User.new(id: 123, name: 'Jane'))
|
39
|
+
expect(jane).to eql(Test::User.new(id: 123, name: 'Jane'))
|
55
40
|
end
|
56
41
|
|
57
42
|
it 'maps renamed attributes for a wrapped relation' do
|
58
43
|
setup.mappers do
|
59
44
|
define(:users) do
|
60
|
-
model name: 'User'
|
45
|
+
model name: 'Test::User'
|
61
46
|
|
62
47
|
attribute :id, from: :_id
|
63
48
|
attribute :name, from: :user_name
|
64
49
|
end
|
65
50
|
|
66
51
|
define(:with_address, parent: :users) do
|
67
|
-
model name: 'UserWithAddress'
|
52
|
+
model name: 'Test::UserWithAddress'
|
68
53
|
|
69
54
|
attribute :id, from: :_id
|
70
55
|
attribute :name, from: :user_name
|
@@ -78,31 +63,31 @@ describe 'Mappers / Renaming attributes' do
|
|
78
63
|
|
79
64
|
rom = setup.finalize
|
80
65
|
|
81
|
-
UserWithAddress.send(:include, Equalizer.new(:id, :name, :address))
|
66
|
+
Test::UserWithAddress.send(:include, Equalizer.new(:id, :name, :address))
|
82
67
|
|
83
|
-
rom.
|
84
|
-
rom.
|
85
|
-
|
68
|
+
rom.relations.users << { _id: 123, user_name: 'Jane' }
|
69
|
+
rom.relations.addresses <<
|
70
|
+
{ _id: 123, address_id: 321, address_street: 'Street 1' }
|
86
71
|
|
87
72
|
jane = rom.read(:users).with_address.first
|
88
73
|
|
89
74
|
expect(jane).to eql(
|
90
|
-
UserWithAddress.new(id: 123, name: 'Jane',
|
91
|
-
|
75
|
+
Test::UserWithAddress.new(id: 123, name: 'Jane',
|
76
|
+
address: { id: 321, street: 'Street 1' })
|
92
77
|
)
|
93
78
|
end
|
94
79
|
|
95
80
|
it 'maps renamed attributes for a grouped relation' do
|
96
81
|
setup.mappers do
|
97
82
|
define(:users) do
|
98
|
-
model name: 'User'
|
83
|
+
model name: 'Test::User'
|
99
84
|
|
100
85
|
attribute :id, from: :_id
|
101
86
|
attribute :name, from: :user_name
|
102
87
|
end
|
103
88
|
|
104
89
|
define(:with_addresses, parent: :users) do
|
105
|
-
model name: 'UserWithAddresses'
|
90
|
+
model name: 'Test::UserWithAddresses'
|
106
91
|
|
107
92
|
attribute :id, from: :_id
|
108
93
|
attribute :name, from: :user_name
|
@@ -116,18 +101,18 @@ describe 'Mappers / Renaming attributes' do
|
|
116
101
|
|
117
102
|
rom = setup.finalize
|
118
103
|
|
119
|
-
UserWithAddresses.send(:include, Equalizer.new(:id, :name, :addresses))
|
104
|
+
Test::UserWithAddresses.send(:include, Equalizer.new(:id, :name, :addresses))
|
120
105
|
|
121
|
-
rom.
|
122
|
-
rom.
|
123
|
-
|
124
|
-
rom.
|
125
|
-
|
106
|
+
rom.relations.users << { _id: 123, user_name: 'Jane' }
|
107
|
+
rom.relations.addresses <<
|
108
|
+
{ _id: 123, address_id: 321, address_street: 'Street 1' }
|
109
|
+
rom.relations.addresses <<
|
110
|
+
{ _id: 123, address_id: 654, address_street: 'Street 2' }
|
126
111
|
|
127
112
|
jane = rom.read(:users).with_addresses.first
|
128
113
|
|
129
114
|
expect(jane).to eql(
|
130
|
-
UserWithAddresses.new(
|
115
|
+
Test::UserWithAddresses.new(
|
131
116
|
id: 123,
|
132
117
|
name: 'Jane',
|
133
118
|
addresses: [{ id: 321, street: 'Street 1' },
|
@@ -1,32 +1,23 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'rom/memory'
|
2
3
|
|
3
4
|
describe 'Mappers / Symbolizing atributes' do
|
4
|
-
let(:setup) { ROM.setup(
|
5
|
+
let(:setup) { ROM.setup(:memory) }
|
5
6
|
let(:rom) { setup.finalize }
|
6
7
|
|
7
8
|
before do
|
8
|
-
setup.
|
9
|
-
|
10
|
-
repository :memory
|
11
|
-
|
12
|
-
attribute 'user_id'
|
13
|
-
attribute 'first_name'
|
14
|
-
attribute 'email'
|
15
|
-
end
|
16
|
-
|
17
|
-
base_relation(:tasks) do
|
18
|
-
repository :memory
|
19
|
-
|
20
|
-
attribute 'title'
|
21
|
-
attribute 'task_priority'
|
22
|
-
attribute 'task_description'
|
23
|
-
end
|
24
|
-
end
|
9
|
+
setup.relation(:users)
|
10
|
+
setup.relation(:tasks)
|
25
11
|
end
|
26
12
|
|
27
13
|
it 'automatically maps all attributes using top-level settings' do
|
28
|
-
|
29
|
-
|
14
|
+
module Test
|
15
|
+
class UserMapper < ROM::Mapper
|
16
|
+
relation :users
|
17
|
+
|
18
|
+
symbolize_keys true
|
19
|
+
prefix 'user'
|
20
|
+
|
30
21
|
attribute :id
|
31
22
|
|
32
23
|
wrap :details, prefix: 'first' do
|
@@ -39,7 +30,7 @@ describe 'Mappers / Symbolizing atributes' do
|
|
39
30
|
end
|
40
31
|
end
|
41
32
|
|
42
|
-
rom.
|
33
|
+
rom.relations.users << {
|
43
34
|
'user_id' => 123,
|
44
35
|
'first_name' => 'Jane',
|
45
36
|
'email' => 'jane@doe.org'
|
@@ -53,8 +44,11 @@ describe 'Mappers / Symbolizing atributes' do
|
|
53
44
|
end
|
54
45
|
|
55
46
|
it 'automatically maps all attributes using settings for wrap block' do
|
56
|
-
|
57
|
-
|
47
|
+
module Test
|
48
|
+
class TaskMapper < ROM::Mapper
|
49
|
+
relation :tasks
|
50
|
+
symbolize_keys true
|
51
|
+
|
58
52
|
attribute :title
|
59
53
|
|
60
54
|
wrap :details, prefix: 'task' do
|
@@ -64,7 +58,7 @@ describe 'Mappers / Symbolizing atributes' do
|
|
64
58
|
end
|
65
59
|
end
|
66
60
|
|
67
|
-
rom.
|
61
|
+
rom.relations.tasks << {
|
68
62
|
'title' => 'Task One',
|
69
63
|
'task_priority' => 1,
|
70
64
|
'task_description' => 'It is a task'
|