rom 2.0.2 → 3.0.0

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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -7
  3. data/.yardopts +2 -0
  4. data/CHANGELOG.md +35 -1
  5. data/Gemfile +17 -2
  6. data/Rakefile +7 -2
  7. data/lib/rom/array_dataset.rb +44 -0
  8. data/lib/rom/association_set.rb +11 -5
  9. data/lib/rom/auto_curry.rb +55 -0
  10. data/lib/rom/command.rb +331 -47
  11. data/lib/rom/command_registry.rb +7 -18
  12. data/lib/rom/commands/class_interface.rb +120 -6
  13. data/lib/rom/commands/composite.rb +0 -1
  14. data/lib/rom/commands/graph.rb +7 -15
  15. data/lib/rom/commands/lazy/update.rb +1 -1
  16. data/lib/rom/configuration.rb +2 -0
  17. data/lib/rom/configuration_dsl/command.rb +6 -8
  18. data/lib/rom/configuration_dsl/mapper.rb +2 -3
  19. data/lib/rom/configuration_dsl/mapper_dsl.rb +0 -1
  20. data/lib/rom/configuration_dsl/relation.rb +4 -4
  21. data/lib/rom/configuration_dsl.rb +0 -4
  22. data/lib/rom/constants.rb +7 -1
  23. data/lib/rom/container.rb +11 -17
  24. data/lib/rom/create_container.rb +0 -2
  25. data/lib/rom/data_proxy.rb +94 -0
  26. data/lib/rom/enumerable_dataset.rb +68 -0
  27. data/lib/rom/gateway.rb +74 -32
  28. data/lib/rom/global/plugin_dsl.rb +0 -2
  29. data/lib/rom/global.rb +0 -2
  30. data/lib/rom/initializer.rb +26 -0
  31. data/lib/rom/lint/gateway.rb +17 -0
  32. data/lib/rom/mapper_registry.rb +1 -1
  33. data/lib/rom/memory/commands.rb +0 -2
  34. data/lib/rom/memory/dataset.rb +1 -2
  35. data/lib/rom/memory/relation.rb +14 -1
  36. data/lib/rom/memory/schema.rb +13 -0
  37. data/lib/rom/plugin_registry.rb +1 -1
  38. data/lib/rom/plugins/command/schema.rb +2 -2
  39. data/lib/rom/plugins/configuration/configuration_dsl.rb +6 -2
  40. data/lib/rom/plugins/relation/key_inference.rb +4 -2
  41. data/lib/rom/plugins/relation/registry_reader.rb +5 -1
  42. data/lib/rom/registry.rb +50 -0
  43. data/lib/rom/relation/class_interface.rb +142 -30
  44. data/lib/rom/relation/curried.rb +15 -15
  45. data/lib/rom/relation/view_dsl.rb +31 -0
  46. data/lib/rom/relation.rb +101 -41
  47. data/lib/rom/schema/attribute.rb +367 -0
  48. data/lib/rom/schema/dsl.rb +14 -10
  49. data/lib/rom/schema.rb +337 -19
  50. data/lib/rom/setup/auto_registration.rb +20 -17
  51. data/lib/rom/setup/auto_registration_strategies/base.rb +8 -3
  52. data/lib/rom/setup/auto_registration_strategies/custom_namespace.rb +4 -3
  53. data/lib/rom/setup/auto_registration_strategies/no_namespace.rb +5 -4
  54. data/lib/rom/setup/auto_registration_strategies/with_namespace.rb +3 -3
  55. data/lib/rom/setup/finalize/finalize_commands.rb +1 -1
  56. data/lib/rom/setup/finalize/finalize_mappers.rb +1 -1
  57. data/lib/rom/setup/finalize/finalize_relations.rb +4 -2
  58. data/lib/rom/setup/finalize.rb +1 -1
  59. data/lib/rom/transaction.rb +24 -0
  60. data/lib/rom/types.rb +9 -1
  61. data/lib/rom/version.rb +1 -1
  62. data/lib/rom.rb +4 -8
  63. data/rom.gemspec +5 -4
  64. data/spec/integration/command_registry_spec.rb +1 -14
  65. data/spec/integration/commands/create_spec.rb +5 -25
  66. data/spec/integration/commands/delete_spec.rb +1 -1
  67. data/spec/integration/commands/error_handling_spec.rb +1 -1
  68. data/spec/integration/commands/graph_spec.rb +20 -14
  69. data/spec/integration/commands/update_spec.rb +4 -27
  70. data/spec/integration/commands_spec.rb +1 -1
  71. data/spec/integration/{repositories → gateways}/extending_relations_spec.rb +1 -1
  72. data/spec/integration/{repositories → gateways}/setting_logger_spec.rb +2 -2
  73. data/spec/integration/mappers/combine_spec.rb +1 -1
  74. data/spec/integration/mappers/deep_embedded_spec.rb +1 -1
  75. data/spec/integration/mappers/definition_dsl_spec.rb +1 -1
  76. data/spec/integration/mappers/embedded_spec.rb +1 -1
  77. data/spec/integration/mappers/exclude_spec.rb +1 -1
  78. data/spec/integration/mappers/fold_spec.rb +1 -1
  79. data/spec/integration/mappers/group_spec.rb +1 -1
  80. data/spec/integration/mappers/overwrite_attributes_value_spec.rb +1 -1
  81. data/spec/integration/mappers/prefix_separator_spec.rb +1 -1
  82. data/spec/integration/mappers/prefix_spec.rb +1 -1
  83. data/spec/integration/mappers/prefixing_attributes_spec.rb +1 -1
  84. data/spec/integration/mappers/registering_custom_mappers_spec.rb +1 -1
  85. data/spec/integration/mappers/renaming_attributes_spec.rb +1 -1
  86. data/spec/integration/mappers/reusing_mappers_spec.rb +1 -1
  87. data/spec/integration/mappers/step_spec.rb +1 -1
  88. data/spec/integration/mappers/symbolizing_attributes_spec.rb +1 -1
  89. data/spec/integration/mappers/unfold_spec.rb +1 -1
  90. data/spec/integration/mappers/ungroup_spec.rb +2 -2
  91. data/spec/integration/mappers/unwrap_spec.rb +2 -2
  92. data/spec/integration/mappers/wrap_spec.rb +1 -1
  93. data/spec/integration/memory/commands/create_spec.rb +1 -1
  94. data/spec/integration/memory/commands/delete_spec.rb +1 -1
  95. data/spec/integration/memory/commands/update_spec.rb +1 -1
  96. data/spec/integration/multi_env_spec.rb +1 -1
  97. data/spec/integration/multi_repo_spec.rb +1 -1
  98. data/spec/integration/relations/default_dataset_spec.rb +1 -1
  99. data/spec/integration/relations/reading_spec.rb +1 -1
  100. data/spec/integration/relations/registry_dsl_spec.rb +1 -1
  101. data/spec/integration/setup_spec.rb +10 -4
  102. data/spec/shared/command_graph.rb +8 -4
  103. data/spec/shared/enumerable_dataset.rb +1 -1
  104. data/spec/spec_helper.rb +7 -9
  105. data/spec/support/schema.rb +14 -0
  106. data/spec/unit/rom/array_dataset_spec.rb +59 -0
  107. data/spec/unit/rom/association_set_spec.rb +4 -0
  108. data/spec/unit/rom/auto_curry_spec.rb +63 -0
  109. data/spec/unit/rom/commands/graph_spec.rb +12 -11
  110. data/spec/unit/rom/commands/lazy_spec.rb +8 -5
  111. data/spec/unit/rom/commands/pre_and_post_processors_spec.rb +336 -0
  112. data/spec/unit/rom/commands/result_spec.rb +1 -1
  113. data/spec/unit/rom/commands_spec.rb +26 -3
  114. data/spec/unit/rom/configuration_spec.rb +1 -1
  115. data/spec/unit/rom/container_spec.rb +15 -5
  116. data/spec/unit/rom/create_container_spec.rb +1 -1
  117. data/spec/unit/rom/enumerable_dataset_spec.rb +15 -0
  118. data/spec/unit/rom/gateway_spec.rb +1 -1
  119. data/spec/unit/rom/mapper_registry_spec.rb +1 -1
  120. data/spec/unit/rom/memory/commands_spec.rb +1 -1
  121. data/spec/unit/rom/memory/dataset_spec.rb +1 -1
  122. data/spec/unit/rom/memory/{repository_spec.rb → gateway_spec.rb} +1 -1
  123. data/spec/unit/rom/memory/inheritance_spec.rb +32 -0
  124. data/spec/unit/rom/memory/relation_spec.rb +15 -3
  125. data/spec/unit/rom/memory/storage_spec.rb +1 -1
  126. data/spec/unit/rom/plugin_spec.rb +1 -1
  127. data/spec/unit/rom/plugins/command/schema_spec.rb +5 -5
  128. data/spec/unit/rom/plugins/relation/key_inference_spec.rb +1 -1
  129. data/spec/unit/rom/registry_spec.rb +86 -0
  130. data/spec/unit/rom/relation/attribute_reader_spec.rb +17 -0
  131. data/spec/unit/rom/relation/call_spec.rb +51 -0
  132. data/spec/unit/rom/relation/composite_spec.rb +1 -1
  133. data/spec/unit/rom/relation/graph_spec.rb +1 -1
  134. data/spec/unit/rom/relation/lazy/combine_spec.rb +1 -1
  135. data/spec/unit/rom/relation/lazy_spec.rb +1 -1
  136. data/spec/unit/rom/relation/loaded_spec.rb +1 -1
  137. data/spec/unit/rom/relation/schema_spec.rb +50 -6
  138. data/spec/unit/rom/relation/view_spec.rb +122 -0
  139. data/spec/unit/rom/relation_spec.rb +20 -5
  140. data/spec/unit/rom/schema/accessing_attributes_spec.rb +52 -0
  141. data/spec/unit/rom/schema/append_spec.rb +17 -0
  142. data/spec/unit/rom/schema/exclude_spec.rb +15 -0
  143. data/spec/unit/rom/schema/finalize_spec.rb +59 -0
  144. data/spec/unit/rom/schema/key_predicate_spec.rb +15 -0
  145. data/spec/unit/rom/schema/merge_spec.rb +17 -0
  146. data/spec/unit/rom/schema/prefix_spec.rb +16 -0
  147. data/spec/unit/rom/schema/project_spec.rb +15 -0
  148. data/spec/unit/rom/schema/rename_spec.rb +22 -0
  149. data/spec/unit/rom/schema/type_spec.rb +49 -0
  150. data/spec/unit/rom/schema/uniq_spec.rb +21 -0
  151. data/spec/unit/rom/schema/wrap_spec.rb +17 -0
  152. data/spec/unit/rom/schema_spec.rb +2 -2
  153. metadata +79 -17
  154. data/lib/rom/plugins/relation/view/dsl.rb +0 -32
  155. data/lib/rom/plugins/relation/view.rb +0 -95
  156. data/spec/unit/rom/plugins/relation/view_spec.rb +0 -51
