sbf-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 (259) hide show
  1. checksums.yaml +7 -0
  2. data/.autotest +29 -0
  3. data/.document +5 -0
  4. data/.gitignore +44 -0
  5. data/.rspec +1 -0
  6. data/.rubocop.yml +468 -0
  7. data/.travis.yml +57 -0
  8. data/.yardopts +1 -0
  9. data/Gemfile +70 -0
  10. data/LICENSE +20 -0
  11. data/README.md +269 -0
  12. data/Rakefile +4 -0
  13. data/dm-core.gemspec +21 -0
  14. data/lib/dm-core/adapters/abstract_adapter.rb +233 -0
  15. data/lib/dm-core/adapters/in_memory_adapter.rb +110 -0
  16. data/lib/dm-core/adapters.rb +249 -0
  17. data/lib/dm-core/associations/many_to_many.rb +477 -0
  18. data/lib/dm-core/associations/many_to_one.rb +282 -0
  19. data/lib/dm-core/associations/one_to_many.rb +332 -0
  20. data/lib/dm-core/associations/one_to_one.rb +84 -0
  21. data/lib/dm-core/associations/relationship.rb +650 -0
  22. data/lib/dm-core/backwards.rb +11 -0
  23. data/lib/dm-core/collection.rb +1486 -0
  24. data/lib/dm-core/core_ext/kernel.rb +21 -0
  25. data/lib/dm-core/core_ext/pathname.rb +4 -0
  26. data/lib/dm-core/core_ext/symbol.rb +10 -0
  27. data/lib/dm-core/identity_map.rb +6 -0
  28. data/lib/dm-core/model/hook.rb +99 -0
  29. data/lib/dm-core/model/is.rb +30 -0
  30. data/lib/dm-core/model/property.rb +244 -0
  31. data/lib/dm-core/model/relationship.rb +366 -0
  32. data/lib/dm-core/model/scope.rb +87 -0
  33. data/lib/dm-core/model.rb +876 -0
  34. data/lib/dm-core/property/binary.rb +19 -0
  35. data/lib/dm-core/property/boolean.rb +35 -0
  36. data/lib/dm-core/property/class.rb +23 -0
  37. data/lib/dm-core/property/date.rb +45 -0
  38. data/lib/dm-core/property/date_time.rb +44 -0
  39. data/lib/dm-core/property/decimal.rb +47 -0
  40. data/lib/dm-core/property/discriminator.rb +40 -0
  41. data/lib/dm-core/property/float.rb +27 -0
  42. data/lib/dm-core/property/integer.rb +32 -0
  43. data/lib/dm-core/property/invalid_value_error.rb +17 -0
  44. data/lib/dm-core/property/lookup.rb +26 -0
  45. data/lib/dm-core/property/numeric.rb +35 -0
  46. data/lib/dm-core/property/object.rb +33 -0
  47. data/lib/dm-core/property/serial.rb +13 -0
  48. data/lib/dm-core/property/string.rb +47 -0
  49. data/lib/dm-core/property/text.rb +12 -0
  50. data/lib/dm-core/property/time.rb +46 -0
  51. data/lib/dm-core/property/typecast/numeric.rb +32 -0
  52. data/lib/dm-core/property/typecast/time.rb +33 -0
  53. data/lib/dm-core/property.rb +856 -0
  54. data/lib/dm-core/property_set.rb +177 -0
  55. data/lib/dm-core/query/conditions/comparison.rb +886 -0
  56. data/lib/dm-core/query/conditions/operation.rb +710 -0
  57. data/lib/dm-core/query/direction.rb +33 -0
  58. data/lib/dm-core/query/operator.rb +34 -0
  59. data/lib/dm-core/query/path.rb +113 -0
  60. data/lib/dm-core/query/sort.rb +38 -0
  61. data/lib/dm-core/query.rb +1352 -0
  62. data/lib/dm-core/relationship_set.rb +69 -0
  63. data/lib/dm-core/repository.rb +226 -0
  64. data/lib/dm-core/resource/persistence_state/clean.rb +36 -0
  65. data/lib/dm-core/resource/persistence_state/deleted.rb +26 -0
  66. data/lib/dm-core/resource/persistence_state/dirty.rb +91 -0
  67. data/lib/dm-core/resource/persistence_state/immutable.rb +32 -0
  68. data/lib/dm-core/resource/persistence_state/persisted.rb +25 -0
  69. data/lib/dm-core/resource/persistence_state/transient.rb +87 -0
  70. data/lib/dm-core/resource/persistence_state.rb +70 -0
  71. data/lib/dm-core/resource.rb +1220 -0
  72. data/lib/dm-core/spec/lib/adapter_helpers.rb +63 -0
  73. data/lib/dm-core/spec/lib/collection_helpers.rb +21 -0
  74. data/lib/dm-core/spec/lib/counter_adapter.rb +38 -0
  75. data/lib/dm-core/spec/lib/pending_helpers.rb +50 -0
  76. data/lib/dm-core/spec/lib/spec_helper.rb +74 -0
  77. data/lib/dm-core/spec/setup.rb +164 -0
  78. data/lib/dm-core/spec/shared/adapter_spec.rb +366 -0
  79. data/lib/dm-core/spec/shared/public/property_spec.rb +229 -0
  80. data/lib/dm-core/spec/shared/resource_spec.rb +1221 -0
  81. data/lib/dm-core/spec/shared/sel_spec.rb +111 -0
  82. data/lib/dm-core/spec/shared/semipublic/property_spec.rb +184 -0
  83. data/lib/dm-core/spec/shared/semipublic/query/conditions/abstract_comparison_spec.rb +261 -0
  84. data/lib/dm-core/support/assertions.rb +8 -0
  85. data/lib/dm-core/support/chainable.rb +18 -0
  86. data/lib/dm-core/support/deprecate.rb +12 -0
  87. data/lib/dm-core/support/descendant_set.rb +89 -0
  88. data/lib/dm-core/support/equalizer.rb +48 -0
  89. data/lib/dm-core/support/ext/array.rb +22 -0
  90. data/lib/dm-core/support/ext/blank.rb +25 -0
  91. data/lib/dm-core/support/ext/hash.rb +67 -0
  92. data/lib/dm-core/support/ext/module.rb +47 -0
  93. data/lib/dm-core/support/ext/object.rb +57 -0
  94. data/lib/dm-core/support/ext/string.rb +24 -0
  95. data/lib/dm-core/support/ext/try_dup.rb +12 -0
  96. data/lib/dm-core/support/hook.rb +388 -0
  97. data/lib/dm-core/support/inflections.rb +60 -0
  98. data/lib/dm-core/support/inflector/inflections.rb +211 -0
  99. data/lib/dm-core/support/inflector/methods.rb +151 -0
  100. data/lib/dm-core/support/lazy_array.rb +451 -0
  101. data/lib/dm-core/support/local_object_space.rb +13 -0
  102. data/lib/dm-core/support/logger.rb +201 -0
  103. data/lib/dm-core/support/mash.rb +176 -0
  104. data/lib/dm-core/support/naming_conventions.rb +109 -0
  105. data/lib/dm-core/support/ordered_set.rb +381 -0
  106. data/lib/dm-core/support/subject.rb +33 -0
  107. data/lib/dm-core/support/subject_set.rb +251 -0
  108. data/lib/dm-core/version.rb +3 -0
  109. data/lib/dm-core.rb +274 -0
  110. data/script/performance.rb +275 -0
  111. data/script/profile.rb +218 -0
  112. data/spec/lib/rspec_immediate_feedback_formatter.rb +54 -0
  113. data/spec/public/associations/many_to_many/read_multiple_join_spec.rb +69 -0
  114. data/spec/public/associations/many_to_many_spec.rb +197 -0
  115. data/spec/public/associations/many_to_one_spec.rb +83 -0
  116. data/spec/public/associations/many_to_one_with_boolean_cpk_spec.rb +40 -0
  117. data/spec/public/associations/many_to_one_with_custom_fk_spec.rb +49 -0
  118. data/spec/public/associations/one_to_many_spec.rb +81 -0
  119. data/spec/public/associations/one_to_one_spec.rb +176 -0
  120. data/spec/public/associations/one_to_one_with_boolean_cpk_spec.rb +46 -0
  121. data/spec/public/collection_spec.rb +69 -0
  122. data/spec/public/finalize_spec.rb +77 -0
  123. data/spec/public/model/hook_spec.rb +245 -0
  124. data/spec/public/model/property_spec.rb +91 -0
  125. data/spec/public/model/relationship_spec.rb +1040 -0
  126. data/spec/public/model_spec.rb +456 -0
  127. data/spec/public/property/binary_spec.rb +43 -0
  128. data/spec/public/property/boolean_spec.rb +21 -0
  129. data/spec/public/property/class_spec.rb +27 -0
  130. data/spec/public/property/date_spec.rb +21 -0
  131. data/spec/public/property/date_time_spec.rb +21 -0
  132. data/spec/public/property/decimal_spec.rb +23 -0
  133. data/spec/public/property/discriminator_spec.rb +134 -0
  134. data/spec/public/property/float_spec.rb +22 -0
  135. data/spec/public/property/integer_spec.rb +22 -0
  136. data/spec/public/property/object_spec.rb +117 -0
  137. data/spec/public/property/serial_spec.rb +22 -0
  138. data/spec/public/property/string_spec.rb +21 -0
  139. data/spec/public/property/text_spec.rb +62 -0
  140. data/spec/public/property/time_spec.rb +21 -0
  141. data/spec/public/property_spec.rb +333 -0
  142. data/spec/public/resource/state_spec.rb +72 -0
  143. data/spec/public/resource_spec.rb +289 -0
  144. data/spec/public/sel_spec.rb +53 -0
  145. data/spec/public/setup_spec.rb +145 -0
  146. data/spec/public/shared/association_collection_shared_spec.rb +309 -0
  147. data/spec/public/shared/collection_finder_shared_spec.rb +267 -0
  148. data/spec/public/shared/collection_shared_spec.rb +1637 -0
  149. data/spec/public/shared/finder_shared_spec.rb +1647 -0
  150. data/spec/semipublic/adapters/abstract_adapter_spec.rb +30 -0
  151. data/spec/semipublic/adapters/in_memory_adapter_spec.rb +13 -0
  152. data/spec/semipublic/associations/many_to_many_spec.rb +94 -0
  153. data/spec/semipublic/associations/many_to_one_spec.rb +63 -0
  154. data/spec/semipublic/associations/one_to_many_spec.rb +55 -0
  155. data/spec/semipublic/associations/one_to_one_spec.rb +53 -0
  156. data/spec/semipublic/associations/relationship_spec.rb +200 -0
  157. data/spec/semipublic/associations_spec.rb +177 -0
  158. data/spec/semipublic/collection_spec.rb +110 -0
  159. data/spec/semipublic/model_spec.rb +96 -0
  160. data/spec/semipublic/property/binary_spec.rb +13 -0
  161. data/spec/semipublic/property/boolean_spec.rb +47 -0
  162. data/spec/semipublic/property/class_spec.rb +33 -0
  163. data/spec/semipublic/property/date_spec.rb +43 -0
  164. data/spec/semipublic/property/date_time_spec.rb +46 -0
  165. data/spec/semipublic/property/decimal_spec.rb +83 -0
  166. data/spec/semipublic/property/discriminator_spec.rb +19 -0
  167. data/spec/semipublic/property/float_spec.rb +82 -0
  168. data/spec/semipublic/property/integer_spec.rb +82 -0
  169. data/spec/semipublic/property/lookup_spec.rb +29 -0
  170. data/spec/semipublic/property/serial_spec.rb +13 -0
  171. data/spec/semipublic/property/string_spec.rb +13 -0
  172. data/spec/semipublic/property/text_spec.rb +31 -0
  173. data/spec/semipublic/property/time_spec.rb +50 -0
  174. data/spec/semipublic/property_spec.rb +114 -0
  175. data/spec/semipublic/query/conditions/comparison_spec.rb +1502 -0
  176. data/spec/semipublic/query/conditions/operation_spec.rb +1296 -0
  177. data/spec/semipublic/query/path_spec.rb +471 -0
  178. data/spec/semipublic/query_spec.rb +3665 -0
  179. data/spec/semipublic/resource/state/clean_spec.rb +89 -0
  180. data/spec/semipublic/resource/state/deleted_spec.rb +79 -0
  181. data/spec/semipublic/resource/state/dirty_spec.rb +163 -0
  182. data/spec/semipublic/resource/state/immutable_spec.rb +107 -0
  183. data/spec/semipublic/resource/state/transient_spec.rb +163 -0
  184. data/spec/semipublic/resource/state_spec.rb +230 -0
  185. data/spec/semipublic/resource_spec.rb +23 -0
  186. data/spec/semipublic/shared/condition_shared_spec.rb +9 -0
  187. data/spec/semipublic/shared/resource_shared_spec.rb +198 -0
  188. data/spec/semipublic/shared/resource_state_shared_spec.rb +91 -0
  189. data/spec/semipublic/shared/subject_shared_spec.rb +79 -0
  190. data/spec/spec_helper.rb +34 -0
  191. data/spec/support/core_ext/hash.rb +10 -0
  192. data/spec/support/core_ext/inheritable_attributes.rb +46 -0
  193. data/spec/support/properties/huge_integer.rb +17 -0
  194. data/spec/unit/array_spec.rb +23 -0
  195. data/spec/unit/blank_spec.rb +73 -0
  196. data/spec/unit/data_mapper/ordered_set/append_spec.rb +26 -0
  197. data/spec/unit/data_mapper/ordered_set/clear_spec.rb +24 -0
  198. data/spec/unit/data_mapper/ordered_set/delete_spec.rb +28 -0
  199. data/spec/unit/data_mapper/ordered_set/each_spec.rb +19 -0
  200. data/spec/unit/data_mapper/ordered_set/empty_spec.rb +20 -0
  201. data/spec/unit/data_mapper/ordered_set/entries_spec.rb +22 -0
  202. data/spec/unit/data_mapper/ordered_set/eql_spec.rb +51 -0
  203. data/spec/unit/data_mapper/ordered_set/equal_value_spec.rb +84 -0
  204. data/spec/unit/data_mapper/ordered_set/hash_spec.rb +12 -0
  205. data/spec/unit/data_mapper/ordered_set/include_spec.rb +23 -0
  206. data/spec/unit/data_mapper/ordered_set/index_spec.rb +28 -0
  207. data/spec/unit/data_mapper/ordered_set/initialize_spec.rb +32 -0
  208. data/spec/unit/data_mapper/ordered_set/merge_spec.rb +36 -0
  209. data/spec/unit/data_mapper/ordered_set/shared/append_spec.rb +24 -0
  210. data/spec/unit/data_mapper/ordered_set/shared/clear_spec.rb +9 -0
  211. data/spec/unit/data_mapper/ordered_set/shared/delete_spec.rb +25 -0
  212. data/spec/unit/data_mapper/ordered_set/shared/each_spec.rb +17 -0
  213. data/spec/unit/data_mapper/ordered_set/shared/empty_spec.rb +9 -0
  214. data/spec/unit/data_mapper/ordered_set/shared/entries_spec.rb +9 -0
  215. data/spec/unit/data_mapper/ordered_set/shared/include_spec.rb +9 -0
  216. data/spec/unit/data_mapper/ordered_set/shared/index_spec.rb +13 -0
  217. data/spec/unit/data_mapper/ordered_set/shared/initialize_spec.rb +28 -0
  218. data/spec/unit/data_mapper/ordered_set/shared/merge_spec.rb +28 -0
  219. data/spec/unit/data_mapper/ordered_set/shared/size_spec.rb +13 -0
  220. data/spec/unit/data_mapper/ordered_set/shared/to_ary_spec.rb +11 -0
  221. data/spec/unit/data_mapper/ordered_set/size_spec.rb +27 -0
  222. data/spec/unit/data_mapper/ordered_set/to_ary_spec.rb +23 -0
  223. data/spec/unit/data_mapper/subject_set/append_spec.rb +47 -0
  224. data/spec/unit/data_mapper/subject_set/clear_spec.rb +34 -0
  225. data/spec/unit/data_mapper/subject_set/delete_spec.rb +40 -0
  226. data/spec/unit/data_mapper/subject_set/each_spec.rb +30 -0
  227. data/spec/unit/data_mapper/subject_set/empty_spec.rb +31 -0
  228. data/spec/unit/data_mapper/subject_set/entries_spec.rb +31 -0
  229. data/spec/unit/data_mapper/subject_set/get_spec.rb +34 -0
  230. data/spec/unit/data_mapper/subject_set/include_spec.rb +32 -0
  231. data/spec/unit/data_mapper/subject_set/named_spec.rb +33 -0
  232. data/spec/unit/data_mapper/subject_set/shared/append_spec.rb +18 -0
  233. data/spec/unit/data_mapper/subject_set/shared/clear_spec.rb +9 -0
  234. data/spec/unit/data_mapper/subject_set/shared/delete_spec.rb +9 -0
  235. data/spec/unit/data_mapper/subject_set/shared/each_spec.rb +9 -0
  236. data/spec/unit/data_mapper/subject_set/shared/empty_spec.rb +9 -0
  237. data/spec/unit/data_mapper/subject_set/shared/entries_spec.rb +9 -0
  238. data/spec/unit/data_mapper/subject_set/shared/get_spec.rb +9 -0
  239. data/spec/unit/data_mapper/subject_set/shared/include_spec.rb +9 -0
  240. data/spec/unit/data_mapper/subject_set/shared/named_spec.rb +9 -0
  241. data/spec/unit/data_mapper/subject_set/shared/size_spec.rb +13 -0
  242. data/spec/unit/data_mapper/subject_set/shared/to_ary_spec.rb +9 -0
  243. data/spec/unit/data_mapper/subject_set/shared/values_at_spec.rb +44 -0
  244. data/spec/unit/data_mapper/subject_set/size_spec.rb +42 -0
  245. data/spec/unit/data_mapper/subject_set/to_ary_spec.rb +34 -0
  246. data/spec/unit/data_mapper/subject_set/values_at_spec.rb +57 -0
  247. data/spec/unit/hash_spec.rb +27 -0
  248. data/spec/unit/hook_spec.rb +1216 -0
  249. data/spec/unit/inflections_spec.rb +14 -0
  250. data/spec/unit/lazy_array_spec.rb +1949 -0
  251. data/spec/unit/mash_spec.rb +289 -0
  252. data/spec/unit/module_spec.rb +70 -0
  253. data/spec/unit/object_spec.rb +38 -0
  254. data/spec/unit/try_dup_spec.rb +46 -0
  255. data/tasks/ci.rake +1 -0
  256. data/tasks/spec.rake +18 -0
  257. data/tasks/yard.rake +9 -0
  258. data/tasks/yardstick.rake +19 -0
  259. metadata +323 -0
