massive_record 0.1.1 → 0.2.0.beta

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 (83) hide show
  1. data/CHANGELOG.md +28 -5
  2. data/Gemfile.lock +12 -12
  3. data/README.md +29 -1
  4. data/lib/massive_record/adapters/initialize.rb +18 -0
  5. data/lib/massive_record/adapters/thrift/adapter.rb +25 -0
  6. data/lib/massive_record/adapters/thrift/column_family.rb +24 -0
  7. data/lib/massive_record/adapters/thrift/connection.rb +73 -0
  8. data/lib/massive_record/{thrift → adapters/thrift/hbase}/hbase.rb +0 -0
  9. data/lib/massive_record/{thrift → adapters/thrift/hbase}/hbase_constants.rb +0 -0
  10. data/lib/massive_record/{thrift → adapters/thrift/hbase}/hbase_types.rb +0 -0
  11. data/lib/massive_record/adapters/thrift/row.rb +150 -0
  12. data/lib/massive_record/adapters/thrift/scanner.rb +59 -0
  13. data/lib/massive_record/adapters/thrift/table.rb +169 -0
  14. data/lib/massive_record/orm/attribute_methods/read.rb +2 -1
  15. data/lib/massive_record/orm/base.rb +61 -3
  16. data/lib/massive_record/orm/coders/chained.rb +71 -0
  17. data/lib/massive_record/orm/coders/json.rb +17 -0
  18. data/lib/massive_record/orm/coders/yaml.rb +15 -0
  19. data/lib/massive_record/orm/coders.rb +3 -0
  20. data/lib/massive_record/orm/errors.rb +15 -2
  21. data/lib/massive_record/orm/finders/scope.rb +166 -0
  22. data/lib/massive_record/orm/finders.rb +45 -24
  23. data/lib/massive_record/orm/persistence.rb +4 -4
  24. data/lib/massive_record/orm/relations/interface.rb +170 -0
  25. data/lib/massive_record/orm/relations/metadata.rb +150 -0
  26. data/lib/massive_record/orm/relations/proxy/references_many.rb +229 -0
  27. data/lib/massive_record/orm/relations/proxy/references_one.rb +40 -0
  28. data/lib/massive_record/orm/relations/proxy/references_one_polymorphic.rb +49 -0
  29. data/lib/massive_record/orm/relations/proxy.rb +174 -0
  30. data/lib/massive_record/orm/relations.rb +6 -0
  31. data/lib/massive_record/orm/schema/column_interface.rb +1 -1
  32. data/lib/massive_record/orm/schema/field.rb +62 -27
  33. data/lib/massive_record/orm/single_table_inheritance.rb +21 -0
  34. data/lib/massive_record/version.rb +1 -1
  35. data/lib/massive_record/wrapper/adapter.rb +6 -0
  36. data/lib/massive_record/wrapper/base.rb +6 -7
  37. data/lib/massive_record/wrapper/cell.rb +9 -32
  38. data/lib/massive_record/wrapper/column_families_collection.rb +2 -2
  39. data/lib/massive_record/wrapper/errors.rb +10 -0
  40. data/lib/massive_record/wrapper/tables_collection.rb +1 -1
  41. data/lib/massive_record.rb +5 -12
  42. data/spec/orm/cases/attribute_methods_spec.rb +5 -1
  43. data/spec/orm/cases/base_spec.rb +77 -4
  44. data/spec/orm/cases/column_spec.rb +1 -1
  45. data/spec/orm/cases/finder_default_scope.rb +53 -0
  46. data/spec/orm/cases/finder_scope_spec.rb +288 -0
  47. data/spec/orm/cases/finders_spec.rb +56 -13
  48. data/spec/orm/cases/persistence_spec.rb +20 -5
  49. data/spec/orm/cases/single_table_inheritance_spec.rb +26 -0
  50. data/spec/orm/cases/table_spec.rb +1 -1
  51. data/spec/orm/cases/timestamps_spec.rb +16 -16
  52. data/spec/orm/coders/chained_spec.rb +73 -0
  53. data/spec/orm/coders/json_spec.rb +6 -0
  54. data/spec/orm/coders/yaml_spec.rb +6 -0
  55. data/spec/orm/models/best_friend.rb +7 -0
  56. data/spec/orm/models/friend.rb +4 -0
  57. data/spec/orm/models/person.rb +20 -6
  58. data/spec/orm/models/{person_with_timestamps.rb → person_with_timestamp.rb} +1 -1
  59. data/spec/orm/models/test_class.rb +3 -0
  60. data/spec/orm/relations/interface_spec.rb +207 -0
  61. data/spec/orm/relations/metadata_spec.rb +202 -0
  62. data/spec/orm/relations/proxy/references_many_spec.rb +624 -0
  63. data/spec/orm/relations/proxy/references_one_polymorphic_spec.rb +106 -0
  64. data/spec/orm/relations/proxy/references_one_spec.rb +111 -0
  65. data/spec/orm/relations/proxy_spec.rb +13 -0
  66. data/spec/orm/schema/field_spec.rb +101 -2
  67. data/spec/shared/orm/coders/an_orm_coder.rb +14 -0
  68. data/spec/shared/orm/relations/proxy.rb +154 -0
  69. data/spec/shared/orm/relations/singular_proxy.rb +68 -0
  70. data/spec/spec_helper.rb +1 -0
  71. data/spec/thrift/cases/encoding_spec.rb +28 -7
  72. data/spec/wrapper/cases/adapter_spec.rb +9 -0
  73. data/spec/wrapper/cases/connection_spec.rb +13 -10
  74. data/spec/wrapper/cases/table_spec.rb +85 -85
  75. metadata +74 -22
  76. data/TODO.md +0 -8
  77. data/lib/massive_record/exceptions.rb +0 -11
  78. data/lib/massive_record/wrapper/column_family.rb +0 -22
  79. data/lib/massive_record/wrapper/connection.rb +0 -71
  80. data/lib/massive_record/wrapper/row.rb +0 -173
  81. data/lib/massive_record/wrapper/scanner.rb +0 -61
  82. data/lib/massive_record/wrapper/table.rb +0 -149
  83. data/spec/orm/cases/hbase/connection_spec.rb +0 -13
