massive_record 0.2.1 → 0.2.2.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. data/CHANGELOG.md +58 -2
  2. data/Gemfile.lock +17 -17
  3. data/README.md +98 -41
  4. data/lib/massive_record.rb +2 -1
  5. data/lib/massive_record/adapters/thrift/hbase/hbase.rb +2425 -2154
  6. data/lib/massive_record/adapters/thrift/hbase/hbase_constants.rb +3 -3
  7. data/lib/massive_record/adapters/thrift/hbase/hbase_types.rb +195 -195
  8. data/lib/massive_record/adapters/thrift/row.rb +35 -4
  9. data/lib/massive_record/adapters/thrift/table.rb +49 -12
  10. data/lib/massive_record/orm/attribute_methods.rb +77 -5
  11. data/lib/massive_record/orm/attribute_methods/cast_numbers_on_write.rb +24 -0
  12. data/lib/massive_record/orm/attribute_methods/dirty.rb +18 -0
  13. data/lib/massive_record/orm/attribute_methods/time_zone_conversion.rb +24 -3
  14. data/lib/massive_record/orm/attribute_methods/write.rb +8 -1
  15. data/lib/massive_record/orm/base.rb +62 -8
  16. data/lib/massive_record/orm/column.rb +7 -11
  17. data/lib/massive_record/orm/default_id.rb +1 -1
  18. data/lib/massive_record/orm/embedded.rb +66 -0
  19. data/lib/massive_record/orm/errors.rb +17 -0
  20. data/lib/massive_record/orm/finders.rb +124 -71
  21. data/lib/massive_record/orm/finders/rescue_missing_table_on_find.rb +1 -1
  22. data/lib/massive_record/orm/finders/scope.rb +58 -34
  23. data/lib/massive_record/orm/id_factory.rb +22 -105
  24. data/lib/massive_record/orm/id_factory/atomic_incrementation.rb +117 -0
  25. data/lib/massive_record/orm/id_factory/timestamp.rb +60 -0
  26. data/lib/massive_record/orm/identity_map.rb +256 -0
  27. data/lib/massive_record/orm/log_subscriber.rb +18 -0
  28. data/lib/massive_record/orm/observer.rb +69 -0
  29. data/lib/massive_record/orm/persistence.rb +47 -119
  30. data/lib/massive_record/orm/persistence/operations.rb +100 -0
  31. data/lib/massive_record/orm/persistence/operations/atomic_operation.rb +71 -0
  32. data/lib/massive_record/orm/persistence/operations/destroy.rb +17 -0
  33. data/lib/massive_record/orm/persistence/operations/embedded/destroy.rb +26 -0
  34. data/lib/massive_record/orm/persistence/operations/embedded/insert.rb +27 -0
  35. data/lib/massive_record/orm/persistence/operations/embedded/operation_helpers.rb +66 -0
  36. data/lib/massive_record/orm/persistence/operations/embedded/reload.rb +39 -0
  37. data/lib/massive_record/orm/persistence/operations/embedded/update.rb +29 -0
  38. data/lib/massive_record/orm/persistence/operations/insert.rb +19 -0
  39. data/lib/massive_record/orm/persistence/operations/reload.rb +26 -0
  40. data/lib/massive_record/orm/persistence/operations/suppress.rb +15 -0
  41. data/lib/massive_record/orm/persistence/operations/table_operation_helpers.rb +106 -0
  42. data/lib/massive_record/orm/persistence/operations/update.rb +25 -0
  43. data/lib/massive_record/orm/query_instrumentation.rb +26 -49
  44. data/lib/massive_record/orm/raw_data.rb +47 -0
  45. data/lib/massive_record/orm/relations.rb +4 -0
  46. data/lib/massive_record/orm/relations/interface.rb +134 -0
  47. data/lib/massive_record/orm/relations/metadata.rb +58 -12
  48. data/lib/massive_record/orm/relations/proxy.rb +17 -12
  49. data/lib/massive_record/orm/relations/proxy/embedded_in.rb +54 -0
  50. data/lib/massive_record/orm/relations/proxy/embedded_in_polymorphic.rb +15 -0
  51. data/lib/massive_record/orm/relations/proxy/embeds_many.rb +215 -0
  52. data/lib/massive_record/orm/relations/proxy/references_many.rb +112 -88
  53. data/lib/massive_record/orm/relations/proxy/references_one.rb +1 -1
  54. data/lib/massive_record/orm/relations/proxy/references_one_polymorphic.rb +1 -1
  55. data/lib/massive_record/orm/relations/proxy_collection.rb +84 -0
  56. data/lib/massive_record/orm/schema/column_family.rb +3 -2
  57. data/lib/massive_record/orm/schema/{column_interface.rb → embedded_interface.rb} +38 -4
  58. data/lib/massive_record/orm/schema/field.rb +2 -0
  59. data/lib/massive_record/orm/schema/table_interface.rb +19 -2
  60. data/lib/massive_record/orm/single_table_inheritance.rb +37 -2
  61. data/lib/massive_record/orm/timestamps.rb +17 -7
  62. data/lib/massive_record/orm/validations.rb +4 -0
  63. data/lib/massive_record/orm/validations/associated.rb +50 -0
  64. data/lib/massive_record/rails/railtie.rb +31 -0
  65. data/lib/massive_record/version.rb +1 -1
  66. data/lib/massive_record/wrapper/cell.rb +8 -1
  67. data/massive_record.gemspec +4 -4
  68. data/spec/adapter/thrift/atomic_increment_spec.rb +16 -0
  69. data/spec/adapter/thrift/table_find_spec.rb +14 -2
  70. data/spec/adapter/thrift/table_spec.rb +6 -6
  71. data/spec/adapter/thrift/utf8_encoding_of_id_spec.rb +71 -0
  72. data/spec/orm/cases/attribute_methods_spec.rb +215 -22
  73. data/spec/orm/cases/auto_generate_id_spec.rb +1 -1
  74. data/spec/orm/cases/change_id_spec.rb +62 -0
  75. data/spec/orm/cases/default_id_spec.rb +25 -6
  76. data/spec/orm/cases/default_values_spec.rb +6 -3
  77. data/spec/orm/cases/dirty_spec.rb +150 -102
  78. data/spec/orm/cases/embedded_spec.rb +250 -0
  79. data/spec/orm/cases/{finder_default_scope.rb → finder_default_scope_spec.rb} +4 -0
  80. data/spec/orm/cases/finder_scope_spec.rb +96 -29
  81. data/spec/orm/cases/finders_spec.rb +57 -10
  82. data/spec/orm/cases/id_factory/atomic_incrementation_spec.rb +72 -0
  83. data/spec/orm/cases/id_factory/timestamp_spec.rb +61 -0
  84. data/spec/orm/cases/identity_map/identity_map_spec.rb +357 -0
  85. data/spec/orm/cases/identity_map/middleware_spec.rb +74 -0
  86. data/spec/orm/cases/log_subscriber_spec.rb +15 -2
  87. data/spec/orm/cases/observing_spec.rb +61 -0
  88. data/spec/orm/cases/persistence_spec.rb +151 -60
  89. data/spec/orm/cases/raw_data_spec.rb +58 -0
  90. data/spec/orm/cases/single_table_inheritance_spec.rb +58 -2
  91. data/spec/orm/cases/table_spec.rb +3 -3
  92. data/spec/orm/cases/time_zone_awareness_spec.rb +27 -0
  93. data/spec/orm/cases/timestamps_spec.rb +23 -109
  94. data/spec/orm/cases/validation_spec.rb +9 -0
  95. data/spec/orm/models/address.rb +5 -1
  96. data/spec/orm/models/address_with_timestamp.rb +12 -0
  97. data/spec/orm/models/car.rb +5 -0
  98. data/spec/orm/models/person.rb +13 -1
  99. data/spec/orm/models/person_with_timestamp.rb +4 -2
  100. data/spec/orm/models/test_class.rb +1 -0
  101. data/spec/orm/persistence/operations/atomic_operation_spec.rb +58 -0
  102. data/spec/orm/persistence/operations/destroy_spec.rb +22 -0
  103. data/spec/orm/persistence/operations/embedded/destroy_spec.rb +71 -0
  104. data/spec/orm/persistence/operations/embedded/insert_spec.rb +59 -0
  105. data/spec/orm/persistence/operations/embedded/operation_helpers_spec.rb +92 -0
  106. data/spec/orm/persistence/operations/embedded/reload_spec.rb +67 -0
  107. data/spec/orm/persistence/operations/embedded/update_spec.rb +60 -0
  108. data/spec/orm/persistence/operations/insert_spec.rb +31 -0
  109. data/spec/orm/persistence/operations/reload_spec.rb +48 -0
  110. data/spec/orm/persistence/operations/suppress_spec.rb +17 -0
  111. data/spec/orm/persistence/operations/table_operation_helpers_spec.rb +98 -0
  112. data/spec/orm/persistence/operations/update_spec.rb +25 -0
  113. data/spec/orm/persistence/operations_spec.rb +58 -0
  114. data/spec/orm/relations/interface_spec.rb +188 -0
  115. data/spec/orm/relations/metadata_spec.rb +92 -15
  116. data/spec/orm/relations/proxy/embedded_in_polymorphic_spec.rb +37 -0
  117. data/spec/orm/relations/proxy/embedded_in_spec.rb +66 -0
  118. data/spec/orm/relations/proxy/embeds_many_spec.rb +651 -0
  119. data/spec/orm/relations/proxy/references_many_spec.rb +466 -2
  120. data/spec/orm/schema/column_family_spec.rb +21 -0
  121. data/spec/orm/schema/embedded_interface_spec.rb +181 -0
  122. data/spec/orm/schema/field_spec.rb +7 -0
  123. data/spec/orm/schema/table_interface_spec.rb +31 -1
  124. data/spec/shared/orm/id_factories.rb +44 -0
  125. data/spec/shared/orm/model_with_timestamps.rb +132 -0
  126. data/spec/shared/orm/persistence/a_persistence_embedded_operation_class.rb +3 -0
  127. data/spec/shared/orm/persistence/a_persistence_operation_class.rb +11 -0
  128. data/spec/shared/orm/persistence/a_persistence_table_operation_class.rb +11 -0
  129. data/spec/shared/orm/relations/proxy.rb +9 -2
  130. data/spec/spec_helper.rb +9 -0
  131. data/spec/support/mock_massive_record_connection.rb +2 -1
  132. metadata +106 -21
  133. data/spec/orm/cases/column_spec.rb +0 -49
  134. data/spec/orm/cases/id_factory_spec.rb +0 -92
  135. data/spec/orm/schema/column_interface_spec.rb +0 -136
