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.
- data/CHANGELOG.md +58 -2
- data/Gemfile.lock +17 -17
- data/README.md +98 -41
- data/lib/massive_record.rb +2 -1
- data/lib/massive_record/adapters/thrift/hbase/hbase.rb +2425 -2154
- data/lib/massive_record/adapters/thrift/hbase/hbase_constants.rb +3 -3
- data/lib/massive_record/adapters/thrift/hbase/hbase_types.rb +195 -195
- data/lib/massive_record/adapters/thrift/row.rb +35 -4
- data/lib/massive_record/adapters/thrift/table.rb +49 -12
- data/lib/massive_record/orm/attribute_methods.rb +77 -5
- data/lib/massive_record/orm/attribute_methods/cast_numbers_on_write.rb +24 -0
- data/lib/massive_record/orm/attribute_methods/dirty.rb +18 -0
- data/lib/massive_record/orm/attribute_methods/time_zone_conversion.rb +24 -3
- data/lib/massive_record/orm/attribute_methods/write.rb +8 -1
- data/lib/massive_record/orm/base.rb +62 -8
- data/lib/massive_record/orm/column.rb +7 -11
- data/lib/massive_record/orm/default_id.rb +1 -1
- data/lib/massive_record/orm/embedded.rb +66 -0
- data/lib/massive_record/orm/errors.rb +17 -0
- data/lib/massive_record/orm/finders.rb +124 -71
- data/lib/massive_record/orm/finders/rescue_missing_table_on_find.rb +1 -1
- data/lib/massive_record/orm/finders/scope.rb +58 -34
- data/lib/massive_record/orm/id_factory.rb +22 -105
- data/lib/massive_record/orm/id_factory/atomic_incrementation.rb +117 -0
- data/lib/massive_record/orm/id_factory/timestamp.rb +60 -0
- data/lib/massive_record/orm/identity_map.rb +256 -0
- data/lib/massive_record/orm/log_subscriber.rb +18 -0
- data/lib/massive_record/orm/observer.rb +69 -0
- data/lib/massive_record/orm/persistence.rb +47 -119
- data/lib/massive_record/orm/persistence/operations.rb +100 -0
- data/lib/massive_record/orm/persistence/operations/atomic_operation.rb +71 -0
- data/lib/massive_record/orm/persistence/operations/destroy.rb +17 -0
- data/lib/massive_record/orm/persistence/operations/embedded/destroy.rb +26 -0
- data/lib/massive_record/orm/persistence/operations/embedded/insert.rb +27 -0
- data/lib/massive_record/orm/persistence/operations/embedded/operation_helpers.rb +66 -0
- data/lib/massive_record/orm/persistence/operations/embedded/reload.rb +39 -0
- data/lib/massive_record/orm/persistence/operations/embedded/update.rb +29 -0
- data/lib/massive_record/orm/persistence/operations/insert.rb +19 -0
- data/lib/massive_record/orm/persistence/operations/reload.rb +26 -0
- data/lib/massive_record/orm/persistence/operations/suppress.rb +15 -0
- data/lib/massive_record/orm/persistence/operations/table_operation_helpers.rb +106 -0
- data/lib/massive_record/orm/persistence/operations/update.rb +25 -0
- data/lib/massive_record/orm/query_instrumentation.rb +26 -49
- data/lib/massive_record/orm/raw_data.rb +47 -0
- data/lib/massive_record/orm/relations.rb +4 -0
- data/lib/massive_record/orm/relations/interface.rb +134 -0
- data/lib/massive_record/orm/relations/metadata.rb +58 -12
- data/lib/massive_record/orm/relations/proxy.rb +17 -12
- data/lib/massive_record/orm/relations/proxy/embedded_in.rb +54 -0
- data/lib/massive_record/orm/relations/proxy/embedded_in_polymorphic.rb +15 -0
- data/lib/massive_record/orm/relations/proxy/embeds_many.rb +215 -0
- data/lib/massive_record/orm/relations/proxy/references_many.rb +112 -88
- data/lib/massive_record/orm/relations/proxy/references_one.rb +1 -1
- data/lib/massive_record/orm/relations/proxy/references_one_polymorphic.rb +1 -1
- data/lib/massive_record/orm/relations/proxy_collection.rb +84 -0
- data/lib/massive_record/orm/schema/column_family.rb +3 -2
- data/lib/massive_record/orm/schema/{column_interface.rb → embedded_interface.rb} +38 -4
- data/lib/massive_record/orm/schema/field.rb +2 -0
- data/lib/massive_record/orm/schema/table_interface.rb +19 -2
- data/lib/massive_record/orm/single_table_inheritance.rb +37 -2
- data/lib/massive_record/orm/timestamps.rb +17 -7
- data/lib/massive_record/orm/validations.rb +4 -0
- data/lib/massive_record/orm/validations/associated.rb +50 -0
- data/lib/massive_record/rails/railtie.rb +31 -0
- data/lib/massive_record/version.rb +1 -1
- data/lib/massive_record/wrapper/cell.rb +8 -1
- data/massive_record.gemspec +4 -4
- data/spec/adapter/thrift/atomic_increment_spec.rb +16 -0
- data/spec/adapter/thrift/table_find_spec.rb +14 -2
- data/spec/adapter/thrift/table_spec.rb +6 -6
- data/spec/adapter/thrift/utf8_encoding_of_id_spec.rb +71 -0
- data/spec/orm/cases/attribute_methods_spec.rb +215 -22
- data/spec/orm/cases/auto_generate_id_spec.rb +1 -1
- data/spec/orm/cases/change_id_spec.rb +62 -0
- data/spec/orm/cases/default_id_spec.rb +25 -6
- data/spec/orm/cases/default_values_spec.rb +6 -3
- data/spec/orm/cases/dirty_spec.rb +150 -102
- data/spec/orm/cases/embedded_spec.rb +250 -0
- data/spec/orm/cases/{finder_default_scope.rb → finder_default_scope_spec.rb} +4 -0
- data/spec/orm/cases/finder_scope_spec.rb +96 -29
- data/spec/orm/cases/finders_spec.rb +57 -10
- data/spec/orm/cases/id_factory/atomic_incrementation_spec.rb +72 -0
- data/spec/orm/cases/id_factory/timestamp_spec.rb +61 -0
- data/spec/orm/cases/identity_map/identity_map_spec.rb +357 -0
- data/spec/orm/cases/identity_map/middleware_spec.rb +74 -0
- data/spec/orm/cases/log_subscriber_spec.rb +15 -2
- data/spec/orm/cases/observing_spec.rb +61 -0
- data/spec/orm/cases/persistence_spec.rb +151 -60
- data/spec/orm/cases/raw_data_spec.rb +58 -0
- data/spec/orm/cases/single_table_inheritance_spec.rb +58 -2
- data/spec/orm/cases/table_spec.rb +3 -3
- data/spec/orm/cases/time_zone_awareness_spec.rb +27 -0
- data/spec/orm/cases/timestamps_spec.rb +23 -109
- data/spec/orm/cases/validation_spec.rb +9 -0
- data/spec/orm/models/address.rb +5 -1
- data/spec/orm/models/address_with_timestamp.rb +12 -0
- data/spec/orm/models/car.rb +5 -0
- data/spec/orm/models/person.rb +13 -1
- data/spec/orm/models/person_with_timestamp.rb +4 -2
- data/spec/orm/models/test_class.rb +1 -0
- data/spec/orm/persistence/operations/atomic_operation_spec.rb +58 -0
- data/spec/orm/persistence/operations/destroy_spec.rb +22 -0
- data/spec/orm/persistence/operations/embedded/destroy_spec.rb +71 -0
- data/spec/orm/persistence/operations/embedded/insert_spec.rb +59 -0
- data/spec/orm/persistence/operations/embedded/operation_helpers_spec.rb +92 -0
- data/spec/orm/persistence/operations/embedded/reload_spec.rb +67 -0
- data/spec/orm/persistence/operations/embedded/update_spec.rb +60 -0
- data/spec/orm/persistence/operations/insert_spec.rb +31 -0
- data/spec/orm/persistence/operations/reload_spec.rb +48 -0
- data/spec/orm/persistence/operations/suppress_spec.rb +17 -0
- data/spec/orm/persistence/operations/table_operation_helpers_spec.rb +98 -0
- data/spec/orm/persistence/operations/update_spec.rb +25 -0
- data/spec/orm/persistence/operations_spec.rb +58 -0
- data/spec/orm/relations/interface_spec.rb +188 -0
- data/spec/orm/relations/metadata_spec.rb +92 -15
- data/spec/orm/relations/proxy/embedded_in_polymorphic_spec.rb +37 -0
- data/spec/orm/relations/proxy/embedded_in_spec.rb +66 -0
- data/spec/orm/relations/proxy/embeds_many_spec.rb +651 -0
- data/spec/orm/relations/proxy/references_many_spec.rb +466 -2
- data/spec/orm/schema/column_family_spec.rb +21 -0
- data/spec/orm/schema/embedded_interface_spec.rb +181 -0
- data/spec/orm/schema/field_spec.rb +7 -0
- data/spec/orm/schema/table_interface_spec.rb +31 -1
- data/spec/shared/orm/id_factories.rb +44 -0
- data/spec/shared/orm/model_with_timestamps.rb +132 -0
- data/spec/shared/orm/persistence/a_persistence_embedded_operation_class.rb +3 -0
- data/spec/shared/orm/persistence/a_persistence_operation_class.rb +11 -0
- data/spec/shared/orm/persistence/a_persistence_table_operation_class.rb +11 -0
- data/spec/shared/orm/relations/proxy.rb +9 -2
- data/spec/spec_helper.rb +9 -0
- data/spec/support/mock_massive_record_connection.rb +2 -1
- metadata +106 -21
- data/spec/orm/cases/column_spec.rb +0 -49
- data/spec/orm/cases/id_factory_spec.rb +0 -92
- data/spec/orm/schema/column_interface_spec.rb +0 -136
@@ -1,136 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class TestColumnInterface
|
4
|
-
include MassiveRecord::ORM::Schema::ColumnInterface
|
5
|
-
end
|
6
|
-
|
7
|
-
describe MassiveRecord::ORM::Schema::TableInterface do
|
8
|
-
after do
|
9
|
-
TestColumnInterface.fields = nil
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should respond_to default_attributes_from_schema" do
|
13
|
-
TestColumnInterface.should respond_to :default_attributes_from_schema
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should have fields set to nil if no fields are defined" do
|
17
|
-
TestColumnInterface.fields.should be_nil
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should have one field if one field is added" do
|
21
|
-
class TestColumnInterface
|
22
|
-
field :field_name, :string
|
23
|
-
end
|
24
|
-
|
25
|
-
TestColumnInterface.should have(1).fields
|
26
|
-
TestColumnInterface.fields.first.name.should == "field_name"
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should not be possible to have to fields with the same name" do
|
30
|
-
lambda {
|
31
|
-
class TestColumnInterface
|
32
|
-
field :will_raise_error
|
33
|
-
field :will_raise_error
|
34
|
-
end
|
35
|
-
}.should raise_error MassiveRecord::ORM::Schema::InvalidField
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should return attributes schema based on DSL" do
|
39
|
-
class TestColumnInterface
|
40
|
-
field :name
|
41
|
-
field :age, :integer, :default => 1
|
42
|
-
end
|
43
|
-
|
44
|
-
TestColumnInterface.attributes_schema["name"].type.should == :string
|
45
|
-
TestColumnInterface.attributes_schema["age"].type.should == :integer
|
46
|
-
TestColumnInterface.attributes_schema["age"].default.should == 1
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should make attributes_schema readable from instances" do
|
50
|
-
class TestColumnInterface
|
51
|
-
field :name
|
52
|
-
end
|
53
|
-
|
54
|
-
TestColumnInterface.new.attributes_schema["name"].type.should == :string
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should have a list of known attribute names" do
|
58
|
-
class TestColumnInterface
|
59
|
-
field :name, :string
|
60
|
-
field :age, :integer
|
61
|
-
end
|
62
|
-
|
63
|
-
TestColumnInterface.should have(2).known_attribute_names
|
64
|
-
TestColumnInterface.known_attribute_names.should include("name", "age")
|
65
|
-
end
|
66
|
-
|
67
|
-
it "should make known_attribute_names readable for instances" do
|
68
|
-
class TestColumnInterface
|
69
|
-
field :name, :string
|
70
|
-
end
|
71
|
-
|
72
|
-
TestColumnInterface.new.known_attribute_names.should include('name')
|
73
|
-
end
|
74
|
-
|
75
|
-
|
76
|
-
it "should give us default attributes from schema" do
|
77
|
-
class TestColumnInterface
|
78
|
-
field :name
|
79
|
-
field :age, :integer, :default => 1
|
80
|
-
end
|
81
|
-
|
82
|
-
defaults = TestColumnInterface.default_attributes_from_schema
|
83
|
-
defaults["name"].should be_nil
|
84
|
-
defaults["age"].should == 1
|
85
|
-
end
|
86
|
-
|
87
|
-
describe "timestamps" do
|
88
|
-
before do
|
89
|
-
class TestColumnInterface
|
90
|
-
timestamps
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
it "should have a created_at time field" do
|
95
|
-
TestColumnInterface.attributes_schema['created_at'].type.should == :time
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
|
100
|
-
describe "dynamically adding a field" do
|
101
|
-
it "should be possible to dynamically add a field" do
|
102
|
-
TestColumnInterface.add_field :name, :default => "NA"
|
103
|
-
|
104
|
-
TestColumnInterface.should have(1).fields
|
105
|
-
|
106
|
-
field = TestColumnInterface.fields.first
|
107
|
-
|
108
|
-
field.name.should == "name"
|
109
|
-
field.default.should == "NA"
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should be possible to set field's type just like the DSL" do
|
113
|
-
TestColumnInterface.add_field :age, :integer, :default => 0
|
114
|
-
|
115
|
-
TestColumnInterface.fields.first.name.should == "age"
|
116
|
-
TestColumnInterface.fields.first.type.should == :integer
|
117
|
-
TestColumnInterface.fields.first.default.should == 0
|
118
|
-
end
|
119
|
-
|
120
|
-
it "should call class' undefine_attribute_methods to make sure it regenerates for newly added" do
|
121
|
-
TestColumnInterface.should_receive(:undefine_attribute_methods)
|
122
|
-
TestColumnInterface.add_field :name, :default => "NA"
|
123
|
-
end
|
124
|
-
|
125
|
-
it "should return the new field" do
|
126
|
-
field = TestColumnInterface.add_field :age, :integer, :default => 0
|
127
|
-
field.should == TestColumnInterface.fields.first
|
128
|
-
end
|
129
|
-
|
130
|
-
it "should insert the new field's default value right away" do
|
131
|
-
test_interface = TestColumnInterface.new
|
132
|
-
test_interface.should_receive("age=").with(1)
|
133
|
-
test_interface.add_field :age, :integer, :default => 1
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|