@@ -0,0 +1,68 @@
1
+ shared_examples_for "singular proxy" do
2
+ let(:proxy_target) { mock(Object).as_null_object }
3
+ let(:find_proxy_target_returns) { subject.represents_a_collection? ? [proxy_target] : proxy_target }
4
+
5
+ before do
6
+ subject.metadata = mock(MassiveRecord::ORM::Relations::Metadata, :find_with => nil).as_null_object if subject.metadata.nil?
7
+ end
8
+
9
+ describe "forward method calls to proxy_target" do
10
+ let(:proxy_target) { mock(Object, :proxy_target_method => "return value", :id => "dummy-id") }
11
+
12
+ before do
13
+ subject.proxy_target = proxy_target
14
+ end
15
+
16
+
17
+ describe "#respond_to?" do
18
+ it "should check proxy to see if it responds to something" do
19
+ should respond_to :proxy_target
20
+ end
21
+
22
+ it "should respond to proxy_target_method" do
23
+ should respond_to :proxy_target_method
24
+ end
25
+
26
+ it "should not respond to a dummy method" do
27
+ should_not respond_to :dummy_method_which_does_not_exists
28
+ end
29
+ end
30
+
31
+
32
+ describe "#method_missing" do
33
+ it "should call proxy's method if exists in proxy" do
34
+ subject.should_receive(:loaded?).once
35
+ subject.loaded?
36
+ end
37
+
38
+ it "should call proxy_target's method if it responds to it" do
39
+ proxy_target.should_receive(:proxy_target_method).and_return(proxy_target)
40
+ subject.proxy_target_method.should == proxy_target
41
+ end
42
+
43
+ it "should rause no method error if no one responds to it" do
44
+ lambda { subject.dummy_method_which_does_not_exists }.should raise_error NoMethodError
45
+ end
46
+ end
47
+
48
+ describe "comparison of class" do
49
+ let(:proxy_target) { Person.new }
50
+
51
+ it "should be answer correctly to which class it is" do
52
+ subject.should be_a(Person)
53
+ end
54
+
55
+ it "should be comparable correctly" do
56
+ (Person === subject).should be_true
57
+ end
58
+
59
+ it "should be compared correctly in a case when construction" do
60
+ case subject
61
+ when Person
62
+ else
63
+ fail
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
data/spec/spec_helper.rb CHANGED
@@ -13,3 +13,4 @@ end
13
13
 