@@ -0,0 +1,3 @@
1
+ shared_examples_for "a persistence embedded operation class" do
2
+ it_should_behave_like "a persistence operation class"
3
+ end
@@ -0,0 +1,11 @@
1
+ shared_examples_for "a persistence operation class" do
2
+ describe described_class do
3
+ subject { described_class }
4
+
5
+ its(:included_modules) { should include MassiveRecord::ORM::Persistence::Operations }
6
+ end
7
+
8
+ it "responds to execute" do
9
+ subject.execute
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ shared_examples_for "a persistence table operation class" do
2
+ it_should_behave_like "a persistence operation class"
3
+
4
+ describe described_class do
5
+ subject { described_class }
6
+
7
+ its(:included_modules) {
8
+ should include MassiveRecord::ORM::Persistence::Operations::TableOperationHelpers
9
+ }
10
+ end
11
+ end
@@ -39,10 +39,14 @@ shared_examples_for "relation proxy" do
39
39
 
40
40
 
41
41
  describe "#reset" do
42
- it "should not be loaded after reset" do
42
+ it "alters the loaded state" do
43
43
  subject.loaded!
44
44
  subject.reset
45
- should_not be_loaded
45
+ if subject.metadata.embedded_in?
46
+ should be_loaded
47
+ else
48
+ should_not be_loaded
49
+ end
46
50
  end