@@ -1,6 +1,6 @@
1
1
  require 'rom/memory'
2
2
 
3
- describe ROM::Relation do
3
+ RSpec.describe ROM::Relation do
4
4
  subject(:relation) { Class.new(ROM::Relation).new(dataset) }
5
5
 
6
6
  let(:dataset) { ROM::Memory::Dataset.new([jane, joe]) }
@@ -196,7 +196,7 @@ describe ROM::Relation do
196
196
 
197
197
  describe "#with" do
198
198
  it "returns a new instance with the original dataset and given custom options" do
199
- relation = Class.new(ROM::Relation) { option :custom }.new([])
199
+ relation = Class.new(ROM::Relation) { option :custom }.new([], custom: true)
200
200
 
201
201
  custom_opts = { mappers: "Custom Mapper Registry" }
202
202
  new_relation = relation.with(custom_opts).with(custom: true)
@@ -217,13 +217,28 @@ describe ROM::Relation do
217
217
  end
218
218
  end
219
219
 
220
- describe '#schema_hash' do
220
+ describe '#schema' do
221
+ it 'returns an empty schema by default' do
222
+ relation = Class.new(ROM::Relation) {
223
+ def self.name
224
+ 'Test::SomeRelation'
225
+ end
226
+ }.new([])
227
+
228
+ expect(relation.schema).to be_empty
229
+ expect(relation.schema.inferrer).to be(ROM::Schema::DEFAULT_INFERRER)
230
+ expect(relation.schema.name).to be(:test_some_relation)
231
+ expect(relation.schema?).to be(false)
232
+ end
233
+ end
234
+
235
+ describe '#input_schema' do
221
236
  it 'returns a schema hash type' do