14
14
  Dir["#{SPEC_DIR}/orm/models/*.rb"].each { |f| require f }
15
15
  Dir["#{SPEC_DIR}/support/**/*.rb"].each { |f| require f }
16
+ Dir["#{SPEC_DIR}/shared/**/*.rb"].each { |f| require f }
@@ -24,23 +24,44 @@ describe "encoding" do
24
24
  it "should save standard caracteres" do
25
25
  m = Apache::Hadoop::Hbase::Thrift::Mutation.new
26
26
  m.column = "info:first_name"
27
- m.value = "Vincent"
27
+ m.value = "Vincent".force_encoding(Encoding::BINARY)
28
28
 
29
- m.value.encoding.should == Encoding::UTF_8
30
- @client.mutateRow(@table_name, "ID1", [m]).should be_nil
29
+ m.value.encoding.should == Encoding::BINARY
30
+ @client.mutateRow(@table_name, "ID1", [m]).should be_nil
31
31
  end
32
32
 
33
33
  it "should save UTF8 caracteres" do
34
- pending "UTF8 enconding need to be fixed!"
35
-
36
34
  m = Apache::Hadoop::Hbase::Thrift::Mutation.new
37
35
  m.column = "info:first_name"
38
- m.value = "Thorbjørn"
36
+ m.value = "Thorbjørn".force_encoding(Encoding::BINARY)
39
37
 
40
- m.value.encoding.should == Encoding::UTF_8
38
+ m.value.encoding.should == Encoding::BINARY
41
39
  @client.mutateRow(@table_name, "ID1", [m]).should be_nil
42
40
  end
43
41
 
42
+ it "should save JSON" do
43
+ m = Apache::Hadoop::Hbase::Thrift::Mutation.new
44
+ m.column = "info:first_name"
45
+ m.value = { :p1 => "Vincent", :p2 => "Thorbjørn"}.to_json.force_encoding(Encoding::BINARY)
46
+
47
+ m.value.encoding.should == Encoding::BINARY
48
+ @client.mutateRow(@table_name, "ID1", [m]).should be_nil
49
+ end
50
+
51
+ it "should take care of several encodings" do
52
+ m1 = Apache::Hadoop::Hbase::Thrift::Mutation.new
53
+ m1.column = "info:first_name"
54
+ m1.value = { :p1 => "Vincent", :p2 => "Thorbjørn"}.to_json.force_encoding(Encoding::BINARY)
55
+
56
+ m2 = Apache::Hadoop::Hbase::Thrift::Mutation.new
57
+ m2.column = "info:company_name"
58
+ # "incompatible character encodings: ASCII-8BIT and UTF-8" is raised if we don't force encoding
59
+ # because m1 is binary and m2 is UTF-8
60
+ m2.value = "Thorbjørn".force_encoding(Encoding::BINARY)
61
+
62
+ @client.mutateRow(@table_name, "ID1", [m1, m2]).should be_nil
63
+ end
64
+
44
65
  it "should destroy the table" do
45
66
  @client.disableTable(@table_name).should be_nil
46
67
  @client.deleteTable(@table_name).should be_nil
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe "The Massive Record adapter" do
4
+
5
+ it "should default to thrift" do
6
+ MassiveRecord.adapter.should == :thrift
7
+ end
8
+
9
+ end
@@ -1,11 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe MassiveRecord::Wrapper::Connection do
3
+ describe "A connection" do
4
4
 
5
5
  before do
6
6
  @connection = MassiveRecord::Wrapper::Connection.new(:host => MR_CONFIG['host'], :port => MR_CONFIG['port'])
7
7
  end
8
8
 
9
+ after do
10
+ @connection.close if @connection.open?
11
+ end
12
+
9
13
  it "should have a host and port attributes" do
10
14
  connections = [@connection, MassiveRecord::Wrapper::Connection.new(:host => "somewhere")]
11
15
 
@@ -15,25 +19,24 @@ describe MassiveRecord::Wrapper::Connection do
15
19
  end
16
20
  end
17
21
 