47
51
 
48
52
  it "should reset the proxy_target" do
@@ -59,6 +63,7 @@ shared_examples_for "relation proxy" do
59
63
  end
60
64
 
61
65
  it "should reset the proxy" do
66
+ subject.should_receive(:can_find_proxy_target?).and_return false
62
67
  subject.should_receive :reset
63
68
  subject.reload
64
69
  end
@@ -121,6 +126,8 @@ shared_examples_for "relation proxy" do
121
126
  let(:new_proxy_target) { subject.represents_a_collection? ? [subject.proxy_target_class.new] : subject.proxy_target_class.new }
122
127
 
123
128
  before do
129
+ new_proxy_target.each { |target| target.stub(:valid?).and_return true } if new_proxy_target.is_a? Array
130
+ old_proxy_target.each { |target| target.stub(:valid?).and_return true } if new_proxy_target.is_a? Array
124
131
  subject.proxy_target = old_proxy_target
125
132
  end
126
133
 
@@ -14,3 +14,12 @@ end
14
14
  Dir["#{SPEC_DIR}/orm/models/*.rb"].each { |f| require f }
15
15
  Dir["#{SPEC_DIR}/support/**/*.rb"].each { |f| require f }
16
16
  Dir["#{SPEC_DIR}/shared/**/*.rb"].each { |f| require f }
17
+
18
+
19
+ MassiveRecord::ORM::IdentityMap.enabled = false
20
+ if MassiveRecord::ORM::IdentityMap.enabled?
21
+ Rspec.configure do |c|
22
+ puts "IdentityMap is enabled!"
23
+ c.before { MassiveRecord::ORM::IdentityMap.clear }
24
+ end
25
+ end
@@ -21,7 +21,8 @@ module MockMassiveRecordConnection
21
21
  # Setting up a mock connection when asked for new