@@ -0,0 +1,9 @@
1
+ require_relative '../../../../spec_helper'
2
+
3
+ shared_examples 'DataMapper::OrderedSet#entries with no entries' do
4
+ it { is_expected.to be_empty }
5
+ end
6
+
7
+ shared_examples 'DataMapper::OrderedSet#entries with entries' do
8
+ it { is_expected.to include(entry) }
9
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../../../../spec_helper'
2
+
3
+ shared_examples 'DataMapper::OrderedSet#include? when the entry is present' do
4
+ it { is_expected.to be(true) }
5
+ end
6
+
7
+ shared_examples 'DataMapper::OrderedSet#include? when the entry is not present' do
8
+ it { is_expected.to be(false) }
9
+ end
@@ -0,0 +1,13 @@
1
+ require_relative '../../../../spec_helper'
2
+
3
+ shared_examples 'DataMapper::OrderedSet#index when the entry is not present' do
4
+ it { is_expected.to be(nil) }
5
+ end
6
+
7
+ shared_examples 'DataMapper::OrderedSet#index when 1 entry is present' do
8
+ it { is_expected.to eq 0 }
9
+ end
10
+
11
+ shared_examples 'DataMapper::OrderedSet#index when 2 entries are present' do
12
+ it { is_expected.to eq 1 }
13
+ end
@@ -0,0 +1,28 @@
1
+ require_relative '../../../../spec_helper'
2
+
3
+ shared_examples 'DataMapper::OrderedSet#initialize when no entries are given' do
4
+ it { is_expected.to be_empty }
5
+
6
+ its(:entries) { is_expected.to be_empty }
7
+ its(:size) { is_expected.to eq 0 }
8
+ end
9
+
10
+ shared_examples 'DataMapper::OrderedSet#initialize when entries are given and they do not contain duplicates' do
11
+ it { is_expected.not_to be_empty }
12
+ it { is_expected.to include(entry1) }
13
+ it { is_expected.to include(entry2) }
14
+
15
+ its(:size) { is_expected.to eq 2 }
16
+
17
+ it 'retains insertion order' do
18
+ expect(subject.index(entry1)).to eq 0
19
+ expect(subject.index(entry2)).to eq 1
20
+ end
21
+ end
22
+
23
+ shared_examples 'DataMapper::OrderedSet#initialize when entries are given and they contain duplicates' do
24
+ it { is_expected.not_to be_empty }
25
+ it { is_expected.to include(entry1) }
26
+
27
+ its(:size) { is_expected.to eq 1 }
28
+ end
@@ -0,0 +1,28 @@
1
+ require_relative '../../../../spec_helper'
2
+
3
+ shared_examples 'DataMapper::OrderedSet#merge when merging two empty sets' do
4
+ it { is_expected.to be_instance_of(set.class) }
5
+ it { is_expected.to equal(set) }
6
+ it { is_expected.to eq set }
7
+ end
8
+
9
+ shared_examples 'DataMapper::OrderedSet#merge when merging a set with already present entries' do
10
+ it { is_expected.to equal(set) }
11
+ it { is_expected.to eq set }
12
+ it { is_expected.to 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 'DataMapper::OrderedSet#merge when merging a set with not yet present entries' do
20
+ it { is_expected.to equal(set) }
21
+ it { is_expected.not_to eq set }
22
+ it { is_expected.to include(entry1) }
23
+ it { is_expected.to 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_relative '../../../../spec_helper'
2
+
3
+ shared_examples 'DataMapper::OrderedSet#size when no entry is present' do
4
+ it { is_expected.to eq 0 }
5
+ end
6
+
7
+ shared_examples 'DataMapper::OrderedSet#size when 1 entry is present' do
8
+ it { is_expected.to eq 1 }
9
+ end
10
+
11
+ shared_examples 'DataMapper::OrderedSet#size when more than 1 entry is present' do
12
+ it { is_expected.to eq expected_size }
13
+ end
@@ -0,0 +1,11 @@
1
+ require_relative '../../../../spec_helper'
2
+
3
+ shared_examples 'DataMapper::OrderedSet#to_ary when no entries are present' do
4
+ it { is_expected.to be_empty }
5
+ it { is_expected.to eq entries }
6
+ end
7
+
8
+ shared_examples 'DataMapper::OrderedSet#to_ary when entries are present' do
9
+ it { is_expected.not_to be_empty }
10
+ it { is_expected.to eq entries }
11
+ end
@@ -0,0 +1,27 @@
1
+ require_relative '../../../spec_helper'
2
+ require 'dm-core/support/ordered_set'
3
+ require_relative '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_behaves_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_behaves_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_behaves_like 'DataMapper::OrderedSet#size when more than 1 entry is present'
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ require_relative '../../../spec_helper'
2
+ require 'dm-core/support/ordered_set'
3
+ require_relative '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_behaves_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_behaves_like 'DataMapper::OrderedSet#to_ary when entries are present'
22
+ end
23
+ end
@@ -0,0 +1,47 @@
1
+ require_relative '../../../spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require_relative '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_behaves_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_behaves_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_behaves_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_relative '../../../spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require_relative '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_behaves_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_behaves_like 'DataMapper::SubjectSet#clear when entries are present'
33
+ end
34
+ end
@@ -0,0 +1,40 @@
1
+ require_relative '../../../spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require_relative '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_behaves_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_behaves_like 'DataMapper::SubjectSet#delete when deleting a not yet included entry'
39
+ end
40
+ end
@@ -0,0 +1,30 @@
1
+ require_relative '../../../spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require_relative 'shared/each_spec'
4
+
5
+ describe 'DataMapper::SubjectSet' do
6
+ subject { DataMapper::SubjectSet.new }
7
+
8
+ it_behaves_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_behaves_like 'DataMapper::SubjectSet#each'
30
+ end
@@ -0,0 +1,31 @@
1
+ require_relative '../../../spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require_relative '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_behaves_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_behaves_like 'DataMapper::SubjectSet#empty? with entries in it'
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ require_relative '../../../spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require_relative '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_behaves_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_behaves_like 'DataMapper::SubjectSet#entries with entries'
30
+ end
31
+ end
@@ -0,0 +1,34 @@
1
+ require_relative '../../../spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require_relative '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_behaves_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_behaves_like 'DataMapper::SubjectSet#[] when the entry with the given name is present'
33
+ end
34
+ end
@@ -0,0 +1,32 @@
1
+ require_relative '../../../spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require_relative '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_behaves_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_behaves_like 'DataMapper::SubjectSet#include? when the entry is not present'
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ require_relative '../../../spec_helper'
2
+ require 'dm-core/support/subject_set'
3
+ require_relative 'shared/named_spec'
4
+
5
+ describe 'DataMapper::SubjectSet#named?' 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.named?(name) }
18
+
19
+ let(:entry) { Person.new(name) }
20
+ let(:name ) { 'Alice' }
21
+
22
+ context 'when no entry with the given name is present' do
23
+ let(:set) { DataMapper::SubjectSet.new([]) }
24
+
25
+ it_behaves_like 'DataMapper::SubjectSet#named? when no entry with the given name is present'
26
+ end
27
+
28
+ context 'when an entry with the given name is present' do
29
+ let(:set) { DataMapper::SubjectSet.new([ entry ]) }
30
+
31
+ it_behaves_like 'DataMapper::SubjectSet#named? when an entry with the given name is present'
32
+ end
33
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../../ordered_set/shared/append_spec'
2
+
3
+ shared_examples 'DataMapper::SubjectSet#<< when appending a not yet included entry' do
4
+ it_behaves_like 'DataMapper::OrderedSet#<< when appending a not yet included entry'
5
+ end
6
+
7
+ shared_examples 'DataMapper::SubjectSet#<< when updating an entry with the same cache key and the new entry is already included' do
8
+ it_behaves_like 'DataMapper::OrderedSet#<< when updating an already included entry'
9
+ end
10
+
11
+ shared_examples 'DataMapper::SubjectSet#<< when updating an entry with the same cache key and the new entry is not yet included' do
12
+ its(:entries) { is_expected.not_to include(entry1) }
13
+ its(:entries) { is_expected.to include(entry2) }
14
+
15
+ it 'inserts the new entry at the old position' do
16
+ subject.entries.index(entry2).is_expected.to eq @old_index
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../../ordered_set/shared/clear_spec'
2
+
3
+ shared_examples 'DataMapper::SubjectSet#clear when no entries are present' do
4
+ it_behaves_like 'DataMapper::OrderedSet#clear when no entries are present'
5
+ end
6
+
7
+ shared_examples 'DataMapper::SubjectSet#clear when entries are present' do
8
+ it_behaves_like 'DataMapper::OrderedSet#clear when entries are present'
9
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../../ordered_set/shared/delete_spec'
2
+
3
+ shared_examples 'DataMapper::SubjectSet#delete when deleting an already included entry' do
4
+ it_behaves_like 'DataMapper::OrderedSet#delete when deleting an already included entry'
5
+ end
6
+
7
+ shared_examples 'DataMapper::SubjectSet#delete when deleting a not yet included entry' do
8
+ it_behaves_like 'DataMapper::OrderedSet#delete when deleting a not yet included entry'
9
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../../ordered_set/shared/each_spec'
2
+
3
+ shared_examples 'DataMapper::SubjectSet' do
4
+ it_behaves_like 'DataMapper::OrderedSet'
5
+ end
6
+
7
+ shared_examples 'DataMapper::SubjectSet#each' do
8
+ it_behaves_like 'DataMapper::OrderedSet#each'
9
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../../ordered_set/shared/empty_spec'
2
+
3
+ shared_examples 'DataMapper::SubjectSet#empty? with no entries in it' do
4
+ it_behaves_like 'DataMapper::OrderedSet#empty? with no entries in it'
5
+ end
6
+
7
+ shared_examples 'DataMapper::SubjectSet#empty? with entries in it' do
8
+ it_behaves_like 'DataMapper::OrderedSet#empty? with entries in it'
9
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../../ordered_set/shared/entries_spec'
2
+
3
+ shared_examples 'DataMapper::SubjectSet#entries with no entries' do
4
+ it_behaves_like 'DataMapper::OrderedSet#entries with no entries'
5
+ end
6
+
7
+ shared_examples 'DataMapper::SubjectSet#entries with entries' do
8
+ it_behaves_like 'DataMapper::OrderedSet#entries with entries'
9
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../../../../spec_helper'
2
+
3
+ shared_examples 'DataMapper::SubjectSet#[] when the entry with the given name is not present' do
4
+ it { is_expected.to be_nil }
5
+ end
6
+
7
+ shared_examples 'DataMapper::SubjectSet#[] when the entry with the given name is present' do
8
+ it { is_expected.to eq entry }
9
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../../ordered_set/shared/include_spec'
2
+
3
+ shared_examples 'DataMapper::SubjectSet#include? when the entry is present' do
4
+ it_behaves_like 'DataMapper::OrderedSet#include? when the entry is present'
5
+ end
6
+
7
+ shared_examples 'DataMapper::SubjectSet#include? when the entry is not present' do
8
+ it_behaves_like 'DataMapper::OrderedSet#include? when the entry is not present'
9
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../../../../spec_helper'
2
+
3
+ shared_examples 'DataMapper::SubjectSet#named? when no entry with the given name is present' do
4
+ it { is_expected.to be(false) }
5
+ end
6
+
7
+ shared_examples 'DataMapper::SubjectSet#named? when an entry with the given name is present' do
8
+ it { is_expected.to be(true) }
9
+ end
@@ -0,0 +1,13 @@
1
+ require_relative '../../ordered_set/shared/size_spec'
2
+
3
+ shared_examples 'DataMapper::SubjectSet#size when no entry is present' do
4
+ it_behaves_like 'DataMapper::OrderedSet#size when no entry is present'
5
+ end
6
+
7
+ shared_examples 'DataMapper::SubjectSet#size when 1 entry is present' do
8
+ it_behaves_like 'DataMapper::OrderedSet#size when 1 entry is present'
9
+ end
10
+
11
+ shared_examples 'DataMapper::SubjectSet#size when more than 1 entry is present' do
12
+ it_behaves_like 'DataMapper::OrderedSet#size when more than 1 entry is present'
13
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../../ordered_set/shared/to_ary_spec'
2
+
3
+ shared_examples 'DataMapper::SubjectSet#to_ary when no entries are present' do
4
+ it_behaves_like 'DataMapper::OrderedSet#to_ary when no entries are present'
5
+ end
6
+
7
+ shared_examples 'DataMapper::SubjectSet#to_ary when entries are present' do
8
+ it_behaves_like 'DataMapper::OrderedSet#to_ary when entries are present'
9
+ end