18
- it "should not be active" do
19
- pending "should we implement this, Vincent? :-)"
20
- @connection.active?.should be_false
22
+ it "should not be open" do
23
+ @connection.open?.should be_false
21
24
  end
22
25
 
23
26
  it "should not be able to open a new connection with a wrong configuration and Raise an error" do
24
27
  @connection.port = 1234
25
- lambda{@connection.open}.should raise_error(MassiveRecord::ConnectionException)
28
+ lambda{@connection.open}.should raise_error(MassiveRecord::Wrapper::Errors::ConnectionException)
26
29
  end
27
30
 
28
- it "should be able to open a new connection with a good configuration" do
31
+ it "should be open if opened" do
29
32
  @connection.open.should be_true
33
+ @connection.open?.should be_true
30
34
  end
31
35
 
32
- it "should not be active if it is closed" do
33
- @connection.open
34
- @connection.active?.should be_true
36
+ it "should not be open if closed" do
37
+ @connection.open.should be_true
35
38
  @connection.close.should be_true
36
- @connection.active?.should be_false
39
+ @connection.open?.should be_false
37
40
  end
38
41
 
39
42
  it "should have a collection of tables" do
@@ -1,13 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe MassiveRecord::Wrapper::Table do
3
+ describe "A table" do
4
4
 
5
- describe "with a new connection" do
5
+ before(:all) do
6
+ @connection = MassiveRecord::Wrapper::Connection.new(:host => MR_CONFIG['host'], :port => MR_CONFIG['port'])
7
+ @connection.open
8
+ end
9
+
10
+ describe "with an open connection" do
6
11
 
7
12
  before do
8
- @connection = MassiveRecord::Wrapper::Connection.new(:host => MR_CONFIG['host'], :port => MR_CONFIG['port'])
9
- @connection.open
10
-
11
13
  @table = MassiveRecord::Wrapper::Table.new(@connection, MR_CONFIG['table'])
12
14
  end
13
15
 
@@ -53,31 +55,27 @@ describe MassiveRecord::Wrapper::Table do
53
55
  row.values = {
54
56
  :info => { :first_name => "John", :last_name => "Doe", :email => "john@base.com" },
55
57
  :misc => {
56
- :like => ["Eating", "Sleeping", "Coding"],
58
+ :like => ["Eating", "Sleeping", "Coding"].to_json,
57
59
  :dislike => {
58
60
  "Washing" => "Boring 6/10",
59
61
  "Ironing" => "Boring 8/10"
60
- },
61
- :empty => {},
62
+ }.to_json,
63
+ :empty => {}.to_json,
62
64
  :value_to_increment => "1"
63
65
  }
64
66
  }
65
67
  row.table = @table
66
68
  row.save
67
69
  end
68
-
69
- it "should contains one row" do
70
- @table.all.size.should == 1
71
- end
72
-
73
- it "should load the first row" do
74
- @table.first.should be_a_kind_of(MassiveRecord::Wrapper::Row)
75
- end
76
-
70
+
77
71
  it "should list 5 column names" do
78
72
  @table.column_names.size.should == 7
79
73
  end
80
74
 
75
+ it "should only load one column" do
76
+ @table.get("ID1", :info, :first_name).should == "John"
77
+ end
78
+
81
79
  it "should only load one column family" do
82
80
  @table.first(:select => ["info"]).column_families.should == ["info"]
83
81
  @table.all(:limit => 1, :select => ["info"]).first.column_families.should == ["info"]
@@ -137,9 +135,6 @@ describe MassiveRecord::Wrapper::Table do
137
135
  row = MassiveRecord::Wrapper::Row.new
138
136
  row.updated_at.should be_nil
139
137
  end
140
-
141
-
142
-
143
138
 
144
139
  it "should merge data" do
145
140
  row = @table.first
@@ -149,24 +144,11 @@ describe MassiveRecord::Wrapper::Table do
149
144
  )
150
145
  end
151
146
 