22
22
  mock_connection = mock(MassiveRecord::Wrapper::Connection,
23
23
  :open => true,
24
- :tables => MassiveRecord::ORM::Table.descendants.collect(&:table_name)
24
+ :tables => MassiveRecord::ORM::Table.descendants.collect(&:table_name),
25
+ :atomicIncrement => 1
25
26
  )
26
27
  MassiveRecord::Wrapper::Connection.stub(:new).and_return(mock_connection)
27
28
 
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: massive_record
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.2.1
4
+ prerelease: 6
5
+ version: 0.2.2.rc1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Companybook
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-24 00:00:00 +02:00
13
+ date: 2011-10-07 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -19,9 +19,9 @@ dependencies:
19
19
  requirement: &id001 !ruby/object:Gem::Requirement
20
20
  none: false
21
21
  requirements:
22
- - - ">="
22
+ - - "="
23
23
  - !ruby/object:Gem::Version
24
- version: 0.5.0
24
+ version: 0.6.0
25
25
  type: :runtime
26
26
  version_requirements: *id001
27
27
  - !ruby/object:Gem::Dependency
@@ -30,9 +30,9 @@ dependencies:
30
30
  requirement: &id002 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
- - - ">="
33
+ - - ~>
34
34
  - !ruby/object:Gem::Version
35
- version: "0"
35
+ version: 3.0.7
36
36
  type: :runtime
37
37
  version_requirements: *id002
38
38
  - !ruby/object:Gem::Dependency
@@ -41,9 +41,9 @@ dependencies:
41
41
  requirement: &id003 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
- - - ">="
44
+ - - ~>
45
45
  - !ruby/object:Gem::Version
46
- version: "0"
46
+ version: 3.0.7
47
47
  type: :runtime
48
48
  version_requirements: *id003
49
49
  - !ruby/object:Gem::Dependency
@@ -65,7 +65,7 @@ dependencies:
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 2.1.0
68
+ version: "0"
69
69
  type: :development
70
70
  version_requirements: *id005
71
71
  description: HBase Ruby client API
@@ -99,6 +99,7 @@ files:
99
99
  - lib/massive_record/adapters/thrift/scanner.rb
100
100
  - lib/massive_record/adapters/thrift/table.rb
101
101
  - lib/massive_record/orm/attribute_methods.rb
102
+ - lib/massive_record/orm/attribute_methods/cast_numbers_on_write.rb
102
103
  - lib/massive_record/orm/attribute_methods/dirty.rb
103
104
  - lib/massive_record/orm/attribute_methods/read.rb
104
105
  - lib/massive_record/orm/attribute_methods/time_zone_conversion.rb
@@ -112,26 +113,49 @@ files:
112
113
  - lib/massive_record/orm/column.rb
113
114
  - lib/massive_record/orm/config.rb
114
115
  - lib/massive_record/orm/default_id.rb
116
+ - lib/massive_record/orm/embedded.rb
115
117
  - lib/massive_record/orm/errors.rb
116
118
  - lib/massive_record/orm/finders.rb
117
119
  - lib/massive_record/orm/finders/rescue_missing_table_on_find.rb
118
120
  - lib/massive_record/orm/finders/scope.rb
119
121
  - lib/massive_record/orm/id_factory.rb
122
+ - lib/massive_record/orm/id_factory/atomic_incrementation.rb
123
+ - lib/massive_record/orm/id_factory/timestamp.rb
124
+ - lib/massive_record/orm/identity_map.rb
120
125
  - lib/massive_record/orm/log_subscriber.rb
126
+ - lib/massive_record/orm/observer.rb
121
127
  - lib/massive_record/orm/persistence.rb
128
+ - lib/massive_record/orm/persistence/operations.rb
129
+ - lib/massive_record/orm/persistence/operations/atomic_operation.rb
130
+ - lib/massive_record/orm/persistence/operations/destroy.rb
131
+ - lib/massive_record/orm/persistence/operations/embedded/destroy.rb
132
+ - lib/massive_record/orm/persistence/operations/embedded/insert.rb
133
+ - lib/massive_record/orm/persistence/operations/embedded/operation_helpers.rb
134
+ - lib/massive_record/orm/persistence/operations/embedded/reload.rb
135
+ - lib/massive_record/orm/persistence/operations/embedded/update.rb
136
+ - lib/massive_record/orm/persistence/operations/insert.rb
137
+ - lib/massive_record/orm/persistence/operations/reload.rb
138
+ - lib/massive_record/orm/persistence/operations/suppress.rb
139
+ - lib/massive_record/orm/persistence/operations/table_operation_helpers.rb
140
+ - lib/massive_record/orm/persistence/operations/update.rb
122
141
  - lib/massive_record/orm/query_instrumentation.rb