222
237
  relation = Class.new(ROM::Relation[:memory]) do
223
238
  schema { attribute :id, ROM::Types::Coercible::Int }
224
239
  end.new([])
225
240
 
226
- expect(relation.schema_hash[id: '1']).to eql(id: 1)
241
+ expect(relation.input_schema[id: '1']).to eql(id: 1)
227
242
  end
228
243
 
229
244
  it 'returns a plain Hash coercer when there is no schema' do
@@ -231,7 +246,7 @@ describe ROM::Relation do
231
246
 
232
247
  tuple = [[:id, '1']]
233
248
 
234
- expect(relation.schema_hash[tuple]).to eql(id: '1')
249
+ expect(relation.input_schema[tuple]).to eql(id: '1')
235
250
  end
236
251
  end
237
252
  end
@@ -0,0 +1,52 @@
1
+ require 'rom/schema'
2
+
3
+ RSpec.describe ROM::Schema, '#[]' do
4
+ context 'with a schema' do
5
+ subject(:schema) do
6
+ define_schema(:users, id: :Int, name: :String, email: :String)
7
+ end
8
+
9
+ it 'returns an attribute identified by its canonical name' do
10
+ expect(schema[:email]).to eql(define_type(:email, :String, source: :users))
11
+ end
12
+
13
+ it 'returns an aliased attribute identified by its canonical name' do
14
+ expect(schema.rename(id: :user_id)[:id]).to eql(define_type(:id, :Int, source: :users, alias: :user_id))
15
+ end
16
+
17
+ it 'raises KeyError when attribute is not found' do
18
+ expect { schema[:not_here] }.to raise_error(KeyError, /not_here/)
19
+ end
20
+ end
21
+
22
+ context 'with a merged schema' do
23
+ subject(:schema) do
24
+ left.merge(right.__send__(:new, right.map { |attr| attr.meta(source: :tasks) }))
25
+ end
26
+
27
+ let(:left) do
28
+ define_schema(:users, id: :Int, name: :String)
29
+ end
30
+
31
+ let(:right) do
32
+ define_schema(:tasks, id: :Int, title: :String)
33
+ end
34
+
35
+ it 'returns an attribute identified by its canonical name' do
36
+ expect(schema[:id]).to eql(define_type(:id, :Int, source: :users))
37
+ end
38
+
39
+ it 'returns an attribute identified by its canonical name when its unique' do
40
+ expect(schema[:title]).to eql(define_type(:title, :String, source: :tasks))
41
+ end
42
+
43
+ it 'returns an attribute identified by its canonical name and its source' do
44
+ expect(schema[:id, :tasks]).to eql(define_type(:id, :Int, source: :tasks))
45
+ end
46
+
47
+ it 'raises KeyError when attribute is not found' do
48
+ expect { schema[:not_here] }.to raise_error(KeyError, /not_here/)
49
+ expect { schema[:not_here, :tasks] }.to raise_error(KeyError, /not_here/)
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,17 @@
1
+ require 'rom/schema'
2
+
3
+ RSpec.describe ROM::Schema, '#append' do
4
+ subject(:schema) { left.append(*right) }
5
+
6
+ let(:left) do
7
+ define_schema(:users, id: :Int, name: :String)
8
+ end
9
+
10
+ let(:right) do
11
+ define_schema(:tasks, user_id: :Int)
12
+ end
13
+
14
+ it 'returns a new schema with attributes from two schemas' do
15
+ expect(schema.map(&:name)).to eql(%i[id name user_id])
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ require 'rom/schema'
2
+
3
+ RSpec.describe ROM::Schema, '#exclude' do
4
+ subject(:schema) do
5
+ define_schema(:users, id: :Int, name: :String, email: :String)
6
+ end
7
+
8
+ let(:excluded) do
9
+ schema.exclude(:id, :name)
10
+ end
11
+
12
+ it 'returns projected schema with renamed attributes using provided prefix' do
13
+ expect(excluded.map(&:name)).to eql(%i[email])
14
+ end
15
+ end
@@ -0,0 +1,59 @@
1
+ require 'rom/schema'
2
+
3
+ RSpec.describe ROM::Schema, '#finalize!' do
4
+ context 'without inferrer' do
5
+ subject(:schema) do
6
+ define_schema(:users, id: :Int, name: :String)
7
+ end
8
+
9
+ before { schema.finalize! }
10
+
11
+ it 'returns a frozen canonical schema' do
12
+ expect(schema).to be_frozen
13
+ end
14
+ end
15
+
16
+ context 'with inferrer' do
17
+ subject(:schema) do
18
+ ROM::Schema.define(:users, attributes: attributes, inferrer: inferrer)
19
+ end
20
+
21
+ let(:inferrer) do
22
+ proc { [[define_type(:name, :String)], [:id, :age]]}
23
+ end
24
+
25
+ context 'when all required attributes are present' do
26
+ let(:attributes) do
27
+ [define_type(:id, :Int), define_type(:age, :Int)]
28
+ end
29
+
30
+ it 'concats defined attributes with inferred attributes' do
31
+ expect(schema.finalize!.map(&:name)).to eql(%i[id age name])
32
+ end
33
+ end
34
+
35
+ context 'when inferred attributes are overridden' do
36
+ let(:attributes) do
37
+ [define_type(:id, :Int),
38
+ define_type(:age, :Int),
39
+ define_type(:name, :String).meta(custom: true)]
40
+ end
41
+
42
+ it 'respects overridden attributes' do
43
+ expect(schema.finalize!.map(&:name)).to eql(%i[id age name])
44
+ expect(schema[:name].meta[:custom]).to be(true)
45
+ end
46
+ end
47
+
48
+ context 'when some attributes are missing' do
49
+ let(:attributes) do
50
+ []
51
+ end
52
+
53
+ it 'raises error' do
54
+ expect { schema.finalize! }.
55
+ to raise_error(ROM::Schema::MissingAttributesError, /missing attributes in :users schema: :id, :age/)
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,15 @@
1
+ require 'rom/schema'
2
+
3
+ RSpec.describe ROM::Schema, '#key?' do
4
+ subject(:schema) do
5
+ define_schema(:users, name: :String)
6
+ end
7
+
8
+ it 'returns true when an attribute exists' do
9
+ expect(schema.key?(:name)).to be(true)
10
+ end
11
+
12
+ it 'returns false when an attribute does not exist' do
13
+ expect(schema.key?(:foo)).to be(false)
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ require 'rom/schema'
2
+
3
+ RSpec.describe ROM::Schema, '#merge' do
4
+ subject(:schema) { left.merge(right) }
5
+
6
+ let(:left) do
7
+ define_schema(:users, id: :Int, name: :String)
8
+ end
9
+
10
+ let(:right) do
11
+ define_schema(:tasks, user_id: :Int)
12
+ end
13
+
14
+ it 'returns a new schema with attributes from two schemas' do
15
+ expect(schema.map(&:name)).to eql(%i[id name user_id])
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ require 'rom/schema'
2
+
3
+ RSpec.describe ROM::Schema, '#prefix' do
4
+ subject(:schema) do
5
+ define_schema(:users, id: :Int, name: :String)
6
+ end
7
+
8
+ let(:prefixed) do
9
+ schema.prefix(:user)
10
+ end
11
+
12
+ it 'returns projected schema with renamed attributes using provided prefix' do
13
+ expect(prefixed.map(&:alias)).to eql(%i[user_id user_name])
14
+ expect(prefixed.map { |attr| attr.meta[:name] }).to eql(%i[id name])
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ require 'rom/schema'
2
+
3
+ RSpec.describe ROM::Schema, '#project' do
4
+ subject(:schema) do
5
+ define_schema(:users, id: :Int, name: :String, age: :Int)
6
+ end
7
+
8
+ it 'projects provided attribute names' do
9
+ expect(schema.project(:name, :age).map(&:name)).to eql(%i[name age])
10
+ end
11
+
12
+ it 'projects provided attributes' do
13
+ expect(schema.project(schema[:name], schema[:age]).map(&:name)).to eql(%i[name age])
14
+ end
15
+ end
@@ -0,0 +1,22 @@
1
+ require 'rom/schema'
2
+
3
+ RSpec.describe ROM::Schema, '#rename' do
4
+ subject(:schema) do
5
+ define_schema(
6
+ :users,
7
+ user_id: :Int, user_name: :String, user_email: :String
8
+ )
9
+ end
10
+
11
+ let(:renamed) do
12
+ schema.rename(user_id: :id, user_name: :name)
13
+ end
14
+
15
+ it 'returns projected schema with renamed attributes' do
16
+ expect(renamed.map(&:name)).to eql(%i[user_id user_name user_email])
17
+ expect(renamed.map(&:alias)).to eql([:id, :name, nil])
18
+ expect(renamed.all?(&:aliased?)).to be(false)
19
+ expect(renamed[:user_id]).to be_aliased
20
+ expect(renamed[:user_name]).to be_aliased
21
+ end
22
+ end
@@ -0,0 +1,49 @@
1
+ require 'rom/schema/attribute'
2
+
3
+ RSpec.describe ROM::Schema::Attribute do
4
+ describe '#inspect' do
5
+ context 'with a primitive definition' do
6
+ subject(:type) do
7
+ ROM::Schema::Attribute.new(ROM::Types::Int).meta(name: :id, primary_key: true)
8
+ end
9
+
10
+ specify do
11
+ expect(type.inspect).to eql("#<ROM::Schema::Attribute[Integer] name=:id primary_key=true>")
12
+ end
13
+ end
14
+
15
+ context 'with a sum' do
16
+ subject(:type) do
17
+ ROM::Schema::Attribute.new(ROM::Types::Bool).meta(name: :admin)
18
+ end
19
+
20
+ specify do
21
+ expect(type.inspect).to eql("#<ROM::Schema::Attribute[TrueClass | FalseClass] name=:admin>")
22
+ end
23
+ end
24
+ end
25
+
26
+ describe '#aliased' do
27
+ subject(:type) do
28
+ ROM::Schema::Attribute.new(ROM::Types::String).meta(name: :user_name)
29
+ end
30
+
31
+ specify do
32
+ expect(type.as(:name).meta[:alias]).to eql(:name)
33
+ end
34
+ end
35
+
36
+ describe '#method_missing' do
37
+ subject(:type) do
38
+ ROM::Schema::Attribute.new(ROM::Types::Int).meta(name: :id, primary_key: true)
39
+ end
40
+
41
+ specify do
42
+ expect(type.meta).to eql(name: :id, primary_key: true)
43
+ end
44
+
45
+ specify do
46
+ expect { type.not_here }.to raise_error(NoMethodError, /not_here/)
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,21 @@
1
+ require 'rom/schema'
2
+
3
+ RSpec.describe ROM::Schema, '#uniq' do
4
+ subject(:schema) { left.merge(right) }
5
+
6
+ let(:left) do
7
+ define_schema(:users, id: :Int, name: :String)
8
+ end
9
+
10
+ let(:right) do
11
+ define_schema(:tasks, id: :Int, user_id: :Int)
12
+ end
13
+
14
+ it 'returns a new schema with unique attributes from two schemas' do
15
+ expect(schema.uniq.map(&:name)).to eql(%i[id name user_id])
16
+ end
17
+
18
+ it 'accepts a block' do
19
+ expect(schema.uniq(&:primitive).map(&:name)).to eql(%i[id name])
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ require 'rom/schema'
2
+
3
+ RSpec.describe ROM::Schema, '#wrap' do
4
+ subject(:schema) do
5
+ define_schema(:users, id: :Int, name: :String)
6
+ end
7
+
8
+ let(:wrapped) do
9
+ schema.wrap(:users)
10
+ end
11
+
12
+ it 'returns projected schema with renamed attributes using provided prefix' do
13
+ expect(wrapped.map(&:alias)).to eql(%i[users_id users_name])
14
+ expect(wrapped.map { |attr| attr.meta[:name] }).to eql(%i[id name])
15
+ expect(wrapped.all?(&:wrapped?)).to be(true)
16
+ end
17
+ end
@@ -1,8 +1,8 @@
1
1
  RSpec.describe ROM::Schema do