152
- it "should merge array data" do
153
- row = @table.first
154
- row.merge_columns({ :misc => { :like => ["Playing"] } })
155
- row.columns["misc:like"].deserialize_value.should =~ ["Eating", "Sleeping", "Coding", "Playing"]
156
- end
157
-
158
- it "should merge hash data" do
159
- row = @table.first
160
- row.merge_columns({ :misc => { :dislike => { "Ironing" => "Boring 10/10", "Running" => "Boring 5/10" } } })
161
- row.columns["misc:dislike"].deserialize_value["Ironing"].should eql("Boring 10/10") # Check updated value
162
- row.columns["misc:dislike"].deserialize_value.keys.should =~ ["Washing", "Ironing", "Running"] # Check new value
163
- end
164
-
165
147
  it "should deserialize Array / Hash values from YAML automatically" do
166
148
  row = @table.first
167
- row.values["misc:like"].class.should eql(Array)
168
- row.values["misc:dislike"].class.should eql(Hash)
169
- row.values["misc:empty"].class.should eql(Hash)
149
+ ActiveSupport::JSON.decode(row.values["misc:like"]).class.should eql(Array)
150
+ ActiveSupport::JSON.decode(row.values["misc:dislike"]).class.should eql(Hash)
151
+ ActiveSupport::JSON.decode(row.values["misc:empty"]).class.should eql(Hash)
170
152
  end
171
153
 
172
154
  it "should display the previous value (versioning) of the column 'info:first_name'" do
@@ -214,71 +196,89 @@ describe MassiveRecord::Wrapper::Table do
214
196
  @table.first.should be_nil
215
197
  end
216
198
 
217
- it "should create 5 rows" do
199
+ it "should exists in the database" do
200
+ @table.exists?.should be_true
201
+ end
202
+
203
+ it "should destroy the test table" do
204
+ @table.destroy.should be_true
205
+ end
206
+ end
207
+
208
+ end
209
+
210
+ describe "can be scanned" do
211
+ before do
212
+ @table = MassiveRecord::Wrapper::Table.new(@connection, MR_CONFIG['table'])
213
+ @table.column_families.create(:info)
214
+ @table.column_families.create(:misc)
215
+
216
+ @table.save
217
+
218
+ ["A", "B"].each do |prefix|
218
219
  1.upto(5).each do |i|
219
220
  row = MassiveRecord::Wrapper::Row.new
220
- row.id = "ID#{i}"
221
+ row.id = "#{prefix}#{i}"
221
222
  row.values = { :info => { :first_name => "John #{i}", :last_name => "Doe #{i}" } }
222
223
  row.table = @table
223
224
  row.save
224
225
  end
225
-
226
- @table.all.size.should == 5
227
- end
228
-
229
- it "should find rows" do
230
- ids_list = [["ID1"], ["ID1", "ID2", "ID3"]]
231
- ids_list.each do |ids|
232
- @table.find(ids).each do |row|
233
- ids.include?(row.id).should be_true
234
- end
235
- end
236
- end
237
-
238
- it "should collect 5 IDs" do
239
- @table.all.collect(&:id).should eql(1.upto(5).collect{|i| "ID#{i}"})
240
- end
241
-
242
- it "should iterate through a collection of rows" do
243
- @table.all.each do |row|
244
- row.id.should_not be_nil
245
- end
246
226
  end
227
+ end
247
228
 
248
- it "should iterate through a collection of rows using a batch process" do
249
- group_number = 0
250
- @table.find_in_batches(:batch_size => 2, :select => ["info"]) do |group|
251
- group_number += 1
252
- group.each do |row|
253
- row.id.should_not be_nil
254
- end
255
- end
256
- group_number.should == 3
257
- end
229
+ after do
230
+ @table.destroy
231
+ end
258
232
 
259
- it "should find 1 row using the :start option" do
260
- @table.all(:start => "ID1").size.should == 1
261
- end
233
+ it "should contains 10 rows" do
234
+ @table.all.size.should == 10
235
+ @table.all.collect(&:id).size.should == 10
236
+ end
262
237
 
263
- it "should find 5 rows using the :start option" do
264
- @table.all(:start => "ID").size.should == 5
265
-
266
- end
238
+ it "should load the first row" do
239
+ @table.first.should be_a_kind_of(MassiveRecord::Wrapper::Row)
240
+ end
267
241
 
