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.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +19 -15
  3. data/.rubocop_todo.yml +28 -0
  4. data/.travis.yml +8 -1
  5. data/CHANGELOG.md +40 -0
  6. data/Gemfile +10 -2
  7. data/Guardfile +12 -10
  8. data/README.md +42 -43
  9. data/Rakefile +13 -23
  10. data/lib/rom.rb +19 -27
  11. data/lib/rom/command.rb +118 -0
  12. data/lib/rom/command_registry.rb +13 -27
  13. data/lib/rom/commands.rb +1 -59
  14. data/lib/rom/commands/abstract.rb +147 -0
  15. data/lib/rom/commands/composite.rb +47 -0
  16. data/lib/rom/commands/create.rb +2 -17
  17. data/lib/rom/commands/delete.rb +5 -25
  18. data/lib/rom/commands/result.rb +5 -5
  19. data/lib/rom/commands/update.rb +3 -27
  20. data/lib/rom/constants.rb +19 -0
  21. data/lib/rom/env.rb +85 -35
  22. data/lib/rom/global.rb +173 -42
  23. data/lib/rom/header.rb +5 -5
  24. data/lib/rom/header/attribute.rb +2 -2
  25. data/lib/rom/lint/enumerable_dataset.rb +52 -0
  26. data/lib/rom/lint/linter.rb +64 -0
  27. data/lib/rom/lint/repository.rb +78 -0
  28. data/lib/rom/lint/spec.rb +20 -0
  29. data/lib/rom/lint/test.rb +98 -0
  30. data/lib/rom/mapper.rb +32 -5
  31. data/lib/rom/mapper/attribute_dsl.rb +240 -0
  32. data/lib/rom/mapper/dsl.rb +100 -0
  33. data/lib/rom/mapper/model_dsl.rb +55 -0
  34. data/lib/rom/mapper_registry.rb +8 -1
  35. data/lib/rom/memory.rb +4 -0
  36. data/lib/rom/memory/commands.rb +46 -0
  37. data/lib/rom/memory/dataset.rb +72 -0
  38. data/lib/rom/memory/relation.rb +44 -0
  39. data/lib/rom/memory/repository.rb +62 -0
  40. data/lib/rom/memory/storage.rb +57 -0
  41. data/lib/rom/model_builder.rb +44 -5
  42. data/lib/rom/processor.rb +1 -1
  43. data/lib/rom/processor/transproc.rb +109 -16
  44. data/lib/rom/reader.rb +91 -39
  45. data/lib/rom/relation.rb +165 -26
  46. data/lib/rom/relation/composite.rb +132 -0
  47. data/lib/rom/relation/curried.rb +48 -0
  48. data/lib/rom/relation/lazy.rb +173 -0
  49. data/lib/rom/relation/loaded.rb +75 -0
  50. data/lib/rom/relation/registry_reader.rb +23 -0
  51. data/lib/rom/repository.rb +93 -34
  52. data/lib/rom/setup.rb +54 -98
  53. data/lib/rom/setup/finalize.rb +85 -76
  54. data/lib/rom/setup_dsl/command.rb +36 -0
  55. data/lib/rom/setup_dsl/command_dsl.rb +34 -0
  56. data/lib/rom/setup_dsl/mapper.rb +32 -0
  57. data/lib/rom/setup_dsl/mapper_dsl.rb +30 -0
  58. data/lib/rom/setup_dsl/relation.rb +21 -0
  59. data/lib/rom/setup_dsl/setup.rb +75 -0
  60. data/lib/rom/support/array_dataset.rb +38 -0
  61. data/lib/rom/support/class_builder.rb +44 -0
  62. data/lib/rom/support/class_macros.rb +56 -0
  63. data/lib/rom/support/data_proxy.rb +102 -0
  64. data/lib/rom/support/enumerable_dataset.rb +58 -0
  65. data/lib/rom/support/inflector.rb +73 -0
  66. data/lib/rom/support/options.rb +188 -0
  67. data/lib/rom/support/registry.rb +4 -8
  68. data/lib/rom/version.rb +1 -1
  69. data/rakelib/benchmark.rake +13 -0
  70. data/rakelib/mutant.rake +16 -0
  71. data/rakelib/rubocop.rake +18 -0
  72. data/rom.gemspec +4 -7
  73. data/spec/integration/commands/create_spec.rb +32 -24
  74. data/spec/integration/commands/delete_spec.rb +15 -7
  75. data/spec/integration/commands/update_spec.rb +13 -11
  76. data/spec/integration/mappers/deep_embedded_spec.rb +4 -11
  77. data/spec/integration/mappers/definition_dsl_spec.rb +31 -44
  78. data/spec/integration/mappers/embedded_spec.rb +9 -24
  79. data/spec/integration/mappers/group_spec.rb +22 -30
  80. data/spec/integration/mappers/prefixing_attributes_spec.rb +18 -23
  81. data/spec/integration/mappers/renaming_attributes_spec.rb +23 -38
  82. data/spec/integration/mappers/symbolizing_attributes_spec.rb +18 -24
  83. data/spec/integration/mappers/wrap_spec.rb +22 -30
  84. data/spec/integration/multi_repo_spec.rb +15 -37
  85. data/spec/integration/relations/reading_spec.rb +82 -14
  86. data/spec/integration/repositories/extending_relations_spec.rb +50 -0
  87. data/spec/integration/{adapters → repositories}/setting_logger_spec.rb +6 -5
  88. data/spec/integration/setup_spec.rb +59 -62
  89. data/spec/shared/enumerable_dataset.rb +49 -0
  90. data/spec/shared/one_behavior.rb +26 -0
  91. data/spec/shared/users_and_tasks.rb +11 -23
  92. data/spec/spec_helper.rb +16 -7
  93. data/spec/support/constant_leak_finder.rb +14 -0
  94. data/spec/test/memory_repository_lint_test.rb +27 -0
  95. data/spec/unit/rom/command_registry_spec.rb +44 -0
  96. data/spec/unit/rom/commands/result_spec.rb +14 -0
  97. data/spec/unit/rom/commands_spec.rb +174 -0
  98. data/spec/unit/rom/env_spec.rb +40 -7
  99. data/spec/unit/rom/global_spec.rb +14 -0
  100. data/spec/unit/rom/{mapper_builder_spec.rb → mapper/dsl_spec.rb} +52 -38
  101. data/spec/unit/rom/mapper_spec.rb +51 -10
  102. data/spec/unit/rom/{adapter/memory → memory}/dataset_spec.rb +6 -4
  103. data/spec/unit/rom/memory/repository_spec.rb +12 -0
  104. data/spec/unit/rom/memory/storage_spec.rb +45 -0
  105. data/spec/unit/rom/model_builder_spec.rb +4 -3
  106. data/spec/unit/rom/processor/transproc_spec.rb +1 -0
  107. data/spec/unit/rom/reader_spec.rb +97 -24
  108. data/spec/unit/rom/relation/composite_spec.rb +65 -0
  109. data/spec/unit/rom/relation/lazy_spec.rb +145 -0
  110. data/spec/unit/rom/relation/loaded_spec.rb +28 -0
  111. data/spec/unit/rom/relation_spec.rb +111 -6
  112. data/spec/unit/rom/repository_spec.rb +59 -9
  113. data/spec/unit/rom/setup_spec.rb +99 -11
  114. data/spec/unit/rom/support/array_dataset_spec.rb +59 -0
  115. data/spec/unit/rom/support/class_builder_spec.rb +42 -0
  116. data/spec/unit/rom/support/enumerable_dataset_spec.rb +17 -0
  117. data/spec/unit/rom/support/inflector_spec.rb +89 -0
  118. data/spec/unit/rom/support/options_spec.rb +119 -0
  119. metadata +74 -112
  120. data/lib/rom/adapter.rb +0 -191
  121. data/lib/rom/adapter/memory.rb +0 -32
  122. data/lib/rom/adapter/memory/commands.rb +0 -31
  123. data/lib/rom/adapter/memory/dataset.rb +0 -67
  124. data/lib/rom/adapter/memory/storage.rb +0 -26
  125. data/lib/rom/commands/with_options.rb +0 -18
  126. data/lib/rom/config.rb +0 -70
  127. data/lib/rom/mapper_builder.rb +0 -52
  128. data/lib/rom/mapper_builder/mapper_dsl.rb +0 -114
  129. data/lib/rom/mapper_builder/model_dsl.rb +0 -29
  130. data/lib/rom/reader_builder.rb +0 -48
  131. data/lib/rom/relation_builder.rb +0 -62
  132. data/lib/rom/setup/base_relation_dsl.rb +0 -46
  133. data/lib/rom/setup/command_dsl.rb +0 -46
  134. data/lib/rom/setup/mapper_dsl.rb +0 -19
  135. data/lib/rom/setup/relation_dsl.rb +0 -20
  136. data/lib/rom/setup/schema_dsl.rb +0 -33
  137. data/spec/integration/adapters/extending_relations_spec.rb +0 -41
  138. data/spec/integration/commands/try_spec.rb +0 -27
  139. data/spec/integration/schema_spec.rb +0 -77
  140. data/spec/unit/config_spec.rb +0 -60
  141. data/spec/unit/rom/adapter_spec.rb +0 -79
  142. data/spec/unit/rom_spec.rb +0 -14