142
+ - lib/massive_record/orm/raw_data.rb
123
143
  - lib/massive_record/orm/relations.rb
124
144
  - lib/massive_record/orm/relations/interface.rb
125
145
  - lib/massive_record/orm/relations/metadata.rb
126
146
  - lib/massive_record/orm/relations/proxy.rb
147
+ - lib/massive_record/orm/relations/proxy/embedded_in.rb
148
+ - lib/massive_record/orm/relations/proxy/embedded_in_polymorphic.rb
149
+ - lib/massive_record/orm/relations/proxy/embeds_many.rb
127
150
  - lib/massive_record/orm/relations/proxy/references_many.rb
128
151
  - lib/massive_record/orm/relations/proxy/references_one.rb
129
152
  - lib/massive_record/orm/relations/proxy/references_one_polymorphic.rb
153
+ - lib/massive_record/orm/relations/proxy_collection.rb
130
154
  - lib/massive_record/orm/schema.rb
131
155
  - lib/massive_record/orm/schema/column_families.rb
132
156
  - lib/massive_record/orm/schema/column_family.rb
133
- - lib/massive_record/orm/schema/column_interface.rb
134
157
  - lib/massive_record/orm/schema/common_interface.rb
158
+ - lib/massive_record/orm/schema/embedded_interface.rb
135
159
  - lib/massive_record/orm/schema/field.rb
136
160
  - lib/massive_record/orm/schema/fields.rb
137
161
  - lib/massive_record/orm/schema/table_interface.rb
@@ -139,6 +163,7 @@ files:
139
163
  - lib/massive_record/orm/table.rb
140
164
  - lib/massive_record/orm/timestamps.rb
141
165
  - lib/massive_record/orm/validations.rb
166
+ - lib/massive_record/orm/validations/associated.rb
142
167
  - lib/massive_record/rails/controller_runtime.rb
143
168
  - lib/massive_record/rails/railtie.rb
144
169
  - lib/massive_record/spec/support/simple_database_cleaner.rb
@@ -155,25 +180,32 @@ files:
155
180
  - spec/adapter/thrift/connection_spec.rb
156
181
  - spec/adapter/thrift/table_find_spec.rb
157
182
  - spec/adapter/thrift/table_spec.rb
183
+ - spec/adapter/thrift/utf8_encoding_of_id_spec.rb
158
184
  - spec/config.yml.example
159
185
  - spec/orm/cases/attribute_methods_spec.rb
160
186
  - spec/orm/cases/auto_generate_id_spec.rb
161
187
  - spec/orm/cases/base_spec.rb
162
188
  - spec/orm/cases/callbacks_spec.rb
163
- - spec/orm/cases/column_spec.rb
189
+ - spec/orm/cases/change_id_spec.rb
164
190
  - spec/orm/cases/config_spec.rb
165
191
  - spec/orm/cases/default_id_spec.rb
166
192
  - spec/orm/cases/default_values_spec.rb
167
193
  - spec/orm/cases/dirty_spec.rb
194
+ - spec/orm/cases/embedded_spec.rb
168
195
  - spec/orm/cases/encoding_spec.rb
169
- - spec/orm/cases/finder_default_scope.rb
196
+ - spec/orm/cases/finder_default_scope_spec.rb
170
197
  - spec/orm/cases/finder_scope_spec.rb
171
198
  - spec/orm/cases/finders_spec.rb
172
199
  - spec/orm/cases/i18n_spec.rb
173
- - spec/orm/cases/id_factory_spec.rb
200
+ - spec/orm/cases/id_factory/atomic_incrementation_spec.rb
201
+ - spec/orm/cases/id_factory/timestamp_spec.rb
202
+ - spec/orm/cases/identity_map/identity_map_spec.rb
203
+ - spec/orm/cases/identity_map/middleware_spec.rb
174
204
  - spec/orm/cases/log_subscriber_spec.rb
175
205
  - spec/orm/cases/mass_assignment_security_spec.rb
206
+ - spec/orm/cases/observing_spec.rb
176
207
  - spec/orm/cases/persistence_spec.rb
208
+ - spec/orm/cases/raw_data_spec.rb
177
209
  - spec/orm/cases/single_table_inheritance_spec.rb
178
210
  - spec/orm/cases/table_spec.rb
179
211
  - spec/orm/cases/time_zone_awareness_spec.rb
@@ -183,25 +215,48 @@ files:
183
215
  - spec/orm/coders/json_spec.rb
184
216
  - spec/orm/coders/yaml_spec.rb
185
217
  - spec/orm/models/address.rb
218
+ - spec/orm/models/address_with_timestamp.rb
186
219
  - spec/orm/models/best_friend.rb