2
2
  describe '#to_h' do
3
3
  it 'returns hash with attributes' do
4
- attrs = { id: ROM::Types::Int, name: ROM::Types::String }
5
- schema = ROM::Schema.new(:name, attrs)
4
+ attrs = { id: ROM::Types::Int.meta(name: :id), name: ROM::Types::String.meta(name: :name) }
5
+ schema = ROM::Schema.define(:name, attributes: attrs.values)
6
6
 
7
7
  expect(schema.to_h).to eql(attrs)
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rom
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-11 00:00:00.000000000 Z
11
+ date: 2017-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -44,42 +44,74 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.8'
47
+ version: '0.9'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 0.9.4
48
51
  type: :runtime
49
52
  prerelease: false
50
53
  version_requirements: !ruby/object:Gem::Requirement
51
54
  requirements:
52
55
  - - "~>"
53
56
  - !ruby/object:Gem::Version
54
- version: '0.8'
57
+ version: '0.9'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 0.9.4
55
61
  - !ruby/object:Gem::Dependency
56
- name: rom-support
62
+ name: dry-core
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
65
  - - "~>"
60
66
  - !ruby/object:Gem::Version
61
- version: '2.0'
67
+ version: '0.2'
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 0.2.3
62
71
  type: :runtime
63
72
  prerelease: false