268
- it "should find 4 rows using the :offset option" do
269
- @table.all(:offset => "ID2").size.should == 4
270
- end
271
-
272
- it "should exists in the database" do
273
- @table.exists?.should be_true
242
+ it "should find rows from a list of IDs" do
243
+ ids_list = [["A1"], ["A1", "A2", "A3"]]
244
+ ids_list.each do |ids|
245
+ @table.find(ids).each do |row|
246
+ ids.include?(row.id).should be_true
247
+ end
274
248
  end
249
+ end
275
250
 
276
- it "should destroy the test table" do
277
- @table.destroy.should be_true
251
+ it "should iterate through a collection of rows" do
252
+ @table.all.each do |row|
253
+ row.id.should_not be_nil
278
254
  end
255
+ end
279
256
 
257
+ it "should iterate through a collection of rows using a batch process" do
258
+ group_number = 0
259
+ @table.find_in_batches(:batch_size => 2, :select => ["info"]) do |group|
260
+ group_number += 1
261
+ group.each do |row|
262
+ row.id.should_not be_nil
263
+ end
264
+ end
265
+ group_number.should == 5
280
266
  end
281
267
 
282
- end
268
+ it "should find 1 row using the :start option" do
269
+ @table.all(:start => "A1").size.should == 1
270
+ end
271
+
272
+ it "should find 5 rows using the :start option" do
273
+ @table.all(:start => "A").size.should == 5
274
+ end
283
275
 
276
+ it "should find 9 rows using the :offset option" do
277
+ @table.all(:offset => "A2").size.should == 9
278
+ end
279
+
280
+ it "should find 4 rows using both :offset and :start options" do
281
+ @table.all(:offset => "A2", :start => "A").size.should == 4
282
+ end
283
+ end
284
284
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: massive_record
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ prerelease: true
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 1
9
- version: 0.1.1
7
+ - 2
8
+ - 0
9
+ - beta
10
+ version: 0.2.0.beta
10
11
  platform: ruby
11
12
  authors:
12
13
  - Companybook
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2011-02-04 00:00:00 +01:00
18
+ date: 2011-04-08 00:00:00 +02:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
@@ -91,22 +92,42 @@ files:
91
92
  - Manifest
92
93
  - README.md
93
94
  - Rakefile
94
- - TODO.md
95
95
  - autotest/discover.rb
96
96
  - lib/massive_record.rb
97
- - lib/massive_record/exceptions.rb
97
+ - lib/massive_record/adapters/initialize.rb
98
+ - lib/massive_record/adapters/thrift/adapter.rb
99
+ - lib/massive_record/adapters/thrift/column_family.rb
100
+ - lib/massive_record/adapters/thrift/connection.rb
101
+ - lib/massive_record/adapters/thrift/hbase/hbase.rb
102
+ - lib/massive_record/adapters/thrift/hbase/hbase_constants.rb
103
+ - lib/massive_record/adapters/thrift/hbase/hbase_types.rb
104
+ - lib/massive_record/adapters/thrift/row.rb
105
+ - lib/massive_record/adapters/thrift/scanner.rb
106
+ - lib/massive_record/adapters/thrift/table.rb
98
107
  - lib/massive_record/orm/attribute_methods.rb
99
108
  - lib/massive_record/orm/attribute_methods/dirty.rb
100
109
  - lib/massive_record/orm/attribute_methods/read.rb
101
110
  - lib/massive_record/orm/attribute_methods/write.rb
102
111
  - lib/massive_record/orm/base.rb
103
112
  - lib/massive_record/orm/callbacks.rb
113
+ - lib/massive_record/orm/coders.rb
114
+ - lib/massive_record/orm/coders/chained.rb
115
+ - lib/massive_record/orm/coders/json.rb
116
+ - lib/massive_record/orm/coders/yaml.rb
104
117
  - lib/massive_record/orm/column.rb
105
118
  - lib/massive_record/orm/config.rb
106
119
  - lib/massive_record/orm/errors.rb
107
120
  - lib/massive_record/orm/finders.rb
121
+ - lib/massive_record/orm/finders/scope.rb
108
122
  - lib/massive_record/orm/id_factory.rb
109
123
  - lib/massive_record/orm/persistence.rb