220
+ - spec/orm/models/car.rb
187
221
  - spec/orm/models/friend.rb
188
222
  - spec/orm/models/model_without_default_id.rb
189
223
  - spec/orm/models/person.rb
190
224
  - spec/orm/models/person_with_timestamp.rb
191
225
  - spec/orm/models/test_class.rb
226
+ - spec/orm/persistence/operations/atomic_operation_spec.rb
227
+ - spec/orm/persistence/operations/destroy_spec.rb
228
+ - spec/orm/persistence/operations/embedded/destroy_spec.rb
229
+ - spec/orm/persistence/operations/embedded/insert_spec.rb
230
+ - spec/orm/persistence/operations/embedded/operation_helpers_spec.rb
231
+ - spec/orm/persistence/operations/embedded/reload_spec.rb
232
+ - spec/orm/persistence/operations/embedded/update_spec.rb
233
+ - spec/orm/persistence/operations/insert_spec.rb
234
+ - spec/orm/persistence/operations/reload_spec.rb
235
+ - spec/orm/persistence/operations/suppress_spec.rb
236
+ - spec/orm/persistence/operations/table_operation_helpers_spec.rb
237
+ - spec/orm/persistence/operations/update_spec.rb
238
+ - spec/orm/persistence/operations_spec.rb
192
239
  - spec/orm/relations/interface_spec.rb
193
240
  - spec/orm/relations/metadata_spec.rb
241
+ - spec/orm/relations/proxy/embedded_in_polymorphic_spec.rb
242
+ - spec/orm/relations/proxy/embedded_in_spec.rb
243
+ - spec/orm/relations/proxy/embeds_many_spec.rb
194
244
  - spec/orm/relations/proxy/references_many_spec.rb
195
245
  - spec/orm/relations/proxy/references_one_polymorphic_spec.rb
196
246
  - spec/orm/relations/proxy/references_one_spec.rb
197
247
  - spec/orm/relations/proxy_spec.rb
198
248
  - spec/orm/schema/column_families_spec.rb
199
249
  - spec/orm/schema/column_family_spec.rb
200
- - spec/orm/schema/column_interface_spec.rb
250
+ - spec/orm/schema/embedded_interface_spec.rb
201
251
  - spec/orm/schema/field_spec.rb
202
252
  - spec/orm/schema/fields_spec.rb
203
253
  - spec/orm/schema/table_interface_spec.rb
204
254
  - spec/shared/orm/coders/an_orm_coder.rb
255
+ - spec/shared/orm/id_factories.rb
256
+ - spec/shared/orm/model_with_timestamps.rb
257
+ - spec/shared/orm/persistence/a_persistence_embedded_operation_class.rb
258
+ - spec/shared/orm/persistence/a_persistence_operation_class.rb
259
+ - spec/shared/orm/persistence/a_persistence_table_operation_class.rb
205
260
  - spec/shared/orm/relations/proxy.rb
206
261
  - spec/shared/orm/relations/singular_proxy.rb
207
262
  - spec/spec_helper.rb
@@ -227,9 +282,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
227
282
  required_rubygems_version: !ruby/object:Gem::Requirement
228
283
  none: false
229
284
  requirements:
230
- - - ">="
285
+ - - ">"
231
286
  - !ruby/object:Gem::Version
232
- version: "0"
287
+ version: 1.3.1
233
288
  requirements: []
234
289
 
235
290
  rubyforge_project: massive_record
@@ -243,25 +298,32 @@ test_files:
243
298
  - spec/adapter/thrift/connection_spec.rb
244
299
  - spec/adapter/thrift/table_find_spec.rb
245
300
  - spec/adapter/thrift/table_spec.rb
301
+ - spec/adapter/thrift/utf8_encoding_of_id_spec.rb
246
302
  - spec/config.yml.example
247
303
  - spec/orm/cases/attribute_methods_spec.rb
248
304
  - spec/orm/cases/auto_generate_id_spec.rb
249
305
  - spec/orm/cases/base_spec.rb
250
306
  - spec/orm/cases/callbacks_spec.rb
251
- - spec/orm/cases/column_spec.rb
307
+ - spec/orm/cases/change_id_spec.rb
252
308
  - spec/orm/cases/config_spec.rb
253
309
  - spec/orm/cases/default_id_spec.rb
254
310
  - spec/orm/cases/default_values_spec.rb
255
311
  - spec/orm/cases/dirty_spec.rb
312
+ - spec/orm/cases/embedded_spec.rb
256
313
  - spec/orm/cases/encoding_spec.rb
257
- - spec/orm/cases/finder_default_scope.rb
314
+ - spec/orm/cases/finder_default_scope_spec.rb
258
315
  - spec/orm/cases/finder_scope_spec.rb
