massive_record 0.2.0 → 0.2.1.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +43 -4
- data/Gemfile.lock +3 -1
- data/README.md +5 -0
- data/lib/massive_record/adapters/thrift/connection.rb +23 -16
- data/lib/massive_record/adapters/thrift/row.rb +13 -33
- data/lib/massive_record/adapters/thrift/table.rb +24 -10
- data/lib/massive_record/orm/attribute_methods.rb +27 -1
- data/lib/massive_record/orm/attribute_methods/dirty.rb +2 -2
- data/lib/massive_record/orm/attribute_methods/read.rb +36 -1
- data/lib/massive_record/orm/attribute_methods/time_zone_conversion.rb +81 -0
- data/lib/massive_record/orm/attribute_methods/write.rb +18 -0
- data/lib/massive_record/orm/base.rb +52 -10
- data/lib/massive_record/orm/callbacks.rb +1 -1
- data/lib/massive_record/orm/default_id.rb +20 -0
- data/lib/massive_record/orm/errors.rb +4 -0
- data/lib/massive_record/orm/finders.rb +102 -57
- data/lib/massive_record/orm/finders/rescue_missing_table_on_find.rb +45 -0
- data/lib/massive_record/orm/id_factory.rb +1 -1
- data/lib/massive_record/orm/log_subscriber.rb +85 -0
- data/lib/massive_record/orm/persistence.rb +82 -37
- data/lib/massive_record/orm/query_instrumentation.rb +64 -0
- data/lib/massive_record/orm/relations/interface.rb +10 -0
- data/lib/massive_record/orm/relations/metadata.rb +2 -0
- data/lib/massive_record/orm/relations/proxy/references_one_polymorphic.rb +1 -1
- data/lib/massive_record/orm/schema/field.rb +33 -6
- data/lib/massive_record/orm/timestamps.rb +1 -1
- data/lib/massive_record/orm/validations.rb +2 -2
- data/lib/massive_record/rails/controller_runtime.rb +55 -0
- data/lib/massive_record/rails/railtie.rb +16 -0
- data/lib/massive_record/version.rb +1 -1
- data/lib/massive_record/wrapper/cell.rb +32 -3
- data/massive_record.gemspec +1 -0
- data/spec/{wrapper/cases → adapter/thrift}/adapter_spec.rb +0 -0
- data/spec/adapter/thrift/atomic_increment_spec.rb +55 -0
- data/spec/{wrapper/cases → adapter/thrift}/connection_spec.rb +0 -10
- data/spec/adapter/thrift/table_find_spec.rb +40 -0
- data/spec/{wrapper/cases → adapter/thrift}/table_spec.rb +55 -13
- data/spec/orm/cases/attribute_methods_spec.rb +6 -1
- data/spec/orm/cases/base_spec.rb +18 -4
- data/spec/orm/cases/callbacks_spec.rb +1 -1
- data/spec/orm/cases/default_id_spec.rb +38 -0
- data/spec/orm/cases/default_values_spec.rb +37 -0
- data/spec/orm/cases/dirty_spec.rb +25 -1
- data/spec/orm/cases/encoding_spec.rb +3 -3
- data/spec/orm/cases/finder_default_scope.rb +8 -1
- data/spec/orm/cases/finder_scope_spec.rb +2 -2
- data/spec/orm/cases/finders_spec.rb +8 -18
- data/spec/orm/cases/id_factory_spec.rb +38 -21
- data/spec/orm/cases/log_subscriber_spec.rb +133 -0
- data/spec/orm/cases/mass_assignment_security_spec.rb +97 -0
- data/spec/orm/cases/persistence_spec.rb +132 -27
- data/spec/orm/cases/single_table_inheritance_spec.rb +2 -2
- data/spec/orm/cases/time_zone_awareness_spec.rb +157 -0
- data/spec/orm/cases/timestamps_spec.rb +15 -0
- data/spec/orm/cases/validation_spec.rb +2 -2
- data/spec/orm/models/model_without_default_id.rb +5 -0
- data/spec/orm/models/person.rb +1 -0
- data/spec/orm/models/test_class.rb +1 -0
- data/spec/orm/relations/interface_spec.rb +2 -2
- data/spec/orm/relations/metadata_spec.rb +1 -1
- data/spec/orm/relations/proxy/references_many_spec.rb +21 -15
- data/spec/orm/relations/proxy/references_one_polymorphic_spec.rb +7 -1
- data/spec/orm/relations/proxy/references_one_spec.rb +7 -0
- data/spec/orm/schema/field_spec.rb +61 -5
- data/spec/support/connection_helpers.rb +2 -1
- data/spec/support/mock_massive_record_connection.rb +7 -0
- data/spec/support/time_zone_helper.rb +25 -0
- metadata +51 -14
@@ -3,6 +3,7 @@ require 'orm/models/person'
|
|
3
3
|
require 'orm/models/person_with_timestamp'
|
4
4
|
|
5
5
|
describe "timestamps" do
|
6
|
+
include TimeZoneHelper
|
6
7
|
include CreatePersonBeforeEach
|
7
8
|
|
8
9
|
before do
|
@@ -52,6 +53,20 @@ describe "timestamps" do
|
|
52
53
|
|
53
54
|
@person.updated_at.should == updated_at_was
|
54
55
|
end
|
56
|
+
|
57
|
+
context "with time zone awarenesswith zone enabled" do
|
58
|
+
it "should return time with zone" do
|
59
|
+
in_time_zone "Europe/Stockholm" do
|
60
|
+
@person.updated_at.should be_instance_of ActiveSupport::TimeWithZone
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should be nil on new records" do
|
65
|
+
in_time_zone "Europe/Stockholm" do
|
66
|
+
Person.new.updated_at.should be_nil
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
55
70
|
end
|
56
71
|
|
57
72
|
describe "#created_at" do
|
@@ -66,7 +66,7 @@ describe "MassiveRecord::Base::Table" do
|
|
66
66
|
include MockMassiveRecordConnection
|
67
67
|
|
68
68
|
before do
|
69
|
-
@model = Person.new
|
69
|
+
@model = Person.new "1", :name => "Alice", :email => "alice@gmail.com", :age => 20
|
70
70
|
@invalidate_model = Proc.new { |p| p.name = nil }
|
71
71
|
end
|
72
72
|
|
@@ -84,7 +84,7 @@ end
|
|
84
84
|
#include MockMassiveRecordConnection
|
85
85
|
|
86
86
|
#before do
|
87
|
-
#@model = Address.new
|
87
|
+
#@model = Address.new "1", :street => "Henrik Ibsens gate 1"
|
88
88
|
#@invalidate_model = Proc.new { |a| a.street = nil }
|
89
89
|
#end
|
90
90
|
|
data/spec/orm/models/person.rb
CHANGED
@@ -146,14 +146,14 @@ describe MassiveRecord::ORM::Relations::Interface do
|
|
146
146
|
|
147
147
|
it "should set the type in proxy_owner when proxy_target is set" do
|
148
148
|
subject.attachable = attachable
|
149
|
-
subject.attachable_type.should == attachable.class.to_s
|
149
|
+
subject.attachable_type.should == attachable.class.to_s
|
150
150
|
end
|
151
151
|
|
152
152
|
|
153
153
|
|
154
154
|
[Person, PersonWithTimestamp].each do |polymorphic_class|
|
155
155
|
describe "polymorphic association to class #{polymorphic_class}" do
|
156
|
-
let (:attachable) { polymorphic_class.new
|
156
|
+
let (:attachable) { polymorphic_class.new "ID1" }
|
157
157
|
|
158
158
|
before do
|
159
159
|
subject.attachable_id = attachable.id
|
@@ -181,7 +181,7 @@ describe MassiveRecord::ORM::Relations::Metadata do
|
|
181
181
|
end
|
182
182
|
|
183
183
|
describe "proc" do
|
184
|
-
let(:proxy_owner) { Person.new
|
184
|
+
let(:proxy_owner) { Person.new "person-1" }
|
185
185
|
let(:find_with_proc) { subject.records_starts_from = :friends_records_starts_from_id; subject.find_with }
|
186
186
|
|
187
187
|
before do
|
@@ -6,10 +6,10 @@ describe TestReferencesManyProxy do
|
|
6
6
|
include SetUpHbaseConnectionBeforeAll
|
7
7
|
include SetTableNamesToTestTable
|
8
8
|
|
9
|
-
let(:proxy_owner) { Person.new
|
10
|
-
let(:proxy_target) { TestClass.new
|
11
|
-
let(:proxy_target_2) { TestClass.new
|
12
|
-
let(:proxy_target_3) { TestClass.new
|
9
|
+
let(:proxy_owner) { Person.new "person-id-1", :name => "Test", :age => 29 }
|
10
|
+
let(:proxy_target) { TestClass.new "test-class-id-1" }
|
11
|
+
let(:proxy_target_2) { TestClass.new "test-class-id-2" }
|
12
|
+
let(:proxy_target_3) { TestClass.new "test-class-id-3" }
|
13
13
|
let(:metadata) { subject.metadata }
|
14
14
|
|
15
15
|
subject { proxy_owner.send(:relation_proxy, 'test_classes') }
|
@@ -43,9 +43,9 @@ describe TestReferencesManyProxy do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
describe "with start from" do
|
46
|
-
let(:proxy_target) { Person.new
|
47
|
-
let(:proxy_target_2) { Person.new
|
48
|
-
let(:not_proxy_target) { Person.new
|
46
|
+
let(:proxy_target) { Person.new proxy_owner.id+"-friend-1", :name => "T", :age => 2 }
|
47
|
+
let(:proxy_target_2) { Person.new proxy_owner.id+"-friend-2", :name => "H", :age => 9 }
|
48
|
+
let(:not_proxy_target) { Person.new "foo"+"-friend-2", :name => "H", :age => 1 }
|
49
49
|
let(:metadata) { subject.metadata }
|
50
50
|
|
51
51
|
subject { proxy_owner.send(:relation_proxy, 'friends') }
|
@@ -429,8 +429,8 @@ describe TestReferencesManyProxy do
|
|
429
429
|
end
|
430
430
|
|
431
431
|
describe "with records_starts_from (proc)" do
|
432
|
-
let(:proxy_target) { Person.new
|
433
|
-
let(:proxy_target_2) { Person.new
|
432
|
+
let(:proxy_target) { Person.new proxy_owner.id+"-friend-1", :name => "T", :age => 2 }
|
433
|
+
let(:proxy_target_2) { Person.new proxy_owner.id+"-friend-2", :name => "H", :age => 9 }
|
434
434
|
let(:metadata) { subject.metadata }
|
435
435
|
|
436
436
|
subject { proxy_owner.send(:relation_proxy, 'friends') }
|
@@ -497,9 +497,9 @@ describe TestReferencesManyProxy do
|
|
497
497
|
|
498
498
|
|
499
499
|
describe "with records_starts_from (proc)" do
|
500
|
-
let(:proxy_target) { Person.new
|
501
|
-
let(:proxy_target_2) { Person.new
|
502
|
-
let(:not_among_targets) { Person.new
|
500
|
+
let(:proxy_target) { Person.new proxy_owner.id+"-friend-1", :name => "T", :age => 2 }
|
501
|
+
let(:proxy_target_2) { Person.new proxy_owner.id+"-friend-2", :name => "H", :age => 9 }
|
502
|
+
let(:not_among_targets) { Person.new "NOT-friend-1", :name => "H", :age => 9 }
|
503
503
|
let(:metadata) { subject.metadata }
|
504
504
|
|
505
505
|
subject { proxy_owner.send(:relation_proxy, 'friends') }
|
@@ -579,9 +579,9 @@ describe TestReferencesManyProxy do
|
|
579
579
|
|
580
580
|
|
581
581
|
describe "with records_starts_from (proc)" do
|
582
|
-
let(:proxy_target) { Person.new
|
583
|
-
let(:proxy_target_2) { Person.new
|
584
|
-
let(:not_among_targets) { Person.new
|
582
|
+
let(:proxy_target) { Person.new proxy_owner.id+"-friend-1", :name => "T", :age => 2 }
|
583
|
+
let(:proxy_target_2) { Person.new proxy_owner.id+"-friend-2", :name => "H", :age => 9 }
|
584
|
+
let(:not_among_targets) { Person.new "NOT-friend-1", :name => "H", :age => 9 }
|
585
585
|
let(:metadata) { subject.metadata }
|
586
586
|
|
587
587
|
subject { proxy_owner.send(:relation_proxy, 'friends') }
|
@@ -621,4 +621,10 @@ describe TestReferencesManyProxy do
|
|
621
621
|
end
|
622
622
|
end
|
623
623
|
end
|
624
|
+
|
625
|
+
it "resets when the proxy owner is asked to reload" do
|
626
|
+
subject.loaded!
|
627
|
+
proxy_owner.reload
|
628
|
+
should_not be_loaded
|
629
|
+
end
|
624
630
|
end
|
@@ -56,7 +56,7 @@ describe TestReferencesOnePolymorphicProxy do
|
|
56
56
|
it "should set the proxy_target's type in proxy_owner" do
|
57
57
|
proxy_owner.attachable_type = nil
|
58
58
|
proxy_owner.attachable = proxy_target
|
59
|
-
proxy_owner.attachable_type.should == proxy_target.class.to_s
|
59
|
+
proxy_owner.attachable_type.should == proxy_target.class.to_s
|
60
60
|
end
|
61
61
|
|
62
62
|
it "should reset the proxy_targets foreign key if proxy_target is nil" do
|
@@ -103,4 +103,10 @@ describe TestReferencesOnePolymorphicProxy do
|
|
103
103
|
proxy_owner.attachable_id.should == proxy_target.id
|
104
104
|
end
|
105
105
|
end
|
106
|
+
|
107
|
+
it "resets when the proxy owner is asked to reload" do
|
108
|
+
subject.loaded!
|
109
|
+
proxy_owner.reload
|
110
|
+
should_not be_loaded
|
111
|
+
end
|
106
112
|
end
|
@@ -108,4 +108,11 @@ describe TestReferencesOneProxy do
|
|
108
108
|
lambda { subject.send :raise_if_type_mismatch, person_with_timestamp }.should raise_error MassiveRecord::ORM::RelationTypeMismatch
|
109
109
|
end
|
110
110
|
end
|
111
|
+
|
112
|
+
|
113
|
+
it "resets when the proxy owner is asked to reload" do
|
114
|
+
subject.loaded!
|
115
|
+
proxy_owner.reload
|
116
|
+
should_not be_loaded
|
117
|
+
end
|
111
118
|
end
|
@@ -115,6 +115,7 @@ describe MassiveRecord::ORM::Schema::Field do
|
|
115
115
|
@subject.decode("0").should be_false
|
116
116
|
@subject.decode("").should be_nil
|
117
117
|
@subject.decode(nil).should be_nil
|
118
|
+
@subject.decode("null").should be_nil
|
118
119
|
end
|
119
120
|
|
120
121
|
it "should decode a string value" do
|
@@ -122,6 +123,7 @@ describe MassiveRecord::ORM::Schema::Field do
|
|
122
123
|
@subject.decode("value").should == "value"
|
123
124
|
@subject.decode("").should == ""
|
124
125
|
@subject.decode(nil).should be_nil
|
126
|
+
@subject.decode("frozen".freeze).should eq "frozen"
|
125
127
|
end
|
126
128
|
|
127
129
|
it "should cast symbols to strings" do
|
@@ -131,20 +133,33 @@ describe MassiveRecord::ORM::Schema::Field do
|
|
131
133
|
|
132
134
|
it "should decode string null correctly" do
|
133
135
|
@subject = MassiveRecord::ORM::Schema::Field.new(:name => :status, :type => :string)
|
134
|
-
@subject.decode(@subject.
|
136
|
+
@subject.decode(@subject.coder.dump("null")).should == "null"
|
135
137
|
end
|
136
138
|
|
137
139
|
it "should decode string with value nil correctly" do
|
138
140
|
@subject = MassiveRecord::ORM::Schema::Field.new(:name => :status, :type => :string)
|
139
|
-
@subject.decode(
|
141
|
+
@subject.decode(nil).should == nil
|
140
142
|
end
|
141
143
|
|
142
144
|
it "should decode an integer value" do
|
145
|
+
old_combatibility = MassiveRecord::ORM::Base.backward_compatibility_integers_might_be_persisted_as_strings
|
146
|
+
MassiveRecord::ORM::Base.backward_compatibility_integers_might_be_persisted_as_strings = true
|
147
|
+
|
143
148
|
@subject = MassiveRecord::ORM::Schema::Field.new(:name => :status, :type => :integer)
|
144
149
|
@subject.decode("1").should == 1
|
145
150
|
@subject.decode(1).should == 1
|
146
151
|
@subject.decode("").should be_nil
|
147
152
|
@subject.decode(nil).should be_nil
|
153
|
+
|
154
|
+
MassiveRecord::ORM::Base.backward_compatibility_integers_might_be_persisted_as_strings = old_combatibility
|
155
|
+
end
|
156
|
+
|
157
|
+
it "decodes an integer value is represented as a binary string" do
|
158
|
+
@subject = MassiveRecord::ORM::Schema::Field.new(:name => :status, :type => :integer)
|
159
|
+
@subject.decode(nil).should be_nil
|
160
|
+
@subject.decode("\x00\x00\x00\x00\x00\x00\x00\x01").should eq 1
|
161
|
+
@subject.decode("\x00\x00\x00\x00\x00\x00\x00\x1C").should eq 28
|
162
|
+
@subject.decode("\x00\x00\x00\x00\x00\x00\x00\x1E").should eq 30
|
148
163
|
end
|
149
164
|
|
150
165
|
it "should decode an float value" do
|
@@ -176,6 +191,12 @@ describe MassiveRecord::ORM::Schema::Field do
|
|
176
191
|
@subject.decode(nil).should be_nil
|
177
192
|
end
|
178
193
|
|
194
|
+
it "should decode time when value is ActiveSupport::TimeWithZone" do
|
195
|
+
today = Time.now.in_time_zone('Europe/Stockholm')
|
196
|
+
@subject = MassiveRecord::ORM::Schema::Field.new(:name => :created_at, :type => :time)
|
197
|
+
@subject.decode(today).to_i.should == today.to_i
|
198
|
+
end
|
199
|
+
|
179
200
|
it "should set time to nil if date could not be parsed" do
|
180
201
|
today = "foobar"
|
181
202
|
@subject = MassiveRecord::ORM::Schema::Field.new(:name => :created_at, :type => :time)
|
@@ -232,21 +253,43 @@ describe MassiveRecord::ORM::Schema::Field do
|
|
232
253
|
|
233
254
|
it "should encode string if value is null" do
|
234
255
|
@subject.type = :string
|
235
|
-
@subject.encode("null").should ==
|
256
|
+
@subject.encode("null").should == "null"
|
236
257
|
end
|
237
258
|
|
238
259
|
it "should encode string if value is nil" do
|
239
260
|
@subject.type = :string
|
240
|
-
@subject.encode(nil).should ==
|
261
|
+
@subject.encode(nil).should == nil
|
241
262
|
end
|
242
263
|
|
243
|
-
|
264
|
+
it "should encode fixnum to fixnum" do
|
265
|
+
@subject.type = :integer
|
266
|
+
@subject.encode(1).should == 1
|
267
|
+
end
|
268
|
+
|
269
|
+
(MassiveRecord::ORM::Schema::Field::TYPES - [:integer, :string]).each do |type|
|
244
270
|
it "should ask coder to dump value when type is #{type}" do
|
245
271
|
@subject.type = type
|
246
272
|
@subject.coder.should_receive(:dump)
|
247
273
|
@subject.encode("{}")
|
248
274
|
end
|
249
275
|
end
|
276
|
+
|
277
|
+
context "time_zone_aware_attributes" do
|
278
|
+
before do
|
279
|
+
@old_time_zone_aware_attributes = MassiveRecord::ORM::Base.time_zone_aware_attributes
|
280
|
+
MassiveRecord::ORM::Base.time_zone_aware_attributes = true
|
281
|
+
end
|
282
|
+
|
283
|
+
after do
|
284
|
+
MassiveRecord::ORM::Base.time_zone_aware_attributes = @old_time_zone_aware_attributes
|
285
|
+
end
|
286
|
+
|
287
|
+
it "should encode times in UTC" do
|
288
|
+
europe_time = Time.now.in_time_zone('Europe/Stockholm')
|
289
|
+
@subject = MassiveRecord::ORM::Schema::Field.new(:name => :created_at, :type => :time)
|
290
|
+
@subject.encode(europe_time).should == subject.coder.dump(europe_time.utc)
|
291
|
+
end
|
292
|
+
end
|
250
293
|
end
|
251
294
|
|
252
295
|
describe "#unique_name" do
|
@@ -351,4 +394,17 @@ describe MassiveRecord::ORM::Schema::Field do
|
|
351
394
|
end
|
352
395
|
end
|
353
396
|
end
|
397
|
+
|
398
|
+
|
399
|
+
|
400
|
+
describe "#hex_string_to_integer" do
|
401
|
+
subject { MassiveRecord::ORM::Schema::Field.new(:name => :status, :type => :integer) }
|
402
|
+
|
403
|
+
((-2..2).to_a + [4611686018427387903]).each do |integer|
|
404
|
+
it "decodes signed integer '#{integer}' correctly" do
|
405
|
+
int_representation_in_hbase = [integer].pack('q').reverse
|
406
|
+
subject.send(:hex_string_to_integer, int_representation_in_hbase).should eq integer
|
407
|
+
end
|
408
|
+
end
|
409
|
+
end
|
354
410
|
end
|
@@ -39,11 +39,12 @@ module CreatePersonBeforeEach
|
|
39
39
|
before do
|
40
40
|
@table = MassiveRecord::Wrapper::Table.new(@connection, Person.table_name)
|
41
41
|
@table.column_families.create(:info)
|
42
|
+
@table.column_families.create(:base)
|
42
43
|
@table.save
|
43
44
|
|
44
45
|
@row = MassiveRecord::Wrapper::Row.new
|
45
46
|
@row.id = "ID1"
|
46
|
-
@row.values = {:info => {:name => "John Doe", :email => "john@base.com", :age => "20", :test_class_ids => [].to_json}}
|
47
|
+
@row.values = {:info => {:name => "John Doe", :email => "john@base.com", :age => "20", :test_class_ids => [].to_json}, :base => {:phone_numbers => [].to_json}}
|
47
48
|
@row.table = @table
|
48
49
|
@row.save
|
49
50
|
end
|
@@ -38,6 +38,13 @@ module MockMassiveRecordConnection
|
|
38
38
|
row.values = {}
|
39
39
|
row
|
40
40
|
end
|
41
|
+
|
42
|
+
def table.all(*args)
|
43
|
+
row = MassiveRecord::Wrapper::Row.new
|
44
|
+
row.id = args[0]
|
45
|
+
row.values = {}
|
46
|
+
[row]
|
47
|
+
end
|
41
48
|
|
42
49
|
# Simply returning all known column families across all tables to make the need
|
43
50
|
# for creating new one on create disappear.
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module TimeZoneHelper
|
2
|
+
#
|
3
|
+
# Helper method which enables and disables time zone awareness and sets the
|
4
|
+
# incomming time zone to the current one.
|
5
|
+
#
|
6
|
+
# Method will ensure that everything is put back into
|
7
|
+
# the state it was before the method was called.
|
8
|
+
#
|
9
|
+
def in_time_zone(zone)
|
10
|
+
old_zone = Time.zone
|
11
|
+
old_awareness = MassiveRecord::ORM::Base.time_zone_aware_attributes
|
12
|
+
MassiveRecord::ORM::Base.descendants.each { |klass| klass.undefine_attribute_methods } # If time zone awareness has changed we need to re-generate methods
|
13
|
+
|
14
|
+
|
15
|
+
Time.zone = zone ? ActiveSupport::TimeZone[zone] : nil
|
16
|
+
MassiveRecord::ORM::Base.time_zone_aware_attributes = !zone.nil?
|
17
|
+
|
18
|
+
yield
|
19
|
+
|
20
|
+
ensure
|
21
|
+
Time.zone = old_zone
|
22
|
+
MassiveRecord::ORM::Base.time_zone_aware_attributes = old_awareness
|
23
|
+
MassiveRecord::ORM::Base.descendants.each { |klass| klass.undefine_attribute_methods } # If time zone awareness has changed we need to re-generate methods
|
24
|
+
end
|
25
|
+
end
|
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.
|
4
|
+
prerelease: 6
|
5
|
+
version: 0.2.1.rc1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Companybook
|
@@ -10,7 +10,8 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-06-16 00:00:00 +02:00
|
14
|
+
default_executable:
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
17
|
name: thrift
|
@@ -46,16 +47,27 @@ dependencies:
|
|
46
47
|
type: :runtime
|
47
48
|
version_requirements: *id003
|
48
49
|
- !ruby/object:Gem::Dependency
|
49
|
-
name:
|
50
|
+
name: tzinfo
|
50
51
|
prerelease: false
|
51
52
|
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "0"
|
58
|
+
type: :runtime
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: rspec
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
52
64
|
none: false
|
53
65
|
requirements:
|
54
66
|
- - ">="
|
55
67
|
- !ruby/object:Gem::Version
|
56
68
|
version: 2.1.0
|
57
69
|
type: :development
|
58
|
-
version_requirements: *
|
70
|
+
version_requirements: *id005
|
59
71
|
description: HBase Ruby client API
|
60
72
|
email: geeks@companybook.no
|
61
73
|
executables: []
|
@@ -89,6 +101,7 @@ files:
|
|
89
101
|
- lib/massive_record/orm/attribute_methods.rb
|
90
102
|
- lib/massive_record/orm/attribute_methods/dirty.rb
|
91
103
|
- lib/massive_record/orm/attribute_methods/read.rb
|
104
|
+
- lib/massive_record/orm/attribute_methods/time_zone_conversion.rb
|
92
105
|
- lib/massive_record/orm/attribute_methods/write.rb
|
93
106
|
- lib/massive_record/orm/base.rb
|
94
107
|
- lib/massive_record/orm/callbacks.rb
|
@@ -98,11 +111,15 @@ files:
|
|
98
111
|
- lib/massive_record/orm/coders/yaml.rb
|
99
112
|
- lib/massive_record/orm/column.rb
|
100
113
|
- lib/massive_record/orm/config.rb
|
114
|
+
- lib/massive_record/orm/default_id.rb
|
101
115
|
- lib/massive_record/orm/errors.rb
|
102
116
|
- lib/massive_record/orm/finders.rb
|
117
|
+
- lib/massive_record/orm/finders/rescue_missing_table_on_find.rb
|
103
118
|
- lib/massive_record/orm/finders/scope.rb
|
104
119
|
- lib/massive_record/orm/id_factory.rb
|
120
|
+
- lib/massive_record/orm/log_subscriber.rb
|
105
121
|
- lib/massive_record/orm/persistence.rb
|
122
|
+
- lib/massive_record/orm/query_instrumentation.rb
|
106
123
|
- lib/massive_record/orm/relations.rb
|
107
124
|
- lib/massive_record/orm/relations/interface.rb
|
108
125
|
- lib/massive_record/orm/relations/metadata.rb
|
@@ -122,6 +139,7 @@ files:
|
|
122
139
|
- lib/massive_record/orm/table.rb
|
123
140
|
- lib/massive_record/orm/timestamps.rb
|
124
141
|
- lib/massive_record/orm/validations.rb
|
142
|
+
- lib/massive_record/rails/controller_runtime.rb
|
125
143
|
- lib/massive_record/rails/railtie.rb
|
126
144
|
- lib/massive_record/spec/support/simple_database_cleaner.rb
|
127
145
|
- lib/massive_record/version.rb
|
@@ -132,6 +150,11 @@ files:
|
|
132
150
|
- lib/massive_record/wrapper/errors.rb
|
133
151
|
- lib/massive_record/wrapper/tables_collection.rb
|
134
152
|
- massive_record.gemspec
|
153
|
+
- spec/adapter/thrift/adapter_spec.rb
|
154
|
+
- spec/adapter/thrift/atomic_increment_spec.rb
|
155
|
+
- spec/adapter/thrift/connection_spec.rb
|
156
|
+
- spec/adapter/thrift/table_find_spec.rb
|
157
|
+
- spec/adapter/thrift/table_spec.rb
|
135
158
|
- spec/config.yml.example
|
136
159
|
- spec/orm/cases/attribute_methods_spec.rb
|
137
160
|
- spec/orm/cases/auto_generate_id_spec.rb
|
@@ -139,6 +162,8 @@ files:
|
|
139
162
|
- spec/orm/cases/callbacks_spec.rb
|
140
163
|
- spec/orm/cases/column_spec.rb
|
141
164
|
- spec/orm/cases/config_spec.rb
|
165
|
+
- spec/orm/cases/default_id_spec.rb
|
166
|
+
- spec/orm/cases/default_values_spec.rb
|
142
167
|
- spec/orm/cases/dirty_spec.rb
|
143
168
|
- spec/orm/cases/encoding_spec.rb
|
144
169
|
- spec/orm/cases/finder_default_scope.rb
|
@@ -146,9 +171,12 @@ files:
|
|
146
171
|
- spec/orm/cases/finders_spec.rb
|
147
172
|
- spec/orm/cases/i18n_spec.rb
|
148
173
|
- spec/orm/cases/id_factory_spec.rb
|
174
|
+
- spec/orm/cases/log_subscriber_spec.rb
|
175
|
+
- spec/orm/cases/mass_assignment_security_spec.rb
|
149
176
|
- spec/orm/cases/persistence_spec.rb
|
150
177
|
- spec/orm/cases/single_table_inheritance_spec.rb
|
151
178
|
- spec/orm/cases/table_spec.rb
|
179
|
+
- spec/orm/cases/time_zone_awareness_spec.rb
|
152
180
|
- spec/orm/cases/timestamps_spec.rb
|
153
181
|
- spec/orm/cases/validation_spec.rb
|
154
182
|
- spec/orm/coders/chained_spec.rb
|
@@ -157,6 +185,7 @@ files:
|
|
157
185
|
- spec/orm/models/address.rb
|
158
186
|
- spec/orm/models/best_friend.rb
|
159
187
|
- spec/orm/models/friend.rb
|
188
|
+
- spec/orm/models/model_without_default_id.rb
|
160
189
|
- spec/orm/models/person.rb
|
161
190
|
- spec/orm/models/person_with_timestamp.rb
|
162
191
|
- spec/orm/models/test_class.rb
|
@@ -178,10 +207,9 @@ files:
|
|
178
207
|
- spec/spec_helper.rb
|
179
208
|
- spec/support/connection_helpers.rb
|
180
209
|
- spec/support/mock_massive_record_connection.rb
|
210
|
+
- spec/support/time_zone_helper.rb
|
181
211
|
- spec/thrift/cases/encoding_spec.rb
|
182
|
-
|
183
|
-
- spec/wrapper/cases/connection_spec.rb
|
184
|
-
- spec/wrapper/cases/table_spec.rb
|
212
|
+
has_rdoc: true
|
185
213
|
homepage: http://github.com/CompanyBook/massive_record
|
186
214
|
licenses: []
|
187
215
|
|
@@ -199,17 +227,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
199
227
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
228
|
none: false
|
201
229
|
requirements:
|
202
|
-
- - "
|
230
|
+
- - ">"
|
203
231
|
- !ruby/object:Gem::Version
|
204
|
-
version:
|
232
|
+
version: 1.3.1
|
205
233
|
requirements: []
|
206
234
|
|
207
235
|
rubyforge_project: massive_record
|
208
|
-
rubygems_version: 1.
|
236
|
+
rubygems_version: 1.6.2
|
209
237
|
signing_key:
|
210
238
|
specification_version: 3
|
211
239
|
summary: HBase Ruby client API
|
212
240
|
test_files:
|
241
|
+
- spec/adapter/thrift/adapter_spec.rb
|
242
|
+
- spec/adapter/thrift/atomic_increment_spec.rb
|
243
|
+
- spec/adapter/thrift/connection_spec.rb
|
244
|
+
- spec/adapter/thrift/table_find_spec.rb
|
245
|
+
- spec/adapter/thrift/table_spec.rb
|
213
246
|
- spec/config.yml.example
|
214
247
|
- spec/orm/cases/attribute_methods_spec.rb
|
215
248
|
- spec/orm/cases/auto_generate_id_spec.rb
|
@@ -217,6 +250,8 @@ test_files:
|
|
217
250
|
- spec/orm/cases/callbacks_spec.rb
|
218
251
|
- spec/orm/cases/column_spec.rb
|
219
252
|
- spec/orm/cases/config_spec.rb
|
253
|
+
- spec/orm/cases/default_id_spec.rb
|
254
|
+
- spec/orm/cases/default_values_spec.rb
|
220
255
|
- spec/orm/cases/dirty_spec.rb
|
221
256
|
- spec/orm/cases/encoding_spec.rb
|
222
257
|
- spec/orm/cases/finder_default_scope.rb
|
@@ -224,9 +259,12 @@ test_files:
|
|
224
259
|
- spec/orm/cases/finders_spec.rb
|
225
260
|
- spec/orm/cases/i18n_spec.rb
|
226
261
|
- spec/orm/cases/id_factory_spec.rb
|
262
|
+
- spec/orm/cases/log_subscriber_spec.rb
|
263
|
+
- spec/orm/cases/mass_assignment_security_spec.rb
|
227
264
|
- spec/orm/cases/persistence_spec.rb
|
228
265
|
- spec/orm/cases/single_table_inheritance_spec.rb
|
229
266
|
- spec/orm/cases/table_spec.rb
|
267
|
+
- spec/orm/cases/time_zone_awareness_spec.rb
|
230
268
|
- spec/orm/cases/timestamps_spec.rb
|
231
269
|
- spec/orm/cases/validation_spec.rb
|
232
270
|
- spec/orm/coders/chained_spec.rb
|
@@ -235,6 +273,7 @@ test_files:
|
|
235
273
|
- spec/orm/models/address.rb
|
236
274
|
- spec/orm/models/best_friend.rb
|
237
275
|
- spec/orm/models/friend.rb
|
276
|
+
- spec/orm/models/model_without_default_id.rb
|
238
277
|
- spec/orm/models/person.rb
|
239
278
|
- spec/orm/models/person_with_timestamp.rb
|
240
279
|
- spec/orm/models/test_class.rb
|
@@ -256,7 +295,5 @@ test_files:
|
|
256
295
|
- spec/spec_helper.rb
|
257
296
|
- spec/support/connection_helpers.rb
|
258
297
|
- spec/support/mock_massive_record_connection.rb
|
298
|
+
- spec/support/time_zone_helper.rb
|
259
299
|
- spec/thrift/cases/encoding_spec.rb
|
260
|
-
- spec/wrapper/cases/adapter_spec.rb
|
261
|
-
- spec/wrapper/cases/connection_spec.rb
|
262
|
-
- spec/wrapper/cases/table_spec.rb
|