rom 2.0.2 → 4.2.1

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 (203) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +35 -430
  3. data/LICENSE +1 -1
  4. data/README.md +83 -11
  5. data/lib/rom/version.rb +1 -1
  6. data/lib/rom.rb +3 -46
  7. metadata +30 -236
  8. data/.gitignore +0 -24
  9. data/.rspec +0 -3
  10. data/.rubocop.yml +0 -87
  11. data/.rubocop_todo.yml +0 -46
  12. data/.travis.yml +0 -28
  13. data/CODE_OF_CONDUCT.md +0 -13
  14. data/CONTRIBUTING.md +0 -1
  15. data/Gemfile +0 -41
  16. data/Guardfile +0 -24
  17. data/Rakefile +0 -22
  18. data/lib/rom/association_set.rb +0 -26
  19. data/lib/rom/command.rb +0 -173
  20. data/lib/rom/command_registry.rb +0 -153
  21. data/lib/rom/commands/class_interface.rb +0 -148
  22. data/lib/rom/commands/composite.rb +0 -54
  23. data/lib/rom/commands/create.rb +0 -13
  24. data/lib/rom/commands/delete.rb +0 -14
  25. data/lib/rom/commands/graph/builder.rb +0 -176
  26. data/lib/rom/commands/graph/class_interface.rb +0 -62
  27. data/lib/rom/commands/graph/input_evaluator.rb +0 -62
  28. data/lib/rom/commands/graph.rb +0 -103
  29. data/lib/rom/commands/lazy/create.rb +0 -23
  30. data/lib/rom/commands/lazy/delete.rb +0 -27
  31. data/lib/rom/commands/lazy/update.rb +0 -34
  32. data/lib/rom/commands/lazy.rb +0 -99
  33. data/lib/rom/commands/result.rb +0 -96
  34. data/lib/rom/commands/update.rb +0 -14
  35. data/lib/rom/commands.rb +0 -3
  36. data/lib/rom/configuration.rb +0 -88
  37. data/lib/rom/configuration_dsl/command.rb +0 -43
  38. data/lib/rom/configuration_dsl/command_dsl.rb +0 -35
  39. data/lib/rom/configuration_dsl/mapper.rb +0 -37
  40. data/lib/rom/configuration_dsl/mapper_dsl.rb +0 -44
  41. data/lib/rom/configuration_dsl/relation.rb +0 -26
  42. data/lib/rom/configuration_dsl.rb +0 -78
  43. data/lib/rom/configuration_plugin.rb +0 -17
  44. data/lib/rom/constants.rb +0 -30
  45. data/lib/rom/container.rb +0 -231
  46. data/lib/rom/create_container.rb +0 -61
  47. data/lib/rom/environment.rb +0 -70
  48. data/lib/rom/gateway.rb +0 -154
  49. data/lib/rom/global/plugin_dsl.rb +0 -49
  50. data/lib/rom/global.rb +0 -60
  51. data/lib/rom/lint/enumerable_dataset.rb +0 -54
  52. data/lib/rom/lint/gateway.rb +0 -94
  53. data/lib/rom/lint/linter.rb +0 -78
  54. data/lib/rom/lint/spec.rb +0 -20
  55. data/lib/rom/lint/test.rb +0 -98
  56. data/lib/rom/mapper_registry.rb +0 -35
  57. data/lib/rom/memory/commands.rb +0 -58
  58. data/lib/rom/memory/dataset.rb +0 -98
  59. data/lib/rom/memory/gateway.rb +0 -64
  60. data/lib/rom/memory/relation.rb +0 -49
  61. data/lib/rom/memory/storage.rb +0 -59
  62. data/lib/rom/memory/types.rb +0 -9
  63. data/lib/rom/memory.rb +0 -4
  64. data/lib/rom/pipeline.rb +0 -106
  65. data/lib/rom/plugin.rb +0 -17
  66. data/lib/rom/plugin_base.rb +0 -31
  67. data/lib/rom/plugin_registry.rb +0 -173
  68. data/lib/rom/plugins/command/schema.rb +0 -37
  69. data/lib/rom/plugins/configuration/configuration_dsl.rb +0 -17
  70. data/lib/rom/plugins/relation/key_inference.rb +0 -46
  71. data/lib/rom/plugins/relation/registry_reader.rb +0 -32
  72. data/lib/rom/plugins/relation/view/dsl.rb +0 -32
  73. data/lib/rom/plugins/relation/view.rb +0 -95
  74. data/lib/rom/relation/class_interface.rb +0 -230
  75. data/lib/rom/relation/composite.rb +0 -46
  76. data/lib/rom/relation/curried.rb +0 -104
  77. data/lib/rom/relation/graph.rb +0 -115
  78. data/lib/rom/relation/loaded.rb +0 -118
  79. data/lib/rom/relation/materializable.rb +0 -66
  80. data/lib/rom/relation/name.rb +0 -102
  81. data/lib/rom/relation.rb +0 -172
  82. data/lib/rom/relation_registry.rb +0 -9
  83. data/lib/rom/schema/dsl.rb +0 -58
  84. data/lib/rom/schema.rb +0 -89
  85. data/lib/rom/setup/auto_registration.rb +0 -69
  86. data/lib/rom/setup/auto_registration_strategies/base.rb +0 -11
  87. data/lib/rom/setup/auto_registration_strategies/custom_namespace.rb +0 -22
  88. data/lib/rom/setup/auto_registration_strategies/no_namespace.rb +0 -19
  89. data/lib/rom/setup/auto_registration_strategies/with_namespace.rb +0 -18
  90. data/lib/rom/setup/finalize/finalize_commands.rb +0 -47
  91. data/lib/rom/setup/finalize/finalize_mappers.rb +0 -36
  92. data/lib/rom/setup/finalize/finalize_relations.rb +0 -60
  93. data/lib/rom/setup/finalize.rb +0 -146
  94. data/lib/rom/setup.rb +0 -55
  95. data/lib/rom/support/configurable.rb +0 -80
  96. data/lib/rom/types.rb +0 -18
  97. data/log/.gitkeep +0 -0
  98. data/rakelib/benchmark.rake +0 -15
  99. data/rakelib/mutant.rake +0 -19
  100. data/rakelib/rubocop.rake +0 -18
  101. data/rom.gemspec +0 -26
  102. data/spec/fixtures/app/commands/create_user.rb +0 -2
  103. data/spec/fixtures/app/mappers/user_list.rb +0 -2
  104. data/spec/fixtures/app/my_commands/create_user.rb +0 -2
  105. data/spec/fixtures/app/my_mappers/user_list.rb +0 -2
  106. data/spec/fixtures/app/my_relations/users.rb +0 -2
  107. data/spec/fixtures/app/relations/users.rb +0 -2
  108. data/spec/fixtures/custom/commands/create_user.rb +0 -6
  109. data/spec/fixtures/custom/mappers/user_list.rb +0 -6
  110. data/spec/fixtures/custom/relations/users.rb +0 -6
  111. data/spec/fixtures/lib/persistence/commands/create_user.rb +0 -6
  112. data/spec/fixtures/lib/persistence/mappers/user_list.rb +0 -6
  113. data/spec/fixtures/lib/persistence/my_commands/create_user.rb +0 -6
  114. data/spec/fixtures/lib/persistence/my_mappers/user_list.rb +0 -6
  115. data/spec/fixtures/lib/persistence/my_relations/users.rb +0 -6
  116. data/spec/fixtures/lib/persistence/relations/users.rb +0 -6
  117. data/spec/integration/command_registry_spec.rb +0 -60
  118. data/spec/integration/commands/create_spec.rb +0 -177
  119. data/spec/integration/commands/delete_spec.rb +0 -67
  120. data/spec/integration/commands/error_handling_spec.rb +0 -25
  121. data/spec/integration/commands/graph_builder_spec.rb +0 -213
  122. data/spec/integration/commands/graph_spec.rb +0 -288
  123. data/spec/integration/commands/update_spec.rb +0 -109
  124. data/spec/integration/commands_spec.rb +0 -67
  125. data/spec/integration/mappers/combine_spec.rb +0 -117
  126. data/spec/integration/mappers/deep_embedded_spec.rb +0 -44
  127. data/spec/integration/mappers/definition_dsl_spec.rb +0 -206
  128. data/spec/integration/mappers/embedded_spec.rb +0 -62
  129. data/spec/integration/mappers/exclude_spec.rb +0 -27
  130. data/spec/integration/mappers/fold_spec.rb +0 -71
  131. data/spec/integration/mappers/group_spec.rb +0 -163
  132. data/spec/integration/mappers/overwrite_attributes_value_spec.rb +0 -51
  133. data/spec/integration/mappers/prefix_separator_spec.rb +0 -52
  134. data/spec/integration/mappers/prefix_spec.rb +0 -48
  135. data/spec/integration/mappers/prefixing_attributes_spec.rb +0 -37
  136. data/spec/integration/mappers/registering_custom_mappers_spec.rb +0 -28
  137. data/spec/integration/mappers/renaming_attributes_spec.rb +0 -125
  138. data/spec/integration/mappers/reusing_mappers_spec.rb +0 -43
  139. data/spec/integration/mappers/step_spec.rb +0 -119
  140. data/spec/integration/mappers/symbolizing_attributes_spec.rb +0 -77
  141. data/spec/integration/mappers/unfold_spec.rb +0 -92
  142. data/spec/integration/mappers/ungroup_spec.rb +0 -126
  143. data/spec/integration/mappers/unwrap_spec.rb +0 -93
  144. data/spec/integration/mappers/wrap_spec.rb +0 -155
  145. data/spec/integration/memory/commands/create_spec.rb +0 -23
  146. data/spec/integration/memory/commands/delete_spec.rb +0 -23
  147. data/spec/integration/memory/commands/update_spec.rb +0 -23
  148. data/spec/integration/multi_env_spec.rb +0 -69
  149. data/spec/integration/multi_repo_spec.rb +0 -46
  150. data/spec/integration/relations/default_dataset_spec.rb +0 -38
  151. data/spec/integration/relations/inheritance_spec.rb +0 -37
  152. data/spec/integration/relations/reading_spec.rb +0 -169
  153. data/spec/integration/relations/registry_dsl_spec.rb +0 -45
  154. data/spec/integration/repositories/extending_relations_spec.rb +0 -58
  155. data/spec/integration/repositories/setting_logger_spec.rb +0 -34
  156. data/spec/integration/setup_spec.rb +0 -160
  157. data/spec/shared/command_behavior.rb +0 -28
  158. data/spec/shared/command_graph.rb +0 -50
  159. data/spec/shared/container.rb +0 -9
  160. data/spec/shared/enumerable_dataset.rb +0 -52
  161. data/spec/shared/gateway_only.rb +0 -6
  162. data/spec/shared/materializable.rb +0 -36
  163. data/spec/shared/no_container.rb +0 -16
  164. data/spec/shared/one_behavior.rb +0 -26
  165. data/spec/shared/proxy.rb +0 -0
  166. data/spec/shared/users_and_tasks.rb +0 -10
  167. data/spec/spec_helper.rb +0 -52
  168. data/spec/support/constant_leak_finder.rb +0 -14
  169. data/spec/support/mutant.rb +0 -10
  170. data/spec/support/types.rb +0 -5
  171. data/spec/test/memory_repository_lint_test.rb +0 -27
  172. data/spec/unit/rom/association_set_spec.rb +0 -23
  173. data/spec/unit/rom/commands/graph_spec.rb +0 -191
  174. data/spec/unit/rom/commands/lazy_spec.rb +0 -307
  175. data/spec/unit/rom/commands/result_spec.rb +0 -70
  176. data/spec/unit/rom/commands_spec.rb +0 -165
  177. data/spec/unit/rom/configurable_spec.rb +0 -49
  178. data/spec/unit/rom/configuration_spec.rb +0 -61
  179. data/spec/unit/rom/container_spec.rb +0 -99
  180. data/spec/unit/rom/create_container_spec.rb +0 -151
  181. data/spec/unit/rom/environment_spec.rb +0 -123
  182. data/spec/unit/rom/gateway_spec.rb +0 -146
  183. data/spec/unit/rom/mapper_registry_spec.rb +0 -25
  184. data/spec/unit/rom/memory/commands_spec.rb +0 -43
  185. data/spec/unit/rom/memory/dataset_spec.rb +0 -31
  186. data/spec/unit/rom/memory/relation_spec.rb +0 -109
  187. data/spec/unit/rom/memory/repository_spec.rb +0 -12
  188. data/spec/unit/rom/memory/storage_spec.rb +0 -45
  189. data/spec/unit/rom/plugin_spec.rb +0 -150
  190. data/spec/unit/rom/plugins/command/schema_spec.rb +0 -66
  191. data/spec/unit/rom/plugins/relation/key_inference_spec.rb +0 -85
  192. data/spec/unit/rom/plugins/relation/view_spec.rb +0 -51
  193. data/spec/unit/rom/relation/composite_spec.rb +0 -89
  194. data/spec/unit/rom/relation/curried_spec.rb +0 -52
  195. data/spec/unit/rom/relation/graph_spec.rb +0 -92
  196. data/spec/unit/rom/relation/lazy/combine_spec.rb +0 -165
  197. data/spec/unit/rom/relation/lazy_spec.rb +0 -214
  198. data/spec/unit/rom/relation/loaded_spec.rb +0 -53
  199. data/spec/unit/rom/relation/name_spec.rb +0 -58
  200. data/spec/unit/rom/relation/schema_spec.rb +0 -117
  201. data/spec/unit/rom/relation_spec.rb +0 -237
  202. data/spec/unit/rom/schema_spec.rb +0 -10
  203. data/spec/unit/rom/setup/auto_registration_spec.rb +0 -152