259
316
  - spec/orm/cases/finders_spec.rb
260
317
  - spec/orm/cases/i18n_spec.rb
261
- - spec/orm/cases/id_factory_spec.rb
318
+ - spec/orm/cases/id_factory/atomic_incrementation_spec.rb
319
+ - spec/orm/cases/id_factory/timestamp_spec.rb
320
+ - spec/orm/cases/identity_map/identity_map_spec.rb
321
+ - spec/orm/cases/identity_map/middleware_spec.rb
262
322
  - spec/orm/cases/log_subscriber_spec.rb
263
323
  - spec/orm/cases/mass_assignment_security_spec.rb
324
+ - spec/orm/cases/observing_spec.rb
264
325
  - spec/orm/cases/persistence_spec.rb
326
+ - spec/orm/cases/raw_data_spec.rb
265
327
  - spec/orm/cases/single_table_inheritance_spec.rb
266
328
  - spec/orm/cases/table_spec.rb
267
329
  - spec/orm/cases/time_zone_awareness_spec.rb
@@ -271,25 +333,48 @@ test_files:
271
333
  - spec/orm/coders/json_spec.rb
272
334
  - spec/orm/coders/yaml_spec.rb
273
335
  - spec/orm/models/address.rb
336
+ - spec/orm/models/address_with_timestamp.rb
274
337
  - spec/orm/models/best_friend.rb
338
+ - spec/orm/models/car.rb
275
339
  - spec/orm/models/friend.rb
276
340
  - spec/orm/models/model_without_default_id.rb
277
341
  - spec/orm/models/person.rb
278
342
  - spec/orm/models/person_with_timestamp.rb
279
343
  - spec/orm/models/test_class.rb
344
+ - spec/orm/persistence/operations/atomic_operation_spec.rb
345
+ - spec/orm/persistence/operations/destroy_spec.rb
346
+ - spec/orm/persistence/operations/embedded/destroy_spec.rb
347
+ - spec/orm/persistence/operations/embedded/insert_spec.rb
348
+ - spec/orm/persistence/operations/embedded/operation_helpers_spec.rb
349
+ - spec/orm/persistence/operations/embedded/reload_spec.rb
350
+ - spec/orm/persistence/operations/embedded/update_spec.rb
351
+ - spec/orm/persistence/operations/insert_spec.rb
352
+ - spec/orm/persistence/operations/reload_spec.rb
353
+ - spec/orm/persistence/operations/suppress_spec.rb
354
+ - spec/orm/persistence/operations/table_operation_helpers_spec.rb
355
+ - spec/orm/persistence/operations/update_spec.rb
356
+ - spec/orm/persistence/operations_spec.rb
280
357
  - spec/orm/relations/interface_spec.rb
281
358
  - spec/orm/relations/metadata_spec.rb
359
+ - spec/orm/relations/proxy/embedded_in_polymorphic_spec.rb
360
+ - spec/orm/relations/proxy/embedded_in_spec.rb
361
+ - spec/orm/relations/proxy/embeds_many_spec.rb
282
362
  - spec/orm/relations/proxy/references_many_spec.rb
283
363
  - spec/orm/relations/proxy/references_one_polymorphic_spec.rb
284
364
  - spec/orm/relations/proxy/references_one_spec.rb
285
365
  - spec/orm/relations/proxy_spec.rb
286
366
  - spec/orm/schema/column_families_spec.rb
287
367
  - spec/orm/schema/column_family_spec.rb
288
- - spec/orm/schema/column_interface_spec.rb
368
+ - spec/orm/schema/embedded_interface_spec.rb
289
369
  - spec/orm/schema/field_spec.rb
290
370
  - spec/orm/schema/fields_spec.rb
291
371
  - spec/orm/schema/table_interface_spec.rb
292
372
  - spec/shared/orm/coders/an_orm_coder.rb
373
+ - spec/shared/orm/id_factories.rb
374
+ - spec/shared/orm/model_with_timestamps.rb
375
+ - spec/shared/orm/persistence/a_persistence_embedded_operation_class.rb
376
+ - spec/shared/orm/persistence/a_persistence_operation_class.rb
377
+ - spec/shared/orm/persistence/a_persistence_table_operation_class.rb
293
378
  - spec/shared/orm/relations/proxy.rb
294
379
  - spec/shared/orm/relations/singular_proxy.rb
295
380
  - spec/spec_helper.rb
