massive_record 0.2.1 → 0.2.2.rc1

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 (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