rom 0.2.0 → 0.3.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 (175) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -3
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +13 -14
  5. data/{Changelog.md → CHANGELOG.md} +12 -3
  6. data/Gemfile +14 -10
  7. data/Gemfile.devtools +16 -16
  8. data/Guardfile +2 -5
  9. data/README.md +68 -56
  10. data/Rakefile +3 -3
  11. data/config/flay.yml +2 -2
  12. data/config/mutant.yml +2 -4
  13. data/config/rubocop.yml +30 -0
  14. data/lib/rom.rb +47 -9
  15. data/lib/rom/adapter.rb +52 -0
  16. data/lib/rom/adapter/memory.rb +70 -0
  17. data/lib/rom/boot.rb +158 -0
  18. data/lib/rom/boot/base_relation_dsl.rb +43 -0
  19. data/lib/rom/boot/dsl.rb +30 -0
  20. data/lib/rom/boot/mapper_dsl.rb +23 -0
  21. data/lib/rom/boot/relation_dsl.rb +23 -0
  22. data/lib/rom/boot/schema_dsl.rb +27 -0
  23. data/lib/rom/env.rb +48 -0
  24. data/lib/rom/header.rb +123 -0
  25. data/lib/rom/mapper.rb +38 -153
  26. data/lib/rom/mapper_builder.rb +85 -0
  27. data/lib/rom/model_builder.rb +58 -0
  28. data/lib/rom/ra.rb +196 -0
  29. data/lib/rom/ra/operation/group.rb +49 -0
  30. data/lib/rom/ra/operation/join.rb +41 -0
  31. data/lib/rom/ra/operation/wrap.rb +45 -0
  32. data/lib/rom/reader.rb +62 -0
  33. data/lib/rom/reader_builder.rb +28 -0
  34. data/lib/rom/relation.rb +41 -350
  35. data/lib/rom/relation_builder.rb +48 -0
  36. data/lib/rom/repository.rb +28 -53
  37. data/lib/rom/support/registry.rb +34 -0
  38. data/lib/rom/version.rb +3 -0
  39. data/rom.gemspec +12 -10
  40. data/spec/integration/adapters/extending_relations_spec.rb +43 -0
  41. data/spec/integration/mappers/definition_dsl_spec.rb +82 -0
  42. data/spec/integration/mappers/prefixing_attributes_spec.rb +42 -0
  43. data/spec/integration/mappers/renaming_attributes_spec.rb +138 -0
  44. data/spec/integration/ra/group_spec.rb +47 -0
  45. data/spec/integration/ra/join_spec.rb +24 -0
  46. data/spec/integration/ra/wrap_spec.rb +37 -0
  47. data/spec/integration/relations/reading_spec.rb +116 -0
  48. data/spec/integration/relations/registry_dsl_spec.rb +44 -0
  49. data/spec/integration/schema_spec.rb +29 -0
  50. data/spec/integration/setup_spec.rb +18 -0
  51. data/spec/shared/users_and_tasks.rb +34 -0
  52. data/spec/spec_helper.rb +14 -36
  53. data/spec/unit/rom/adapter_spec.rb +59 -0
  54. data/spec/unit/rom/header_spec.rb +58 -0
  55. data/spec/unit/rom/mapper_spec.rb +27 -0
  56. data/spec/unit/rom/ra/operation/group_spec.rb +55 -0
  57. data/spec/unit/rom/ra/operation/wrap_spec.rb +29 -0
  58. data/spec/unit/rom/relation_spec.rb +34 -0
  59. metadata +122 -190
  60. data/lib/rom/constants.rb +0 -16
  61. data/lib/rom/environment.rb +0 -105
  62. data/lib/rom/environment/builder.rb +0 -71
  63. data/lib/rom/mapper/attribute.rb +0 -108
  64. data/lib/rom/mapper/builder.rb +0 -58
  65. data/lib/rom/mapper/builder/definition.rb +0 -162
  66. data/lib/rom/mapper/header.rb +0 -103
  67. data/lib/rom/mapper/loader_builder.rb +0 -26
  68. data/lib/rom/schema.rb +0 -21
  69. data/lib/rom/schema/builder.rb +0 -59
  70. data/lib/rom/schema/definition.rb +0 -84
  71. data/lib/rom/schema/definition/relation.rb +0 -80
  72. data/lib/rom/schema/definition/relation/base.rb +0 -27
  73. data/lib/rom/session.rb +0 -111
  74. data/lib/rom/session/environment.rb +0 -67
  75. data/lib/rom/session/identity_map.rb +0 -43
  76. data/lib/rom/session/mapper.rb +0 -62
  77. data/lib/rom/session/relation.rb +0 -140
  78. data/lib/rom/session/state.rb +0 -59
  79. data/lib/rom/session/state/created.rb +0 -22
  80. data/lib/rom/session/state/deleted.rb +0 -25
  81. data/lib/rom/session/state/persisted.rb +0 -34
  82. data/lib/rom/session/state/transient.rb +0 -20
  83. data/lib/rom/session/state/updated.rb +0 -29
  84. data/lib/rom/session/tracker.rb +0 -62
  85. data/lib/rom/support/axiom/adapter.rb +0 -111
  86. data/lib/rom/support/axiom/adapter/data_objects.rb +0 -38
  87. data/lib/rom/support/axiom/adapter/memory.rb +0 -25
  88. data/lib/rom/support/axiom/adapter/postgres.rb +0 -19
  89. data/lib/rom/support/axiom/adapter/sqlite3.rb +0 -20
  90. data/lib/version.rb +0 -3
  91. data/spec/integration/environment_setup_spec.rb +0 -24
  92. data/spec/integration/grouped_mappers_spec.rb +0 -87
  93. data/spec/integration/join_and_group_spec.rb +0 -76
  94. data/spec/integration/join_and_wrap_spec.rb +0 -68
  95. data/spec/integration/mapping_embedded_relations_spec.rb +0 -73
  96. data/spec/integration/mapping_relations_spec.rb +0 -120
  97. data/spec/integration/schema_definition_spec.rb +0 -152
  98. data/spec/integration/session_spec.rb +0 -87
  99. data/spec/integration/wrapped_mappers_spec.rb +0 -73
  100. data/spec/shared/unit/environment_context.rb +0 -6
  101. data/spec/shared/unit/loader.rb +0 -11
  102. data/spec/shared/unit/loader_identity.rb +0 -13
  103. data/spec/shared/unit/mapper_context.rb +0 -11
  104. data/spec/shared/unit/relation_context.rb +0 -82
  105. data/spec/shared/unit/session_environment_context.rb +0 -11
  106. data/spec/shared/unit/session_relation_context.rb +0 -18
  107. data/spec/support/helper.rb +0 -34
  108. data/spec/support/ice_nine_config.rb +0 -10
  109. data/spec/support/test_mapper.rb +0 -110
  110. data/spec/unit/rom/environment/builder/mapping_spec.rb +0 -24
  111. data/spec/unit/rom/environment/builder/schema_spec.rb +0 -33
  112. data/spec/unit/rom/environment/class_methods/setup_spec.rb +0 -18
  113. data/spec/unit/rom/environment/repository_spec.rb +0 -21
  114. data/spec/unit/rom/mapper/attribute/embedded_collection/to_ast_spec.rb +0 -18
  115. data/spec/unit/rom/mapper/attribute/embedded_value/to_ast_spec.rb +0 -16
  116. data/spec/unit/rom/mapper/attribute/rename_spec.rb +0 -9
  117. data/spec/unit/rom/mapper/attribute/to_ast_spec.rb +0 -9
  118. data/spec/unit/rom/mapper/builder/class_methods/call_spec.rb +0 -61
  119. data/spec/unit/rom/mapper/class_methods/build_spec.rb +0 -55
  120. data/spec/unit/rom/mapper/dump_spec.rb +0 -11
  121. data/spec/unit/rom/mapper/group_spec.rb +0 -35
  122. data/spec/unit/rom/mapper/header/each_spec.rb +0 -26
  123. data/spec/unit/rom/mapper/header/element_reader_spec.rb +0 -21
  124. data/spec/unit/rom/mapper/header/group_spec.rb +0 -18
  125. data/spec/unit/rom/mapper/header/join_spec.rb +0 -14
  126. data/spec/unit/rom/mapper/header/keys_spec.rb +0 -29
  127. data/spec/unit/rom/mapper/header/project_spec.rb +0 -13
  128. data/spec/unit/rom/mapper/header/rename_spec.rb +0 -11
  129. data/spec/unit/rom/mapper/header/to_ast_spec.rb +0 -11
  130. data/spec/unit/rom/mapper/header/wrap_spec.rb +0 -18
  131. data/spec/unit/rom/mapper/identity_from_tuple_spec.rb +0 -11
  132. data/spec/unit/rom/mapper/identity_spec.rb +0 -11
  133. data/spec/unit/rom/mapper/join_spec.rb +0 -15
  134. data/spec/unit/rom/mapper/load_spec.rb +0 -11
  135. data/spec/unit/rom/mapper/new_object_spec.rb +0 -14
  136. data/spec/unit/rom/mapper/project_spec.rb +0 -11
  137. data/spec/unit/rom/mapper/rename_spec.rb +0 -16
  138. data/spec/unit/rom/mapper/wrap_spec.rb +0 -35
  139. data/spec/unit/rom/relation/delete_spec.rb +0 -15
  140. data/spec/unit/rom/relation/drop_spec.rb +0 -11
  141. data/spec/unit/rom/relation/each_spec.rb +0 -23
  142. data/spec/unit/rom/relation/first_spec.rb +0 -19
  143. data/spec/unit/rom/relation/group_spec.rb +0 -29
  144. data/spec/unit/rom/relation/inject_mapper_spec.rb +0 -17
  145. data/spec/unit/rom/relation/insert_spec.rb +0 -13
  146. data/spec/unit/rom/relation/last_spec.rb +0 -19
  147. data/spec/unit/rom/relation/one_spec.rb +0 -49
  148. data/spec/unit/rom/relation/rename_spec.rb +0 -21
  149. data/spec/unit/rom/relation/replace_spec.rb +0 -13
  150. data/spec/unit/rom/relation/restrict_spec.rb +0 -25
  151. data/spec/unit/rom/relation/sort_by_spec.rb +0 -25
  152. data/spec/unit/rom/relation/take_spec.rb +0 -11
  153. data/spec/unit/rom/relation/to_a_spec.rb +0 -20
  154. data/spec/unit/rom/relation/update_spec.rb +0 -25
  155. data/spec/unit/rom/relation/wrap_spec.rb +0 -29
  156. data/spec/unit/rom/repository/class_methods/build_spec.rb +0 -27
  157. data/spec/unit/rom/repository/element_reader_spec.rb +0 -21
  158. data/spec/unit/rom/repository/element_writer_spec.rb +0 -18
  159. data/spec/unit/rom/schema/builder/class_methods/build_spec.rb +0 -103
  160. data/spec/unit/rom/schema/element_reader_spec.rb +0 -15
  161. data/spec/unit/rom/session/class_methods/start_spec.rb +0 -23
  162. data/spec/unit/rom/session/clean_predicate_spec.rb +0 -21
  163. data/spec/unit/rom/session/environment/element_reader_spec.rb +0 -13
  164. data/spec/unit/rom/session/flush_spec.rb +0 -58
  165. data/spec/unit/rom/session/mapper/load_spec.rb +0 -47
  166. data/spec/unit/rom/session/relation/delete_spec.rb +0 -28
  167. data/spec/unit/rom/session/relation/dirty_predicate_spec.rb +0 -35
  168. data/spec/unit/rom/session/relation/identity_spec.rb +0 -11
  169. data/spec/unit/rom/session/relation/new_spec.rb +0 -50
  170. data/spec/unit/rom/session/relation/save_spec.rb +0 -50
  171. data/spec/unit/rom/session/relation/state_spec.rb +0 -23
  172. data/spec/unit/rom/session/relation/track_spec.rb +0 -23
  173. data/spec/unit/rom/session/relation/tracking_predicate_spec.rb +0 -23
  174. data/spec/unit/rom/session/relation/update_attributes_spec.rb +0 -45
  175. data/spec/unit/rom/session/state_spec.rb +0 -79