@@ -1,146 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ROM::Gateway do
4
-
5
- subject(:gateway) { Class.new(ROM::Gateway).new }
6
-
7
- describe '.setup' do
8
- it 'sets up a gateway based on a type' do
9
- gateway_class = Class.new(ROM::Gateway) do
10
- attr_reader :args
11
-
12
- def initialize(*args)
13
- @args = args
14
- end
15
- end
16
-
17
- allow(ROM::Gateway).to receive(:class_from_symbol)
18
- .with(:wormhole).and_return(gateway_class)
19
-
20
- args = %w(hello world)
21
- gateway = ROM::Gateway.setup(:wormhole, *args)
22
-
23
- expect(gateway).to be_instance_of(gateway_class)
24
- expect(gateway.args).to eq(args)
25
- end
26
-
27
- it 'raises an exception if the type is not supported' do
28
- expect {
29
- ROM::Gateway.setup(:bogus, "memory://test")
30
- }.to raise_error(ROM::AdapterLoadError, /bogus/)
31
- end
32
-
33
- it 'accepts a gateway instance' do
34
- gateway = ROM::Gateway.new
35
- expect(ROM::Gateway.setup(gateway)).to be(gateway)
36
- end
37
-
38
- it 'raises an exception if instance and arguments are passed' do
39
- gateway = ROM::Gateway.new
40
-
41
- expect { ROM::Gateway.setup(gateway, 'foo://bar') }.to raise_error(
42
- ArgumentError,
43
- "Can't accept arguments when passing an instance"
44
- )
45
- end
46
-
47
- it 'raises an exception if a URI string is passed' do
48
- expect { ROM::Gateway.setup('memory://test') }.to raise_error(
49
- ArgumentError,
50
- /URIs without an explicit scheme are not supported anymore/
51
- )
52
- end
53
- end
54
-
55
- describe '.class_from_symbol' do
56
- context 'when adapter is already present' do
57
- before do
58
- module Test
59
- module Adapter
60
- class Gateway
61
- end
62
- end
63
- end
64
-
65
- ROM.register_adapter(:test_adapter, Test::Adapter)
66
- end
67
-
68
- it 'does not try to require an adapter if it is already present' do
69
- klass = ROM::Gateway.class_from_symbol(:test_adapter)
70
-
71
- expect(klass).to be(Test::Adapter::Gateway)
72
- end
73
- end
74
-
75
- it 'instantiates a gateway based on type' do
76
- klass = ROM::Gateway.class_from_symbol(:memory)
77
- expect(klass).to be(ROM::Memory::Gateway)
78
- end
79
-
80
- it 'raises an exception if the type is not supported' do
81
- expect { ROM::Gateway.class_from_symbol(:bogus) }
82
- .to raise_error(ROM::AdapterLoadError, /bogus/)
83
- end
84
- end
85
-
86
- describe '#disconnect' do
87
- it 'does nothing' do
88
- expect(gateway.disconnect).to be(nil)
89
- end
90
- end
91
-
92
- describe '#logger' do
93
- it 'does nothing' do
94
- expect(gateway.logger).to be(nil)
95
- end
96
- end
97
-
98
- describe '#use_logger' do
99
- it 'does nothing' do
100
- expect(gateway.use_logger).to be(nil)
101
- end
102
-
103
- it 'accepts parameters' do
104
- params = [5, "mutations", "are", "nice"]
105
-
106
- expect { gateway.use_logger(params) }.to_not raise_error
107
- end
108
- end
109
-
110
- describe '#extend_command_class' do
111
- it 'returns the class sent as 1st parameter' do
112
- klass = Class.new.freeze
113
-
114
- expect(gateway.extend_command_class(klass, "foo")).to eq(klass)
115
- end
116
- end
117
-
118
- describe '.adapter' do
119
- let(:gateway_class) { Class.new(ROM::Gateway) }
120
-
121
- it 'gets/sets the adapter' do
122
- expect { gateway_class.adapter :custom }
123
- .to change { gateway_class.adapter }
124
- .from(nil)
125
- .to(:custom)
126
- end
127
- end
128
-
129
- describe "#adapter" do
130
- before { Test::CustomGateway = Class.new(ROM::Gateway) }
131
-
132
- let(:gateway) { Test::CustomGateway.new }
133
-
134
- it 'returns class adapter' do
135
- Test::CustomGateway.adapter :custom
136
- expect(gateway.adapter).to eql :custom
137
- end
138
-
139
- it 'requires the adapter to be defined' do
140
- expect { gateway.adapter }.to raise_error(
141
- ROM::MissingAdapterIdentifierError, /Test::CustomGateway/
142
- )
143
- end
144
- end # describe #adapter
145
-
146
- end
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ROM::MapperRegistry do
4
- subject(:registry) { ROM::MapperRegistry.new }
5
-
6
- let(:user_mapper) { double('user_mapper') }
7
- let(:index_mapper) { double('index_mapper') }
8
-
9
- before do
10
- registry[:users] = user_mapper
11
- registry[:index] = index_mapper
12
- end
13
-
14
- describe '#by_path' do
15
- it 'returns first matching mapper' do
16
- mapper = registry.by_path('users')
17
-
18
- expect(mapper).to be(user_mapper)
19
-
20
- mapper = registry.by_path('users.index')
21
-
22
- expect(mapper).to be(index_mapper)
23
- end
24
- end
25
- end
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
- require 'rom/memory'
3
-
4
- describe ROM::Memory::Commands do
5
- let(:relation) do
6
- Class.new(ROM::Relation[:memory]) do
7
- schema do
8
- attribute :id, ROM::Memory::Types::Int
9
- attribute :name, ROM::Memory::Types::String
10
- end
11
- end.new(ROM::Memory::Dataset.new([]))
12
- end
13
-
14
- describe 'Create' do
15
- subject(:command) { ROM::Commands::Create[:memory].build(relation) }
16
-
17
- describe '#call' do
18
- it 'uses default input handler' do
19
- result = command.call([id: 1, name: 'Jane', haha: 'oops'])
20
-
21
- expect(result).to eql([{ id: 1, name: 'Jane' }])
22
- end
23
- end
24
- end
25
-
26
- describe 'Update' do
27
- subject(:command) { ROM::Commands::Update[:memory].build(relation) }
28
-
29
- before do
30
- relation.insert(id: 1, name: 'Jane')
31
- end
32
-
33
- describe '#call' do
34
- it 'uses default input handler' do
35
- result = command
36
- .new(relation.restrict(id: 1))
37
- .call(name: 'Jane Doe', haha: 'oops')
38
-
39
- expect(result).to eql([{ id: 1, name: 'Jane Doe' }])
40
- end
41
- end
42
- end
43
- end
@@ -1,31 +0,0 @@
1
- require 'spec_helper'
2
- require 'rom/lint/spec'
3
-
4
- require 'rom/memory/dataset'
5
-
6
- describe ROM::Memory::Dataset do
7
- subject(:dataset) { ROM::Memory::Dataset.new(data) }
8
-
9
- let(:data) do
10
- [
11
- { name: 'Jane', email: 'jane@doe.org', age: 10 },
12
- { name: 'Jade', email: 'jade@doe.org', age: 11 },
13
- { name: 'Joe', email: 'joe@doe.org', age: 12 }
14
- ]
15
- end
16
-
17
- it_behaves_like "a rom enumerable dataset"
18
-
19
- describe 'subclassing' do
20
- it 'supports options' do
21
- descendant = Class.new(ROM::Memory::Dataset) do
22
- option :path, reader: true
23
- end
24
-
25
- dataset = descendant.new([1, 2, 3], path: '/data')
26
-
27
- expect(dataset.to_a).to eql([1, 2, 3])
28
- expect(dataset.path).to eql('/data')
29
- end
30
- end
31
- end
@@ -1,109 +0,0 @@
1
- require 'spec_helper'
2
- require 'rom/lint/spec'
3
-
4
- require 'rom/memory/dataset'
5
- require 'rom/memory/relation'
6
-
7
- describe ROM::Memory::Relation do
8
- subject(:relation) { ROM::Memory::Relation.new(dataset) }
9
-
10
- let(:dataset) do
11
- ROM::Memory::Dataset.new([
12
- { name: 'Jane', email: 'jane@doe.org', age: 10 },
13
- { name: 'Jade', email: 'jade@doe.org', age: 11 },
14
- { name: 'Joe', email: 'joe@doe.org', age: 12 },
15
- { name: 'Jack', age: 11 },
16
- { name: 'Jill', email: 'jill@doe.org' },
17
- { name: 'John' },
18
- { name: 'Judy', email: 'judy@doe.org', age: 11 }
19
- ])
20
- end
21
-
22
- describe '#take' do
23
- it 'takes given number of tuples' do
24
- expect(relation.take(2)).to match_array([
25
- { name: 'Jane', email: 'jane@doe.org', age: 10 },
26
- { name: 'Jade', email: 'jade@doe.org', age: 11 }
27
- ])
28
- end
29
- end
30
-
31
- describe '#project' do
32
- it 'projects tuples with the provided keys' do
33
- expect(relation.project(:name, :age)).to match_array([
34
- { name: 'Jane', age: 10 },
35
- { name: 'Jade', age: 11 },
36
- { name: 'Joe', age: 12 },
37
- { name: 'Jack', age: 11 },
38
- { name: 'Jill' },
39
- { name: 'John' },
40
- { name: 'Judy', age: 11 }
41
- ])
42
- end
43
- end
44
-
45
- describe '#restrict' do
46
- it 'restricts data using criteria hash' do
47
- expect(relation.restrict(age: 10)).to match_array([
48
- { name: 'Jane', email: 'jane@doe.org', age: 10 }
49
- ])
50
-
51
- expect(relation.restrict(age: 10.0)).to match_array([])
52
- end
53
-
54
- it 'restricts data using block' do
55
- expect(relation.restrict { |tuple| tuple[:age].to_i > 10 }).to match_array([
56
- { name: 'Jade', email: 'jade@doe.org', age: 11 },
57
- { name: 'Joe', email: 'joe@doe.org', age: 12 },
58
- { name: 'Jack', age: 11 },
59
- { name: 'Judy', email: 'judy@doe.org', age: 11 }
60
- ])
61
- end
62
-
63
- it 'allows to use array as a value' do
64
- expect(relation.restrict(age: [10, 11])).to match_array([
65
- { name: 'Jane', email: 'jane@doe.org', age: 10 },
66
- { name: 'Jade', email: 'jade@doe.org', age: 11 },
67
- { name: 'Jack', age: 11 },
68
- { name: 'Judy', email: 'judy@doe.org', age: 11 }
69
- ])
70
- end
71
-
72
- it 'allows to use regexp as a value' do
73
- expect(relation.restrict(name: /\w{4}/)).to match_array([
74
- { name: 'Jane', email: 'jane@doe.org', age: 10 },
75
- { name: 'Jade', email: 'jade@doe.org', age: 11 },
76
- { name: 'Jack', age: 11 },
77
- { name: 'Jill', email: 'jill@doe.org' },
78
- { name: 'John' },
79
- { name: 'Judy', email: 'judy@doe.org', age: 11 }
80
- ])
81
- end
82
- end
83
-
84
- describe '#order' do
85
- it 'sorts data using provided attribute names' do
86
- expect(relation.order(:age, :email).to_a).to eq([
87
- { name: 'Jane', age: 10, email: 'jane@doe.org' },
88
- { name: 'Jade', age: 11, email: 'jade@doe.org' },
89
- { name: 'Judy', age: 11, email: 'judy@doe.org' },
90
- { name: 'Jack', age: 11 },
91
- { name: 'Joe', age: 12, email: 'joe@doe.org' },
92
- { name: 'Jill', email: 'jill@doe.org' },
93
- { name: 'John' }
94
- ])
95
- end
96
-
97
- it 'places nil before other values when required' do
98
- expect(relation.order(:age, :email, nils_first: true).to_a).to eq([
99
- { name: 'John' },
100
- { name: 'Jill', email: 'jill@doe.org' },
101
- { name: 'Jane', age: 10, email: 'jane@doe.org' },
102
- { name: 'Jack', age: 11 },
103
- { name: 'Jade', age: 11, email: 'jade@doe.org' },
104
- { name: 'Judy', age: 11, email: 'judy@doe.org' },
105
- { name: 'Joe', age: 12, email: 'joe@doe.org' }
106
- ])
107
- end
108
- end
109
- end
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
- require 'rom/lint/spec'
3
- require 'rom/memory'
4
-
5
- describe ROM::Memory::Gateway do
6
- let(:gateway) { ROM::Memory::Gateway }
7
- let(:uri) { nil }
8
-
9
- it_behaves_like "a rom gateway" do
10
- let(:identifier) { :memory }
11
- end
12
- end
@@ -1,45 +0,0 @@
1
- require 'spec_helper'
2
- require 'rom/memory/storage'
3
-
4
- describe ROM::Memory::Storage do
5
- describe 'thread safe' do
6
- let(:threads) { 4 }
7
- let(:operations) { 5000 }
8
-
9
- describe 'data' do
10
- it 'create datasets properly' do
11
- storage = ROM::Memory::Storage.new
12
-
13
- threaded_operations do |thread, operation|
14
- key = "#{thread}:#{operation}"
15
- storage.create_dataset(key)
16
- end
17
-
18
- expect(storage.size).to eql(threads * operations)
19
- end
20
- end
21
-
22
- describe 'dataset' do
23
- it 'inserts data in proper order' do
24
- storage = ROM::Memory::Storage.new
25
- dataset = storage.create_dataset(:ary)
26
-
27
- threaded_operations do
28
- dataset << :data
29
- end
30
-
31
- expect(dataset.size).to eql(threads * operations)
32
- end
33
- end
34
-
35
- def threaded_operations
36
- threads.times.map { |thread|
37
- Thread.new do
38
- operations.times do |operation|
39
- yield thread, operation
40
- end
41
- end
42
- }.each(&:join)
43
- end
44
- end
45
- end
@@ -1,150 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "ROM::PluginRegistry" do
4
- include_context 'container'
5
-
6
- before do
7
- Test::ConfigurationPlugin = Module.new
8
- Test::CommandPlugin = Module.new
9
- Test::MapperPlugin = Module.new
10
- Test::RelationPlugin = Module.new do
11
- def plugged_in
12
- "a relation"
13
- end
14
- end
15
-
16
- ROM.plugins do
17
- register :registration, Test::ConfigurationPlugin, type: :configuration
18
- register :publisher, Test::CommandPlugin, type: :command
19
- register :pager, Test::RelationPlugin, type: :relation
20
- register :translater, Test::MapperPlugin, type: :mapper
21
- end
22
-
23
- configuration
24
- end
25
-
26
- around do |example|
27
- orig_plugins = ROM.plugin_registry
28
- example.run
29
- ROM.instance_variable_set('@plugin_registry', orig_plugins)
30
- end
31
-
32
- it "makes configuration plugins available" do
33
- expect(ROM.plugin_registry.configuration[:registration].mod).to eq Test::ConfigurationPlugin
34
- end
35
-
36
- it "includes relation plugins" do
37
- users = Class.new(ROM::Relation[:memory]) do
38
- register_as :users
39
- use :pager
40
- end
41
- configuration.register_relation(users)
42
-
43
- expect(container.relation(:users).plugged_in).to eq "a relation"
44
- end
45
-
46
- it "makes command plugins available" do
47
- users = Class.new(ROM::Relation[:memory]) do
48
- register_as :users
49
- end
50
-
51
- create_user = Class.new(ROM::Commands::Create[:memory]) do
52
- relation :users
53
- register_as :create
54
- use :publisher
55
- end
56
-
57
- configuration.register_relation(users)
58
- configuration.register_command(create_user)
59
-
60
- expect(container.command(:users).create).to be_kind_of Test::CommandPlugin
61
- end
62
-
63
- it "inclues plugins in mappers" do
64
- users = Class.new(ROM::Relation[:memory]) do
65
- register_as :users
66
- end
67
- translator = Class.new(ROM::Mapper) do
68
- relation :users
69
- register_as :translator
70
- use :translater
71
- end
72
-
73
- configuration.register_relation(users)
74
- configuration.register_mapper(translator)
75
-
76
- expect(container.mappers[:users][:translator]).to be_kind_of Test::MapperPlugin
77
- end
78
-
79
- it "restricts plugins to defined type" do
80
- expect {
81
- configuration.relation(:users) do
82
- use :publisher
83
- end
84
- }.to raise_error ROM::UnknownPluginError
85
- end
86
-
87
- it "allows definition of adapter restricted plugins" do
88
- Test::LazyPlugin = Module.new do
89
- def lazy?
90
- true
91
- end
92
- end
93
-
94
- ROM.plugins do
95
- adapter :memory do
96
- register :lazy, Test::LazyPlugin, type: :relation
97
- end
98
- end
99
-
100
- users = Class.new(ROM::Relation[:memory]) do
101
- register_as :users
102
- use :lazy
103
- end
104
- configuration.register_relation(users)
105
-
106
- expect(container.relation(:users)).to be_lazy
107
- end
108
-
109
- it "respects adapter restrictions" do
110
- Test::LazyPlugin = Module.new
111
- Test::LazyMemoryPlugin = Module.new
112
- Test::LazySQLPlugin = Module.new
113
-
114
- ROM.plugins do
115
- register :lazy, Test::LazyPlugin, type: :command
116
-
117
- adapter :memory do
118
- register :lazy_command, Test::LazyMemoryPlugin, type: :command
119
- end
120
-
121
- adapter :sql do
122
- register :lazy, Test::LazySQLPlugin, type: :command
123
- end
124
- end
125
-
126
- users = Class.new(ROM::Relation[:memory]) do
127
- register_as :users
128
- end
129
-
130
- create_user = Class.new(ROM::Commands::Create[:memory]) do
131
- relation :users
132
- register_as :create
133
- use :lazy
134
- end
135
-
136
- update_user = Class.new(ROM::Commands::Update[:memory]) do
137
- relation :users
138
- register_as :update
139
- use :lazy_command
140
- end
141
-
142
- configuration.register_relation(users)
143
- configuration.register_command(create_user)
144
- configuration.register_command(update_user)
145
-
146
- expect(container.command(:users).create).not_to be_kind_of Test::LazySQLPlugin
147
- expect(container.command(:users).create).to be_kind_of Test::LazyPlugin
148
- expect(container.command(:users).update).to be_kind_of Test::LazyMemoryPlugin
149
- end
150
- end
@@ -1,66 +0,0 @@
1
- require 'rom/relation'
2
- require 'rom/command'
3
- require 'rom/plugins/command/schema'
4
-
5
- RSpec.describe ROM::Plugins::Command::Schema do
6
- describe '.build' do
7
- let(:command_class) do
8
- Class.new(ROM::Command) { use :schema }
9
- end
10
-
11
- context 'when relation has no schema defined' do
12
- let(:relation) do
13
- instance_double(ROM::Relation, schema?: false)
14
- end
15
-
16
- it 'sets default input handler when command does not have a custom one' do
17
- command = Class.new(command_class).build(relation)
18
-
19
- expect(command.input).to be(ROM::Command.input)
20
- end
21
-
22
- it 'sets custom input handler when command defines it' do
23
- my_handler = double(:my_handler)
24
-
25
- command = Class.new(command_class) { input my_handler }.build(relation)
26
-
27
- expect(command.input).to be(my_handler)
28
- end
29
-
30
- it 'sets custom input handler when it is passed as an option' do
31
- my_handler = double(:my_handler)
32
-
33
- command = Class.new(command_class).build(relation, input: my_handler)
34
-
35
- expect(command.input).to be(my_handler)
36
- end
37
- end
38
-
39
- context 'when relation has a schema' do
40
- let(:relation) do
41
- instance_double(ROM::Relation, schema?: true, schema_hash: schema_hash)
42
- end
43
-
44
- let(:schema_hash) do
45
- double(:schema_hash)
46
- end
47
-
48
- it 'sets schema hash as input handler' do
49
- command = Class.new(command_class).build(relation)
50
-
51
- expect(command.input).to be(schema_hash)
52
- end
53
-
54
- it 'sets a composed input handler with schema hash and a custom one' do
55
- my_handler = double(:my_handler)
56
-
57
- command = Class.new(command_class) { input my_handler }.build(relation)
58
-
59
- expect(my_handler).to receive(:[]).with('some value').and_return('my handler')
60
- expect(schema_hash).to receive(:[]).with('my handler').and_return('a tuple')
61
-
62
- expect(command.input['some value']).to eql('a tuple')
63
- end
64
- end
65
- end
66
- end