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.
Files changed (254) hide show
  1. data/.autotest +29 -0
  2. data/.document +5 -0
  3. data/.gitignore +35 -0
  4. data/.yardopts +1 -0
  5. data/Gemfile +65 -0
  6. data/LICENSE +20 -0
  7. data/README.md +269 -0
  8. data/Rakefile +4 -0
  9. data/dm-core.gemspec +24 -0
  10. data/lib/dm-core.rb +292 -0
  11. data/lib/dm-core/adapters.rb +222 -0
  12. data/lib/dm-core/adapters/abstract_adapter.rb +237 -0
  13. data/lib/dm-core/adapters/in_memory_adapter.rb +113 -0
  14. data/lib/dm-core/associations/many_to_many.rb +499 -0
  15. data/lib/dm-core/associations/many_to_one.rb +290 -0
  16. data/lib/dm-core/associations/one_to_many.rb +348 -0
  17. data/lib/dm-core/associations/one_to_one.rb +86 -0
  18. data/lib/dm-core/associations/relationship.rb +663 -0
  19. data/lib/dm-core/backwards.rb +13 -0
  20. data/lib/dm-core/collection.rb +1515 -0
  21. data/lib/dm-core/core_ext/kernel.rb +23 -0
  22. data/lib/dm-core/core_ext/pathname.rb +6 -0
  23. data/lib/dm-core/core_ext/symbol.rb +10 -0
  24. data/lib/dm-core/identity_map.rb +7 -0
  25. data/lib/dm-core/model.rb +874 -0
  26. data/lib/dm-core/model/hook.rb +103 -0
  27. data/lib/dm-core/model/is.rb +32 -0
  28. data/lib/dm-core/model/property.rb +249 -0
  29. data/lib/dm-core/model/relationship.rb +378 -0
  30. data/lib/dm-core/model/scope.rb +89 -0
  31. data/lib/dm-core/property.rb +866 -0
  32. data/lib/dm-core/property/binary.rb +21 -0
  33. data/lib/dm-core/property/boolean.rb +20 -0
  34. data/lib/dm-core/property/class.rb +17 -0
  35. data/lib/dm-core/property/date.rb +10 -0
  36. data/lib/dm-core/property/date_time.rb +10 -0
  37. data/lib/dm-core/property/decimal.rb +36 -0
  38. data/lib/dm-core/property/discriminator.rb +44 -0
  39. data/lib/dm-core/property/float.rb +16 -0
  40. data/lib/dm-core/property/integer.rb +22 -0
  41. data/lib/dm-core/property/invalid_value_error.rb +22 -0
  42. data/lib/dm-core/property/lookup.rb +27 -0
  43. data/lib/dm-core/property/numeric.rb +38 -0
  44. data/lib/dm-core/property/object.rb +34 -0
  45. data/lib/dm-core/property/serial.rb +14 -0
  46. data/lib/dm-core/property/string.rb +38 -0
  47. data/lib/dm-core/property/text.rb +9 -0
  48. data/lib/dm-core/property/time.rb +10 -0
  49. data/lib/dm-core/property_set.rb +177 -0
  50. data/lib/dm-core/query.rb +1366 -0
  51. data/lib/dm-core/query/conditions/comparison.rb +911 -0
  52. data/lib/dm-core/query/conditions/operation.rb +721 -0
  53. data/lib/dm-core/query/direction.rb +36 -0
  54. data/lib/dm-core/query/operator.rb +35 -0
  55. data/lib/dm-core/query/path.rb +114 -0
  56. data/lib/dm-core/query/sort.rb +39 -0
  57. data/lib/dm-core/relationship_set.rb +72 -0
  58. data/lib/dm-core/repository.rb +226 -0
  59. data/lib/dm-core/resource.rb +1214 -0
  60. data/lib/dm-core/resource/persistence_state.rb +75 -0
  61. data/lib/dm-core/resource/persistence_state/clean.rb +40 -0
  62. data/lib/dm-core/resource/persistence_state/deleted.rb +30 -0
  63. data/lib/dm-core/resource/persistence_state/dirty.rb +96 -0
  64. data/lib/dm-core/resource/persistence_state/immutable.rb +34 -0
  65. data/lib/dm-core/resource/persistence_state/persisted.rb +29 -0
  66. data/lib/dm-core/resource/persistence_state/transient.rb +80 -0
  67. data/lib/dm-core/spec/lib/adapter_helpers.rb +64 -0
  68. data/lib/dm-core/spec/lib/collection_helpers.rb +21 -0
  69. data/lib/dm-core/spec/lib/counter_adapter.rb +38 -0
  70. data/lib/dm-core/spec/lib/pending_helpers.rb +50 -0
  71. data/lib/dm-core/spec/lib/spec_helper.rb +74 -0
  72. data/lib/dm-core/spec/setup.rb +174 -0
  73. data/lib/dm-core/spec/shared/adapter_spec.rb +341 -0
  74. data/lib/dm-core/spec/shared/public/property_spec.rb +229 -0
  75. data/lib/dm-core/spec/shared/resource_spec.rb +1232 -0
  76. data/lib/dm-core/spec/shared/sel_spec.rb +111 -0
  77. data/lib/dm-core/spec/shared/semipublic/property_spec.rb +176 -0
  78. data/lib/dm-core/spec/shared/semipublic/query/conditions/abstract_comparison_spec.rb +261 -0
  79. data/lib/dm-core/support/assertions.rb +8 -0
  80. data/lib/dm-core/support/chainable.rb +18 -0
  81. data/lib/dm-core/support/deprecate.rb +12 -0
  82. data/lib/dm-core/support/descendant_set.rb +89 -0
  83. data/lib/dm-core/support/equalizer.rb +48 -0
  84. data/lib/dm-core/support/ext/array.rb +22 -0
  85. data/lib/dm-core/support/ext/blank.rb +25 -0
  86. data/lib/dm-core/support/ext/hash.rb +67 -0
  87. data/lib/dm-core/support/ext/module.rb +47 -0
  88. data/lib/dm-core/support/ext/object.rb +57 -0
  89. data/lib/dm-core/support/ext/string.rb +24 -0
  90. data/lib/dm-core/support/ext/try_dup.rb +12 -0
  91. data/lib/dm-core/support/hook.rb +405 -0
  92. data/lib/dm-core/support/inflections.rb +60 -0
  93. data/lib/dm-core/support/inflector/inflections.rb +211 -0
  94. data/lib/dm-core/support/inflector/methods.rb +151 -0
  95. data/lib/dm-core/support/lazy_array.rb +451 -0
  96. data/lib/dm-core/support/local_object_space.rb +13 -0
  97. data/lib/dm-core/support/logger.rb +201 -0
  98. data/lib/dm-core/support/mash.rb +176 -0
  99. data/lib/dm-core/support/naming_conventions.rb +90 -0
  100. data/lib/dm-core/support/ordered_set.rb +380 -0
  101. data/lib/dm-core/support/subject.rb +33 -0
  102. data/lib/dm-core/support/subject_set.rb +250 -0
  103. data/lib/dm-core/version.rb +3 -0
  104. data/script/performance.rb +275 -0
  105. data/script/profile.rb +218 -0
  106. data/spec/lib/rspec_immediate_feedback_formatter.rb +54 -0
  107. data/spec/public/associations/many_to_many/read_multiple_join_spec.rb +68 -0
  108. data/spec/public/associations/many_to_many_spec.rb +197 -0
  109. data/spec/public/associations/many_to_one_spec.rb +83 -0
  110. data/spec/public/associations/many_to_one_with_boolean_cpk_spec.rb +40 -0
  111. data/spec/public/associations/many_to_one_with_custom_fk_spec.rb +49 -0
  112. data/spec/public/associations/one_to_many_spec.rb +81 -0
  113. data/spec/public/associations/one_to_one_spec.rb +176 -0
  114. data/spec/public/associations/one_to_one_with_boolean_cpk_spec.rb +46 -0
  115. data/spec/public/collection_spec.rb +69 -0
  116. data/spec/public/finalize_spec.rb +76 -0
  117. data/spec/public/model/hook_spec.rb +246 -0
  118. data/spec/public/model/property_spec.rb +88 -0
  119. data/spec/public/model/relationship_spec.rb +1040 -0
  120. data/spec/public/model_spec.rb +462 -0
  121. data/spec/public/property/binary_spec.rb +41 -0
  122. data/spec/public/property/boolean_spec.rb +22 -0
  123. data/spec/public/property/class_spec.rb +28 -0
  124. data/spec/public/property/date_spec.rb +22 -0
  125. data/spec/public/property/date_time_spec.rb +22 -0
  126. data/spec/public/property/decimal_spec.rb +23 -0
  127. data/spec/public/property/discriminator_spec.rb +135 -0
  128. data/spec/public/property/float_spec.rb +22 -0
  129. data/spec/public/property/integer_spec.rb +22 -0
  130. data/spec/public/property/object_spec.rb +107 -0
  131. data/spec/public/property/serial_spec.rb +22 -0
  132. data/spec/public/property/string_spec.rb +22 -0
  133. data/spec/public/property/text_spec.rb +63 -0
  134. data/spec/public/property/time_spec.rb +22 -0
  135. data/spec/public/property_spec.rb +341 -0
  136. data/spec/public/resource_spec.rb +288 -0
  137. data/spec/public/sel_spec.rb +53 -0
  138. data/spec/public/setup_spec.rb +145 -0
  139. data/spec/public/shared/association_collection_shared_spec.rb +309 -0
  140. data/spec/public/shared/collection_finder_shared_spec.rb +267 -0
  141. data/spec/public/shared/collection_shared_spec.rb +1667 -0
  142. data/spec/public/shared/finder_shared_spec.rb +1629 -0
  143. data/spec/rcov.opts +6 -0
  144. data/spec/semipublic/adapters/abstract_adapter_spec.rb +30 -0
  145. data/spec/semipublic/adapters/in_memory_adapter_spec.rb +13 -0
  146. data/spec/semipublic/associations/many_to_many_spec.rb +94 -0
  147. data/spec/semipublic/associations/many_to_one_spec.rb +63 -0
  148. data/spec/semipublic/associations/one_to_many_spec.rb +55 -0
  149. data/spec/semipublic/associations/one_to_one_spec.rb +53 -0
  150. data/spec/semipublic/associations/relationship_spec.rb +200 -0
  151. data/spec/semipublic/associations_spec.rb +177 -0
  152. data/spec/semipublic/collection_spec.rb +110 -0
  153. data/spec/semipublic/model_spec.rb +96 -0
  154. data/spec/semipublic/property/binary_spec.rb +13 -0
  155. data/spec/semipublic/property/boolean_spec.rb +47 -0
  156. data/spec/semipublic/property/class_spec.rb +33 -0
  157. data/spec/semipublic/property/date_spec.rb +43 -0
  158. data/spec/semipublic/property/date_time_spec.rb +46 -0
  159. data/spec/semipublic/property/decimal_spec.rb +83 -0
  160. data/spec/semipublic/property/discriminator_spec.rb +19 -0
  161. data/spec/semipublic/property/float_spec.rb +82 -0
  162. data/spec/semipublic/property/integer_spec.rb +82 -0
  163. data/spec/semipublic/property/lookup_spec.rb +29 -0
  164. data/spec/semipublic/property/serial_spec.rb +13 -0
  165. data/spec/semipublic/property/string_spec.rb +13 -0
  166. data/spec/semipublic/property/text_spec.rb +31 -0
  167. data/spec/semipublic/property/time_spec.rb +50 -0
  168. data/spec/semipublic/property_spec.rb +114 -0
  169. data/spec/semipublic/query/conditions/comparison_spec.rb +1501 -0
  170. data/spec/semipublic/query/conditions/operation_spec.rb +1294 -0
  171. data/spec/semipublic/query/path_spec.rb +471 -0
  172. data/spec/semipublic/query_spec.rb +3682 -0
  173. data/spec/semipublic/resource/state/clean_spec.rb +88 -0
  174. data/spec/semipublic/resource/state/deleted_spec.rb +78 -0
  175. data/spec/semipublic/resource/state/dirty_spec.rb +162 -0
  176. data/spec/semipublic/resource/state/immutable_spec.rb +105 -0
  177. data/spec/semipublic/resource/state/transient_spec.rb +162 -0
  178. data/spec/semipublic/resource/state_spec.rb +230 -0
  179. data/spec/semipublic/resource_spec.rb +23 -0
  180. data/spec/semipublic/shared/condition_shared_spec.rb +9 -0
  181. data/spec/semipublic/shared/resource_shared_spec.rb +199 -0
  182. data/spec/semipublic/shared/resource_state_shared_spec.rb +79 -0
  183. data/spec/semipublic/shared/subject_shared_spec.rb +79 -0
  184. data/spec/spec.opts +5 -0
  185. data/spec/spec_helper.rb +38 -0
  186. data/spec/support/core_ext/hash.rb +10 -0
  187. data/spec/support/core_ext/inheritable_attributes.rb +46 -0
  188. data/spec/support/properties/huge_integer.rb +17 -0
  189. data/spec/unit/array_spec.rb +23 -0
  190. data/spec/unit/blank_spec.rb +73 -0
  191. data/spec/unit/data_mapper/ordered_set/append_spec.rb +26 -0
  192. data/spec/unit/data_mapper/ordered_set/clear_spec.rb +24 -0
  193. data/spec/unit/data_mapper/ordered_set/delete_spec.rb +28 -0
  194. data/spec/unit/data_mapper/ordered_set/each_spec.rb +19 -0
  195. data/spec/unit/data_mapper/ordered_set/empty_spec.rb +20 -0
  196. data/spec/unit/data_mapper/ordered_set/entries_spec.rb +22 -0
  197. data/spec/unit/data_mapper/ordered_set/eql_spec.rb +51 -0
  198. data/spec/unit/data_mapper/ordered_set/equal_value_spec.rb +84 -0
  199. data/spec/unit/data_mapper/ordered_set/hash_spec.rb +12 -0
  200. data/spec/unit/data_mapper/ordered_set/include_spec.rb +23 -0
  201. data/spec/unit/data_mapper/ordered_set/index_spec.rb +28 -0
  202. data/spec/unit/data_mapper/ordered_set/initialize_spec.rb +32 -0
  203. data/spec/unit/data_mapper/ordered_set/merge_spec.rb +36 -0
  204. data/spec/unit/data_mapper/ordered_set/shared/append_spec.rb +24 -0
  205. data/spec/unit/data_mapper/ordered_set/shared/clear_spec.rb +9 -0
  206. data/spec/unit/data_mapper/ordered_set/shared/delete_spec.rb +25 -0
  207. data/spec/unit/data_mapper/ordered_set/shared/each_spec.rb +17 -0
  208. data/spec/unit/data_mapper/ordered_set/shared/empty_spec.rb +9 -0
  209. data/spec/unit/data_mapper/ordered_set/shared/entries_spec.rb +9 -0
  210. data/spec/unit/data_mapper/ordered_set/shared/include_spec.rb +9 -0
  211. data/spec/unit/data_mapper/ordered_set/shared/index_spec.rb +13 -0
  212. data/spec/unit/data_mapper/ordered_set/shared/initialize_spec.rb +28 -0
  213. data/spec/unit/data_mapper/ordered_set/shared/merge_spec.rb +28 -0
  214. data/spec/unit/data_mapper/ordered_set/shared/size_spec.rb +13 -0
  215. data/spec/unit/data_mapper/ordered_set/shared/to_ary_spec.rb +11 -0
  216. data/spec/unit/data_mapper/ordered_set/size_spec.rb +27 -0
  217. data/spec/unit/data_mapper/ordered_set/to_ary_spec.rb +23 -0
  218. data/spec/unit/data_mapper/subject_set/append_spec.rb +47 -0
  219. data/spec/unit/data_mapper/subject_set/clear_spec.rb +34 -0
  220. data/spec/unit/data_mapper/subject_set/delete_spec.rb +40 -0
  221. data/spec/unit/data_mapper/subject_set/each_spec.rb +30 -0
  222. data/spec/unit/data_mapper/subject_set/empty_spec.rb +31 -0
  223. data/spec/unit/data_mapper/subject_set/entries_spec.rb +31 -0
  224. data/spec/unit/data_mapper/subject_set/get_spec.rb +34 -0
  225. data/spec/unit/data_mapper/subject_set/include_spec.rb +32 -0
  226. data/spec/unit/data_mapper/subject_set/named_spec.rb +33 -0
  227. data/spec/unit/data_mapper/subject_set/shared/append_spec.rb +18 -0
  228. data/spec/unit/data_mapper/subject_set/shared/clear_spec.rb +9 -0
  229. data/spec/unit/data_mapper/subject_set/shared/delete_spec.rb +9 -0
  230. data/spec/unit/data_mapper/subject_set/shared/each_spec.rb +9 -0
  231. data/spec/unit/data_mapper/subject_set/shared/empty_spec.rb +9 -0
  232. data/spec/unit/data_mapper/subject_set/shared/entries_spec.rb +9 -0
  233. data/spec/unit/data_mapper/subject_set/shared/get_spec.rb +9 -0
  234. data/spec/unit/data_mapper/subject_set/shared/include_spec.rb +9 -0
  235. data/spec/unit/data_mapper/subject_set/shared/named_spec.rb +9 -0
  236. data/spec/unit/data_mapper/subject_set/shared/size_spec.rb +13 -0
  237. data/spec/unit/data_mapper/subject_set/shared/to_ary_spec.rb +9 -0
  238. data/spec/unit/data_mapper/subject_set/shared/values_at_spec.rb +44 -0
  239. data/spec/unit/data_mapper/subject_set/size_spec.rb +42 -0
  240. data/spec/unit/data_mapper/subject_set/to_ary_spec.rb +34 -0
  241. data/spec/unit/data_mapper/subject_set/values_at_spec.rb +57 -0
  242. data/spec/unit/hash_spec.rb +28 -0
  243. data/spec/unit/hook_spec.rb +1235 -0
  244. data/spec/unit/inflections_spec.rb +16 -0
  245. data/spec/unit/lazy_array_spec.rb +1949 -0
  246. data/spec/unit/mash_spec.rb +312 -0
  247. data/spec/unit/module_spec.rb +71 -0
  248. data/spec/unit/object_spec.rb +38 -0
  249. data/spec/unit/try_dup_spec.rb +46 -0
  250. data/tasks/ci.rake +1 -0
  251. data/tasks/spec.rake +38 -0
  252. data/tasks/yard.rake +9 -0
  253. data/tasks/yardstick.rake +19 -0
  254. 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