64
73
  version_requirements: !ruby/object:Gem::Requirement
65
74
  requirements:
66
75
  - - "~>"
67
76
  - !ruby/object:Gem::Version
68
- version: '2.0'
77
+ version: '0.2'
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 0.2.3
81
+ - !ruby/object:Gem::Dependency
82
+ name: dry-initializer
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '0.10'
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 0.10.2
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '0.10'
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: 0.10.2
69
101
  - !ruby/object:Gem::Dependency
70
102
  name: rom-mapper
71
103
  requirement: !ruby/object:Gem::Requirement
72
104
  requirements:
73
105
  - - "~>"
74
106
  - !ruby/object:Gem::Version
75
- version: 0.4.0
107
+ version: '0.5'
76
108
  type: :runtime
77
109
  prerelease: false
78
110
  version_requirements: !ruby/object:Gem::Requirement
79
111
  requirements:
80
112
  - - "~>"
81
113
  - !ruby/object:Gem::Version
82
- version: 0.4.0
114
+ version: '0.5'
83
115
  - !ruby/object:Gem::Dependency
84
116
  name: rake
85
117
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +132,14 @@ dependencies:
100
132
  requirements:
101
133
  - - "~>"
102
134
  - !ruby/object:Gem::Version
103
- version: '3.3'
135
+ version: '3.5'
104
136
  type: :development