@@ -1,49 +0,0 @@
1
- require 'spec_helper'
2
- require 'orm/models/address'
3
-
4
- describe "column classes" do
5
- before do
6
- @address = Address.new(:street => "Asker", :number => 5)
7
- end
8
-
9
- it "should have known_attribute_names" do
10
- Address.should have(3).known_attribute_names
11
- Address.known_attribute_names.should include("street", "number", "nice_place")
12
- end
13
-
14
- it "should have default_attributes_from_schema" do
15
- Address.default_attributes_from_schema["street"].should be_nil
16
- Address.default_attributes_from_schema["number"].should be_nil
17
- Address.default_attributes_from_schema["nice_place"].should be_true
18
- end
19
-
20
- it "should have attributes_schema" do
21
- Address.attributes_schema["street"].should be_instance_of MassiveRecord::ORM::Schema::Field
22
- end
23
-
24
- it "should have a default value set" do
25
- @address.nice_place.should be_true
26
- end
27
-
28
-
29
- # TODO We might want to remove this when we have implemented
30
- # associations correctly. Since Columns are contained within
31
- # tables, calling save should do something on it's proxy_owner object.
32
- describe "not be possible to persist (at least for now...)" do
33
- %w(first last all exists? destroy_all).each do |method|
34
- it "should not respond to class method #{method}" do
35
- Address.should_not respond_to method
36
- end
37
- end
38
-
39
- %w(
40
- create! create reload save save!
41
- update_attribute update_attributes update_attributes! touch destroy
42
- delete increment! atomic_increment! decrement!
43
- ).each do |method|
44
- it "should not respond to instance method #{method}" do
45
- @address.should_not respond_to method
46
- end
47
- end
48
- end
49
- end
@@ -1,92 +0,0 @@
1
- require 'spec_helper'
2
- require 'orm/models/person'
3
-
4
- describe "id factory" do
5
- subject { MassiveRecord::ORM::IdFactory.instance }
6
-
7
- it "should be a singleton" do
8
- MassiveRecord::ORM::IdFactory.included_modules.should include(Singleton)
9
- end
10
-
11
- describe "#next_for" do
12
- describe "dry" do
13
- include MockMassiveRecordConnection
14
-
15
- it "should respond to next_for" do
16
- subject.should respond_to :next_for
17
- end
18
-
19
- it "should use incomming table name if it's a string" do
20
- subject.should_receive(:next_id).with(hash_including(:table => "test_table"))
21
- subject.next_for "test_table"
22
- end
23
-
24
- it "should use incomming table name if it's a symbol" do
25
- subject.should_receive(:next_id).with(hash_including(:table => "test_table"))
26
- subject.next_for :test_table
27
- end
28
-
29
- it "should ask object for it's table name if it responds to that" do
30
- Person.should_receive(:table_name).and_return("people")
31
- subject.should_receive(:next_id).with(hash_including(:table => "people"))
32
- subject.next_for(Person)
33
- end
34
-
35
- it "should have class method next_for and delegate it to it's instance" do
36
- subject.should_receive(:next_for).with("cars")
37
- MassiveRecord::ORM::IdFactory.next_for("cars")
38
- end
39
- end
40
-
41
-
42
-
43
- describe "database" do
44
- include SetUpHbaseConnectionBeforeAll
45
- include SetTableNamesToTestTable
46
-
47
- after do
48
- MassiveRecord::ORM::IdFactory.destroy_all
49
- end
50
-
51
- it "should increment start a new sequence on 1" do
52
- subject.next_for(Person).should == 1
53
- end
54
-
55
- it "should increment value one by one" do
56
- 5.times do |index|
57
- expected_id = index + 1
58
- subject.next_for(Person).should == expected_id
59
- end
60
- end
61
-
62
- it "should maintain ids separate for each table" do
63
- 3.times { subject.next_for(Person) }
64
- subject.next_for("cars").should == 1
65
- end
66
-
67
-
68
- describe "old string representation of integers" do
69
- it "increments correctly when value is '1'" do
70
- old_ensure = MassiveRecord::ORM::Base.backward_compatibility_integers_might_be_persisted_as_strings
71
- MassiveRecord::ORM::Base.backward_compatibility_integers_might_be_persisted_as_strings = true
72
-
73
- subject.next_for(Person)
74
-
75
- # Enter incompatible data, number as string.
76
- MassiveRecord::ORM::IdFactory.table.first.tap do |row|
77
- row.update_column(
78
- MassiveRecord::ORM::IdFactory::COLUMN_FAMILY_FOR_TABLES,
79
- Person.table_name,
80
- MassiveRecord::ORM::Base.coder.dump(1)
81
- )
82
- row.save
83
- end
84
-
85
- subject.next_for(Person).should eq 2
86
-
87
- MassiveRecord::ORM::Base.backward_compatibility_integers_might_be_persisted_as_strings = old_ensure
88
- end
89
- end
90
- end
91
- end
92
- end