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,471 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
# class methods
|
|
4
|
+
describe DataMapper::Query::Path do
|
|
5
|
+
before :all do
|
|
6
|
+
class ::Author
|
|
7
|
+
include DataMapper::Resource
|
|
8
|
+
|
|
9
|
+
property :id, Serial
|
|
10
|
+
property :title, String
|
|
11
|
+
|
|
12
|
+
has n, :articles
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class ::Article
|
|
16
|
+
include DataMapper::Resource
|
|
17
|
+
|
|
18
|
+
property :id, Serial
|
|
19
|
+
property :title, String
|
|
20
|
+
|
|
21
|
+
belongs_to :author
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
@relationship = Author.relationships[:articles]
|
|
25
|
+
@relationships = [ @relationship ]
|
|
26
|
+
@property = Article.properties[:title]
|
|
27
|
+
DataMapper.finalize
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it { DataMapper::Query::Path.should respond_to(:new) }
|
|
31
|
+
|
|
32
|
+
describe '.new' do
|
|
33
|
+
describe 'when supplied an Array of Relationships' do
|
|
34
|
+
before do
|
|
35
|
+
@path = DataMapper::Query::Path.new(@relationships)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'should return a Query::Path' do
|
|
39
|
+
@path.should be_kind_of(DataMapper::Query::Path)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'should set Query::Path#relationships' do
|
|
43
|
+
@path.relationships.should eql(@relationships)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'should copy the relationships' do
|
|
47
|
+
@path.relationships.should_not equal(@relationships)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe 'when supplied an Array of Relationships and a Property Symbol name' do
|
|
52
|
+
before do
|
|
53
|
+
@path = DataMapper::Query::Path.new(@relationships, @property.name)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'should return a Query::Path' do
|
|
57
|
+
@path.should be_kind_of(DataMapper::Query::Path)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'should set Query::Path#relationships' do
|
|
61
|
+
@path.relationships.should eql(@relationships)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'should copy the relationships' do
|
|
65
|
+
@path.relationships.should_not equal(@relationships)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'should set Query::Path#property' do
|
|
69
|
+
@path.property.should equal(@property)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
describe 'when supplied an unknown property' do
|
|
74
|
+
it 'should raise an error' do
|
|
75
|
+
lambda { DataMapper::Query::Path.new(@relationships, :unknown) }.should raise_error(ArgumentError, "Unknown property 'unknown' in Article")
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# instance methods
|
|
82
|
+
describe DataMapper::Query::Path do
|
|
83
|
+
before :all do
|
|
84
|
+
class ::Author
|
|
85
|
+
include DataMapper::Resource
|
|
86
|
+
|
|
87
|
+
property :id, Serial
|
|
88
|
+
property :title, String
|
|
89
|
+
|
|
90
|
+
has n, :articles
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
class ::Article
|
|
94
|
+
include DataMapper::Resource
|
|
95
|
+
|
|
96
|
+
property :id, Serial
|
|
97
|
+
property :title, String
|
|
98
|
+
|
|
99
|
+
belongs_to :author
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
@relationship = Author.relationships[:articles]
|
|
103
|
+
@relationships = [ @relationship ]
|
|
104
|
+
@property = Article.properties[:title]
|
|
105
|
+
|
|
106
|
+
@path = DataMapper::Query::Path.new(@relationships)
|
|
107
|
+
DataMapper.finalize
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it { @path.should respond_to(:==) }
|
|
111
|
+
|
|
112
|
+
describe '#==' do
|
|
113
|
+
describe 'when other Query::Path is the same' do
|
|
114
|
+
before do
|
|
115
|
+
@other = @path
|
|
116
|
+
|
|
117
|
+
@return = @path == @other
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it 'should return true' do
|
|
121
|
+
@return.should be(true)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
describe 'when other Query::Path does not respond to #relationships' do
|
|
126
|
+
before do
|
|
127
|
+
class << @other = @path.dup
|
|
128
|
+
undef_method :relationships
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
@return = @path == @other
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it 'should return false' do
|
|
135
|
+
@return.should be(false)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
describe 'when other Query::Path does not respond to #property' do
|
|
140
|
+
before do
|
|
141
|
+
class << @other = @path.dup
|
|
142
|
+
undef_method :property
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
@return = @path == @other
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it 'should return false' do
|
|
149
|
+
@return.should be(false)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
describe 'when other Query::Path has different relationships' do
|
|
154
|
+
before do
|
|
155
|
+
@other = DataMapper::Query::Path.new([ Article.relationships[:author] ])
|
|
156
|
+
|
|
157
|
+
@return = @path == @other
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it 'should return false' do
|
|
161
|
+
@return.should be(false)
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
describe 'when other Query::Path has different properties' do
|
|
166
|
+
before do
|
|
167
|
+
@other = DataMapper::Query::Path.new(@path.relationships, :title)
|
|
168
|
+
|
|
169
|
+
@return = @path == @other
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it 'should return false' do
|
|
173
|
+
@return.should be(false)
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
describe 'when other Query::Path has the same relationship and property' do
|
|
178
|
+
before do
|
|
179
|
+
@other = DataMapper::Query::Path.new(@path.relationships, @path.property)
|
|
180
|
+
|
|
181
|
+
@return = @path == @other
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
it 'should return true' do
|
|
185
|
+
@return.should be(true)
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
it { @path.should respond_to(:eql?) }
|
|
191
|
+
|
|
192
|
+
describe '#eql?' do
|
|
193
|
+
describe 'when other Query::Path is the same' do
|
|
194
|
+
before do
|
|
195
|
+
@other = @path
|
|
196
|
+
|
|
197
|
+
@return = @path.eql?(@other)
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it 'should return true' do
|
|
201
|
+
@return.should be(true)
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
describe 'when other Object is not an instance of Query::Path' do
|
|
206
|
+
before do
|
|
207
|
+
class MyQueryPath < DataMapper::Query::Path; end
|
|
208
|
+
|
|
209
|
+
@other = MyQueryPath.new(@path.relationships, @path.property)
|
|
210
|
+
|
|
211
|
+
@return = @path.eql?(@other)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
it 'should return false' do
|
|
215
|
+
@return.should be(false)
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
describe 'when other Query::Path has different relationships' do
|
|
220
|
+
before do
|
|
221
|
+
@other = DataMapper::Query::Path.new([ Article.relationships[:author] ])
|
|
222
|
+
|
|
223
|
+
@return = @path.eql?(@other)
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
it 'should return false' do
|
|
227
|
+
@return.should be(false)
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
describe 'when other Query::Path has different properties' do
|
|
232
|
+
before do
|
|
233
|
+
@other = DataMapper::Query::Path.new(@path.relationships, :title)
|
|
234
|
+
|
|
235
|
+
@return = @path.eql?(@other)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
it 'should return false' do
|
|
239
|
+
@return.should be(false)
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
describe 'when other Query::Path has the same relationship and property' do
|
|
244
|
+
before do
|
|
245
|
+
@other = DataMapper::Query::Path.new(@path.relationships, @path.property)
|
|
246
|
+
|
|
247
|
+
@return = @path.eql?(@other)
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
it 'should return true' do
|
|
251
|
+
@return.should be(true)
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
it { @path.should respond_to(:model) }
|
|
257
|
+
|
|
258
|
+
describe '#model' do
|
|
259
|
+
it 'should return a Model' do
|
|
260
|
+
@path.model.should be_kind_of(DataMapper::Model)
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
it 'should return expected value' do
|
|
264
|
+
@path.model.should eql(Article)
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
it { @path.should respond_to(:property) }
|
|
269
|
+
|
|
270
|
+
describe '#property' do
|
|
271
|
+
describe 'when no property is defined' do
|
|
272
|
+
it 'should return nil' do
|
|
273
|
+
@path.property.should be_nil
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
describe 'when a property is defined' do
|
|
278
|
+
before do
|
|
279
|
+
@path = @path.class.new(@path.relationships, @property.name)
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
it 'should return a Property' do
|
|
283
|
+
@path.property.should be_kind_of(DataMapper::Property::Object)
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
it 'should return expected value' do
|
|
287
|
+
@path.property.should eql(@property)
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
it { @path.should respond_to(:relationships) }
|
|
293
|
+
|
|
294
|
+
describe '#relationships' do
|
|
295
|
+
it 'should return an Array' do
|
|
296
|
+
@path.relationships.should be_kind_of(Array)
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
it 'should return expected value' do
|
|
300
|
+
@path.relationships.should eql(@relationships)
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
it { @path.should respond_to(:respond_to?) }
|
|
305
|
+
|
|
306
|
+
describe '#respond_to?' do
|
|
307
|
+
describe 'when supplied a method name provided by the parent class' do
|
|
308
|
+
before do
|
|
309
|
+
@return = @path.respond_to?(:class)
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
it 'should return true' do
|
|
313
|
+
@return.should be(true)
|
|
314
|
+
end
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
describe 'when supplied a method name provided by the property' do
|
|
318
|
+
before do
|
|
319
|
+
@path = @path.class.new(@path.relationships, @property.name)
|
|
320
|
+
|
|
321
|
+
@return = @path.respond_to?(:instance_variable_name)
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
it 'should return true' do
|
|
325
|
+
@return.should be(true)
|
|
326
|
+
end
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
describe 'when supplied a method name referring to a relationship' do
|
|
330
|
+
before do
|
|
331
|
+
@return = @path.respond_to?(:author)
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
it 'should return true' do
|
|
335
|
+
@return.should be(true)
|
|
336
|
+
end
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
describe 'when supplied a method name referring to a property' do
|
|
340
|
+
before do
|
|
341
|
+
@return = @path.respond_to?(:title)
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
it 'should return true' do
|
|
345
|
+
@return.should be(true)
|
|
346
|
+
end
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
describe 'when supplied an unknown method name' do
|
|
350
|
+
before do
|
|
351
|
+
@return = @path.respond_to?(:unknown)
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
it 'should return false' do
|
|
355
|
+
@return.should be(false)
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
it { @path.should respond_to(:repository_name) }
|
|
361
|
+
|
|
362
|
+
describe '#repository_name' do
|
|
363
|
+
it 'should return a Symbol' do
|
|
364
|
+
@path.repository_name.should be_kind_of(Symbol)
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
it 'should return expected value' do
|
|
368
|
+
@path.repository_name.should eql(:default)
|
|
369
|
+
end
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
describe '#method_missing' do
|
|
373
|
+
describe 'when supplied a method name provided by the parent class' do
|
|
374
|
+
before do
|
|
375
|
+
@return = @path.class
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
it 'should return the expected value' do
|
|
379
|
+
@return.should eql(DataMapper::Query::Path)
|
|
380
|
+
end
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
describe 'when supplied a method name provided by the property' do
|
|
384
|
+
before do
|
|
385
|
+
@path = @path.class.new(@path.relationships, @property.name)
|
|
386
|
+
|
|
387
|
+
@return = @path.instance_variable_name
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
it 'should return the expected value' do
|
|
391
|
+
@return.should eql('@title')
|
|
392
|
+
end
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
describe 'when supplied a method name referring to a relationship' do
|
|
396
|
+
before do
|
|
397
|
+
@return = @path.author
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
it 'should return a Query::Path' do
|
|
401
|
+
@return.should be_kind_of(DataMapper::Query::Path)
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
it 'should return the expected value' do
|
|
405
|
+
@return.should eql(DataMapper::Query::Path.new([ @relationship, Article.relationships[:author] ]))
|
|
406
|
+
end
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
describe 'when supplied a method name referring to a property' do
|
|
410
|
+
before do
|
|
411
|
+
@return = @path.title
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
it 'should return a Query::Path' do
|
|
415
|
+
@return.should be_kind_of(DataMapper::Query::Path)
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
it 'should return the expected value' do
|
|
419
|
+
@return.should eql(DataMapper::Query::Path.new(@relationships, :title))
|
|
420
|
+
end
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
describe 'when supplied an unknown method name' do
|
|
424
|
+
it 'should raise an error' do
|
|
425
|
+
lambda { @path.unknown }.should raise_error(NoMethodError, "undefined property or relationship 'unknown' on Article")
|
|
426
|
+
end
|
|
427
|
+
end
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
describe 'ordering' do
|
|
431
|
+
before do
|
|
432
|
+
@path = Article.author.title
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
describe '#desc' do
|
|
436
|
+
before do
|
|
437
|
+
@return = @path.desc
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
it 'returns a :desc operator from the path' do
|
|
441
|
+
@return.should == DataMapper::Query::Operator.new(@path.property, :desc)
|
|
442
|
+
end
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
describe '#asc' do
|
|
446
|
+
before do
|
|
447
|
+
@return = @path.asc
|
|
448
|
+
end
|
|
449
|
+
|
|
450
|
+
it 'returns a :desc operator from the path' do
|
|
451
|
+
@return.should == DataMapper::Query::Operator.new(@path.property, :asc)
|
|
452
|
+
end
|
|
453
|
+
end
|
|
454
|
+
end
|
|
455
|
+
|
|
456
|
+
((DataMapper::Query::Conditions::Comparison.slugs | [ :not ]) - [ :eql, :in ]).each do |slug|
|
|
457
|
+
describe "##{slug}" do
|
|
458
|
+
before do
|
|
459
|
+
@return = @path.send(slug)
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
it 'should return a Query::Operator' do
|
|
463
|
+
@return.should be_kind_of(DataMapper::Query::Operator)
|
|
464
|
+
end
|
|
465
|
+
|
|
466
|
+
it 'should return expected value' do
|
|
467
|
+
@return.should eql(DataMapper::Query::Operator.new(@path, slug))
|
|
468
|
+
end
|
|
469
|
+
end
|
|
470
|
+
end
|
|
471
|
+
end
|