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.
- checksums.yaml +7 -0
- data/.autotest +29 -0
- data/.document +5 -0
- data/.gitignore +44 -0
- data/.rspec +1 -0
- data/.rubocop.yml +468 -0
- data/.travis.yml +57 -0
- data/.yardopts +1 -0
- data/Gemfile +70 -0
- data/LICENSE +20 -0
- data/README.md +269 -0
- data/Rakefile +4 -0
- data/dm-core.gemspec +21 -0
- data/lib/dm-core/adapters/abstract_adapter.rb +233 -0
- data/lib/dm-core/adapters/in_memory_adapter.rb +110 -0
- data/lib/dm-core/adapters.rb +249 -0
- data/lib/dm-core/associations/many_to_many.rb +477 -0
- data/lib/dm-core/associations/many_to_one.rb +282 -0
- data/lib/dm-core/associations/one_to_many.rb +332 -0
- data/lib/dm-core/associations/one_to_one.rb +84 -0
- data/lib/dm-core/associations/relationship.rb +650 -0
- data/lib/dm-core/backwards.rb +11 -0
- data/lib/dm-core/collection.rb +1486 -0
- data/lib/dm-core/core_ext/kernel.rb +21 -0
- data/lib/dm-core/core_ext/pathname.rb +4 -0
- data/lib/dm-core/core_ext/symbol.rb +10 -0
- data/lib/dm-core/identity_map.rb +6 -0
- data/lib/dm-core/model/hook.rb +99 -0
- data/lib/dm-core/model/is.rb +30 -0
- data/lib/dm-core/model/property.rb +244 -0
- data/lib/dm-core/model/relationship.rb +366 -0
- data/lib/dm-core/model/scope.rb +87 -0
- data/lib/dm-core/model.rb +876 -0
- data/lib/dm-core/property/binary.rb +19 -0
- data/lib/dm-core/property/boolean.rb +35 -0
- data/lib/dm-core/property/class.rb +23 -0
- data/lib/dm-core/property/date.rb +45 -0
- data/lib/dm-core/property/date_time.rb +44 -0
- data/lib/dm-core/property/decimal.rb +47 -0
- data/lib/dm-core/property/discriminator.rb +40 -0
- data/lib/dm-core/property/float.rb +27 -0
- data/lib/dm-core/property/integer.rb +32 -0
- data/lib/dm-core/property/invalid_value_error.rb +17 -0
- data/lib/dm-core/property/lookup.rb +26 -0
- data/lib/dm-core/property/numeric.rb +35 -0
- data/lib/dm-core/property/object.rb +33 -0
- data/lib/dm-core/property/serial.rb +13 -0
- data/lib/dm-core/property/string.rb +47 -0
- data/lib/dm-core/property/text.rb +12 -0
- data/lib/dm-core/property/time.rb +46 -0
- data/lib/dm-core/property/typecast/numeric.rb +32 -0
- data/lib/dm-core/property/typecast/time.rb +33 -0
- data/lib/dm-core/property.rb +856 -0
- data/lib/dm-core/property_set.rb +177 -0
- data/lib/dm-core/query/conditions/comparison.rb +886 -0
- data/lib/dm-core/query/conditions/operation.rb +710 -0
- data/lib/dm-core/query/direction.rb +33 -0
- data/lib/dm-core/query/operator.rb +34 -0
- data/lib/dm-core/query/path.rb +113 -0
- data/lib/dm-core/query/sort.rb +38 -0
- data/lib/dm-core/query.rb +1352 -0
- data/lib/dm-core/relationship_set.rb +69 -0
- data/lib/dm-core/repository.rb +226 -0
- data/lib/dm-core/resource/persistence_state/clean.rb +36 -0
- data/lib/dm-core/resource/persistence_state/deleted.rb +26 -0
- data/lib/dm-core/resource/persistence_state/dirty.rb +91 -0
- data/lib/dm-core/resource/persistence_state/immutable.rb +32 -0
- data/lib/dm-core/resource/persistence_state/persisted.rb +25 -0
- data/lib/dm-core/resource/persistence_state/transient.rb +87 -0
- data/lib/dm-core/resource/persistence_state.rb +70 -0
- data/lib/dm-core/resource.rb +1220 -0
- data/lib/dm-core/spec/lib/adapter_helpers.rb +63 -0
- data/lib/dm-core/spec/lib/collection_helpers.rb +21 -0
- data/lib/dm-core/spec/lib/counter_adapter.rb +38 -0
- data/lib/dm-core/spec/lib/pending_helpers.rb +50 -0
- data/lib/dm-core/spec/lib/spec_helper.rb +74 -0
- data/lib/dm-core/spec/setup.rb +164 -0
- data/lib/dm-core/spec/shared/adapter_spec.rb +366 -0
- data/lib/dm-core/spec/shared/public/property_spec.rb +229 -0
- data/lib/dm-core/spec/shared/resource_spec.rb +1221 -0
- data/lib/dm-core/spec/shared/sel_spec.rb +111 -0
- data/lib/dm-core/spec/shared/semipublic/property_spec.rb +184 -0
- data/lib/dm-core/spec/shared/semipublic/query/conditions/abstract_comparison_spec.rb +261 -0
- data/lib/dm-core/support/assertions.rb +8 -0
- data/lib/dm-core/support/chainable.rb +18 -0
- data/lib/dm-core/support/deprecate.rb +12 -0
- data/lib/dm-core/support/descendant_set.rb +89 -0
- data/lib/dm-core/support/equalizer.rb +48 -0
- data/lib/dm-core/support/ext/array.rb +22 -0
- data/lib/dm-core/support/ext/blank.rb +25 -0
- data/lib/dm-core/support/ext/hash.rb +67 -0
- data/lib/dm-core/support/ext/module.rb +47 -0
- data/lib/dm-core/support/ext/object.rb +57 -0
- data/lib/dm-core/support/ext/string.rb +24 -0
- data/lib/dm-core/support/ext/try_dup.rb +12 -0
- data/lib/dm-core/support/hook.rb +388 -0
- data/lib/dm-core/support/inflections.rb +60 -0
- data/lib/dm-core/support/inflector/inflections.rb +211 -0
- data/lib/dm-core/support/inflector/methods.rb +151 -0
- data/lib/dm-core/support/lazy_array.rb +451 -0
- data/lib/dm-core/support/local_object_space.rb +13 -0
- data/lib/dm-core/support/logger.rb +201 -0
- data/lib/dm-core/support/mash.rb +176 -0
- data/lib/dm-core/support/naming_conventions.rb +109 -0
- data/lib/dm-core/support/ordered_set.rb +381 -0
- data/lib/dm-core/support/subject.rb +33 -0
- data/lib/dm-core/support/subject_set.rb +251 -0
- data/lib/dm-core/version.rb +3 -0
- data/lib/dm-core.rb +274 -0
- data/script/performance.rb +275 -0
- data/script/profile.rb +218 -0
- data/spec/lib/rspec_immediate_feedback_formatter.rb +54 -0
- data/spec/public/associations/many_to_many/read_multiple_join_spec.rb +69 -0
- data/spec/public/associations/many_to_many_spec.rb +197 -0
- data/spec/public/associations/many_to_one_spec.rb +83 -0
- data/spec/public/associations/many_to_one_with_boolean_cpk_spec.rb +40 -0
- data/spec/public/associations/many_to_one_with_custom_fk_spec.rb +49 -0
- data/spec/public/associations/one_to_many_spec.rb +81 -0
- data/spec/public/associations/one_to_one_spec.rb +176 -0
- data/spec/public/associations/one_to_one_with_boolean_cpk_spec.rb +46 -0
- data/spec/public/collection_spec.rb +69 -0
- data/spec/public/finalize_spec.rb +77 -0
- data/spec/public/model/hook_spec.rb +245 -0
- data/spec/public/model/property_spec.rb +91 -0
- data/spec/public/model/relationship_spec.rb +1040 -0
- data/spec/public/model_spec.rb +456 -0
- data/spec/public/property/binary_spec.rb +43 -0
- data/spec/public/property/boolean_spec.rb +21 -0
- data/spec/public/property/class_spec.rb +27 -0
- data/spec/public/property/date_spec.rb +21 -0
- data/spec/public/property/date_time_spec.rb +21 -0
- data/spec/public/property/decimal_spec.rb +23 -0
- data/spec/public/property/discriminator_spec.rb +134 -0
- data/spec/public/property/float_spec.rb +22 -0
- data/spec/public/property/integer_spec.rb +22 -0
- data/spec/public/property/object_spec.rb +117 -0
- data/spec/public/property/serial_spec.rb +22 -0
- data/spec/public/property/string_spec.rb +21 -0
- data/spec/public/property/text_spec.rb +62 -0
- data/spec/public/property/time_spec.rb +21 -0
- data/spec/public/property_spec.rb +333 -0
- data/spec/public/resource/state_spec.rb +72 -0
- data/spec/public/resource_spec.rb +289 -0
- data/spec/public/sel_spec.rb +53 -0
- data/spec/public/setup_spec.rb +145 -0
- data/spec/public/shared/association_collection_shared_spec.rb +309 -0
- data/spec/public/shared/collection_finder_shared_spec.rb +267 -0
- data/spec/public/shared/collection_shared_spec.rb +1637 -0
- data/spec/public/shared/finder_shared_spec.rb +1647 -0
- data/spec/semipublic/adapters/abstract_adapter_spec.rb +30 -0
- data/spec/semipublic/adapters/in_memory_adapter_spec.rb +13 -0
- data/spec/semipublic/associations/many_to_many_spec.rb +94 -0
- data/spec/semipublic/associations/many_to_one_spec.rb +63 -0
- data/spec/semipublic/associations/one_to_many_spec.rb +55 -0
- data/spec/semipublic/associations/one_to_one_spec.rb +53 -0
- data/spec/semipublic/associations/relationship_spec.rb +200 -0
- data/spec/semipublic/associations_spec.rb +177 -0
- data/spec/semipublic/collection_spec.rb +110 -0
- data/spec/semipublic/model_spec.rb +96 -0
- data/spec/semipublic/property/binary_spec.rb +13 -0
- data/spec/semipublic/property/boolean_spec.rb +47 -0
- data/spec/semipublic/property/class_spec.rb +33 -0
- data/spec/semipublic/property/date_spec.rb +43 -0
- data/spec/semipublic/property/date_time_spec.rb +46 -0
- data/spec/semipublic/property/decimal_spec.rb +83 -0
- data/spec/semipublic/property/discriminator_spec.rb +19 -0
- data/spec/semipublic/property/float_spec.rb +82 -0
- data/spec/semipublic/property/integer_spec.rb +82 -0
- data/spec/semipublic/property/lookup_spec.rb +29 -0
- data/spec/semipublic/property/serial_spec.rb +13 -0
- data/spec/semipublic/property/string_spec.rb +13 -0
- data/spec/semipublic/property/text_spec.rb +31 -0
- data/spec/semipublic/property/time_spec.rb +50 -0
- data/spec/semipublic/property_spec.rb +114 -0
- data/spec/semipublic/query/conditions/comparison_spec.rb +1502 -0
- data/spec/semipublic/query/conditions/operation_spec.rb +1296 -0
- data/spec/semipublic/query/path_spec.rb +471 -0
- data/spec/semipublic/query_spec.rb +3665 -0
- data/spec/semipublic/resource/state/clean_spec.rb +89 -0
- data/spec/semipublic/resource/state/deleted_spec.rb +79 -0
- data/spec/semipublic/resource/state/dirty_spec.rb +163 -0
- data/spec/semipublic/resource/state/immutable_spec.rb +107 -0
- data/spec/semipublic/resource/state/transient_spec.rb +163 -0
- data/spec/semipublic/resource/state_spec.rb +230 -0
- data/spec/semipublic/resource_spec.rb +23 -0
- data/spec/semipublic/shared/condition_shared_spec.rb +9 -0
- data/spec/semipublic/shared/resource_shared_spec.rb +198 -0
- data/spec/semipublic/shared/resource_state_shared_spec.rb +91 -0
- data/spec/semipublic/shared/subject_shared_spec.rb +79 -0
- data/spec/spec_helper.rb +34 -0
- data/spec/support/core_ext/hash.rb +10 -0
- data/spec/support/core_ext/inheritable_attributes.rb +46 -0
- data/spec/support/properties/huge_integer.rb +17 -0
- data/spec/unit/array_spec.rb +23 -0
- data/spec/unit/blank_spec.rb +73 -0
- data/spec/unit/data_mapper/ordered_set/append_spec.rb +26 -0
- data/spec/unit/data_mapper/ordered_set/clear_spec.rb +24 -0
- data/spec/unit/data_mapper/ordered_set/delete_spec.rb +28 -0
- data/spec/unit/data_mapper/ordered_set/each_spec.rb +19 -0
- data/spec/unit/data_mapper/ordered_set/empty_spec.rb +20 -0
- data/spec/unit/data_mapper/ordered_set/entries_spec.rb +22 -0
- data/spec/unit/data_mapper/ordered_set/eql_spec.rb +51 -0
- data/spec/unit/data_mapper/ordered_set/equal_value_spec.rb +84 -0
- data/spec/unit/data_mapper/ordered_set/hash_spec.rb +12 -0
- data/spec/unit/data_mapper/ordered_set/include_spec.rb +23 -0
- data/spec/unit/data_mapper/ordered_set/index_spec.rb +28 -0
- data/spec/unit/data_mapper/ordered_set/initialize_spec.rb +32 -0
- data/spec/unit/data_mapper/ordered_set/merge_spec.rb +36 -0
- data/spec/unit/data_mapper/ordered_set/shared/append_spec.rb +24 -0
- data/spec/unit/data_mapper/ordered_set/shared/clear_spec.rb +9 -0
- data/spec/unit/data_mapper/ordered_set/shared/delete_spec.rb +25 -0
- data/spec/unit/data_mapper/ordered_set/shared/each_spec.rb +17 -0
- data/spec/unit/data_mapper/ordered_set/shared/empty_spec.rb +9 -0
- data/spec/unit/data_mapper/ordered_set/shared/entries_spec.rb +9 -0
- data/spec/unit/data_mapper/ordered_set/shared/include_spec.rb +9 -0
- data/spec/unit/data_mapper/ordered_set/shared/index_spec.rb +13 -0
- data/spec/unit/data_mapper/ordered_set/shared/initialize_spec.rb +28 -0
- data/spec/unit/data_mapper/ordered_set/shared/merge_spec.rb +28 -0
- data/spec/unit/data_mapper/ordered_set/shared/size_spec.rb +13 -0
- data/spec/unit/data_mapper/ordered_set/shared/to_ary_spec.rb +11 -0
- data/spec/unit/data_mapper/ordered_set/size_spec.rb +27 -0
- data/spec/unit/data_mapper/ordered_set/to_ary_spec.rb +23 -0
- data/spec/unit/data_mapper/subject_set/append_spec.rb +47 -0
- data/spec/unit/data_mapper/subject_set/clear_spec.rb +34 -0
- data/spec/unit/data_mapper/subject_set/delete_spec.rb +40 -0
- data/spec/unit/data_mapper/subject_set/each_spec.rb +30 -0
- data/spec/unit/data_mapper/subject_set/empty_spec.rb +31 -0
- data/spec/unit/data_mapper/subject_set/entries_spec.rb +31 -0
- data/spec/unit/data_mapper/subject_set/get_spec.rb +34 -0
- data/spec/unit/data_mapper/subject_set/include_spec.rb +32 -0
- data/spec/unit/data_mapper/subject_set/named_spec.rb +33 -0
- data/spec/unit/data_mapper/subject_set/shared/append_spec.rb +18 -0
- data/spec/unit/data_mapper/subject_set/shared/clear_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/delete_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/each_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/empty_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/entries_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/get_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/include_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/named_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/size_spec.rb +13 -0
- data/spec/unit/data_mapper/subject_set/shared/to_ary_spec.rb +9 -0
- data/spec/unit/data_mapper/subject_set/shared/values_at_spec.rb +44 -0
- data/spec/unit/data_mapper/subject_set/size_spec.rb +42 -0
- data/spec/unit/data_mapper/subject_set/to_ary_spec.rb +34 -0
- data/spec/unit/data_mapper/subject_set/values_at_spec.rb +57 -0
- data/spec/unit/hash_spec.rb +27 -0
- data/spec/unit/hook_spec.rb +1216 -0
- data/spec/unit/inflections_spec.rb +14 -0
- data/spec/unit/lazy_array_spec.rb +1949 -0
- data/spec/unit/mash_spec.rb +289 -0
- data/spec/unit/module_spec.rb +70 -0
- data/spec/unit/object_spec.rb +38 -0
- data/spec/unit/try_dup_spec.rb +46 -0
- data/tasks/ci.rake +1 -0
- data/tasks/spec.rake +18 -0
- data/tasks/yard.rake +9 -0
- data/tasks/yardstick.rake +19 -0
- metadata +323 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
require_relative '../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 { expect(DataMapper::Collection).to 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 'returns a Collection' do
|
|
46
|
+
expect(@return).to be_kind_of(DataMapper::Collection)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'is loaded' do
|
|
50
|
+
expect(@return).to be_loaded
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'contains the article' do
|
|
54
|
+
expect(@collection).to eq [ @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 'returns a Collection' do
|
|
64
|
+
expect(@return).to be_kind_of(DataMapper::Collection)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'is not loaded' do
|
|
68
|
+
expect(@return).not_to be_loaded
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'contains the article' do
|
|
72
|
+
expect(@collection).to eq [ @article ]
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it { expect(@articles).to respond_to(:query) }
|
|
78
|
+
|
|
79
|
+
describe '#query' do
|
|
80
|
+
before :all do
|
|
81
|
+
@return = @articles.query
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'returns a Query' do
|
|
85
|
+
expect(@return).to be_kind_of(DataMapper::Query)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it 'returns expected Query' do
|
|
89
|
+
expect(@return).to eql(@articles_query)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it { expect(@articles).to respond_to(:repository) }
|
|
94
|
+
|
|
95
|
+
describe '#repository' do
|
|
96
|
+
before :all do
|
|
97
|
+
@return = @repository = @articles.repository
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it 'returns a Repository' do
|
|
101
|
+
expect(@return).to be_kind_of(DataMapper::Repository)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it 'is expected Repository' do
|
|
105
|
+
expect(@repository).to eq @article_repository
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
require_relative '../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DataMapper::Model do
|
|
4
|
+
|
|
5
|
+
it { is_expected.to 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 'responds to :new_method' do
|
|
24
|
+
expect(User.new).to 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 'responds to :new_method' do
|
|
42
|
+
expect(User.new).to 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 { is_expected.to 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 'responds to :new_method' do
|
|
70
|
+
expect(User).to 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 'responds to :new_method' do
|
|
88
|
+
expect(User).to 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_relative '../../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_behaves_like 'A semipublic Property'
|
|
13
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require_relative '../../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_behaves_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
|
+
expect(@property.valid?(value)).to 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
|
+
expect(@property.valid?(value)).to be(false)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe '#typecast_to_primitive' do
|
|
29
|
+
[ true, 'true', 'TRUE', '1', 1, 't', 'T' ].each do |value|
|
|
30
|
+
it "returns true when value is #{value.inspect}" do
|
|
31
|
+
expect(@property.typecast(value)).to 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
|
+
expect(@property.typecast(value)).to 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
|
+
expect(@property.typecast(value)).to equal(value)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require_relative '../../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_behaves_like 'A semipublic Property'
|
|
19
|
+
|
|
20
|
+
describe '#typecast_to_primitive' do
|
|
21
|
+
it 'returns same value if a class' do
|
|
22
|
+
expect(@property.typecast(@model)).to equal(@model)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'returns the class if found' do
|
|
26
|
+
expect(@property.typecast(@model.name)).to eql(@model)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'does not typecast non-class values' do
|
|
30
|
+
expect(@property.typecast('NoClass')).to eql('NoClass')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require_relative '../../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_behaves_like 'A semipublic Property'
|
|
13
|
+
|
|
14
|
+
describe '#typecast_to_primitive' 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
|
+
expect(result).to be_kind_of(Date)
|
|
24
|
+
expect(result.year).to eql(2007)
|
|
25
|
+
expect(result.month).to eql(3)
|
|
26
|
+
expect(result.day).to 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
|
+
expect(result.month).to eq 12
|
|
34
|
+
expect(result.day).to eq 20
|
|
35
|
+
expect(result.year).to eq 2006
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'does not typecast non-date values' do
|
|
40
|
+
expect(@property.typecast('not-date')).to eql('not-date')
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require_relative '../../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_behaves_like 'A semipublic Property'
|
|
13
|
+
|
|
14
|
+
describe '#typecast_to_primitive' 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
|
+
expect(result).to be_kind_of(DateTime)
|
|
27
|
+
expect(result.year).to eql(2006)
|
|
28
|
+
expect(result.month).to eql(11)
|
|
29
|
+
expect(result.day).to eql(23)
|
|
30
|
+
expect(result.hour).to eql(12)
|
|
31
|
+
expect(result.min).to eql(0)
|
|
32
|
+
expect(result.sec).to eql(0)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe 'and value is a string' do
|
|
37
|
+
it 'parses the string' do
|
|
38
|
+
expect(@property.typecast('Dec, 2006').month).to eq 12
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'does not typecast non-datetime values' do
|
|
43
|
+
expect(@property.typecast('not-datetime')).to eql('not-datetime')
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
require_relative '../../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_behaves_like 'A semipublic Property'
|
|
14
|
+
|
|
15
|
+
describe '#typecast_to_primitive' do
|
|
16
|
+
it 'returns same value if a decimal' do
|
|
17
|
+
@value = BigDecimal('24.0')
|
|
18
|
+
expect(@property.typecast(@value)).to equal(@value)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'returns decimal representation of a zero string integer' do
|
|
22
|
+
expect(@property.typecast('0')).to eql(BigDecimal('0.0'))
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'returns decimal representation of a positive string integer' do
|
|
26
|
+
expect(@property.typecast('24')).to eql(BigDecimal('24.0'))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'returns decimal representation of a negative string integer' do
|
|
30
|
+
expect(@property.typecast('-24')).to eql(BigDecimal('-24.0'))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'returns decimal representation of a zero string float' do
|
|
34
|
+
expect(@property.typecast('0.0')).to eql(BigDecimal('0.0'))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'returns decimal representation of a positive string float' do
|
|
38
|
+
expect(@property.typecast('24.35')).to eql(BigDecimal('24.35'))
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'returns decimal representation of a negative string float' do
|
|
42
|
+
expect(@property.typecast('-24.35')).to eql(BigDecimal('-24.35'))
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'returns decimal representation of a zero string float, with no leading digits' do
|
|
46
|
+
expect(@property.typecast('.0')).to eql(BigDecimal('0.0'))
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'returns decimal representation of a positive string float, with no leading digits' do
|
|
50
|
+
expect(@property.typecast('.41')).to eql(BigDecimal('0.41'))
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'returns decimal representation of a zero integer' do
|
|
54
|
+
expect(@property.typecast(0)).to eql(BigDecimal('0.0'))
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'returns decimal representation of a positive integer' do
|
|
58
|
+
expect(@property.typecast(24)).to eql(BigDecimal('24.0'))
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'returns decimal representation of a negative integer' do
|
|
62
|
+
expect(@property.typecast(-24)).to eql(BigDecimal('-24.0'))
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'returns decimal representation of a zero float' do
|
|
66
|
+
expect(@property.typecast(0.0)).to eql(BigDecimal('0.0'))
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'returns decimal representation of a positive float' do
|
|
70
|
+
expect(@property.typecast(24.35)).to eql(BigDecimal('24.35'))
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'returns decimal representation of a negative float' do
|
|
74
|
+
expect(@property.typecast(-24.35)).to 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
|
+
expect(@property.typecast(value)).to equal(value)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require_relative '../../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_behaves_like 'A semipublic Property'
|
|
19
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require_relative '../../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_behaves_like 'A semipublic Property'
|
|
13
|
+
|
|
14
|
+
describe '#typecast_to_primitive' do
|
|
15
|
+
it 'returns same value if a float' do
|
|
16
|
+
@value = 24.0
|
|
17
|
+
expect(@property.typecast(@value)).to equal(@value)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'returns float representation of a zero string integer' do
|
|
21
|
+
expect(@property.typecast('0')).to eql(0.0)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'returns float representation of a positive string integer' do
|
|
25
|
+
expect(@property.typecast('24')).to eql(24.0)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'returns float representation of a negative string integer' do
|
|
29
|
+
expect(@property.typecast('-24')).to eql(-24.0)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'returns float representation of a zero string float' do
|
|
33
|
+
expect(@property.typecast('0.0')).to eql(0.0)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'returns float representation of a positive string float' do
|
|
37
|
+
expect(@property.typecast('24.35')).to eql(24.35)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'returns float representation of a negative string float' do
|
|
41
|
+
expect(@property.typecast('-24.35')).to eql(-24.35)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'returns float representation of a zero string float, with no leading digits' do
|
|
45
|
+
expect(@property.typecast('.0')).to eql(0.0)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'returns float representation of a positive string float, with no leading digits' do
|
|
49
|
+
expect(@property.typecast('.41')).to eql(0.41)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'returns float representation of a zero integer' do
|
|
53
|
+
expect(@property.typecast(0)).to eql(0.0)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'returns float representation of a positive integer' do
|
|
57
|
+
expect(@property.typecast(24)).to eql(24.0)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'returns float representation of a negative integer' do
|
|
61
|
+
expect(@property.typecast(-24)).to eql(-24.0)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'returns float representation of a zero decimal' do
|
|
65
|
+
expect(@property.typecast(BigDecimal('0.0'))).to eql(0.0)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'returns float representation of a positive decimal' do
|
|
69
|
+
expect(@property.typecast(BigDecimal('24.35'))).to eql(24.35)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'returns float representation of a negative decimal' do
|
|
73
|
+
expect(@property.typecast(BigDecimal('-24.35'))).to 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
|
+
expect(@property.typecast(value)).to equal(value)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require_relative '../../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_behaves_like 'A semipublic Property'
|
|
13
|
+
|
|
14
|
+
describe '#typecast_to_primitive' do
|
|
15
|
+
it 'returns same value if an integer' do
|
|
16
|
+
@value = 24
|
|
17
|
+
expect(@property.typecast(@value)).to equal(@value)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'returns integer representation of a zero string integer' do
|
|
21
|
+
expect(@property.typecast('0')).to eql(0)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'returns integer representation of a positive string integer' do
|
|
25
|
+
expect(@property.typecast('24')).to eql(24)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'returns integer representation of a negative string integer' do
|
|
29
|
+
expect(@property.typecast('-24')).to eql(-24)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'returns integer representation of a zero string float' do
|
|
33
|
+
expect(@property.typecast('0.0')).to eql(0)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'returns integer representation of a positive string float' do
|
|
37
|
+
expect(@property.typecast('24.35')).to eql(24)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'returns integer representation of a negative string float' do
|
|
41
|
+
expect(@property.typecast('-24.35')).to eql(-24)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'returns integer representation of a zero string float, with no leading digits' do
|
|
45
|
+
expect(@property.typecast('.0')).to eql(0)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'returns integer representation of a positive string float, with no leading digits' do
|
|
49
|
+
expect(@property.typecast('.41')).to eql(0)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'returns integer representation of a zero float' do
|
|
53
|
+
expect(@property.typecast(0.0)).to eql(0)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'returns integer representation of a positive float' do
|
|
57
|
+
expect(@property.typecast(24.35)).to eql(24)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'returns integer representation of a negative float' do
|
|
61
|
+
expect(@property.typecast(-24.35)).to eql(-24)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'returns integer representation of a zero decimal' do
|
|
65
|
+
expect(@property.typecast(BigDecimal('0.0'))).to eql(0)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'returns integer representation of a positive decimal' do
|
|
69
|
+
expect(@property.typecast(BigDecimal('24.35'))).to eql(24)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'returns integer representation of a negative decimal' do
|
|
73
|
+
expect(@property.typecast(BigDecimal('-24.35'))).to 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
|
+
expect(@property.typecast(value)).equal(value)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require_relative '../../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 'provides access to Property classes' do
|
|
16
|
+
expect(@klass::Serial).to eq DataMapper::Property::Serial
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'provides access to Property classes from outside of the Property namespace' do
|
|
20
|
+
expect(@klass::OtherProperty).to be(Foo::OtherProperty)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'does not provide access to unknown Property classes' do
|
|
24
|
+
expect {
|
|
25
|
+
@klass::Bla
|
|
26
|
+
}.to raise_error(NameError)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|