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.
Files changed (143) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +30 -12
  3. data/.travis.yml +1 -1
  4. data/CHANGELOG.md +24 -0
  5. data/Gemfile +7 -3
  6. data/README.md +24 -11
  7. data/lib/rom.rb +9 -26
  8. data/lib/rom/command.rb +113 -75
  9. data/lib/rom/commands/class_interface.rb +115 -0
  10. data/lib/rom/commands/graph.rb +17 -23
  11. data/lib/rom/commands/graph/builder.rb +176 -0
  12. data/lib/rom/commands/graph/class_interface.rb +8 -2
  13. data/lib/rom/commands/graph/input_evaluator.rb +13 -9
  14. data/lib/rom/commands/lazy.rb +23 -17
  15. data/lib/rom/commands/lazy/create.rb +23 -0
  16. data/lib/rom/commands/lazy/delete.rb +27 -0
  17. data/lib/rom/commands/lazy/update.rb +34 -0
  18. data/lib/rom/commands/result.rb +14 -0
  19. data/lib/rom/commands/update.rb +0 -4
  20. data/lib/rom/configuration.rb +86 -0
  21. data/lib/rom/{setup_dsl/setup.rb → configuration_dsl.rb} +9 -7
  22. data/lib/rom/configuration_dsl/command.rb +43 -0
  23. data/lib/rom/{setup_dsl → configuration_dsl}/command_dsl.rb +5 -4
  24. data/lib/rom/configuration_dsl/mapper.rb +37 -0
  25. data/lib/rom/{setup_dsl → configuration_dsl}/mapper_dsl.rb +11 -5
  26. data/lib/rom/configuration_dsl/relation.rb +26 -0
  27. data/lib/rom/configuration_plugin.rb +17 -0
  28. data/lib/rom/constants.rb +5 -12
  29. data/lib/rom/container.rb +11 -8
  30. data/lib/rom/create_container.rb +61 -0
  31. data/lib/rom/environment.rb +27 -241
  32. data/lib/rom/gateway.rb +18 -2
  33. data/lib/rom/global.rb +24 -0
  34. data/lib/rom/global/plugin_dsl.rb +2 -0
  35. data/lib/rom/lint/spec.rb +0 -12
  36. data/lib/rom/lint/test.rb +0 -31
  37. data/lib/rom/memory/commands.rb +2 -2
  38. data/lib/rom/memory/gateway.rb +2 -0
  39. data/lib/rom/pipeline.rb +1 -1
  40. data/lib/rom/plugin_base.rb +1 -1
  41. data/lib/rom/plugin_registry.rb +12 -10
  42. data/lib/rom/plugins/configuration/configuration_dsl.rb +16 -0
  43. data/lib/rom/plugins/relation/key_inference.rb +31 -0
  44. data/lib/rom/plugins/relation/view.rb +90 -0
  45. data/lib/rom/plugins/relation/view/dsl.rb +32 -0
  46. data/lib/rom/relation.rb +1 -11
  47. data/lib/rom/relation/class_interface.rb +37 -50
  48. data/lib/rom/setup.rb +13 -104
  49. data/lib/rom/setup/auto_registration.rb +55 -0
  50. data/lib/rom/setup/finalize.rb +113 -127
  51. data/lib/rom/setup/finalize/commands.rb +67 -0
  52. data/lib/rom/setup/finalize/mappers.rb +36 -0
  53. data/lib/rom/setup/finalize/relations.rb +53 -0
  54. data/lib/rom/support/configurable.rb +21 -7
  55. data/lib/rom/version.rb +1 -1
  56. data/rakelib/mutant.rake +4 -1
  57. data/rom.gemspec +3 -4
  58. data/spec/fixtures/app/commands/create_user.rb +2 -0
  59. data/spec/fixtures/app/mappers/user_list.rb +2 -0
  60. data/spec/fixtures/app/relations/users.rb +2 -0
  61. data/spec/fixtures/lib/persistence/commands/create_user.rb +6 -0
  62. data/spec/fixtures/lib/persistence/mappers/user_list.rb +6 -0
  63. data/spec/fixtures/lib/persistence/relations/users.rb +6 -0
  64. data/spec/{unit/rom → integration}/command_registry_spec.rb +8 -9
  65. data/spec/integration/commands/create_spec.rb +17 -13
  66. data/spec/integration/commands/delete_spec.rb +12 -11
  67. data/spec/integration/commands/error_handling_spec.rb +5 -4
  68. data/spec/integration/commands/graph_builder_spec.rb +213 -0
  69. data/spec/integration/commands/graph_spec.rb +112 -49
  70. data/spec/integration/commands/update_spec.rb +14 -11
  71. data/spec/integration/commands_spec.rb +60 -0
  72. data/spec/integration/mappers/combine_spec.rb +7 -6
  73. data/spec/integration/mappers/deep_embedded_spec.rb +5 -6
  74. data/spec/integration/mappers/definition_dsl_spec.rb +19 -18
  75. data/spec/integration/mappers/embedded_spec.rb +11 -12
  76. data/spec/integration/mappers/exclude_spec.rb +5 -6
  77. data/spec/integration/mappers/fold_spec.rb +8 -7
  78. data/spec/integration/mappers/group_spec.rb +16 -15
  79. data/spec/integration/mappers/overwrite_attributes_value_spec.rb +5 -5
  80. data/spec/integration/mappers/prefix_separator_spec.rb +5 -7
  81. data/spec/integration/mappers/prefix_spec.rb +5 -7
  82. data/spec/integration/mappers/prefixing_attributes_spec.rb +7 -7
  83. data/spec/integration/mappers/registering_custom_mappers_spec.rb +4 -5
  84. data/spec/integration/mappers/renaming_attributes_spec.rb +18 -18
  85. data/spec/integration/mappers/step_spec.rb +11 -12
  86. data/spec/integration/mappers/symbolizing_attributes_spec.rb +11 -8
  87. data/spec/integration/mappers/unfold_spec.rb +9 -10
  88. data/spec/integration/mappers/ungroup_spec.rb +10 -11
  89. data/spec/integration/mappers/unwrap_spec.rb +10 -15
  90. data/spec/integration/mappers/wrap_spec.rb +16 -15
  91. data/spec/{unit/rom → integration}/memory/commands/create_spec.rb +7 -5
  92. data/spec/{unit/rom → integration}/memory/commands/delete_spec.rb +7 -5
  93. data/spec/{unit/rom → integration}/memory/commands/update_spec.rb +7 -5
  94. data/spec/integration/multi_env_spec.rb +16 -124
  95. data/spec/integration/multi_repo_spec.rb +9 -9
  96. data/spec/integration/relations/default_dataset_spec.rb +15 -0
  97. data/spec/integration/relations/inheritance_spec.rb +5 -7
  98. data/spec/integration/relations/reading_spec.rb +32 -65
  99. data/spec/integration/relations/registry_dsl_spec.rb +5 -4
  100. data/spec/integration/repositories/extending_relations_spec.rb +6 -7
  101. data/spec/integration/repositories/setting_logger_spec.rb +5 -7
  102. data/spec/integration/setup_spec.rb +49 -61
  103. data/spec/shared/command_graph.rb +50 -0
  104. data/spec/shared/container.rb +9 -0
  105. data/spec/shared/gateway_only.rb +6 -0
  106. data/spec/shared/no_container.rb +16 -0
  107. data/spec/shared/one_behavior.rb +4 -4
  108. data/spec/shared/users_and_tasks.rb +5 -17
  109. data/spec/spec_helper.rb +5 -3
  110. data/spec/test/memory_repository_lint_test.rb +1 -1
  111. data/spec/unit/rom/auto_registration_spec.rb +54 -0
  112. data/spec/unit/rom/commands/graph_spec.rb +18 -44
  113. data/spec/unit/rom/commands/lazy_spec.rb +246 -35
  114. data/spec/unit/rom/commands/result_spec.rb +56 -0
  115. data/spec/unit/rom/commands_spec.rb +9 -73
  116. data/spec/unit/rom/configurable_spec.rb +49 -0
  117. data/spec/unit/rom/configuration_spec.rb +61 -0
  118. data/spec/unit/rom/container_spec.rb +39 -33
  119. data/spec/unit/rom/create_container_spec.rb +151 -0
  120. data/spec/unit/rom/environment_spec.rb +123 -0
  121. data/spec/unit/rom/gateway_spec.rb +58 -2
  122. data/spec/unit/rom/global_spec.rb +10 -7
  123. data/spec/unit/rom/plugin_spec.rb +44 -25
  124. data/spec/unit/rom/plugins/relation/key_inference_spec.rb +27 -0
  125. data/spec/unit/rom/plugins/relation/view_spec.rb +47 -0
  126. data/spec/unit/rom/relation/composite_spec.rb +20 -20
  127. data/spec/unit/rom/relation/curried_spec.rb +10 -11
  128. data/spec/unit/rom/relation/graph_spec.rb +27 -27
  129. data/spec/unit/rom/relation/lazy/combine_spec.rb +26 -20
  130. data/spec/unit/rom/relation/lazy_spec.rb +38 -38
  131. data/spec/unit/rom/relation/loaded_spec.rb +2 -3
  132. data/spec/unit/rom/relation_spec.rb +39 -2
  133. metadata +58 -66
  134. data/lib/rom/commands/abstract.rb +0 -184
  135. data/lib/rom/environment_plugin.rb +0 -17
  136. data/lib/rom/environment_plugins/auto_registration.rb +0 -38
  137. data/lib/rom/repository.rb +0 -16
  138. data/lib/rom/setup_dsl/command.rb +0 -36
  139. data/lib/rom/setup_dsl/mapper.rb +0 -32
  140. data/lib/rom/setup_dsl/relation.rb +0 -30
  141. data/spec/integration/inline_setup_spec.rb +0 -65
  142. data/spec/unit/rom/repository_spec.rb +0 -12
  143. data/spec/unit/rom/setup_spec.rb +0 -253
