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,9 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'DataMapper::OrderedSet#include? when the entry is present' do
4
+ it { should be(true) }
5
+ end
6
+
7
+ shared_examples_for 'DataMapper::OrderedSet#include? when the entry is not present' do
8
+ it { should be(false) }
9
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'DataMapper::OrderedSet#index when the entry is not present' do
4
+ it { should be(nil) }
5
+ end
6
+
7
+ shared_examples_for 'DataMapper::OrderedSet#index when 1 entry is present' do
8
+ it { should == 0 }
9
+ end
10
+
11
+ shared_examples_for 'DataMapper::OrderedSet#index when 2 entries are present' do
12
+ it { should == 1 }
13
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'DataMapper::OrderedSet#initialize when no entries are given' do
4
+ it { should be_empty }
5
+
6
+ its(:entries) { should be_empty }
7
+ its(:size) { should == 0 }
8
+ end
9
+
10
+ shared_examples_for 'DataMapper::OrderedSet#initialize when entries are given and they do not contain duplicates' do
11
+ it { should_not be_empty }
12
+ it { should include(entry1) }
13
+ it { should include(entry2) }
14
+
15
+ its(:size) { should == 2 }
16
+
17
+ it 'should retain insertion order' do
18
+ subject.index(entry1).should == 0
19
+ subject.index(entry2).should == 1
20
+ end
21
+ end
22
+
23
+ shared_examples_for 'DataMapper::OrderedSet#initialize when entries are given and they contain duplicates' do
24
+ it { should_not be_empty }
25
+ it { should include(entry1) }
26
+
27
+ its(:size) { should == 1 }
28
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'DataMapper::OrderedSet#merge when merging two empty sets' do
4
+ it { should be_instance_of(set.class) }
5
+ it { should equal(set) }
6
+ it { should == set }
7
+ end
8
+
9
+ shared_examples_for 'DataMapper::OrderedSet#merge when merging a set with already present entries' do
10
+ it { should equal(set) }
11
+ it { should == set }
12
+ it { should include(entry) }
13
+
14
+ it 'does not add an entry to the set' do
15
+ expect { subject }.to_not change { set.size }
16
+ end
17
+ end
18
+
19
+ shared_examples_for 'DataMapper::OrderedSet#merge when merging a set with not yet present entries' do
20
+ it { should equal(set) }
21
+ it { should != set }
22
+ it { should include(entry1) }
23
+ it { should include(entry2) }
24
+
25
+ it 'adds an entry to the set' do
26
+ expect { subject }.to change { set.size }.from(1).to(2)
27
+ end
28
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'DataMapper::OrderedSet#size when no entry is present' do
4
+ it { should == 0 }
5
+ end
6
+
7
+ shared_examples_for 'DataMapper::OrderedSet#size when 1 entry is present' do
8
+ it { should == 1 }
9
+ end
10
+
11
+ shared_examples_for 'DataMapper::OrderedSet#size when more than 1 entry is present' do
12
+ it { should == expected_size }
13
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'DataMapper::OrderedSet#to_ary when no entries are present' do
4
+ it { should be_empty }
5
+ it { should == entries }
6
+ end
7
+
8
+ shared_examples_for 'DataMapper::OrderedSet#to_ary when entries are present' do
9
+ it { should_not be_empty }
10
+ it { should == entries }
11
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+ require 'dm-core/support/ordered_set'
3
+ require 'unit/data_mapper/ordered_set/shared/size_spec'
4
+
5
+ describe 'DataMapper::OrderedSet#size' do
6
+ subject { ordered_set.size }
7
+
8
+ context 'when no entry is present' do
9
+ let(:ordered_set) { DataMapper::OrderedSet.new }
10
+
11
+ it_should_behave_like 'DataMapper::OrderedSet#size when no entry is present'
12
+ end
13
+
14
+ context 'when 1 entry is present' do
15
+ let(:ordered_set) { DataMapper::OrderedSet.new([ 1 ]) }
16
+
17
+ it_should_behave_like 'DataMapper::OrderedSet#size when 1 entry is present'
18
+ end
19
+
20
+ context 'when more than 1 entry is present' do
21
+ let(:ordered_set) { DataMapper::OrderedSet.new(entries) }
22
+ let(:entries) { [ 1, 2 ] }
23
+ let(:expected_size) { entries.size }
24
+
25
+ it_should_behave_like 'DataMapper::OrderedSet#size when more than 1 entry is present'
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+ require 'dm-core/support/ordered_set'
3
+ require 'unit/data_mapper/ordered_set/shared/to_ary_spec'
4
+
5
+ describe 'DataMapper::OrderedSet#to_ary' do
6
+ subject { ordered_set.to_ary }
7
+
8
+ let(:ordered_set) { DataMapper::OrderedSet.new(entries) }
9
+ let(:entry1) { 1 }
10
+ let(:entry2) { 2 }
11
+
12
+ context 'when no entries are present' do
13
+ let(:entries) { [] }
14
+
15
+ it_should_behave_like 'DataMapper::OrderedSet#to_ary when no entries are present'
16
+ end
17
+
18
+ context 'when entries are present' do
19
+ let(:entries) { [ entry1, entry2 ] }
20
+
21
+ it_should_behave_like 'DataMapper::OrderedSet#to_ary when entries are present'
22
+ end
23
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require 'unit/data_mapper/subject_set/shared/append_spec'
4
+
5
+ describe 'DataMapper::SubjectSet#<<' do
6
+ before :all do
7
+
8
+ class ::Person
9
+ attr_reader :name
10
+ attr_reader :hobby
11
+ def initialize(name, hobby)
12
+ @name = name
13
+ @hobby = hobby
14
+ end
15
+ end
16
+
17
+ end
18
+
19
+ before do
20
+ @old_size = set.size
21
+ @old_index = set.entries.index(entry1)
22
+ end
23
+
24
+ subject { set << entry2 }
25
+
26
+ let(:set) { DataMapper::SubjectSet.new([ entry1 ]) }
27
+ let(:entry1) { Person.new('snusnu', 'programming') }
28
+ let(:entry2) { Person.new('snusnu', 'tabletennis') }
29
+
30
+ context 'when appending a not yet included entry' do
31
+ let(:entry2) { Person.new('Alice', 'cryptography') }
32
+
33
+ it_should_behave_like 'DataMapper::SubjectSet#<< when appending a not yet included entry'
34
+ end
35
+
36
+ context 'when updating an entry with the same cache key' do
37
+ context 'and the new entry is already included' do
38
+ let(:entry2) { entry1 }
39
+
40
+ it_should_behave_like 'DataMapper::SubjectSet#<< when updating an entry with the same cache key and the new entry is already included'
41
+ end
42
+
43
+ context 'and the new entry is not yet included' do
44
+ it_should_behave_like 'DataMapper::SubjectSet#<< when updating an entry with the same cache key and the new entry is not yet included'
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require 'unit/data_mapper/subject_set/shared/clear_spec'
4
+
5
+ describe 'DataMapper::SubjectSet#clear' do
6
+ before :all do
7
+
8
+ class ::Person
9
+ attr_reader :name
10
+ def initialize(name)
11
+ @name = name
12
+ end
13
+ end
14
+
15
+ end
16
+
17
+ subject { set.clear }
18
+
19
+ let(:set) { DataMapper::SubjectSet.new(entries) }
20
+ let(:entry1) { Person.new('Alice') }
21
+ let(:entry2) { Person.new('Bob' ) }
22
+
23
+ context 'when no entries are present' do
24
+ let(:entries) { [] }
25
+
26
+ it_should_behave_like 'DataMapper::SubjectSet#clear when no entries are present'
27
+ end
28
+
29
+ context 'when entries are present' do
30
+ let(:entries) { [ entry1, entry2 ] }
31
+
32
+ it_should_behave_like 'DataMapper::SubjectSet#clear when entries are present'
33
+ end
34
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require 'unit/data_mapper/subject_set/shared/delete_spec'
4
+
5
+ describe 'DataMapper::SubjectSet#delete' do
6
+ before :all do
7
+
8
+ class ::Person
9
+ attr_reader :name
10
+ def initialize(name)
11
+ @name = name
12
+ end
13
+ end
14
+
15
+ end
16
+
17
+ subject { set }
18
+
19
+ let(:set) { DataMapper::SubjectSet.new([ entry1, entry2, entry3 ]) }
20
+ let(:ordered_set) { set.entries }
21
+ let(:entry1) { Person.new('Alice') }
22
+ let(:entry2) { Person.new('John' ) }
23
+ let(:entry3) { Person.new('Jane' ) }
24
+
25
+ before do
26
+ set.delete(entry)
27
+ end
28
+
29
+ context 'when deleting an already included entry' do
30
+ let(:entry) { entry1 }
31
+
32
+ it_should_behave_like 'DataMapper::SubjectSet#delete when deleting an already included entry'
33
+ end
34
+
35
+ context 'when deleting a not yet included entry' do
36
+ let(:entry) { Person.new('Bob') }
37
+
38
+ it_should_behave_like 'DataMapper::SubjectSet#delete when deleting a not yet included entry'
39
+ end
40
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require 'unit/data_mapper/subject_set/shared/each_spec'
4
+
5
+ describe 'DataMapper::SubjectSet' do
6
+ subject { DataMapper::SubjectSet.new }
7
+
8
+ it_should_behave_like 'DataMapper::SubjectSet'
9
+ end
10
+
11
+ describe 'DataMapper::SubjectSet#each' do
12
+ before :all do
13
+
14
+ class ::Person
15
+ attr_reader :name
16
+ def initialize(name)
17
+ @name = name
18
+ end
19
+ end
20
+
21
+ end
22
+
23
+ subject { set.each { |entry| yields << entry } }
24
+
25
+ let(:set) { DataMapper::SubjectSet.new([ entry ]) }
26
+ let(:entry) { Person.new('Alice') }
27
+ let(:yields) { [] }
28
+
29
+ it_should_behave_like 'DataMapper::SubjectSet#each'
30
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require 'unit/data_mapper/subject_set/shared/empty_spec'
4
+
5
+ describe 'DataMapper::SubjectSet#empty?' do
6
+ before :all do
7
+
8
+ class ::Person
9
+ attr_reader :name
10
+ def initialize(name)
11
+ @name = name
12
+ end
13
+ end
14
+
15
+ end
16
+
17
+ subject { set.empty? }
18
+
19
+ context 'with no entries in it' do
20
+ let(:set) { DataMapper::SubjectSet.new }
21
+
22
+ it_should_behave_like 'DataMapper::SubjectSet#empty? with no entries in it'
23
+ end
24
+
25
+ context 'with entries in it' do
26
+ let(:set) { DataMapper::SubjectSet.new([ entry ]) }
27
+ let(:entry) { Person.new('Alice') }
28
+
29
+ it_should_behave_like 'DataMapper::SubjectSet#empty? with entries in it'
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require 'unit/data_mapper/subject_set/shared/entries_spec'
4
+
5
+ describe 'DataMapper::SubjectSet#entries' do
6
+ before :all do
7
+
8
+ class ::Person
9
+ attr_reader :name
10
+ def initialize(name)
11
+ @name = name
12
+ end
13
+ end
14
+
15
+ end
16
+
17
+ subject { set.entries }
18
+
19
+ context 'with no entries' do
20
+ let(:set) { DataMapper::SubjectSet.new }
21
+
22
+ it_should_behave_like 'DataMapper::SubjectSet#entries with no entries'
23
+ end
24
+
25
+ context 'with entries' do
26
+ let(:set) { DataMapper::SubjectSet.new([ entry ]) }
27
+ let(:entry) { Person.new('Alice') }
28
+
29
+ it_should_behave_like 'DataMapper::SubjectSet#entries with entries'
30
+ end
31
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require 'unit/data_mapper/subject_set/shared/get_spec'
4
+
5
+ describe 'DataMapper::SubjectSet#[]' do
6
+ before :all do
7
+
8
+ class ::Person
9
+ attr_reader :name
10
+ def initialize(name)
11
+ @name = name
12
+ end
13
+ end
14
+
15
+ end
16
+
17
+ subject { set[name] }
18
+
19
+ let(:set ) { DataMapper::SubjectSet.new(entries) }
20
+ let(:entry) { Person.new(name) }
21
+ let(:name ) { 'Alice' }
22
+
23
+ context 'when the entry with the given name is not present' do
24
+ let(:entries) { [] }
25
+
26
+ it_should_behave_like 'DataMapper::SubjectSet#[] when the entry with the given name is not present'
27
+ end
28
+
29
+ context 'when the entry with the given name is present' do
30
+ let(:entries) { [ entry ] }
31
+
32
+ it_should_behave_like 'DataMapper::SubjectSet#[] when the entry with the given name is present'
33
+ end
34
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require 'unit/data_mapper/subject_set/shared/include_spec'
4
+
5
+ describe 'DataMapper::SubjectSet#include?' do
6
+ before :all do
7
+
8
+ class ::Person
9
+ attr_reader :name
10
+ def initialize(name)
11
+ @name = name
12
+ end
13
+ end
14
+
15
+ end
16
+
17
+ subject { set.include?(entry) }
18
+
19
+ let(:entry) { Person.new('Alice') }
20
+
21
+ context 'when the entry is present' do
22
+ let(:set) { DataMapper::SubjectSet.new([ entry ]) }
23
+
24
+ it_should_behave_like 'DataMapper::SubjectSet#include? when the entry is present'
25
+ end
26
+
27
+ context 'when the entry is not present' do
28
+ let(:set) { DataMapper::SubjectSet.new }
29
+
30
+ it_should_behave_like 'DataMapper::SubjectSet#include? when the entry is not present'
31
+ end
32
+ end