105
137
  prerelease: false
106
138
  version_requirements: !ruby/object:Gem::Requirement
107
139
  requirements:
108
140
  - - "~>"
109
141
  - !ruby/object:Gem::Version
110
- version: '3.3'
142
+ version: '3.5'
111
143
  description: Persistence and mapping toolkit for Ruby
112
144
  email: piotr.solnica@gmail.com
113
145
  executables: []
@@ -119,6 +151,7 @@ files:
119
151
  - ".rubocop.yml"
120
152
  - ".rubocop_todo.yml"
121
153
  - ".travis.yml"
154
+ - ".yardopts"
122
155
  - CHANGELOG.md
123
156
  - CODE_OF_CONDUCT.md
124
157
  - CONTRIBUTING.md
@@ -128,7 +161,9 @@ files:
128
161
  - README.md
129
162
  - Rakefile
130
163
  - lib/rom.rb
164
+ - lib/rom/array_dataset.rb
131
165
  - lib/rom/association_set.rb
166
+ - lib/rom/auto_curry.rb
132
167
  - lib/rom/command.rb
133
168
  - lib/rom/command_registry.rb
134
169
  - lib/rom/commands.rb
@@ -157,10 +192,13 @@ files:
157
192
  - lib/rom/constants.rb
158
193
  - lib/rom/container.rb
