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.
- data/.autotest +29 -0
- data/.document +5 -0
- data/.gitignore +35 -0
- data/.yardopts +1 -0
- data/Gemfile +65 -0
- data/LICENSE +20 -0
- data/README.md +269 -0
- data/Rakefile +4 -0
- data/dm-core.gemspec +24 -0
- data/lib/dm-core.rb +292 -0
- data/lib/dm-core/adapters.rb +222 -0
- data/lib/dm-core/adapters/abstract_adapter.rb +237 -0
- data/lib/dm-core/adapters/in_memory_adapter.rb +113 -0
- data/lib/dm-core/associations/many_to_many.rb +499 -0
- data/lib/dm-core/associations/many_to_one.rb +290 -0
- data/lib/dm-core/associations/one_to_many.rb +348 -0
- data/lib/dm-core/associations/one_to_one.rb +86 -0
- data/lib/dm-core/associations/relationship.rb +663 -0
- data/lib/dm-core/backwards.rb +13 -0
- data/lib/dm-core/collection.rb +1515 -0
- data/lib/dm-core/core_ext/kernel.rb +23 -0
- data/lib/dm-core/core_ext/pathname.rb +6 -0
- data/lib/dm-core/core_ext/symbol.rb +10 -0
- data/lib/dm-core/identity_map.rb +7 -0
- data/lib/dm-core/model.rb +874 -0
- data/lib/dm-core/model/hook.rb +103 -0
- data/lib/dm-core/model/is.rb +32 -0
- data/lib/dm-core/model/property.rb +249 -0
- data/lib/dm-core/model/relationship.rb +378 -0
- data/lib/dm-core/model/scope.rb +89 -0
- data/lib/dm-core/property.rb +866 -0
- data/lib/dm-core/property/binary.rb +21 -0
- data/lib/dm-core/property/boolean.rb +20 -0
- data/lib/dm-core/property/class.rb +17 -0
- data/lib/dm-core/property/date.rb +10 -0
- data/lib/dm-core/property/date_time.rb +10 -0
- data/lib/dm-core/property/decimal.rb +36 -0
- data/lib/dm-core/property/discriminator.rb +44 -0
- data/lib/dm-core/property/float.rb +16 -0
- data/lib/dm-core/property/integer.rb +22 -0
- data/lib/dm-core/property/invalid_value_error.rb +22 -0
- data/lib/dm-core/property/lookup.rb +27 -0
- data/lib/dm-core/property/numeric.rb +38 -0
- data/lib/dm-core/property/object.rb +34 -0
- data/lib/dm-core/property/serial.rb +14 -0
- data/lib/dm-core/property/string.rb +38 -0
- data/lib/dm-core/property/text.rb +9 -0
- data/lib/dm-core/property/time.rb +10 -0
- data/lib/dm-core/property_set.rb +177 -0
- data/lib/dm-core/query.rb +1366 -0
- data/lib/dm-core/query/conditions/comparison.rb +911 -0
- data/lib/dm-core/query/conditions/operation.rb +721 -0
- data/lib/dm-core/query/direction.rb +36 -0
- data/lib/dm-core/query/operator.rb +35 -0
- data/lib/dm-core/query/path.rb +114 -0
- data/lib/dm-core/query/sort.rb +39 -0
- data/lib/dm-core/relationship_set.rb +72 -0
- data/lib/dm-core/repository.rb +226 -0
- data/lib/dm-core/resource.rb +1214 -0
- data/lib/dm-core/resource/persistence_state.rb +75 -0
- data/lib/dm-core/resource/persistence_state/clean.rb +40 -0
- data/lib/dm-core/resource/persistence_state/deleted.rb +30 -0
- data/lib/dm-core/resource/persistence_state/dirty.rb +96 -0
- data/lib/dm-core/resource/persistence_state/immutable.rb +34 -0
- data/lib/dm-core/resource/persistence_state/persisted.rb +29 -0
- data/lib/dm-core/resource/persistence_state/transient.rb +80 -0
- data/lib/dm-core/spec/lib/adapter_helpers.rb +64 -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 +174 -0
- data/lib/dm-core/spec/shared/adapter_spec.rb +341 -0
- data/lib/dm-core/spec/shared/public/property_spec.rb +229 -0
- data/lib/dm-core/spec/shared/resource_spec.rb +1232 -0
- data/lib/dm-core/spec/shared/sel_spec.rb +111 -0
- data/lib/dm-core/spec/shared/semipublic/property_spec.rb +176 -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 +405 -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 +90 -0
- data/lib/dm-core/support/ordered_set.rb +380 -0
- data/lib/dm-core/support/subject.rb +33 -0
- data/lib/dm-core/support/subject_set.rb +250 -0
- data/lib/dm-core/version.rb +3 -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 +68 -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 +76 -0
- data/spec/public/model/hook_spec.rb +246 -0
- data/spec/public/model/property_spec.rb +88 -0
- data/spec/public/model/relationship_spec.rb +1040 -0
- data/spec/public/model_spec.rb +462 -0
- data/spec/public/property/binary_spec.rb +41 -0
- data/spec/public/property/boolean_spec.rb +22 -0
- data/spec/public/property/class_spec.rb +28 -0
- data/spec/public/property/date_spec.rb +22 -0
- data/spec/public/property/date_time_spec.rb +22 -0
- data/spec/public/property/decimal_spec.rb +23 -0
- data/spec/public/property/discriminator_spec.rb +135 -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 +107 -0
- data/spec/public/property/serial_spec.rb +22 -0
- data/spec/public/property/string_spec.rb +22 -0
- data/spec/public/property/text_spec.rb +63 -0
- data/spec/public/property/time_spec.rb +22 -0
- data/spec/public/property_spec.rb +341 -0
- data/spec/public/resource_spec.rb +288 -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 +1667 -0
- data/spec/public/shared/finder_shared_spec.rb +1629 -0
- data/spec/rcov.opts +6 -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 +1501 -0
- data/spec/semipublic/query/conditions/operation_spec.rb +1294 -0
- data/spec/semipublic/query/path_spec.rb +471 -0
- data/spec/semipublic/query_spec.rb +3682 -0
- data/spec/semipublic/resource/state/clean_spec.rb +88 -0
- data/spec/semipublic/resource/state/deleted_spec.rb +78 -0
- data/spec/semipublic/resource/state/dirty_spec.rb +162 -0
- data/spec/semipublic/resource/state/immutable_spec.rb +105 -0
- data/spec/semipublic/resource/state/transient_spec.rb +162 -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 +199 -0
- data/spec/semipublic/shared/resource_state_shared_spec.rb +79 -0
- data/spec/semipublic/shared/subject_shared_spec.rb +79 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +38 -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 +28 -0
- data/spec/unit/hook_spec.rb +1235 -0
- data/spec/unit/inflections_spec.rb +16 -0
- data/spec/unit/lazy_array_spec.rb +1949 -0
- data/spec/unit/mash_spec.rb +312 -0
- data/spec/unit/module_spec.rb +71 -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 +38 -0
- data/tasks/yard.rake +9 -0
- data/tasks/yardstick.rake +19 -0
- metadata +365 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DataMapper::Property::Class do
|
|
4
|
+
before :all do
|
|
5
|
+
Object.send(:remove_const, :Foo) if defined?(Foo)
|
|
6
|
+
Object.send(:remove_const, :Bar) if defined?(Bar)
|
|
7
|
+
|
|
8
|
+
class ::Foo; end
|
|
9
|
+
class ::Bar; end
|
|
10
|
+
|
|
11
|
+
@name = :type
|
|
12
|
+
@type = described_class
|
|
13
|
+
@value = Foo
|
|
14
|
+
@other_value = Bar
|
|
15
|
+
@invalid_value = 1
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it_should_behave_like 'A semipublic Property'
|
|
19
|
+
|
|
20
|
+
describe '#typecast' do
|
|
21
|
+
it 'returns same value if a class' do
|
|
22
|
+
@property.typecast(@model).should equal(@model)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'returns the class if found' do
|
|
26
|
+
@property.typecast(@model.name).should eql(@model)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'does not typecast non-class values' do
|
|
30
|
+
@property.typecast('NoClass').should eql('NoClass')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DataMapper::Property::Date do
|
|
4
|
+
before :all do
|
|
5
|
+
@name = :created_on
|
|
6
|
+
@type = described_class
|
|
7
|
+
@value = Date.today
|
|
8
|
+
@other_value = Date.today + 1
|
|
9
|
+
@invalid_value = 1
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_should_behave_like 'A semipublic Property'
|
|
13
|
+
|
|
14
|
+
describe '#typecast' do
|
|
15
|
+
describe 'and value given as a hash with keys like :year, :month, etc' do
|
|
16
|
+
it 'builds a Date instance from hash values' do
|
|
17
|
+
result = @property.typecast(
|
|
18
|
+
:year => '2007',
|
|
19
|
+
:month => '3',
|
|
20
|
+
:day => '25'
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
result.should be_kind_of(Date)
|
|
24
|
+
result.year.should eql(2007)
|
|
25
|
+
result.month.should eql(3)
|
|
26
|
+
result.day.should eql(25)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe 'and value is a string' do
|
|
31
|
+
it 'parses the string' do
|
|
32
|
+
result = @property.typecast('Dec 20th, 2006')
|
|
33
|
+
result.month.should == 12
|
|
34
|
+
result.day.should == 20
|
|
35
|
+
result.year.should == 2006
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'does not typecast non-date values' do
|
|
40
|
+
@property.typecast('not-date').should eql('not-date')
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DataMapper::Property::DateTime do
|
|
4
|
+
before :all do
|
|
5
|
+
@name = :created_at
|
|
6
|
+
@type = described_class
|
|
7
|
+
@value = DateTime.now
|
|
8
|
+
@other_value = DateTime.now + 15
|
|
9
|
+
@invalid_value = 1
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_should_behave_like 'A semipublic Property'
|
|
13
|
+
|
|
14
|
+
describe '#typecast' do
|
|
15
|
+
describe 'and value given as a hash with keys like :year, :month, etc' do
|
|
16
|
+
it 'builds a DateTime instance from hash values' do
|
|
17
|
+
result = @property.typecast(
|
|
18
|
+
:year => '2006',
|
|
19
|
+
:month => '11',
|
|
20
|
+
:day => '23',
|
|
21
|
+
:hour => '12',
|
|
22
|
+
:min => '0',
|
|
23
|
+
:sec => '0'
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
result.should be_kind_of(DateTime)
|
|
27
|
+
result.year.should eql(2006)
|
|
28
|
+
result.month.should eql(11)
|
|
29
|
+
result.day.should eql(23)
|
|
30
|
+
result.hour.should eql(12)
|
|
31
|
+
result.min.should eql(0)
|
|
32
|
+
result.sec.should eql(0)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe 'and value is a string' do
|
|
37
|
+
it 'parses the string' do
|
|
38
|
+
@property.typecast('Dec, 2006').month.should == 12
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'does not typecast non-datetime values' do
|
|
43
|
+
@property.typecast('not-datetime').should eql('not-datetime')
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DataMapper::Property::Decimal do
|
|
4
|
+
before :all do
|
|
5
|
+
@name = :rate
|
|
6
|
+
@type = described_class
|
|
7
|
+
@options = { :precision => 5, :scale => 2 }
|
|
8
|
+
@value = BigDecimal('1.0')
|
|
9
|
+
@other_value = BigDecimal('2.0')
|
|
10
|
+
@invalid_value = true
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it_should_behave_like 'A semipublic Property'
|
|
14
|
+
|
|
15
|
+
describe '#typecast' do
|
|
16
|
+
it 'returns same value if a decimal' do
|
|
17
|
+
@value = BigDecimal('24.0')
|
|
18
|
+
@property.typecast(@value).should equal(@value)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'returns decimal representation of a zero string integer' do
|
|
22
|
+
@property.typecast('0').should eql(BigDecimal('0.0'))
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'returns decimal representation of a positive string integer' do
|
|
26
|
+
@property.typecast('24').should eql(BigDecimal('24.0'))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'returns decimal representation of a negative string integer' do
|
|
30
|
+
@property.typecast('-24').should eql(BigDecimal('-24.0'))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'returns decimal representation of a zero string float' do
|
|
34
|
+
@property.typecast('0.0').should eql(BigDecimal('0.0'))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'returns decimal representation of a positive string float' do
|
|
38
|
+
@property.typecast('24.35').should eql(BigDecimal('24.35'))
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'returns decimal representation of a negative string float' do
|
|
42
|
+
@property.typecast('-24.35').should eql(BigDecimal('-24.35'))
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'returns decimal representation of a zero string float, with no leading digits' do
|
|
46
|
+
@property.typecast('.0').should eql(BigDecimal('0.0'))
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'returns decimal representation of a positive string float, with no leading digits' do
|
|
50
|
+
@property.typecast('.41').should eql(BigDecimal('0.41'))
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'returns decimal representation of a zero integer' do
|
|
54
|
+
@property.typecast(0).should eql(BigDecimal('0.0'))
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'returns decimal representation of a positive integer' do
|
|
58
|
+
@property.typecast(24).should eql(BigDecimal('24.0'))
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'returns decimal representation of a negative integer' do
|
|
62
|
+
@property.typecast(-24).should eql(BigDecimal('-24.0'))
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'returns decimal representation of a zero float' do
|
|
66
|
+
@property.typecast(0.0).should eql(BigDecimal('0.0'))
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'returns decimal representation of a positive float' do
|
|
70
|
+
@property.typecast(24.35).should eql(BigDecimal('24.35'))
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'returns decimal representation of a negative float' do
|
|
74
|
+
@property.typecast(-24.35).should eql(BigDecimal('-24.35'))
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
[ Object.new, true, '00.0', '0.', '-.0', 'string' ].each do |value|
|
|
78
|
+
it "does not typecast non-numeric value #{value.inspect}" do
|
|
79
|
+
@property.typecast(value).should equal(value)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DataMapper::Property::Discriminator do
|
|
4
|
+
before :all do
|
|
5
|
+
Object.send(:remove_const, :Foo) if defined?(Foo)
|
|
6
|
+
Object.send(:remove_const, :Bar) if defined?(Bar)
|
|
7
|
+
|
|
8
|
+
class ::Foo; end
|
|
9
|
+
class ::Bar; end
|
|
10
|
+
|
|
11
|
+
@name = :type
|
|
12
|
+
@type = described_class
|
|
13
|
+
@value = Foo
|
|
14
|
+
@other_value = Bar
|
|
15
|
+
@invalid_value = 1
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it_should_behave_like 'A semipublic Property'
|
|
19
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DataMapper::Property::Float do
|
|
4
|
+
before :all do
|
|
5
|
+
@name = :rating
|
|
6
|
+
@type = described_class
|
|
7
|
+
@value = 0.1
|
|
8
|
+
@other_value = 0.2
|
|
9
|
+
@invalid_value = '1'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_should_behave_like 'A semipublic Property'
|
|
13
|
+
|
|
14
|
+
describe '#typecast' do
|
|
15
|
+
it 'returns same value if a float' do
|
|
16
|
+
@value = 24.0
|
|
17
|
+
@property.typecast(@value).should equal(@value)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'returns float representation of a zero string integer' do
|
|
21
|
+
@property.typecast('0').should eql(0.0)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'returns float representation of a positive string integer' do
|
|
25
|
+
@property.typecast('24').should eql(24.0)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'returns float representation of a negative string integer' do
|
|
29
|
+
@property.typecast('-24').should eql(-24.0)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'returns float representation of a zero string float' do
|
|
33
|
+
@property.typecast('0.0').should eql(0.0)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'returns float representation of a positive string float' do
|
|
37
|
+
@property.typecast('24.35').should eql(24.35)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'returns float representation of a negative string float' do
|
|
41
|
+
@property.typecast('-24.35').should eql(-24.35)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'returns float representation of a zero string float, with no leading digits' do
|
|
45
|
+
@property.typecast('.0').should eql(0.0)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'returns float representation of a positive string float, with no leading digits' do
|
|
49
|
+
@property.typecast('.41').should eql(0.41)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'returns float representation of a zero integer' do
|
|
53
|
+
@property.typecast(0).should eql(0.0)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'returns float representation of a positive integer' do
|
|
57
|
+
@property.typecast(24).should eql(24.0)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'returns float representation of a negative integer' do
|
|
61
|
+
@property.typecast(-24).should eql(-24.0)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'returns float representation of a zero decimal' do
|
|
65
|
+
@property.typecast(BigDecimal('0.0')).should eql(0.0)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'returns float representation of a positive decimal' do
|
|
69
|
+
@property.typecast(BigDecimal('24.35')).should eql(24.35)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'returns float representation of a negative decimal' do
|
|
73
|
+
@property.typecast(BigDecimal('-24.35')).should eql(-24.35)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
[ Object.new, true, '00.0', '0.', '-.0', 'string' ].each do |value|
|
|
77
|
+
it "does not typecast non-numeric value #{value.inspect}" do
|
|
78
|
+
@property.typecast(value).should equal(value)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DataMapper::Property::Integer do
|
|
4
|
+
before :all do
|
|
5
|
+
@name = :age
|
|
6
|
+
@type = described_class
|
|
7
|
+
@value = 1
|
|
8
|
+
@other_value = 2
|
|
9
|
+
@invalid_value = '1'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_should_behave_like 'A semipublic Property'
|
|
13
|
+
|
|
14
|
+
describe '#typecast' do
|
|
15
|
+
it 'returns same value if an integer' do
|
|
16
|
+
@value = 24
|
|
17
|
+
@property.typecast(@value).should equal(@value)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'returns integer representation of a zero string integer' do
|
|
21
|
+
@property.typecast('0').should eql(0)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'returns integer representation of a positive string integer' do
|
|
25
|
+
@property.typecast('24').should eql(24)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'returns integer representation of a negative string integer' do
|
|
29
|
+
@property.typecast('-24').should eql(-24)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'returns integer representation of a zero string float' do
|
|
33
|
+
@property.typecast('0.0').should eql(0)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'returns integer representation of a positive string float' do
|
|
37
|
+
@property.typecast('24.35').should eql(24)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'returns integer representation of a negative string float' do
|
|
41
|
+
@property.typecast('-24.35').should eql(-24)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'returns integer representation of a zero string float, with no leading digits' do
|
|
45
|
+
@property.typecast('.0').should eql(0)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'returns integer representation of a positive string float, with no leading digits' do
|
|
49
|
+
@property.typecast('.41').should eql(0)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'returns integer representation of a zero float' do
|
|
53
|
+
@property.typecast(0.0).should eql(0)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'returns integer representation of a positive float' do
|
|
57
|
+
@property.typecast(24.35).should eql(24)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'returns integer representation of a negative float' do
|
|
61
|
+
@property.typecast(-24.35).should eql(-24)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'returns integer representation of a zero decimal' do
|
|
65
|
+
@property.typecast(BigDecimal('0.0')).should eql(0)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'returns integer representation of a positive decimal' do
|
|
69
|
+
@property.typecast(BigDecimal('24.35')).should eql(24)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'returns integer representation of a negative decimal' do
|
|
73
|
+
@property.typecast(BigDecimal('-24.35')).should eql(-24)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
[ Object.new, true, '00.0', '0.', '-.0', 'string' ].each do |value|
|
|
77
|
+
it "does not typecast non-numeric value #{value.inspect}" do
|
|
78
|
+
@property.typecast(value).should equal(value)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'dm-core/property/lookup'
|
|
3
|
+
|
|
4
|
+
describe DataMapper::Property::Lookup do
|
|
5
|
+
supported_by :all do
|
|
6
|
+
before :all do
|
|
7
|
+
Object.send(:remove_const, :Foo) if defined?(Foo)
|
|
8
|
+
@klass = Class.new { extend DataMapper::Model }
|
|
9
|
+
|
|
10
|
+
module Foo
|
|
11
|
+
class OtherProperty < DataMapper::Property::String; end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'should provide access to Property classes' do
|
|
16
|
+
@klass::Serial.should == DataMapper::Property::Serial
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'should provide access to Property classes from outside of the Property namespace' do
|
|
20
|
+
@klass::OtherProperty.should be(Foo::OtherProperty)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should not provide access to unknown Property classes' do
|
|
24
|
+
lambda {
|
|
25
|
+
@klass::Bla
|
|
26
|
+
}.should raise_error(NameError)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DataMapper::Property::String do
|
|
4
|
+
before :all do
|
|
5
|
+
@name = :name
|
|
6
|
+
@type = described_class
|
|
7
|
+
@value = 'value'
|
|
8
|
+
@other_value = 'return value'
|
|
9
|
+
@invalid_value = 1
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_should_behave_like 'A semipublic Property'
|
|
13
|
+
end
|