@@ -1,13 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Mapper::Header, '#project' do
6
- subject(:header) { other.project([:id]) }
7
-
8
- let(:other) { Mapper::Header.build([[:id], [:name]]) }
9
-
10
- it 'returns a header with projected attributes' do
11
- expect(header).to eql(Mapper::Header.build([[:id]]))
12
- end
13
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Mapper::Header, '#rename' do
6
- subject(:header) { Mapper::Header.build([[:id], [:name]]) }
7
-
8
- it 'returns a new header with renamed attributes' do
9
- expect(header.rename(:id => :user_id)).to eql(Mapper::Header.build([[:user_id], [:name]]))
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Mapper::Header, '#to_ast' do
6
- subject(:header) { Mapper::Header.build([[:id], [:name]]) }
7
-
8
- it 'returns a morpher transformer node that can load an attribute hash' do
9
- expect(Morpher.compile(header.to_ast).call(id: 1, name: 'Jane', other: 'Foo')).to eql(id: 1, name: 'Jane')
10
- end
11
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Mapper::Header, '#wrap' do
6
- subject(:header) { left.wrap(model: mapper) }
7
-
8
- let(:left) { Mapper::Header.build([[:id], [:name]]) }
9
- let(:mapper) { Mapper.build([[:id], [:title]]) }
10
-
11
- it 'returns a header with embedded value attribute' do
12
- expected = Mapper::Header.build([
13
- [:id], [:name], mapper.attribute(Mapper::Attribute::EmbeddedValue, :model)
14
- ])
15
-
16
- expect(header).to eq(expected)
17
- end
18
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Mapper, '#identity_from_tuple' do
6
- subject { mapper.identity_from_tuple(tuple) }
7
-
8
- include_context 'Mapper'
9
-
10
- it { should eq([1]) }
11
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Mapper, '#identity' do
6
- subject { mapper.identity(object) }
7
-
8
- include_context 'Mapper'
9
-
10
- it { should eq([1]) }
11
- end
@@ -1,15 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mapper, "#join" do
4
- let(:task) { Mapper.build([[:title]], model: task_model) }
5
- let(:user) { Mapper.build([[:name]], model: user_model) }
6
-
7
- let(:task_model) { mock_model(:title) }
8
- let(:user_model) { mock_model(:name) }
9
-
10
- subject(:mapper) { task.join(user) }
11
-
12
- it "returns a mapper with joined headers" do
13
- expect(mapper).to eql(Mapper.build([[:title], [:name]], model: task_model))
14
- end
15
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Mapper, '#load' do
6
- include_context 'Mapper'
7
-
8
- it 'loads the tuple into model' do
9
- expect(mapper.load(tuple)).to eql(object)
10
- end
11
- end
@@ -1,14 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Mapper, '#new_object' do
6
- subject { mapper.new_object(name: 'Jane', &block) }
7
-
8
- include_context 'Mapper'
9
-
10
- let(:attributes) { Hash[id: 1, name: 'Jane'] }
11
- let(:block) { proc { self.id = 1 } }
12
-
13
- it { should eql(model.new(attributes)) }
14
- end
@@ -1,11 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mapper, "#project" do
4
- let(:task) { Mapper.build([[:id, from: :user_id], [:name]]) }
5
-
6
- subject(:mapper) { task.project([:user_id]) }
7
-
8
- it "returns a mapper with a projected header" do
9
- expect(mapper).to eql(Mapper.build([[:id, from: :user_id]]))
10
- end
11
- end
@@ -1,16 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Mapper, '#rename' do
6
- include_context 'Mapper'
7
-
8
- let(:model) { mock_model(:user_id, :user_name) }
9
-
10
- it 'renames attributes' do
11
- tuple = { :user_id => 1, :user_name => 'Jane' }
12
- user = model.new(:user_id => 1, :user_name => 'Jane')
13
-
14
- expect(mapper.rename(:id => :user_id, :name => :user_name).load(tuple)).to eql(user)
15
- end
16
- end
@@ -1,35 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mapper, "#wrap" do
4
- let(:task) { Mapper.build([[:title]], model: task_model) }
5
- let(:user) { Mapper.build([[:id], [:name]], model: user_model) }
6
-
7
- let(:task_model) { mock_model(:title, :user) }
8
- let(:user_model) { mock_model(:id, :name) }
9
-
10
- subject(:mapper) { task.wrap(user: user) }
11
-
12
- let(:loader_transformer) do
13
- Morpher.compile(
14
- s(:block,
15
- s(:hash_transform,
16
- s(:block, s(:key_fetch, :title), s(:key_dump, :title)),
17
- s(:key_transform, :user, :user, user.loader.node)
18
- ),
19
- s(:load_instance_variables, s(:param, task_model, :title, :user))
20
- )
21
- )
22
- end
23
-
24
- let(:dumper_transformer) do
25
- loader_transformer.inverse
26
- end
27
-
28
- it "returns a mapper that can load wrapped tuples" do
29
- expect(mapper.loader).to eq(loader_transformer)
30
- end
31
-
32
- it "returns a mapper that can dump wrapped objects" do
33
- expect(mapper.dumper).to eq(dumper_transformer)
34
- end
35
- end
@@ -1,15 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Relation, '#delete' do
6
- include_context 'Relation'
7
-
8
- subject { relation.delete(john) }
9
-
10
- it { should be_instance_of(Relation) }
11
-
12
- it 'deletes tuples from the relation' do
13
- should_not include(john)
14
- end
15
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Relation, '#drop' do
6
- include_context 'Relation'
7
-
8
- it 'drops the relation by the given offset' do
9
- expect(relation.drop(1).to_a).to eql([jane, jack, jade])
10
- end
11
- end
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Relation, '#each' do
6
- include_context 'Relation'
7
-
8
- context 'with a block' do
9
- it 'yields objects' do
10
- retval = relation.each do |tuple|
11
- expect(tuple).to be_instance_of(model)
12
- end
13
-
14
- expect(retval).to be(relation)
15
- end
16
- end
17
-
18
- context 'without a block' do
19
- it 'returns enumerator' do
20
- expect(relation.each).to be_instance_of(Enumerator)
21
- end
22
- end
23
- end
@@ -1,19 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Relation, '#first' do
6
- include_context 'Relation'
7
-
8
- context 'when limit is not provided' do
9
- it 'returns first object' do
10
- expect(relation.first.to_a).to eql([john])
11
- end
12
- end
13
-
14
- context 'when limit is provided' do
15
- it 'returns first n-objects' do
16
- expect(relation.first(2).to_a).to eql([john, jane])
17
- end
18
- end
19
- end
@@ -1,29 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Relation, '#group' do
6
- let(:users) { Relation.new(user_relation, user_mapper) }
7
- let(:tasks) { Relation.new(task_relation, task_mapper) }
8
-
9
- fake(:user_relation) { Axiom::Relation }
10
- fake(:user_mapper) { Mapper }
11
-
12
- fake(:task_relation) { Axiom::Relation }
13
- fake(:task_header) { Axiom::Relation::Header }
14
- fake(:task_mapper) { Mapper }
15
-
16
- fake(:groupped_relation) { Axiom::Relation }
17
- fake(:groupped_mapper) { Mapper }
18
-
19
- it "groups relation and mapper" do
20
- stub(task_relation).header { task_header }
21
- stub(user_relation).group(:tasks => task_header) { groupped_relation }
22
- stub(user_mapper).group(:tasks => task_mapper) { groupped_mapper }
23
-
24
- expect(users.group(:tasks => tasks)).to eql(Relation.new(groupped_relation, groupped_mapper))
25
-
26
- expect(user_relation).to have_received.group(:tasks => task_header)
27
- expect(user_mapper).to have_received.group(:tasks => task_mapper)
28
- end
29
- end
@@ -1,17 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Relation, '#inject_mapper' do
6
- subject(:relation) { described_class.new([], mapper) }
7
-
8
- fake(:mapper)
9
- fake(:other_mapper) { Mapper }
10
-
11
- it 'returns new relation with injected new mapper' do
12
- other_relation = relation.inject_mapper(other_mapper)
13
-
14
- expect(other_relation.relation).to be(relation.relation)
15
- expect(other_relation.mapper).to be(other_mapper)
16
- end
17
- end
@@ -1,13 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Relation, '#insert' do
6
- include_context 'Relation'
7
-
8
- let(:user) { model.new(name: 'Piotr') }
9
-
10
- it 'inserts object into relation' do
11
- expect(relation.insert(user).to_a).to include(user)
12
- end
13
- end
@@ -1,19 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Relation, '#last' do
6
- include_context 'Relation'
7
-
8
- context 'when limit is not provided' do
9
- it 'returns last object' do
10
- expect(relation.last.to_a).to eql([jade])
11
- end
12
- end
13
-
14
- context 'when limit is provided' do
15
- it 'returns last n-objects' do
16
- expect(relation.last(2).to_a).to eql([jack, jade])
17
- end
18
- end
19
- end
@@ -1,49 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Relation, '#one' do
6
- include_context 'Relation'
7
-
8
- it 'limits the underlying relation' do
9
- stub(relation).take(2) { [john] }
10
- expect(relation.one).to eql(john)
11
- relation.should have_received.take(2)
12
- end
13
-
14
- context 'when no block is given' do
15
- context 'when one tuple is returned' do
16
- it 'returns one object' do
17
- expect(relation.restrict(name: 'John').one).to eql(john)
18
- end
19
- end
20
-
21
- context 'when no tuple is returned' do
22
- it 'raises NoTuplesError' do
23
- expect { relation.restrict(name: 'unknown').one }.to raise_error(NoTuplesError)
24
- end
25
- end
26
-
27
- context 'when more than one tuple is returned' do
28
- let(:header) { [[:id, Integer], [:name, String]] }
29
- let(:users) { Axiom::Relation.new(header, [[1, 'Jane'], [2, 'Jane']]) }
30
- let(:model) { mock_model(:id, :name) }
31
-
32
- it 'raises ManyTuplesError' do
33
- expect { relation.restrict(name: 'Jane').one }.to raise_error(ManyTuplesError)
34
- end
35
- end
36
- end
37
-
38
- context 'when a block is given' do
39
- let(:block) { ->() { raise error } }
40
-
41
- context 'when no tuple is returned' do
42
- let(:error) { Class.new(StandardError) }
43
-
44
- it 'invokes the block' do
45
- expect { relation.restrict(name: 'unknown').one(&block) }.to raise_error(error)
46
- end
47
- end
48
- end
49
- end
@@ -1,21 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Relation, '#rename' do
6
- subject(:relation) { users.rename(:user_name => :name) }
7
-
8
- let(:users) do
9
- Relation.new(
10
- Axiom::Relation.new([[:user_name, String]], [['Jane']]),
11
- Mapper.build([[:user_name]], model: model)
12
- )
13
- end
14
-
15
- let(:model) { mock_model(:name) }
16
- let(:user) { model.new(name: 'Jane') }
17
-
18
- it "renames the attributes" do
19
- expect(relation.to_a.first).to eql(user)
20
- end
21
- end
@@ -1,13 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Relation, '#replace' do
6
- subject(:relation) { described_class.new(users, mapper) }
7
-
8
- include_context 'Relation'
9
-
10
- it 'replaces the relation with a new one' do
11
- expect(relation.replace([jane]).to_a).to eq([jane])
12
- end
13
- end