159
194
  - lib/rom/create_container.rb
195
+ - lib/rom/data_proxy.rb
196
+ - lib/rom/enumerable_dataset.rb
160
197
  - lib/rom/environment.rb
161
198
  - lib/rom/gateway.rb
162
199
  - lib/rom/global.rb
163
200
  - lib/rom/global/plugin_dsl.rb
201
+ - lib/rom/initializer.rb
164
202
  - lib/rom/lint/enumerable_dataset.rb
165
203
  - lib/rom/lint/gateway.rb
166
204
  - lib/rom/lint/linter.rb
@@ -172,6 +210,7 @@ files:
172
210
  - lib/rom/memory/dataset.rb
173
211
  - lib/rom/memory/gateway.rb
174
212
  - lib/rom/memory/relation.rb
213
+ - lib/rom/memory/schema.rb
175
214
  - lib/rom/memory/storage.rb
176
215
  - lib/rom/memory/types.rb
177
216
  - lib/rom/pipeline.rb
@@ -182,8 +221,7 @@ files:
182
221
  - lib/rom/plugins/configuration/configuration_dsl.rb
183
222
  - lib/rom/plugins/relation/key_inference.rb
184
223
  - lib/rom/plugins/relation/registry_reader.rb
185
- - lib/rom/plugins/relation/view.rb
186
- - lib/rom/plugins/relation/view/dsl.rb
224
+ - lib/rom/registry.rb
187
225
  - lib/rom/relation.rb
188
226
  - lib/rom/relation/class_interface.rb
189
227
  - lib/rom/relation/composite.rb
@@ -192,8 +230,10 @@ files:
192
230
  - lib/rom/relation/loaded.rb
193
231
  - lib/rom/relation/materializable.rb
194
232
  - lib/rom/relation/name.rb
233
+ - lib/rom/relation/view_dsl.rb
195
234
  - lib/rom/relation_registry.rb
196
235
  - lib/rom/schema.rb
236
+ - lib/rom/schema/attribute.rb
197
237
  - lib/rom/schema/dsl.rb
198
238
  - lib/rom/setup.rb
199
239
  - lib/rom/setup/auto_registration.rb
@@ -206,6 +246,7 @@ files:
206
246
  - lib/rom/setup/finalize/finalize_mappers.rb
207
247
  - lib/rom/setup/finalize/finalize_relations.rb
208
248
  - lib/rom/support/configurable.rb
249
+ - lib/rom/transaction.rb
209
250
  - lib/rom/types.rb
210
251
  - lib/rom/version.rb
211
252
  - log/.gitkeep
@@ -236,6 +277,8 @@ files:
236
277
  - spec/integration/commands/graph_spec.rb
237
278
  - spec/integration/commands/update_spec.rb
238
279
  - spec/integration/commands_spec.rb
280
+ - spec/integration/gateways/extending_relations_spec.rb
281
+ - spec/integration/gateways/setting_logger_spec.rb
239
282
  - spec/integration/mappers/combine_spec.rb
240
283
  - spec/integration/mappers/deep_embedded_spec.rb
241
284
  - spec/integration/mappers/definition_dsl_spec.rb
@@ -265,8 +308,6 @@ files:
265
308
  - spec/integration/relations/inheritance_spec.rb
266
309
  - spec/integration/relations/reading_spec.rb
267
310
  - spec/integration/relations/registry_dsl_spec.rb
268
- - spec/integration/repositories/extending_relations_spec.rb
269
- - spec/integration/repositories/setting_logger_spec.rb
270
311
  - spec/integration/setup_spec.rb