@@ -2,12 +2,11 @@ require 'spec_helper'
2
2
  require 'rom/memory'
3
3
 
4
4
  describe 'Mappers / Symbolizing atributes' do
5
- let(:setup) { ROM.setup(:memory) }
6
- let(:rom) { setup.finalize }
5
+ include_context 'container'
7
6
 
8
7
  before do
9
- setup.relation(:users)
10
- setup.relation(:tasks)
8
+ configuration.relation(:users)
9
+ configuration.relation(:tasks)
11
10
  end
12
11
 
13
12
  it 'automatically maps all attributes using top-level settings' do
@@ -30,13 +29,15 @@ describe 'Mappers / Symbolizing atributes' do
30
29
  end
31
30
  end
32
31
 
33
- rom.relations.users << {
32
+ configuration.register_mapper(Test::UserMapper)
33
+
34
+ container.relations.users << {
34
35
  'user_id' => 123,
35
36
  'first_name' => 'Jane',
36
37
  'email' => 'jane@doe.org'
37
38
  }
38
39
 
39
- jane = rom.relation(:users).as(:users).first
40
+ jane = container.relation(:users).as(:users).first
40
41
 
41
42
  expect(jane).to eql(
42
43
  id: 123, details: { name: 'Jane' }, contact: { email: 'jane@doe.org' }
@@ -58,13 +59,15 @@ describe 'Mappers / Symbolizing atributes' do
58
59
  end
59
60
  end
60
61
 
61
- rom.relations.tasks << {
62
+ configuration.register_mapper(Test::TaskMapper)
63
+
64
+ container.relations.tasks << {
62
65
  'title' => 'Task One',
63
66
  'task_priority' => 1,
64
67
  'task_description' => 'It is a task'
65
68
  }
66
69
 
67
- task = rom.relation(:tasks).as(:tasks).first
70
+ task = container.relation(:tasks).as(:tasks).first
68
71
 
69
72
  expect(task).to eql(
70
73
  title: 'Task One',
@@ -2,13 +2,12 @@ require 'spec_helper'
2
2
  require 'rom/memory'
3
3
 
4
4
  describe 'Mapper definition DSL' do
5
- let(:setup) { ROM.setup(:memory) }
6
- let(:rom) { ROM.finalize.env }
5
+ include_context 'container'
7
6
 
8
7
  before do
9
- setup.relation(:users)
8
+ configuration.relation(:users)
10
9
 
11
- users = setup.default.dataset(:users)
10
+ users = configuration.default.dataset(:users)
12
11
 
13
12
  users.insert(name: 'Joe', roles: ['admin', 'user', 'user', nil])
14
13
  users.insert(name: 'Jane', roles: 'user')
@@ -16,10 +15,10 @@ describe 'Mapper definition DSL' do
16
15
  end
17
16
 
18
17
  describe 'unfold' do
19
- let(:mapped_users) { rom.relation(:users).as(:users).to_a }
18
+ let(:mapped_users) { container.relation(:users).as(:users).to_a }
20
19
 
21
20
  it 'splits the attribute' do
22
- setup.mappers do
21
+ configuration.mappers do
23
22
  define(:users) { unfold :roles }
24
23
  end
25
24
 
@@ -34,7 +33,7 @@ describe 'Mapper definition DSL' do
34
33
  end
35
34
 
36
35
  it 'renames unfolded attribute when necessary' do
37
- setup.mappers do
36
+ configuration.mappers do
38
37
  define(:users) { unfold :role, from: :roles }
39
38
  end
40
39
 
@@ -49,7 +48,7 @@ describe 'Mapper definition DSL' do
49
48
  end
50
49
 
51
50
  it 'rewrites the existing attribute' do
52
- setup.mappers do
51
+ configuration.mappers do
53
52
  define(:users) { unfold :name, from: :roles }
54
53
  end
55
54
 
@@ -64,7 +63,7 @@ describe 'Mapper definition DSL' do
64
63
  end
65
64
 
66
65
  it 'ignores the absent attribute' do
67
- setup.mappers do
66
+ configuration.mappers do
68
67
  define(:users) { unfold :foo, from: :absent }
69
68
  end
70
69
 
@@ -76,7 +75,7 @@ describe 'Mapper definition DSL' do
76
75
  end
77
76
 
78
77
  it 'accepts block' do
79
- setup.mappers do
78
+ configuration.mappers do
80
79
  define(:users) { unfold(:role, from: :roles) {} }
81
80
  end
82
81
 
@@ -2,29 +2,28 @@ require 'spec_helper'
2
2
  require 'rom/memory'
3
3
 
4
4
  describe 'Mapper definition DSL' do
5
- let(:setup) { ROM.setup(:memory) }
6
- let(:rom) { ROM.finalize.env }
5
+ include_context 'container'
7
6
 
8
7
  before do
9
- setup.relation(:users)
8
+ configuration.relation(:users)
10
9
 
11
- users = setup.default.dataset(:users)
10
+ users = configuration.default.dataset(:users)
12
11
  users.insert(name: 'Joe', emails: [
13
12
  { address: 'joe@home.org', type: 'home' },
14
13
  { address: 'joe@job.com', type: 'job' },
15
14
  { address: 'joe@doe.com', type: 'job' },
16
15
  { address: 'joe@thor.org' },
17
- { type: 'home' },
16
+ { type: 'home' },
18
17
  {}
19
18
  ])
20
19
  users.insert(name: 'Jane')
21
20
  end
22
21
 
23
22
  describe 'ungroup' do
24
- subject(:mapped_users) { rom.relation(:users).as(:users).to_a }
23
+ subject(:mapped_users) { container.relation(:users).as(:users).to_a }
25
24
 
26
25
  it 'partially ungroups attributes' do
27
- setup.mappers do
26
+ configuration.mappers do
28
27
  define(:users) { ungroup emails: [:type] }
29
28
  end
30
29
 
@@ -46,7 +45,7 @@ describe 'Mapper definition DSL' do
46
45
  end
47
46
 
48
47
  it 'removes group when all attributes extracted' do
49
- setup.mappers do
48
+ configuration.mappers do
50
49
  define(:users) { ungroup emails: [:address, :type, :foo] }
51
50
  end
52
51
 
@@ -62,7 +61,7 @@ describe 'Mapper definition DSL' do
62
61
  end
63
62
 
64
63
  it 'accepts block syntax' do
65
- setup.mappers do
64
+ configuration.mappers do
66
65
  define(:users) do
67
66
  ungroup :emails do
68
67
  attribute :address
@@ -83,7 +82,7 @@ describe 'Mapper definition DSL' do
83
82
  end
84
83
 
85
84
  it 'renames ungrouped attributes' do
86
- setup.mappers do
85
+ configuration.mappers do
87
86
  define(:users) do
88
87
  ungroup :emails do
89
88
  attribute :email, from: :address
@@ -104,7 +103,7 @@ describe 'Mapper definition DSL' do
104
103
  end
105
104
 
106
105
  it 'skips existing attributes' do
107
- setup.mappers do
106
+ configuration.mappers do
108
107
  define(:users) do
109
108
  ungroup :emails do
110
109
  attribute :name, from: :address
@@ -1,13 +1,14 @@
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 'unwrapping relation mapper' do
9
10
  before do
10
- setup.relation(:tasks) do
11
+ configuration.relation(:tasks) do
11
12
  def with_user
12
13
  tuples = map { |tuple|
13
14
  tuple.merge(user: users.restrict(name: tuple[:name]).first)
@@ -17,9 +18,9 @@ describe 'Mapper definition DSL' do
17
18
  end
18
19
  end
19
20
 
20
- setup.relation(:users)
21
+ configuration.relation(:users)
21
22
 
22
- setup.mappers do
23
+ configuration.mappers do
23
24
  define(:tasks) do
24
25
  model name: 'Test::Task'
25
26
 
@@ -30,7 +31,7 @@ describe 'Mapper definition DSL' do
30
31
  end
31
32
 
32
33
  it 'unwraps nested attributes via options hash' do
33
- setup.mappers do
34
+ configuration.mappers do
34
35
  define(:with_user, parent: :tasks) do
35
36
  attribute :title
36
37
  attribute :priority
@@ -39,9 +40,7 @@ describe 'Mapper definition DSL' do
39
40
  end
40
41
  end
41
42
 
42
- rom = setup.finalize
43
-
44
- result = rom.relation(:tasks).with_user.as(:with_user).to_a.last
43
+ result = container.relation(:tasks).with_user.as(:with_user).to_a.last
45
44
 
46
45
  expect(result).to eql(title: 'be cool',
47
46
  priority: 2,
@@ -50,7 +49,7 @@ describe 'Mapper definition DSL' do
50
49
  end
51
50
 
52
51
  it 'unwraps nested attributes via options block' do
53
- setup.mappers do
52
+ configuration.mappers do
54
53
  define(:with_user, parent: :tasks) do
55
54
  attribute :title
56
55
  attribute :priority
@@ -62,9 +61,7 @@ describe 'Mapper definition DSL' do
62
61
  end
63
62
  end
64
63
 
65
- rom = setup.finalize
66
-
67
- result = rom.relation(:tasks).with_user.as(:with_user).to_a.last
64
+ result = container.relation(:tasks).with_user.as(:with_user).to_a.last
68
65
 
69
66
  expect(result).to eql(title: 'be cool',
70
67
  priority: 2,
@@ -73,7 +70,7 @@ describe 'Mapper definition DSL' do
73
70
  end
74
71
 
75
72
  it 'unwraps specified attributes via options block' do
76
- setup.mappers do
73
+ configuration.mappers do
77
74
  define(:with_user, parent: :tasks) do
78
75
  attribute :title
79
76
  attribute :priority
@@ -84,9 +81,7 @@ describe 'Mapper definition DSL' do
84
81
  end
85
82
  end
86
83
 
87
- rom = setup.finalize
88
-
89
- result = rom.relation(:tasks).with_user.as(:with_user).to_a.last
84
+ result = container.relation(:tasks).with_user.as(:with_user).to_a.last
90
85
 
91
86
  expect(result).to eql(title: 'be cool',
92
87
  priority: 2,
@@ -1,21 +1,22 @@
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 'wrapped relation mapper' do
9
10
  before do
10
- setup.relation(:tasks) do
11
+ configuration.relation(:tasks) do
11
12
  def with_user
12
13
  join(users)
13
14
  end
14
15
  end
15
16
 
16
- setup.relation(:users)
17
+ configuration.relation(:users)
17
18
 
18
- setup.mappers do
19
+ configuration.mappers do
19
20
  define(:tasks) do
20
21
  model name: 'Test::Task'
21
22
 
@@ -26,7 +27,7 @@ describe 'Mapper definition DSL' do
26
27
  end
27
28
 
28
29
  it 'allows defining wrapped attributes via options hash' do
29
- setup.mappers do
30
+ configuration.mappers do
30
31
  define(:with_user, parent: :tasks) do
31
32
  model name: 'Test::TaskWithUser'
32
33
 
@@ -37,11 +38,11 @@ describe 'Mapper definition DSL' do
37
38
  end
38
39
  end
39
40
 
40
- rom = setup.finalize
41
+ container
41
42
 
42
43
  Test::TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
43
44
 
44
- jane = rom.relation(:tasks).with_user.as(:with_user).to_a.last
45
+ jane = container.relation(:tasks).with_user.as(:with_user).to_a.last
45
46
 
46
47
  expect(jane).to eql(
47
48
  Test::TaskWithUser.new(
@@ -53,7 +54,7 @@ describe 'Mapper definition DSL' do
53
54
  end
54
55
 
55
56
  it 'allows defining wrapped attributes via options block' do
56
- setup.mappers do
57
+ configuration.mappers do
57
58
  define(:with_user, parent: :tasks) do
58
59
  model name: 'Test::TaskWithUser'
59
60
 
@@ -66,11 +67,11 @@ describe 'Mapper definition DSL' do
66
67
  end
67
68
  end
68
69
 
69
- rom = setup.finalize
70
+ container
70
71
 
71
72
  Test::TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
72
73
 
73
- jane = rom.relation(:tasks).with_user.as(:with_user).to_a.last
74
+ jane = container.relation(:tasks).with_user.as(:with_user).to_a.last
74
75
 
75
76
  expect(jane).to eql(
76
77
  Test::TaskWithUser.new(
@@ -82,7 +83,7 @@ describe 'Mapper definition DSL' do
82
83
  end
83
84
 
84
85
  it 'allows defining nested wrapped attributes via a block' do
85
- setup.mappers do
86
+ configuration.mappers do
86
87
  define(:with_user, parent: :tasks, inherit_header: false) do
87
88
  model name: 'Test::TaskWithUser'
88
89
 
@@ -101,13 +102,13 @@ describe 'Mapper definition DSL' do
101
102
  end
102
103
  end
103
104
 
104
- rom = setup.finalize
105
+ container
105
106
 
106
107
  Test::TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
107
108
  Test::TaskUser.send(:include, Equalizer.new(:name, :contact))
108
109
  Test::Contact.send(:include, Equalizer.new(:email))
109
110
 
110
- jane = rom.relation(:tasks).with_user.as(:with_user).to_a.last
111
+ jane = container.relation(:tasks).with_user.as(:with_user).to_a.last
111
112
 
112
113
  expect(jane).to eql(
113
114
  Test::TaskWithUser.new(
@@ -121,7 +122,7 @@ describe 'Mapper definition DSL' do
121
122
  end
122
123
 
123
124
  it 'allows defining wrapped attributes mapped to a model' do
124
- setup.mappers do
125
+ configuration.mappers do
125
126
  define(:with_user, parent: :tasks) do
126
127
  model name: 'Test::TaskWithUser'
127
128
 
@@ -135,12 +136,12 @@ describe 'Mapper definition DSL' do
135
136
  end
136
137
  end
137
138
 
138
- rom = setup.finalize
139
+ container
139
140
 
140
141
  Test::TaskWithUser.send(:include, Equalizer.new(:title, :priority, :user))
141
142
  Test::User.send(:include, Equalizer.new(:email))
142
143
 
143
- jane = rom.relation(:tasks).with_user.as(:with_user).to_a.last
144
+ jane = container.relation(:tasks).with_user.as(:with_user).to_a.last
144
145
 
145
146
  expect(jane).to eql(
146
147
  Test::TaskWithUser.new(
@@ -3,19 +3,21 @@ require 'spec_helper'
3
3
  require 'rom/memory'
4
4
 
5
5
  describe ROM::Memory::Commands::Create do
6
+ include_context 'container'
6
7
  include_context 'users and tasks'
7
8
 
8
- subject(:command) { ROM::Memory::Commands::Create.build(users) }
9
-
10
- let(:users) { rom.relations[:users] }
11
-
12
9
  before do
13
- setup.relation(:users) do
10
+ configuration.relation(:users) do
14
11
  def by_id(id)
15
12
  restrict(id: id)
16
13
  end
17
14
  end
15
+ configuration.commands(:users) do
16
+ define(:create)
17
+ end
18
18
  end
19
19
 
20
+ subject(:command) { container.command(:users).create }
21
+
20
22
  it_behaves_like 'a command'
21
23
  end
@@ -3,19 +3,21 @@ require 'spec_helper'
3
3
  require 'rom/memory'
4
4
 
5
5
  describe ROM::Memory::Commands::Delete do
6
+ include_context 'container'
6
7
  include_context 'users and tasks'
7
8
 
8
- subject(:command) { ROM::Memory::Commands::Delete.build(users) }
9
-
10
- let(:users) { rom.relations[:users] }
11
-
12
9
  before do
13
- setup.relation(:users) do
10
+ configuration.relation(:users) do
14
11
  def by_id(id)
15
12
  restrict(id: id)
16
13
  end
17
14
  end
15
+ configuration.commands(:users) do
16
+ define(:delete)
17
+ end
18
18
  end
19
19
 
20
+ subject(:command) { container.command(:users).delete }
21
+
20
22
  it_behaves_like 'a command'
21
23
  end
@@ -3,19 +3,21 @@ require 'spec_helper'
3
3
  require 'rom/memory'
4
4
 
5
5
  describe ROM::Memory::Commands::Update do
6
+ include_context 'container'
6
7
  include_context 'users and tasks'
7
8
 
8
- subject(:command) { ROM::Memory::Commands::Update.build(users) }
9
-
10
- let(:users) { rom.relations[:users] }
11
-
12
9
  before do
13
- setup.relation(:users) do
10
+ configuration.relation(:users) do
14
11
  def by_id(id)
15
12
  restrict(id: id)
16
13
  end
17
14
  end
15
+ configuration.commands(:users) do
16
+ define(:update)
17
+ end
18
18
  end
19
19
 
20
+ subject(:command) { container.command(:users).update }
21
+
20
22
  it_behaves_like 'a command'
21
23
  end