124
+ - lib/massive_record/orm/relations.rb
125
+ - lib/massive_record/orm/relations/interface.rb
126
+ - lib/massive_record/orm/relations/metadata.rb
127
+ - lib/massive_record/orm/relations/proxy.rb
128
+ - lib/massive_record/orm/relations/proxy/references_many.rb
129
+ - lib/massive_record/orm/relations/proxy/references_one.rb
130
+ - lib/massive_record/orm/relations/proxy/references_one_polymorphic.rb
110
131
  - lib/massive_record/orm/schema.rb
111
132
  - lib/massive_record/orm/schema/column_families.rb
112
133
  - lib/massive_record/orm/schema/column_family.rb
@@ -115,23 +136,18 @@ files:
115
136
  - lib/massive_record/orm/schema/field.rb
116
137
  - lib/massive_record/orm/schema/fields.rb
117
138
  - lib/massive_record/orm/schema/table_interface.rb
139
+ - lib/massive_record/orm/single_table_inheritance.rb
118
140
  - lib/massive_record/orm/table.rb
119
141
  - lib/massive_record/orm/timestamps.rb
120
142
  - lib/massive_record/orm/validations.rb
121
143
  - lib/massive_record/rails/railtie.rb
122
144
  - lib/massive_record/spec/support/simple_database_cleaner.rb
123
- - lib/massive_record/thrift/hbase.rb
124
- - lib/massive_record/thrift/hbase_constants.rb
125
- - lib/massive_record/thrift/hbase_types.rb
126
145
  - lib/massive_record/version.rb
146
+ - lib/massive_record/wrapper/adapter.rb
127
147
  - lib/massive_record/wrapper/base.rb
128
148
  - lib/massive_record/wrapper/cell.rb
129
149
  - lib/massive_record/wrapper/column_families_collection.rb
130
- - lib/massive_record/wrapper/column_family.rb
131
- - lib/massive_record/wrapper/connection.rb
132
- - lib/massive_record/wrapper/row.rb
133
- - lib/massive_record/wrapper/scanner.rb
134
- - lib/massive_record/wrapper/table.rb
150
+ - lib/massive_record/wrapper/errors.rb
135
151
  - lib/massive_record/wrapper/tables_collection.rb
136
152
  - massive_record.gemspec
137
153
  - spec/config.yml.example
@@ -143,28 +159,45 @@ files:
143
159
  - spec/orm/cases/config_spec.rb
144
160
  - spec/orm/cases/dirty_spec.rb
145
161
  - spec/orm/cases/encoding_spec.rb
162
+ - spec/orm/cases/finder_default_scope.rb
163
+ - spec/orm/cases/finder_scope_spec.rb
146
164
  - spec/orm/cases/finders_spec.rb
147
- - spec/orm/cases/hbase/connection_spec.rb
148
165
  - spec/orm/cases/i18n_spec.rb
149
166
  - spec/orm/cases/id_factory_spec.rb
150
167
  - spec/orm/cases/persistence_spec.rb
168
+ - spec/orm/cases/single_table_inheritance_spec.rb
151
169
  - spec/orm/cases/table_spec.rb
152
170
  - spec/orm/cases/timestamps_spec.rb
153
171
  - spec/orm/cases/validation_spec.rb
172
+ - spec/orm/coders/chained_spec.rb
173
+ - spec/orm/coders/json_spec.rb
174
+ - spec/orm/coders/yaml_spec.rb
154
175
  - spec/orm/models/address.rb
176
+ - spec/orm/models/best_friend.rb
177
+ - spec/orm/models/friend.rb
155
178
  - spec/orm/models/person.rb
156
- - spec/orm/models/person_with_timestamps.rb
179
+ - spec/orm/models/person_with_timestamp.rb
157
180
  - spec/orm/models/test_class.rb
181
+ - spec/orm/relations/interface_spec.rb
182
+ - spec/orm/relations/metadata_spec.rb
183
+ - spec/orm/relations/proxy/references_many_spec.rb
184
+ - spec/orm/relations/proxy/references_one_polymorphic_spec.rb
185
+ - spec/orm/relations/proxy/references_one_spec.rb
186
+ - spec/orm/relations/proxy_spec.rb
158
187
  - spec/orm/schema/column_families_spec.rb
159
188
  - spec/orm/schema/column_family_spec.rb
160
189
  - spec/orm/schema/column_interface_spec.rb
