ghost_dm-core 1.3.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.
- data/.autotest +29 -0
- data/.document +5 -0
- data/.gitignore +35 -0
- data/.yardopts +1 -0
- data/Gemfile +65 -0
- data/LICENSE +20 -0
- data/README.md +269 -0
- data/Rakefile +4 -0
- data/dm-core.gemspec +24 -0
- data/lib/dm-core.rb +292 -0
- data/lib/dm-core/adapters.rb +222 -0
- data/lib/dm-core/adapters/abstract_adapter.rb +237 -0
- data/lib/dm-core/adapters/in_memory_adapter.rb +113 -0
- data/lib/dm-core/associations/many_to_many.rb +499 -0
- data/lib/dm-core/associations/many_to_one.rb +290 -0
- data/lib/dm-core/associations/one_to_many.rb +348 -0
- data/lib/dm-core/associations/one_to_one.rb +86 -0
- data/lib/dm-core/associations/relationship.rb +663 -0
- data/lib/dm-core/backwards.rb +13 -0
- data/lib/dm-core/collection.rb +1515 -0
- data/lib/dm-core/core_ext/kernel.rb +23 -0
- data/lib/dm-core/core_ext/pathname.rb +6 -0
- data/lib/dm-core/core_ext/symbol.rb +10 -0
- data/lib/dm-core/identity_map.rb +7 -0
- data/lib/dm-core/model.rb +874 -0
- data/lib/dm-core/model/hook.rb +103 -0
- data/lib/dm-core/model/is.rb +32 -0
- data/lib/dm-core/model/property.rb +249 -0
- data/lib/dm-core/model/relationship.rb +378 -0
- data/lib/dm-core/model/scope.rb +89 -0
- data/lib/dm-core/property.rb +866 -0
- data/lib/dm-core/property/binary.rb +21 -0
- data/lib/dm-core/property/boolean.rb +20 -0
- data/lib/dm-core/property/class.rb +17 -0
- data/lib/dm-core/property/date.rb +10 -0
- data/lib/dm-core/property/date_time.rb +10 -0
- data/lib/dm-core/property/decimal.rb +36 -0
- data/lib/dm-core/property/discriminator.rb +44 -0
- data/lib/dm-core/property/float.rb +16 -0
- data/lib/dm-core/property/integer.rb +22 -0
- data/lib/dm-core/property/invalid_value_error.rb +22 -0
- data/lib/dm-core/property/lookup.rb +27 -0
- data/lib/dm-core/property/numeric.rb +38 -0
- data/lib/dm-core/property/object.rb +34 -0
- data/lib/dm-core/property/serial.rb +14 -0
- data/lib/dm-core/property/string.rb +38 -0
- data/lib/dm-core/property/text.rb +9 -0
- data/lib/dm-core/property/time.rb +10 -0
- data/lib/dm-core/property_set.rb +177 -0
- data/lib/dm-core/query.rb +1366 -0
- data/lib/dm-core/query/conditions/comparison.rb +911 -0
- data/lib/dm-core/query/conditions/operation.rb +721 -0
- data/lib/dm-core/query/direction.rb +36 -0
- data/lib/dm-core/query/operator.rb +35 -0
- data/lib/dm-core/query/path.rb +114 -0
- data/lib/dm-core/query/sort.rb +39 -0
- data/lib/dm-core/relationship_set.rb +72 -0
- data/lib/dm-core/repository.rb +226 -0
- data/lib/dm-core/resource.rb +1214 -0
- data/lib/dm-core/resource/persistence_state.rb +75 -0
- data/lib/dm-core/resource/persistence_state/clean.rb +40 -0
- data/lib/dm-core/resource/persistence_state/deleted.rb +30 -0
- data/lib/dm-core/resource/persistence_state/dirty.rb +96 -0
- data/lib/dm-core/resource/persistence_state/immutable.rb +34 -0
- data/lib/dm-core/resource/persistence_state/persisted.rb +29 -0
- data/lib/dm-core/resource/persistence_state/transient.rb +80 -0
- data/lib/dm-core/spec/lib/adapter_helpers.rb +64 -0
- data/lib/dm-core/spec/lib/collection_helpers.rb +21 -0
- data/lib/dm-core/spec/lib/counter_adapter.rb +38 -0
- data/lib/dm-core/spec/lib/pending_helpers.rb +50 -0
- data/lib/dm-core/spec/lib/spec_helper.rb +74 -0
- data/lib/dm-core/spec/setup.rb +174 -0
- data/lib/dm-core/spec/shared/adapter_spec.rb +341 -0
- data/lib/dm-core/spec/shared/public/property_spec.rb +229 -0
- data/lib/dm-core/spec/shared/resource_spec.rb +1232 -0
- data/lib/dm-core/spec/shared/sel_spec.rb +111 -0
- data/lib/dm-core/spec/shared/semipublic/property_spec.rb +176 -0
- data/lib/dm-core/spec/shared/semipublic/query/conditions/abstract_comparison_spec.rb +261 -0
- data/lib/dm-core/support/assertions.rb +8 -0
- data/lib/dm-core/support/chainable.rb +18 -0
- data/lib/dm-core/support/deprecate.rb +12 -0
- data/lib/dm-core/support/descendant_set.rb +89 -0
- data/lib/dm-core/support/equalizer.rb +48 -0
- data/lib/dm-core/support/ext/array.rb +22 -0
- data/lib/dm-core/support/ext/blank.rb +25 -0
- data/lib/dm-core/support/ext/hash.rb +67 -0
- data/lib/dm-core/support/ext/module.rb +47 -0
- data/lib/dm-core/support/ext/object.rb +57 -0
- data/lib/dm-core/support/ext/string.rb +24 -0
- data/lib/dm-core/support/ext/try_dup.rb +12 -0
- data/lib/dm-core/support/hook.rb +405 -0
- data/lib/dm-core/support/inflections.rb +60 -0
- data/lib/dm-core/support/inflector/inflections.rb +211 -0
- data/lib/dm-core/support/inflector/methods.rb +151 -0
- data/lib/dm-core/support/lazy_array.rb +451 -0
- data/lib/dm-core/support/local_object_space.rb +13 -0
- data/lib/dm-core/support/logger.rb +201 -0
- data/lib/dm-core/support/mash.rb +176 -0
- data/lib/dm-core/support/naming_conventions.rb +90 -0
- data/lib/dm-core/support/ordered_set.rb +380 -0
- data/lib/dm-core/support/subject.rb +33 -0
- data/lib/dm-core/support/subject_set.rb +250 -0
- data/lib/dm-core/version.rb +3 -0
- data/script/performance.rb +275 -0
- data/script/profile.rb +218 -0
- data/spec/lib/rspec_immediate_feedback_formatter.rb +54 -0
- data/spec/public/associations/many_to_many/read_multiple_join_spec.rb +68 -0
- data/spec/public/associations/many_to_many_spec.rb +197 -0
- data/spec/public/associations/many_to_one_spec.rb +83 -0
- data/spec/public/associations/many_to_one_with_boolean_cpk_spec.rb +40 -0
- data/spec/public/associations/many_to_one_with_custom_fk_spec.rb +49 -0
- data/spec/public/associations/one_to_many_spec.rb +81 -0
- data/spec/public/associations/one_to_one_spec.rb +176 -0
- data/spec/public/associations/one_to_one_with_boolean_cpk_spec.rb +46 -0
- data/spec/public/collection_spec.rb +69 -0
- data/spec/public/finalize_spec.rb +76 -0
- data/spec/public/model/hook_spec.rb +246 -0
- data/spec/public/model/property_spec.rb +88 -0
- data/spec/public/model/relationship_spec.rb +1040 -0
- data/spec/public/model_spec.rb +462 -0
- data/spec/public/property/binary_spec.rb +41 -0
- data/spec/public/property/boolean_spec.rb +22 -0
- data/spec/public/property/class_spec.rb +28 -0
- data/spec/public/property/date_spec.rb +22 -0
- data/spec/public/property/date_time_spec.rb +22 -0
- data/spec/public/property/decimal_spec.rb +23 -0
- data/spec/public/property/discriminator_spec.rb +135 -0
- data/spec/public/property/float_spec.rb +22 -0
- data/spec/public/property/integer_spec.rb +22 -0
- data/spec/public/property/object_spec.rb +107 -0
- data/spec/public/property/serial_spec.rb +22 -0
- data/spec/public/property/string_spec.rb +22 -0
- data/spec/public/property/text_spec.rb +63 -0
- data/spec/public/property/time_spec.rb +22 -0
- data/spec/public/property_spec.rb +341 -0
- data/spec/public/resource_spec.rb +288 -0
- data/spec/public/sel_spec.rb +53 -0
- data/spec/public/setup_spec.rb +145 -0
- data/spec/public/shared/association_collection_shared_spec.rb +309 -0
- data/spec/public/shared/collection_finder_shared_spec.rb +267 -0
- data/spec/public/shared/collection_shared_spec.rb +1667 -0
- data/spec/public/shared/finder_shared_spec.rb +1629 -0
- data/spec/rcov.opts +6 -0
- data/spec/semipublic/adapters/abstract_adapter_spec.rb +30 -0
- data/spec/semipublic/adapters/in_memory_adapter_spec.rb +13 -0
- data/spec/semipublic/associations/many_to_many_spec.rb +94 -0
- data/spec/semipublic/associations/many_to_one_spec.rb +63 -0
- data/spec/semipublic/associations/one_to_many_spec.rb +55 -0
- data/spec/semipublic/associations/one_to_one_spec.rb +53 -0
- data/spec/semipublic/associations/relationship_spec.rb +200 -0
- data/spec/semipublic/associations_spec.rb +177 -0
- data/spec/semipublic/collection_spec.rb +110 -0
- data/spec/semipublic/model_spec.rb +96 -0
- data/spec/semipublic/property/binary_spec.rb +13 -0
- data/spec/semipublic/property/boolean_spec.rb +47 -0
- data/spec/semipublic/property/class_spec.rb +33 -0
- data/spec/semipublic/property/date_spec.rb +43 -0
- data/spec/semipublic/property/date_time_spec.rb +46 -0
- data/spec/semipublic/property/decimal_spec.rb +83 -0
- data/spec/semipublic/property/discriminator_spec.rb +19 -0
- data/spec/semipublic/property/float_spec.rb +82 -0
- data/spec/semipublic/property/integer_spec.rb +82 -0
- data/spec/semipublic/property/lookup_spec.rb +29 -0
- data/spec/semipublic/property/serial_spec.rb +13 -0
- data/spec/semipublic/property/string_spec.rb +13 -0
- data/spec/semipublic/property/text_spec.rb +31 -0
- data/spec/semipublic/property/time_spec.rb +50 -0
- data/spec/semipublic/property_spec.rb +114 -0
- data/spec/semipublic/query/conditions/comparison_spec.rb +1501 -0
- data/spec/semipublic/query/conditions/operation_spec.rb +1294 -0
- data/spec/semipublic/query/path_spec.rb +471 -0
- data/spec/semipublic/query_spec.rb +3682 -0
- data/spec/semipublic/resource/state/clean_spec.rb +88 -0
- data/spec/semipublic/resource/state/deleted_spec.rb +78 -0
- data/spec/semipublic/resource/state/dirty_spec.rb +162 -0
- data/spec/semipublic/resource/state/immutable_spec.rb +105 -0
- data/spec/semipublic/resource/state/transient_spec.rb +162 -0
- data/spec/semipublic/resource/state_spec.rb +230 -0
- data/spec/semipublic/resource_spec.rb +23 -0
- data/spec/semipublic/shared/condition_shared_spec.rb +9 -0
- data/spec/semipublic/shared/resource_shared_spec.rb +199 -0
- data/spec/semipublic/shared/resource_state_shared_spec.rb +79 -0
- data/spec/semipublic/shared/subject_shared_spec.rb +79 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +38 -0
- data/spec/support/core_ext/hash.rb +10 -0
- data/spec/support/core_ext/inheritable_attributes.rb +46 -0
- data/spec/support/properties/huge_integer.rb +17 -0
- data/spec/unit/array_spec.rb +23 -0
- data/spec/unit/blank_spec.rb +73 -0
- data/spec/unit/data_mapper/ordered_set/append_spec.rb +26 -0
- data/spec/unit/data_mapper/ordered_set/clear_spec.rb +24 -0
- data/spec/unit/data_mapper/ordered_set/delete_spec.rb +28 -0
- data/spec/unit/data_mapper/ordered_set/each_spec.rb +19 -0
- data/spec/unit/data_mapper/ordered_set/empty_spec.rb +20 -0
- data/spec/unit/data_mapper/ordered_set/entries_spec.rb +22 -0
- data/spec/unit/data_mapper/ordered_set/eql_spec.rb +51 -0
- data/spec/unit/data_mapper/ordered_set/equal_value_spec.rb +84 -0
- data/spec/unit/data_mapper/ordered_set/hash_spec.rb +12 -0
- data/spec/unit/data_mapper/ordered_set/include_spec.rb +23 -0
- data/spec/unit/data_mapper/ordered_set/index_spec.rb +28 -0
- data/spec/unit/data_mapper/ordered_set/initialize_spec.rb +32 -0
- data/spec/unit/data_mapper/ordered_set/merge_spec.rb +36 -0
- data/spec/unit/data_mapper/ordered_set/shared/append_spec.rb +24 -0
- data/spec/unit/data_mapper/ordered_set/shared/clear_spec.rb +9 -0
- data/spec/unit/data_mapper/ordered_set/shared/delete_spec.rb +25 -0
- data/spec/unit/data_mapper/ordered_set/shared/each_spec.rb +17 -0
- data/spec/unit/data_mapper/ordered_set/shared/empty_spec.rb +9 -0
- data/spec/unit/data_mapper/ordered_set/shared/entries_spec.rb +9 -0
- data/spec/unit/data_mapper/ordered_set/shared/include_spec.rb +9 -0
- data/spec/unit/data_mapper/ordered_set/shared/index_spec.rb +13 -0
- data/spec/unit/data_mapper/ordered_set/shared/initialize_spec.rb +28 -0
- data/spec/unit/data_mapper/ordered_set/shared/merge_spec.rb +28 -0
- data/spec/unit/data_mapper/ordered_set/shared/size_spec.rb +13 -0
- data/spec/unit/data_mapper/ordered_set/shared/to_ary_spec.rb +11 -0
- data/spec/unit/data_mapper/ordered_set/size_spec.rb +27 -0
- data/spec/unit/data_mapper/ordered_set/to_ary_spec.rb +23 -0
- data/spec/unit/data_mapper/subject_set/append_spec.rb +47 -0
- data/spec/unit/data_mapper/subject_set/clear_spec.rb +34 -0
- data/spec/unit/data_mapper/subject_set/delete_spec.rb +40 -0
- data/spec/unit/data_mapper/subject_set/each_spec.rb +30 -0
- data/spec/unit/data_mapper/subject_set/empty_spec.rb +31 -0
- data/spec/unit/data_mapper/subject_set/entries_spec.rb +31 -0
- data/spec/unit/data_mapper/subject_set/get_spec.rb +34 -0
- data/spec/unit/data_mapper/subject_set/include_spec.rb +32 -0
- data/spec/unit/data_mapper/subject_set/named_spec.rb +33 -0
- data/spec/unit/data_mapper/subject_set/shared/append_spec.rb +18 -0
- data/spec/unit/data_mapper/subject_set/shared/clear_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/delete_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/each_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/empty_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/entries_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/get_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/include_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/named_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/size_spec.rb +13 -0
- data/spec/unit/data_mapper/subject_set/shared/to_ary_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/values_at_spec.rb +44 -0
- data/spec/unit/data_mapper/subject_set/size_spec.rb +42 -0
- data/spec/unit/data_mapper/subject_set/to_ary_spec.rb +34 -0
- data/spec/unit/data_mapper/subject_set/values_at_spec.rb +57 -0
- data/spec/unit/hash_spec.rb +28 -0
- data/spec/unit/hook_spec.rb +1235 -0
- data/spec/unit/inflections_spec.rb +16 -0
- data/spec/unit/lazy_array_spec.rb +1949 -0
- data/spec/unit/mash_spec.rb +312 -0
- data/spec/unit/module_spec.rb +71 -0
- data/spec/unit/object_spec.rb +38 -0
- data/spec/unit/try_dup_spec.rb +46 -0
- data/tasks/ci.rake +1 -0
- data/tasks/spec.rake +38 -0
- data/tasks/yard.rake +9 -0
- data/tasks/yardstick.rake +19 -0
- metadata +365 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DataMapper::Associations do
|
|
4
|
+
before :all do
|
|
5
|
+
class ::Car
|
|
6
|
+
include DataMapper::Resource
|
|
7
|
+
|
|
8
|
+
property :id, Serial
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class ::Engine
|
|
12
|
+
include DataMapper::Resource
|
|
13
|
+
|
|
14
|
+
property :id, Serial
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class ::Door
|
|
18
|
+
include DataMapper::Resource
|
|
19
|
+
|
|
20
|
+
property :id, Serial
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class ::Window
|
|
24
|
+
include DataMapper::Resource
|
|
25
|
+
|
|
26
|
+
property :id, Serial
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def n
|
|
31
|
+
1.0/0
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe '#has' do
|
|
35
|
+
describe '1' do
|
|
36
|
+
before :all do
|
|
37
|
+
@relationship = Car.has(1, :engine)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'should return a Relationship' do
|
|
41
|
+
@relationship.should be_a_kind_of(DataMapper::Associations::OneToOne::Relationship)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'should return a Relationship with the child model' do
|
|
45
|
+
@relationship.child_model.should == Engine
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'should return a Relationship with a min of 1' do
|
|
49
|
+
@relationship.min.should == 1
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'should return a Relationship with a max of 1' do
|
|
53
|
+
@relationship.max.should == 1
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe 'n..n' do
|
|
58
|
+
before :all do
|
|
59
|
+
@relationship = Car.has(1..4, :doors)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it 'should return a Relationship' do
|
|
63
|
+
@relationship.should be_a_kind_of(DataMapper::Associations::OneToMany::Relationship)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'should return a Relationship with the child model' do
|
|
67
|
+
@relationship.child_model.should == Door
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'should return a Relationship with a min of 1' do
|
|
71
|
+
@relationship.min.should == 1
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'should return a Relationship with a max of 4' do
|
|
75
|
+
@relationship.max.should == 4
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe 'n..n through' do
|
|
80
|
+
before :all do
|
|
81
|
+
Door.has(1, :window)
|
|
82
|
+
Car.has(1..4, :doors)
|
|
83
|
+
|
|
84
|
+
@relationship = Car.has(1..4, :windows, :through => :doors)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it 'should return a Relationship' do
|
|
88
|
+
@relationship.should be_a_kind_of(DataMapper::Associations::ManyToMany::Relationship)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it 'should return a Relationship with the child model' do
|
|
92
|
+
@relationship.child_model.should == Window
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it 'should return a Relationship with a min of 1' do
|
|
96
|
+
@relationship.min.should == 1
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it 'should return a Relationship with a max of 4' do
|
|
100
|
+
@relationship.max.should == 4
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
describe 'n' do
|
|
105
|
+
before :all do
|
|
106
|
+
@relationship = Car.has(n, :doors)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it 'should return a Relationship' do
|
|
110
|
+
@relationship.should be_a_kind_of(DataMapper::Associations::OneToMany::Relationship)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it 'should return a Relationship with the child model' do
|
|
114
|
+
@relationship.child_model.should == Door
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it 'should return a Relationship with a min of 0' do
|
|
118
|
+
@relationship.min.should == 0
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it 'should return a Relationship with a max of n' do
|
|
122
|
+
@relationship.max.should == n
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
describe 'n through' do
|
|
127
|
+
before :all do
|
|
128
|
+
Door.has(1, :windows)
|
|
129
|
+
Car.has(1..4, :doors)
|
|
130
|
+
|
|
131
|
+
@relationship = Car.has(n, :windows, :through => :doors)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it 'should return a Relationship' do
|
|
135
|
+
@relationship.should be_a_kind_of(DataMapper::Associations::ManyToMany::Relationship)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it 'should return a Relationship with the child model' do
|
|
139
|
+
@relationship.child_model.should == Window
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it 'should return a Relationship with a min of 0' do
|
|
143
|
+
@relationship.min.should == 0
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it 'should return a Relationship with a max of n' do
|
|
147
|
+
@relationship.max.should == n
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
describe '#belongs_to' do
|
|
153
|
+
before :all do
|
|
154
|
+
@relationship = Engine.belongs_to(:car)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it 'should return a Relationship' do
|
|
158
|
+
@relationship.should be_a_kind_of(DataMapper::Associations::ManyToOne::Relationship)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it 'should return a Relationship with the parent model' do
|
|
162
|
+
@relationship.parent_model.should == Car
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
it 'should return a Relationship with a min of 1' do
|
|
166
|
+
@relationship.min.should == 1
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
it 'should return a Relationship with a max of 1' do
|
|
170
|
+
@relationship.max.should == 1
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it 'should return a Relationship that is required' do
|
|
174
|
+
@relationship.required?.should be(true)
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
# run the specs once with a loaded collection and once not
|
|
4
|
+
[ false, true ].each do |loaded|
|
|
5
|
+
describe DataMapper::Collection do
|
|
6
|
+
extend DataMapper::Spec::CollectionHelpers::GroupMethods
|
|
7
|
+
|
|
8
|
+
self.loaded = loaded
|
|
9
|
+
|
|
10
|
+
before :all do
|
|
11
|
+
module ::Blog
|
|
12
|
+
class Article
|
|
13
|
+
include DataMapper::Resource
|
|
14
|
+
|
|
15
|
+
property :id, Serial
|
|
16
|
+
property :title, String
|
|
17
|
+
property :content, Text
|
|
18
|
+
property :subtitle, String
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
@article_model = Blog::Article
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
supported_by :all do
|
|
26
|
+
before :all do
|
|
27
|
+
@article_repository = @repository
|
|
28
|
+
@articles_query = DataMapper::Query.new(@article_repository, @article_model, :title => 'Sample Article')
|
|
29
|
+
|
|
30
|
+
@article = @article_model.create(:title => 'Sample Article', :content => 'Sample')
|
|
31
|
+
|
|
32
|
+
@articles = @article_model.all(@articles_query)
|
|
33
|
+
|
|
34
|
+
@articles.entries if loaded
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it { DataMapper::Collection.should respond_to(:new) }
|
|
38
|
+
|
|
39
|
+
describe '.new' do
|
|
40
|
+
describe 'with resources' do
|
|
41
|
+
before :all do
|
|
42
|
+
@return = @collection = DataMapper::Collection.new(@articles_query, [ @article ])
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'should return a Collection' do
|
|
46
|
+
@return.should be_kind_of(DataMapper::Collection)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'should be loaded' do
|
|
50
|
+
@return.should be_loaded
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'should contain the article' do
|
|
54
|
+
@collection.should == [ @article ]
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe 'with no resources' do
|
|
59
|
+
before :all do
|
|
60
|
+
@return = @collection = DataMapper::Collection.new(@articles_query)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'should return a Collection' do
|
|
64
|
+
@return.should be_kind_of(DataMapper::Collection)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'should not be loaded' do
|
|
68
|
+
@return.should_not be_loaded
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'should contain the article' do
|
|
72
|
+
@collection.should == [ @article ]
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it { @articles.should respond_to(:query) }
|
|
78
|
+
|
|
79
|
+
describe '#query' do
|
|
80
|
+
before :all do
|
|
81
|
+
@return = @articles.query
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'should return a Query' do
|
|
85
|
+
@return.should be_kind_of(DataMapper::Query)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it 'should return expected Query' do
|
|
89
|
+
@return.should eql(@articles_query)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it { @articles.should respond_to(:repository) }
|
|
94
|
+
|
|
95
|
+
describe '#repository' do
|
|
96
|
+
before :all do
|
|
97
|
+
@return = @repository = @articles.repository
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it 'should return a Repository' do
|
|
101
|
+
@return.should be_kind_of(DataMapper::Repository)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it 'should be expected Repository' do
|
|
105
|
+
@repository.should == @article_repository
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DataMapper::Model do
|
|
4
|
+
|
|
5
|
+
it { should respond_to(:append_inclusions) }
|
|
6
|
+
|
|
7
|
+
describe '.append_inclusions' do
|
|
8
|
+
module ::Inclusions
|
|
9
|
+
def new_method
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe 'before the model is defined' do
|
|
14
|
+
before :all do
|
|
15
|
+
DataMapper::Model.append_inclusions(Inclusions)
|
|
16
|
+
|
|
17
|
+
class ::User
|
|
18
|
+
include DataMapper::Resource
|
|
19
|
+
property :id, Serial
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should respond to :new_method' do
|
|
24
|
+
User.new.should respond_to(:new_method)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
after :all do
|
|
28
|
+
DataMapper::Model.extra_inclusions.delete(Inclusions)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe 'after the model is defined' do
|
|
33
|
+
before :all do
|
|
34
|
+
class ::User
|
|
35
|
+
include DataMapper::Resource
|
|
36
|
+
property :id, Serial
|
|
37
|
+
end
|
|
38
|
+
DataMapper::Model.append_inclusions(Inclusions)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'should respond to :new_method' do
|
|
42
|
+
User.new.should respond_to(:new_method)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
after :all do
|
|
46
|
+
DataMapper::Model.extra_inclusions.delete(Inclusions)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it { should respond_to(:append_extensions) }
|
|
52
|
+
|
|
53
|
+
describe '.append_extensions' do
|
|
54
|
+
module ::Extensions
|
|
55
|
+
def new_method
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe 'before the model is defined' do
|
|
60
|
+
before :all do
|
|
61
|
+
DataMapper::Model.append_extensions(Extensions)
|
|
62
|
+
|
|
63
|
+
class ::User
|
|
64
|
+
include DataMapper::Resource
|
|
65
|
+
property :id, Serial
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'should respond to :new_method' do
|
|
70
|
+
User.should respond_to(:new_method)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
after :all do
|
|
74
|
+
DataMapper::Model.extra_extensions.delete(Extensions)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe 'after the model is defined' do
|
|
79
|
+
before :all do
|
|
80
|
+
class ::User
|
|
81
|
+
include DataMapper::Resource
|
|
82
|
+
property :id, Serial
|
|
83
|
+
end
|
|
84
|
+
DataMapper::Model.append_extensions(Extensions)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it 'should respond to :new_method' do
|
|
88
|
+
User.should respond_to(:new_method)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
after :all do
|
|
92
|
+
DataMapper::Model.extra_extensions.delete(Extensions)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DataMapper::Property::Binary do
|
|
4
|
+
before :all do
|
|
5
|
+
@name = :title
|
|
6
|
+
@type = described_class
|
|
7
|
+
@value = 'value'
|
|
8
|
+
@other_value = 'return value'
|
|
9
|
+
@invalid_value = 1
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_should_behave_like 'A semipublic Property'
|
|
13
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DataMapper::Property::Boolean do
|
|
4
|
+
before :all do
|
|
5
|
+
@name = :active
|
|
6
|
+
@type = described_class
|
|
7
|
+
@value = true
|
|
8
|
+
@other_value = false
|
|
9
|
+
@invalid_value = 1
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_should_behave_like 'A semipublic Property'
|
|
13
|
+
|
|
14
|
+
describe '#valid?' do
|
|
15
|
+
[ true, false ].each do |value|
|
|
16
|
+
it "returns true when value is #{value.inspect}" do
|
|
17
|
+
@property.valid?(value).should be(true)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
[ 'true', 'TRUE', '1', 1, 't', 'T', 'false', 'FALSE', '0', 0, 'f', 'F' ].each do |value|
|
|
22
|
+
it "returns false for #{value.inspect}" do
|
|
23
|
+
@property.valid?(value).should be(false)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe '#typecast' do
|
|
29
|
+
[ true, 'true', 'TRUE', '1', 1, 't', 'T' ].each do |value|
|
|
30
|
+
it "returns true when value is #{value.inspect}" do
|
|
31
|
+
@property.typecast(value).should be(true)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
[ false, 'false', 'FALSE', '0', 0, 'f', 'F' ].each do |value|
|
|
36
|
+
it "returns false when value is #{value.inspect}" do
|
|
37
|
+
@property.typecast(value).should be(false)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
[ 'string', 2, 1.0, BigDecimal('1.0'), DateTime.now, Time.now, Date.today, Class, Object.new, ].each do |value|
|
|
42
|
+
it "does not typecast value #{value.inspect}" do
|
|
43
|
+
@property.typecast(value).should equal(value)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|