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,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe DataMapper::Property::Class do
4
+ before :all do
5
+ Object.send(:remove_const, :Foo) if defined?(Foo)
6
+ Object.send(:remove_const, :Bar) if defined?(Bar)
7
+
8
+ class ::Foo; end
9
+ class ::Bar; end
10
+
11
+ @name = :type
12
+ @type = described_class
13
+ @value = Foo
14
+ @other_value = Bar
15
+ @invalid_value = 1
16
+ end
17
+
18
+ it_should_behave_like 'A semipublic Property'
19
+
20
+ describe '#typecast' do
21
+ it 'returns same value if a class' do
22
+ @property.typecast(@model).should equal(@model)
23
+ end
24
+
25
+ it 'returns the class if found' do
26
+ @property.typecast(@model.name).should eql(@model)
27
+ end
28
+
29
+ it 'does not typecast non-class values' do
30
+ @property.typecast('NoClass').should eql('NoClass')
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe DataMapper::Property::Date do
4
+ before :all do
5
+ @name = :created_on
6
+ @type = described_class
7
+ @value = Date.today
8
+ @other_value = Date.today + 1
9
+ @invalid_value = 1
10
+ end
11
+
12
+ it_should_behave_like 'A semipublic Property'
13
+
14
+ describe '#typecast' do
15
+ describe 'and value given as a hash with keys like :year, :month, etc' do
16
+ it 'builds a Date instance from hash values' do
17
+ result = @property.typecast(
18
+ :year => '2007',
19
+ :month => '3',
20
+ :day => '25'
21
+ )
22
+
23
+ result.should be_kind_of(Date)
24
+ result.year.should eql(2007)
25
+ result.month.should eql(3)
26
+ result.day.should eql(25)
27
+ end
28
+ end
29
+
30
+ describe 'and value is a string' do
31
+ it 'parses the string' do
32
+ result = @property.typecast('Dec 20th, 2006')
33
+ result.month.should == 12
34
+ result.day.should == 20
35
+ result.year.should == 2006
36
+ end
37
+ end
38
+
39
+ it 'does not typecast non-date values' do
40
+ @property.typecast('not-date').should eql('not-date')
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe DataMapper::Property::DateTime do
4
+ before :all do
5
+ @name = :created_at
6
+ @type = described_class
7
+ @value = DateTime.now
8
+ @other_value = DateTime.now + 15
9
+ @invalid_value = 1
10
+ end
11
+
12
+ it_should_behave_like 'A semipublic Property'
13
+
14
+ describe '#typecast' do
15
+ describe 'and value given as a hash with keys like :year, :month, etc' do
16
+ it 'builds a DateTime instance from hash values' do
17
+ result = @property.typecast(
18
+ :year => '2006',
19
+ :month => '11',
20
+ :day => '23',
21
+ :hour => '12',
22
+ :min => '0',
23
+ :sec => '0'
24
+ )
25
+
26
+ result.should be_kind_of(DateTime)
27
+ result.year.should eql(2006)
28
+ result.month.should eql(11)
29
+ result.day.should eql(23)
30
+ result.hour.should eql(12)
31
+ result.min.should eql(0)
32
+ result.sec.should eql(0)
33
+ end
34
+ end
35
+
36
+ describe 'and value is a string' do
37
+ it 'parses the string' do
38
+ @property.typecast('Dec, 2006').month.should == 12
39
+ end
40
+ end
41
+
42
+ it 'does not typecast non-datetime values' do
43
+ @property.typecast('not-datetime').should eql('not-datetime')
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+
3
+ describe DataMapper::Property::Decimal do
4
+ before :all do
5
+ @name = :rate
6
+ @type = described_class
7
+ @options = { :precision => 5, :scale => 2 }
8
+ @value = BigDecimal('1.0')
9
+ @other_value = BigDecimal('2.0')
10
+ @invalid_value = true
11
+ end
12
+
13
+ it_should_behave_like 'A semipublic Property'
14
+
15
+ describe '#typecast' do
16
+ it 'returns same value if a decimal' do
17
+ @value = BigDecimal('24.0')
18
+ @property.typecast(@value).should equal(@value)
19
+ end
20
+
21
+ it 'returns decimal representation of a zero string integer' do
22
+ @property.typecast('0').should eql(BigDecimal('0.0'))
23
+ end
24
+
25
+ it 'returns decimal representation of a positive string integer' do
26
+ @property.typecast('24').should eql(BigDecimal('24.0'))
27
+ end
28
+
29
+ it 'returns decimal representation of a negative string integer' do
30
+ @property.typecast('-24').should eql(BigDecimal('-24.0'))
31
+ end
32
+
33
+ it 'returns decimal representation of a zero string float' do
34
+ @property.typecast('0.0').should eql(BigDecimal('0.0'))
35
+ end
36
+
37
+ it 'returns decimal representation of a positive string float' do
38
+ @property.typecast('24.35').should eql(BigDecimal('24.35'))
39
+ end
40
+
41
+ it 'returns decimal representation of a negative string float' do
42
+ @property.typecast('-24.35').should eql(BigDecimal('-24.35'))
43
+ end
44
+
45
+ it 'returns decimal representation of a zero string float, with no leading digits' do
46
+ @property.typecast('.0').should eql(BigDecimal('0.0'))
47
+ end
48
+
49
+ it 'returns decimal representation of a positive string float, with no leading digits' do
50
+ @property.typecast('.41').should eql(BigDecimal('0.41'))
51
+ end
52
+
53
+ it 'returns decimal representation of a zero integer' do
54
+ @property.typecast(0).should eql(BigDecimal('0.0'))
55
+ end
56
+
57
+ it 'returns decimal representation of a positive integer' do
58
+ @property.typecast(24).should eql(BigDecimal('24.0'))
59
+ end
60
+
61
+ it 'returns decimal representation of a negative integer' do
62
+ @property.typecast(-24).should eql(BigDecimal('-24.0'))
63
+ end
64
+
65
+ it 'returns decimal representation of a zero float' do
66
+ @property.typecast(0.0).should eql(BigDecimal('0.0'))
67
+ end
68
+
69
+ it 'returns decimal representation of a positive float' do
70
+ @property.typecast(24.35).should eql(BigDecimal('24.35'))
71
+ end
72
+
73
+ it 'returns decimal representation of a negative float' do
74
+ @property.typecast(-24.35).should eql(BigDecimal('-24.35'))
75
+ end
76
+
77
+ [ Object.new, true, '00.0', '0.', '-.0', 'string' ].each do |value|
78
+ it "does not typecast non-numeric value #{value.inspect}" do
79
+ @property.typecast(value).should equal(value)
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe DataMapper::Property::Discriminator do
4
+ before :all do
5
+ Object.send(:remove_const, :Foo) if defined?(Foo)
6
+ Object.send(:remove_const, :Bar) if defined?(Bar)
7
+
8
+ class ::Foo; end
9
+ class ::Bar; end
10
+
11
+ @name = :type
12
+ @type = described_class
13
+ @value = Foo
14
+ @other_value = Bar
15
+ @invalid_value = 1
16
+ end
17
+
18
+ it_should_behave_like 'A semipublic Property'
19
+ end
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+
3
+ describe DataMapper::Property::Float do
4
+ before :all do
5
+ @name = :rating
6
+ @type = described_class
7
+ @value = 0.1
8
+ @other_value = 0.2
9
+ @invalid_value = '1'
10
+ end
11
+
12
+ it_should_behave_like 'A semipublic Property'
13
+
14
+ describe '#typecast' do
15
+ it 'returns same value if a float' do
16
+ @value = 24.0
17
+ @property.typecast(@value).should equal(@value)
18
+ end
19
+
20
+ it 'returns float representation of a zero string integer' do
21
+ @property.typecast('0').should eql(0.0)
22
+ end
23
+
24
+ it 'returns float representation of a positive string integer' do
25
+ @property.typecast('24').should eql(24.0)
26
+ end
27
+
28
+ it 'returns float representation of a negative string integer' do
29
+ @property.typecast('-24').should eql(-24.0)
30
+ end
31
+
32
+ it 'returns float representation of a zero string float' do
33
+ @property.typecast('0.0').should eql(0.0)
34
+ end
35
+
36
+ it 'returns float representation of a positive string float' do
37
+ @property.typecast('24.35').should eql(24.35)
38
+ end
39
+
40
+ it 'returns float representation of a negative string float' do
41
+ @property.typecast('-24.35').should eql(-24.35)
42
+ end
43
+
44
+ it 'returns float representation of a zero string float, with no leading digits' do
45
+ @property.typecast('.0').should eql(0.0)
46
+ end
47
+
48
+ it 'returns float representation of a positive string float, with no leading digits' do
49
+ @property.typecast('.41').should eql(0.41)
50
+ end
51
+
52
+ it 'returns float representation of a zero integer' do
53
+ @property.typecast(0).should eql(0.0)
54
+ end
55
+
56
+ it 'returns float representation of a positive integer' do
57
+ @property.typecast(24).should eql(24.0)
58
+ end
59
+
60
+ it 'returns float representation of a negative integer' do
61
+ @property.typecast(-24).should eql(-24.0)
62
+ end
63
+
64
+ it 'returns float representation of a zero decimal' do
65
+ @property.typecast(BigDecimal('0.0')).should eql(0.0)
66
+ end
67
+
68
+ it 'returns float representation of a positive decimal' do
69
+ @property.typecast(BigDecimal('24.35')).should eql(24.35)
70
+ end
71
+
72
+ it 'returns float representation of a negative decimal' do
73
+ @property.typecast(BigDecimal('-24.35')).should eql(-24.35)
74
+ end
75
+
76
+ [ Object.new, true, '00.0', '0.', '-.0', 'string' ].each do |value|
77
+ it "does not typecast non-numeric value #{value.inspect}" do
78
+ @property.typecast(value).should equal(value)
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+
3
+ describe DataMapper::Property::Integer do
4
+ before :all do
5
+ @name = :age
6
+ @type = described_class
7
+ @value = 1
8
+ @other_value = 2
9
+ @invalid_value = '1'
10
+ end
11
+
12
+ it_should_behave_like 'A semipublic Property'
13
+
14
+ describe '#typecast' do
15
+ it 'returns same value if an integer' do
16
+ @value = 24
17
+ @property.typecast(@value).should equal(@value)
18
+ end
19
+
20
+ it 'returns integer representation of a zero string integer' do
21
+ @property.typecast('0').should eql(0)
22
+ end
23
+
24
+ it 'returns integer representation of a positive string integer' do
25
+ @property.typecast('24').should eql(24)
26
+ end
27
+
28
+ it 'returns integer representation of a negative string integer' do
29
+ @property.typecast('-24').should eql(-24)
30
+ end
31
+
32
+ it 'returns integer representation of a zero string float' do
33
+ @property.typecast('0.0').should eql(0)
34
+ end
35
+
36
+ it 'returns integer representation of a positive string float' do
37
+ @property.typecast('24.35').should eql(24)
38
+ end
39
+
40
+ it 'returns integer representation of a negative string float' do
41
+ @property.typecast('-24.35').should eql(-24)
42
+ end
43
+
44
+ it 'returns integer representation of a zero string float, with no leading digits' do
45
+ @property.typecast('.0').should eql(0)
46
+ end
47
+
48
+ it 'returns integer representation of a positive string float, with no leading digits' do
49
+ @property.typecast('.41').should eql(0)
50
+ end
51
+
52
+ it 'returns integer representation of a zero float' do
53
+ @property.typecast(0.0).should eql(0)
54
+ end
55
+
56
+ it 'returns integer representation of a positive float' do
57
+ @property.typecast(24.35).should eql(24)
58
+ end
59
+
60
+ it 'returns integer representation of a negative float' do
61
+ @property.typecast(-24.35).should eql(-24)
62
+ end
63
+
64
+ it 'returns integer representation of a zero decimal' do
65
+ @property.typecast(BigDecimal('0.0')).should eql(0)
66
+ end
67
+
68
+ it 'returns integer representation of a positive decimal' do
69
+ @property.typecast(BigDecimal('24.35')).should eql(24)
70
+ end
71
+
72
+ it 'returns integer representation of a negative decimal' do
73
+ @property.typecast(BigDecimal('-24.35')).should eql(-24)
74
+ end
75
+
76
+ [ Object.new, true, '00.0', '0.', '-.0', 'string' ].each do |value|
77
+ it "does not typecast non-numeric value #{value.inspect}" do
78
+ @property.typecast(value).should equal(value)
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'dm-core/property/lookup'
3
+
4
+ describe DataMapper::Property::Lookup do
5
+ supported_by :all do
6
+ before :all do
7
+ Object.send(:remove_const, :Foo) if defined?(Foo)
8
+ @klass = Class.new { extend DataMapper::Model }
9
+
10
+ module Foo
11
+ class OtherProperty < DataMapper::Property::String; end
12
+ end
13
+ end
14
+
15
+ it 'should provide access to Property classes' do
16
+ @klass::Serial.should == DataMapper::Property::Serial
17
+ end
18
+
19
+ it 'should provide access to Property classes from outside of the Property namespace' do
20
+ @klass::OtherProperty.should be(Foo::OtherProperty)
21
+ end
22
+
23
+ it 'should not provide access to unknown Property classes' do
24
+ lambda {
25
+ @klass::Bla
26
+ }.should raise_error(NameError)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe DataMapper::Property::Serial do
4
+ before :all do
5
+ @name = :id
6
+ @type = described_class
7
+ @value = 1
8
+ @other_value = 2
9
+ @invalid_value = 'foo'
10
+ end
11
+
12
+ it_should_behave_like 'A semipublic Property'
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe DataMapper::Property::String do
4
+ before :all do
5
+ @name = :name
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