161
190
  - spec/orm/schema/field_spec.rb
162
191
  - spec/orm/schema/fields_spec.rb
163
192
  - spec/orm/schema/table_interface_spec.rb
193
+ - spec/shared/orm/coders/an_orm_coder.rb
194
+ - spec/shared/orm/relations/proxy.rb
195
+ - spec/shared/orm/relations/singular_proxy.rb
164
196
  - spec/spec_helper.rb
165
197
  - spec/support/connection_helpers.rb
166
198
  - spec/support/mock_massive_record_connection.rb
167
199
  - spec/thrift/cases/encoding_spec.rb
200
+ - spec/wrapper/cases/adapter_spec.rb
168
201
  - spec/wrapper/cases/connection_spec.rb
169
202
  - spec/wrapper/cases/table_spec.rb
170
203
  has_rdoc: true
@@ -187,11 +220,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
187
220
  required_rubygems_version: !ruby/object:Gem::Requirement
188
221
  none: false
189
222
  requirements:
190
- - - ">="
223
+ - - ">"
191
224
  - !ruby/object:Gem::Version
192
225
  segments:
193
- - 0
194
- version: "0"
226
+ - 1
227
+ - 3
228
+ - 1
229
+ version: 1.3.1
195
230
  requirements: []
196
231
 
197
232
  rubyforge_project: massive_record
@@ -209,27 +244,44 @@ test_files:
209
244
  - spec/orm/cases/config_spec.rb
210
245
  - spec/orm/cases/dirty_spec.rb
211
246
  - spec/orm/cases/encoding_spec.rb
247
+ - spec/orm/cases/finder_default_scope.rb
248
+ - spec/orm/cases/finder_scope_spec.rb
212
249
  - spec/orm/cases/finders_spec.rb
213
- - spec/orm/cases/hbase/connection_spec.rb
214
250
  - spec/orm/cases/i18n_spec.rb
215
251
  - spec/orm/cases/id_factory_spec.rb
216
252
  - spec/orm/cases/persistence_spec.rb
253
+ - spec/orm/cases/single_table_inheritance_spec.rb
217
254
  - spec/orm/cases/table_spec.rb
218
255
  - spec/orm/cases/timestamps_spec.rb
219
256
  - spec/orm/cases/validation_spec.rb
257
+ - spec/orm/coders/chained_spec.rb
258
+ - spec/orm/coders/json_spec.rb
259
+ - spec/orm/coders/yaml_spec.rb
220
260
  - spec/orm/models/address.rb
261
+ - spec/orm/models/best_friend.rb
262
+ - spec/orm/models/friend.rb
221
263
  - spec/orm/models/person.rb
222
- - spec/orm/models/person_with_timestamps.rb
264
+ - spec/orm/models/person_with_timestamp.rb
223
265
  - spec/orm/models/test_class.rb
266
+ - spec/orm/relations/interface_spec.rb
267
+ - spec/orm/relations/metadata_spec.rb
268
+ - spec/orm/relations/proxy/references_many_spec.rb
269
+ - spec/orm/relations/proxy/references_one_polymorphic_spec.rb
270
+ - spec/orm/relations/proxy/references_one_spec.rb
271
+ - spec/orm/relations/proxy_spec.rb
224
272
  - spec/orm/schema/column_families_spec.rb
225
273
  - spec/orm/schema/column_family_spec.rb
226
274
  - spec/orm/schema/column_interface_spec.rb
227
275
  - spec/orm/schema/field_spec.rb
228
276
  - spec/orm/schema/fields_spec.rb
229
277
  - spec/orm/schema/table_interface_spec.rb
278
+ - spec/shared/orm/coders/an_orm_coder.rb
279
+ - spec/shared/orm/relations/proxy.rb
280
+ - spec/shared/orm/relations/singular_proxy.rb
230
281
  - spec/spec_helper.rb
231
282
  - spec/support/connection_helpers.rb
232
283
  - spec/support/mock_massive_record_connection.rb
233
284
  - spec/thrift/cases/encoding_spec.rb
285
+ - spec/wrapper/cases/adapter_spec.rb
234
286
  - spec/wrapper/cases/connection_spec.rb
235
287
  - spec/wrapper/cases/table_spec.rb