@@ -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 'wrapped relation mapper' do
17
9
  before do
18
10
  setup.relation(:tasks) do
@@ -25,7 +17,7 @@ describe 'Mapper definition DSL' do
25
17
 
26
18
  setup.mappers do
27
19
  define(:tasks) do
28
- model name: 'Task'
20
+ model name: 'Test::Task'
29
21
 
30
22
  attribute :title
31
23
  attribute :priority
@@ -36,7 +28,7 @@ describe 'Mapper definition DSL' do
36
28
  it 'allows defining wrapped attributes via options hash' do
37
29
  setup.mappers do
38
30
  define(:with_user, parent: :tasks) do
39
- model name: 'TaskWithUser'
31
+ model name: 'Test::TaskWithUser'
40
32
 
41
33
  attribute :title
42
34
  attribute :priority
@@ -47,12 +39,12 @@ describe 'Mapper definition DSL' do
47
39
 
48
40
  rom = setup.finalize
49
41
 
50
- TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
42
+ Test::TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
51
43
 
52
44
  jane = rom.read(:tasks).with_user.to_a.last
53
45
 
54
46
  expect(jane).to eql(
55
- TaskWithUser.new(
47
+ Test::TaskWithUser.new(
56
48
  title: 'be cool',
57
49
  priority: 2,
58
50
  user: { email: 'jane@doe.org' }
@@ -63,7 +55,7 @@ describe 'Mapper definition DSL' do
63
55
  it 'allows defining wrapped attributes via options block' do
64
56
  setup.mappers do
65
57
  define(:with_user, parent: :tasks) do
66
- model name: 'TaskWithUser'
58
+ model name: 'Test::TaskWithUser'
67
59
 
68
60
  attribute :title
69
61
  attribute :priority
@@ -76,12 +68,12 @@ describe 'Mapper definition DSL' do
76
68
 
77
69
  rom = setup.finalize
78
70
 
79
- TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
71
+ Test::TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
80
72
 
81
73
  jane = rom.read(:tasks).with_user.to_a.last
82
74
 
83
75
  expect(jane).to eql(
84
- TaskWithUser.new(
76
+ Test::TaskWithUser.new(
85
77
  title: 'be cool',
86
78
  priority: 2,
87
79
  user: { email: 'jane@doe.org' }
@@ -92,17 +84,17 @@ describe 'Mapper definition DSL' do
92
84
  it 'allows defining nested wrapped attributes via a block' do
93
85
  setup.mappers do
94
86
  define(:with_user, parent: :tasks, inherit_header: false) do
95
- model name: 'TaskWithUser'
87
+ model name: 'Test::TaskWithUser'
96
88
 
97
89
  attribute :title
98
90
  attribute :priority
99
91
 
100
92
  wrap :user do
101
- model name: 'TaskUser'
93
+ model name: 'Test::TaskUser'
102
94
  attribute :name
103
95
 
104
96
  wrap :contact do
105
- model name: 'Contact'
97
+ model name: 'Test::Contact'
106
98
  attribute :email
107
99
  end
108
100
  end
@@ -111,18 +103,18 @@ describe 'Mapper definition DSL' do
111
103
 
112
104
  rom = setup.finalize
113
105
 
114
- TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
115
- TaskUser.send(:include, Equalizer.new(:name, :contact))
116
- Contact.send(:include, Equalizer.new(:email))
106
+ Test::TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
107
+ Test::TaskUser.send(:include, Equalizer.new(:name, :contact))
108
+ Test::Contact.send(:include, Equalizer.new(:email))
117
109
 
118
110
  jane = rom.read(:tasks).with_user.to_a.last
119
111
 
120
112
  expect(jane).to eql(
121
- TaskWithUser.new(
113
+ Test::TaskWithUser.new(
122
114
  title: 'be cool',
123
115
  priority: 2,
124
- user: TaskUser.new(
125
- name: 'Jane', contact: Contact.new(email: 'jane@doe.org')
116
+ user: Test::TaskUser.new(
117
+ name: 'Jane', contact: Test::Contact.new(email: 'jane@doe.org')
126
118
  )
127
119
  )
128
120
  )
@@ -131,13 +123,13 @@ describe 'Mapper definition DSL' do
131
123
  it 'allows defining wrapped attributes mapped to a model' do
132
124
  setup.mappers do
133
125
  define(:with_user, parent: :tasks) do
134
- model name: 'TaskWithUser'
126
+ model name: 'Test::TaskWithUser'
135
127
 
136
128
  attribute :title
137
129
  attribute :priority
138
130
 
139
131
  wrap :user do
140
- model name: 'User'
132
+ model name: 'Test::User'
141
133
  attribute :email
142
134
  end
143
135
  end
@@ -145,16 +137,16 @@ describe 'Mapper definition DSL' do
145
137
 
146
138
  rom = setup.finalize
147
139
 
148
- TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
149
- User.send(:include, Equalizer.new(:email))
140
+ Test::TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
141
+ Test::User.send(:include, Equalizer.new(:email))
150
142
 
151
143
  jane = rom.read(:tasks).with_user.to_a.last
152
144
 
153
145
  expect(jane).to eql(
154
- TaskWithUser.new(
146
+ Test::TaskWithUser.new(
155
147
  title: 'be cool',
156
148
  priority: 2,
157
- user: User.new(email: 'jane@doe.org')
149
+ user: Test::User.new(email: 'jane@doe.org')
158
150
  )
159
151
  )
160
152
  end
@@ -1,44 +1,24 @@
1
1
  require 'spec_helper'
2
+ require 'rom/memory'
2
3
 
3
- describe 'Using in-memory adapter for cross-repo access' do
4
- it 'works' do
5
- setup = ROM.setup(
6
- left: 'memory://localhost/users',
7
- right: 'memory://localhost/tasks',
8
- main: 'memory://localhost/main'
9
- )
10
-
11
- setup.schema do
12
- base_relation :users do
13
- repository :left
14
- attribute :user_id
15
- attribute :name
16
- end
17
-
18
- base_relation :tasks do
19
- repository :right
20
- attribute :user_id
21
- attribute :title
22
- end
23
-
24
- base_relation :users_and_tasks do
25
- repository :main
4
+ describe 'Using in-memory repositories for cross-repo access' do
5
+ let(:setup) do
6
+ ROM.setup(left: :memory, right: :memory, main: :memory)
7
+ end
26
8
 
27
- attribute :user_id
28
- attribute :name
29
- attribute :title
30
- end
31
- end
9
+ let(:repositories) { rom.repositories }
10
+ let(:rom) { setup.finalize }
32
11
 
33
- setup.relation(:users) do
12
+ it 'works' do
13
+ setup.relation(:users, repository: :left) do
34
14
  def by_name(name)
35
15
  restrict(name: name)
36
16
  end
37
17
  end
38
18
 
39
- setup.relation(:tasks)
19
+ setup.relation(:tasks, repository: :right)
40
20
 
41
- setup.relation(:users_and_tasks) do
21
+ setup.relation(:users_and_tasks, repository: :main) do
42
22
  def by_user(name)
43
23
  join(users.by_name(name), tasks)
44
24
  end
@@ -50,12 +30,10 @@ describe 'Using in-memory adapter for cross-repo access' do
50
30
  end
51
31
  end
52
32
 
53
- rom = setup.finalize
54
-
55
- rom.left.users << { user_id: 1, name: 'Joe' }
56
- rom.left.users << { user_id: 2, name: 'Jane' }
57
- rom.right.tasks << { user_id: 1, title: 'Have fun' }
58
- rom.right.tasks << { user_id: 2, title: 'Have fun' }
33
+ repositories[:left][:users] << { user_id: 1, name: 'Joe' }
34
+ repositories[:left][:users] << { user_id: 2, name: 'Jane' }
35
+ repositories[:right][:tasks] << { user_id: 1, title: 'Have fun' }
36
+ repositories[:right][:tasks] << { user_id: 2, title: 'Have fun' }
59
37
 
60
38
  expect(rom.read(:users_and_tasks).by_user('Jane').to_a).to eql([
61
39
  { user_id: 2, name: 'Jane', tasks: [{ title: 'Have fun' }] }
@@ -18,14 +18,19 @@ describe 'Reading relations' do
18
18
 
19
19
  setup.mappers do
20
20
  define(:users) do
21
- model name: 'User'
21
+ model name: 'Test::User'
22
+
23
+ attribute :name
24
+ attribute :email
22
25
  end
23
26
  end
24
27
 
28
+ rom = setup.finalize
29
+
25
30
  users = rom.read(:users).sorted.by_name('Jane')
26
31
  user = users.first
27
32
 
28
- expect(user).to be_an_instance_of(User)
33
+ expect(user).to be_an_instance_of(Test::User)
29
34
  expect(user.name).to eql 'Jane'
30
35
  expect(user.email).to eql 'jane@doe.org'
31
36
  end
@@ -45,11 +50,14 @@ describe 'Reading relations' do
45
50
 
46
51
  setup.mappers do
47
52
  define(:users) do
48
- model name: 'User'
53
+ model name: 'Test::User'
54
+
55
+ attribute :name
56
+ attribute :email
49
57
  end
50
58
 
51
59
  define(:with_tasks, parent: :users) do
52
- model name: 'UserWithTasks'
60
+ model name: 'Test::UserWithTasks'
53
61
 
54
62
  group tasks: [:title, :priority]
55
63
  end
@@ -57,8 +65,8 @@ describe 'Reading relations' do
57
65
 
58
66
  rom = setup.finalize
59
67
 
60
- User.send(:include, Equalizer.new(:name, :email))
61
- UserWithTasks.send(:include, Equalizer.new(:name, :email, :tasks))
68
+ Test::User.send(:include, Equalizer.new(:name, :email))
69
+ Test::UserWithTasks.send(:include, Equalizer.new(:name, :email, :tasks))
62
70
 
63
71
  keys = rom.read(:users).with_tasks.header.keys
64
72
  expect(keys).to eql([:name, :email, :tasks])
@@ -66,7 +74,7 @@ describe 'Reading relations' do
66
74
  user = rom.read(:users).sorted.first
67
75
 
68
76
  expect(user).to eql(
69
- User.new(name: "Jane", email: "jane@doe.org")
77
+ Test::User.new(name: "Jane", email: "jane@doe.org")
70
78
  )
71
79
 
72
80
  expect(rom.read(:users)).to_not respond_to(:join)
@@ -74,7 +82,7 @@ describe 'Reading relations' do
74
82
  user = rom.read(:users).with_tasks.sorted.first
75
83
 
76
84
  expect(user).to eql(
77
- UserWithTasks.new(
85
+ Test::UserWithTasks.new(
78
86
  name: "Jane",
79
87
  email: "jane@doe.org",
80
88
  tasks: [{ title: "be cool", priority: 2 }])
@@ -96,11 +104,14 @@ describe 'Reading relations' do
96
104
 
97
105
  setup.mappers do
98
106
  define(:users) do
99
- model name: 'User'
107
+ model name: 'Test::User'
108
+
109
+ attribute :name
110
+ attribute :email
100
111
  end
101
112
 
102
113
  define(:with_task, parent: :users) do
103
- model name: 'UserWithTask'
114
+ model name: 'Test::UserWithTask'
104
115
 
105
116
  wrap task: [:title, :priority]
106
117
  end
@@ -108,8 +119,8 @@ describe 'Reading relations' do
108
119
 
109
120
  rom = setup.finalize
110
121
 
111
- User.send(:include, Equalizer.new(:name, :email))
112
- UserWithTask.send(:include, Equalizer.new(:name, :email, :task))
122
+ Test::User.send(:include, Equalizer.new(:name, :email))
123
+ Test::UserWithTask.send(:include, Equalizer.new(:name, :email, :task))
113
124
 
114
125
  keys = rom.read(:users).with_task.header.keys
115
126
  expect(keys).to eql([:name, :email, :task])
@@ -117,8 +128,8 @@ describe 'Reading relations' do
117
128
  user = rom.read(:users).sorted.with_task.first
118
129
 
119
130
  expect(user).to eql(
120
- UserWithTask.new(name: "Jane", email: "jane@doe.org",
121
- task: { title: "be cool", priority: 2 })
131
+ Test::UserWithTask.new(name: "Jane", email: "jane@doe.org",
132
+ task: { title: "be cool", priority: 2 })
122
133
  )
123
134
  end
124
135
 
@@ -139,4 +150,61 @@ describe 'Reading relations' do
139
150
 
140
151
  expect(user).to eql(name: "Jane", email: "jane@doe.org")
141
152
  end
153
+
154
+ it 'allows cherry-picking of a mapper' do
155
+ setup.relation(:users)
156
+
157
+ setup.mappers do
158
+ define(:users) do
159
+ attribute :name
160
+ attribute :email
161
+ end
162
+
163
+ define(:prefixer, parent: :users) do
164
+ attribute :user_name, from: :name
165
+ attribute :user_email, from: :email
166
+ end
167
+ end
168
+
169
+ rom = setup.finalize
170
+ user = rom.read(:users).map(:prefixer).first
171
+
172
+ expect(user).to eql(user_name: 'Joe', user_email: "joe@doe.org")
173
+ end
174
+
175
+ it 'allows passing a block to retrieve relations for mapping' do
176
+ setup.relation(:users) do
177
+ def by_name(name)
178
+ restrict(name: name)
179
+ end
180
+ end
181
+
182
+ setup.mappers do
183
+ define(:users) do
184
+ attribute :name
185
+ attribute :email
186
+ end
187
+
188
+ define(:prefixer, parent: :users) do
189
+ attribute :user_name, from: :name
190
+ attribute :user_email, from: :email
191
+ end
192
+ end
193
+
194
+ rom = setup.finalize
195
+
196
+ expect {
197
+ rom.relation(:users) { |users| users.not_here }
198
+ }.to raise_error(NoMethodError, /not_here/)
199
+
200
+ expect {
201
+ rom.relation(:users) { |users| users.by_name('Joe') }.as(:not_here)
202
+ }.to raise_error(ROM::MapperMissingError, /not_here/)
203
+
204
+ user = rom.relation(:users) { |users|
205
+ users.by_name('Joe')
206
+ }.map_with(:prefixer).call.first
207
+
208
+ expect(user).to eql(user_name: 'Joe', user_email: "joe@doe.org")
209
+ end
142
210
  end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+ require 'rom/memory'
3
+
4
+ describe 'Repository' do
5
+ let!(:setup) { ROM.setup(:memory) }
6
+
7
+ let(:rom) { setup.finalize }
8
+
9
+ before do
10
+ module ROM
11
+ module Memory
12
+ class Relation < ROM::Relation
13
+ def self.freaking_awesome?
14
+ true
15
+ end
16
+
17
+ def freaking_cool?
18
+ true
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ shared_examples_for 'extended relation' do
26
+ it 'can extend relation class' do
27
+ expect(rom.relations.users.class).to be_freaking_awesome
28
+ end
29
+
30
+ it 'can extend relation instance' do
31
+ expect(rom.relations.users).to be_freaking_cool
32
+ end
33
+ end
34
+
35
+ context 'using DSL' do
36
+ it_behaves_like 'extended relation' do
37
+ before do
38
+ setup.relation(:users)
39
+ end
40
+ end
41
+ end
42
+
43
+ context 'using class definition' do
44
+ it_behaves_like 'extended relation' do
45
+ before do
46
+ Class.new(ROM::Relation[:memory]) { dataset :users }
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,8 +1,9 @@
1
1
  require 'spec_helper'
2
+ require 'rom/memory'
2
3
 
3
4
  require 'logger'
4
5
 
5
- describe 'Adapters / Setting logger' do
6
+ describe 'Repositories / Setting logger' do
6
7
  let(:logger_class) do
7
8
  Class.new do
8
9
  attr_reader :messages
@@ -21,14 +22,14 @@ describe 'Adapters / Setting logger' do
21
22
  logger_class.new
22
23
  end
23
24
 
24
- it 'sets up a logger for a given adapter' do
25
- setup = ROM.setup(memory: 'memory://localhost')
25
+ it 'sets up a logger for a given repository' do
26
+ setup = ROM.setup(:memory)
26
27
 
27
- setup.memory.use_logger(logger)
28
+ setup.default.use_logger(logger)
28
29
 
29
30
  rom = setup.finalize
30
31
 
31
- rom.memory.logger.info("test")
32
+ rom.repositories[:default].logger.info("test")
32
33
 
33
34
  expect(logger.messages).to eql(["test"])
34
35
  end