271
312
  - spec/shared/command_behavior.rb
272
313
  - spec/shared/command_graph.rb
@@ -281,29 +322,37 @@ files:
281
322
  - spec/spec_helper.rb
282
323
  - spec/support/constant_leak_finder.rb
283
324
  - spec/support/mutant.rb
325
+ - spec/support/schema.rb
284
326
  - spec/support/types.rb
285
327
  - spec/test/memory_repository_lint_test.rb
328
+ - spec/unit/rom/array_dataset_spec.rb
286
329
  - spec/unit/rom/association_set_spec.rb
330
+ - spec/unit/rom/auto_curry_spec.rb
287
331
  - spec/unit/rom/commands/graph_spec.rb
288
332
  - spec/unit/rom/commands/lazy_spec.rb
333
+ - spec/unit/rom/commands/pre_and_post_processors_spec.rb
289
334
  - spec/unit/rom/commands/result_spec.rb
290
335
  - spec/unit/rom/commands_spec.rb
291
336
  - spec/unit/rom/configurable_spec.rb
292
337
  - spec/unit/rom/configuration_spec.rb
293
338
  - spec/unit/rom/container_spec.rb
294
339
  - spec/unit/rom/create_container_spec.rb
340
+ - spec/unit/rom/enumerable_dataset_spec.rb
295
341
  - spec/unit/rom/environment_spec.rb
296
342
  - spec/unit/rom/gateway_spec.rb
297
343
  - spec/unit/rom/mapper_registry_spec.rb
298
344
  - spec/unit/rom/memory/commands_spec.rb
299
345
  - spec/unit/rom/memory/dataset_spec.rb
346
+ - spec/unit/rom/memory/gateway_spec.rb
347
+ - spec/unit/rom/memory/inheritance_spec.rb
300
348
  - spec/unit/rom/memory/relation_spec.rb
301
- - spec/unit/rom/memory/repository_spec.rb
302
349
  - spec/unit/rom/memory/storage_spec.rb
303
350
  - spec/unit/rom/plugin_spec.rb
304
351
  - spec/unit/rom/plugins/command/schema_spec.rb
305
352
  - spec/unit/rom/plugins/relation/key_inference_spec.rb
306
- - spec/unit/rom/plugins/relation/view_spec.rb
353
+ - spec/unit/rom/registry_spec.rb
354
+ - spec/unit/rom/relation/attribute_reader_spec.rb
355
+ - spec/unit/rom/relation/call_spec.rb
307
356
  - spec/unit/rom/relation/composite_spec.rb
308
357
  - spec/unit/rom/relation/curried_spec.rb
309
358
  - spec/unit/rom/relation/graph_spec.rb
@@ -312,7 +361,20 @@ files:
312
361
  - spec/unit/rom/relation/loaded_spec.rb
313
362
  - spec/unit/rom/relation/name_spec.rb
314
363
  - spec/unit/rom/relation/schema_spec.rb
364
+ - spec/unit/rom/relation/view_spec.rb
315
365
  - spec/unit/rom/relation_spec.rb
366
+ - spec/unit/rom/schema/accessing_attributes_spec.rb
367
+ - spec/unit/rom/schema/append_spec.rb
368
+ - spec/unit/rom/schema/exclude_spec.rb
369
+ - spec/unit/rom/schema/finalize_spec.rb
370
+ - spec/unit/rom/schema/key_predicate_spec.rb
371
+ - spec/unit/rom/schema/merge_spec.rb
372
+ - spec/unit/rom/schema/prefix_spec.rb
373
+ - spec/unit/rom/schema/project_spec.rb
374
+ - spec/unit/rom/schema/rename_spec.rb
375
+ - spec/unit/rom/schema/type_spec.rb
376
+ - spec/unit/rom/schema/uniq_spec.rb
377
+ - spec/unit/rom/schema/wrap_spec.rb
316
378
  - spec/unit/rom/schema_spec.rb
317
379
  - spec/unit/rom/setup/auto_registration_spec.rb
318
380
  homepage: http://rom-rb.org
@@ -1,32 +0,0 @@
1
- module ROM
2
- module Plugins
3
- module Relation
4
- module View
5
- class DSL
6
- attr_reader :name
7
-
8
- attr_reader :attributes
9
-
10
- attr_reader :relation_block
11
-
12
- def initialize(name, &block)
13
- @name = name
14
- instance_eval(&block)
15
- end
16
-
17
- def header(*args, &block)
18
- @attributes = args.size > 0 ? args.first : block
19
- end
20
-
21
- def relation(&block)
22
- @relation_block = lambda(&block)
23
- end
24
-
25
- def call
26
- [name, attributes, relation_block]
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end