dm-types 0.9.11 → 0.10.0

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 (59) hide show
  1. data/{History.txt → History.rdoc} +5 -4
  2. data/LICENSE +16 -14
  3. data/Manifest.txt +13 -3
  4. data/{README.txt → README.rdoc} +0 -0
  5. data/Rakefile +3 -4
  6. data/TODO +74 -0
  7. data/lib/dm-types.rb +15 -18
  8. data/lib/dm-types/bcrypt_hash.rb +1 -4
  9. data/lib/dm-types/comma_separated_list.rb +31 -0
  10. data/lib/dm-types/csv.rb +12 -18
  11. data/lib/dm-types/enum.rb +18 -15
  12. data/lib/dm-types/epoch_time.rb +6 -11
  13. data/lib/dm-types/file_path.rb +5 -4
  14. data/lib/dm-types/flag.rb +14 -13
  15. data/lib/dm-types/ip_address.rb +1 -0
  16. data/lib/dm-types/json.rb +5 -11
  17. data/lib/dm-types/regexp.rb +2 -3
  18. data/lib/dm-types/slug.rb +8 -17
  19. data/lib/dm-types/uri.rb +8 -14
  20. data/lib/dm-types/uuid.rb +9 -15
  21. data/lib/dm-types/version.rb +1 -1
  22. data/lib/dm-types/yaml.rb +4 -3
  23. data/spec/fixtures/article.rb +39 -0
  24. data/spec/fixtures/bookmark.rb +27 -0
  25. data/spec/fixtures/invention.rb +9 -0
  26. data/spec/fixtures/network_node.rb +40 -0
  27. data/spec/fixtures/person.rb +29 -0
  28. data/spec/fixtures/software_package.rb +37 -0
  29. data/spec/fixtures/ticket.rb +25 -0
  30. data/spec/fixtures/tshirt.rb +28 -0
  31. data/spec/integration/bcrypt_hash_spec.rb +37 -55
  32. data/spec/integration/comma_separated_list_spec.rb +89 -0
  33. data/spec/integration/enum_spec.rb +62 -42
  34. data/spec/integration/file_path_spec.rb +149 -17
  35. data/spec/integration/flag_spec.rb +56 -25
  36. data/spec/integration/ip_address_spec.rb +142 -17
  37. data/spec/integration/json_spec.rb +60 -17
  38. data/spec/integration/slug_spec.rb +39 -40
  39. data/spec/integration/uri_spec.rb +126 -21
  40. data/spec/integration/uuid_spec.rb +84 -30
  41. data/spec/integration/yaml_spec.rb +55 -25
  42. data/spec/shared/identity_function_group.rb +5 -0
  43. data/spec/spec.opts +1 -0
  44. data/spec/spec_helper.rb +49 -17
  45. data/spec/unit/bcrypt_hash_spec.rb +107 -64
  46. data/spec/unit/csv_spec.rb +111 -27
  47. data/spec/unit/enum_spec.rb +128 -87
  48. data/spec/unit/epoch_time_spec.rb +57 -32
  49. data/spec/unit/file_path_spec.rb +55 -34
  50. data/spec/unit/flag_spec.rb +102 -65
  51. data/spec/unit/ip_address_spec.rb +90 -40
  52. data/spec/unit/json_spec.rb +108 -41
  53. data/spec/unit/regexp_spec.rb +47 -17
  54. data/spec/unit/uri_spec.rb +57 -46
  55. data/spec/unit/yaml_spec.rb +91 -45
  56. data/tasks/install.rb +1 -1
  57. data/tasks/spec.rb +4 -4
  58. metadata +25 -32
  59. data/lib/dm-types/serial.rb +0 -8
@@ -1,35 +1,119 @@
1
- require 'pathname'
2
- require Pathname(__FILE__).dirname.parent.expand_path + 'spec_helper'
1
+ require 'spec_helper'
3
2
 
4
- describe DataMapper::Types::Csv, ".load" do
5
- it 'should parse the value if a string is provided' do
6
- CSV.should_receive(:parse).with('csv_string').once
7
- DataMapper::Types::Csv.load('csv_string', :property)
8
- end
3
+ try_spec do
4
+ describe DataMapper::Types::Csv do
5
+ describe '.load' do
6
+ describe 'when argument is a comma separated string' do
7
+ before :all do
8
+ @input = 'uno,due,tre'
9
+ @result = DataMapper::Types::Csv.load(@input, :property)
10
+ end
9
11
 
10
- it 'should do nothing if the value is a string' do
11
- CSV.should_not_receive(:parse)
12
- DataMapper::Types::Csv.load([], :property).should == []
13
- end
12
+ it 'parses the argument using CVS parser' do
13
+ @result.should == [ %w[ uno due tre ] ]
14
+ end
15
+ end
14
16
 
15
- it 'should return nil otherwise' do
16
- DataMapper::Types::Csv.load({}, :property).should == nil
17
- DataMapper::Types::Csv.load(nil, :property).should == nil
18
- end
19
- end
17
+ describe 'when argument is an empty array' do
18
+ before :all do
19
+ @input = []
20
+ @result = DataMapper::Types::Csv.load(@input, :property)
21
+ end
20
22
 
21
- describe DataMapper::Types::Csv, ".dump" do
22
- it 'should dump to CSV' do
23
- DataMapper::Types::Csv.dump([[1, 2, 3]], :property).should == "1,2,3\n"
24
- end
23
+ it 'does not change the input' do
24
+ @result.should == @input
25
+ end
26
+ end
25
27
 
26
- it 'should do nothing if the value is a string' do
27
- CSV.should_not_receive(:generate)
28
- DataMapper::Types::Csv.dump('string', :property).should == 'string'
29
- end
28
+ describe 'when argument is an empty hash' do
29
+ before :all do
30
+ @input = {}
31
+ @result = DataMapper::Types::Csv.load(@input, :property)
32
+ end
33
+
34
+ it 'returns nil' do
35
+ @result.should be_nil
36
+ end
37
+ end
38
+
39
+ describe 'when argument is nil' do
40
+ before :all do
41
+ @input = nil
42
+ @result = DataMapper::Types::Csv.load(@input, :property)
43
+ end
44
+
45
+ it 'returns nil' do
46
+ @result.should be_nil
47
+ end
48
+ end
49
+
50
+ describe 'when argument is an integer' do
51
+ before :all do
52
+ @input = 7
53
+ @result = DataMapper::Types::Csv.load(@input, :property)
54
+ end
55
+
56
+ it 'returns nil' do
57
+ @result.should be_nil
58
+ end
59
+ end
60
+
61
+ describe 'when argument is a float' do
62
+ before :all do
63
+ @input = 7.0
64
+ @result = DataMapper::Types::Csv.load(@input, :property)
65
+ end
66
+
67
+ it 'returns nil' do
68
+ @result.should be_nil
69
+ end
70
+ end
71
+ end
72
+
73
+ describe '.dump' do
74
+ describe 'when value is a list of lists' do
75
+ before :all do
76
+ @input = [ %w[ uno due tre ], %w[ uno dos tres ] ]
77
+ @result = DataMapper::Types::Csv.dump(@input, :property)
78
+ end
79
+
80
+ it 'dumps value to comma separated string' do
81
+ @result.should == "uno,due,tre\nuno,dos,tres\n"
82
+ end
83
+ end
84
+
85
+ describe 'when value is a string' do
86
+ before :all do
87
+ @input = 'beauty hides in the deep'
88
+ @result = DataMapper::Types::Csv.dump(@input, :property)
89
+ end
90
+
91
+ it 'returns input as is' do
92
+ @result.should == @input
93
+ end
94
+ end
95
+
96
+ describe 'when value is nil' do
97
+ before :all do
98
+ @input = nil
99
+ @result = DataMapper::Types::Csv.dump(@input, :property)
100
+ end
101
+
102
+ it 'returns nil' do
103
+ @result.should be_nil
104
+ end
105
+ end
106
+
107
+ describe 'when value is a hash' do
108
+ before :all do
109
+ @input = { :library => 'DataMapper', :language => 'Ruby' }
110
+ @result = DataMapper::Types::Csv.dump(@input, :property)
111
+ end
30
112
 
31
- it 'should return nil otherwise' do
32
- DataMapper::Types::Csv.dump({}, :property).should == nil
33
- DataMapper::Types::Csv.dump(nil, :property).should == nil
113
+ it 'returns nil' do
114
+ @result.should be_nil
115
+ end
116
+ end
117
+ end
34
118
  end
35
119
  end
@@ -1,96 +1,137 @@
1
- require 'pathname'
2
- require Pathname(__FILE__).dirname.parent.expand_path + 'spec_helper'
3
-
4
- describe DataMapper::Types::Enum do
5
-
6
- describe ".new" do
7
- it "should create a Class" do
8
- DataMapper::Types::Enum.new.should be_instance_of(Class)
9
- end
10
-
11
- it "should create unique a Class each call" do
12
- DataMapper::Types::Enum.new.should_not == DataMapper::Types::Enum.new
13
- end
14
-
15
- it "should use the arguments as the values in the @flag_map hash" do
16
- DataMapper::Types::Enum.new(:first, :second, :third).flag_map.values.should == [:first, :second, :third]
17
- end
18
-
19
- it "should create incremental keys for the @flag_map hash, staring at 1" do
20
- DataMapper::Types::Enum.new(:one, :two, :three, :four).flag_map.keys.should == (1..4).to_a
21
- end
22
-
23
- it "should have an Integer primitive type" do
24
- DataMapper::Types::Enum.new.primitive.should == Integer
25
- end
26
- end
27
-
28
- describe ".[]" do
29
- it "should be an alias for the new method" do
30
- DataMapper::Types::Enum.should_receive(:new).with(:uno, :dos, :tres)
31
- DataMapper::Types::Enum[:uno, :dos, :tres]
32
- end
33
- end
34
-
35
- describe ".dump" do
36
- before(:each) do
37
- @enum = DataMapper::Types::Enum[:first, :second, :third]
38
- end
39
-
40
- it "should return the key of the value match from the flag map" do
41
- @enum.dump(:first, :property).should == 1
42
- @enum.dump(:second, :property).should == 2
43
- @enum.dump(:third, :property).should == 3
44
- end
45
-
46
- it "should return nil if there is no match" do
47
- @enum.dump(:zero, :property).should be_nil
48
- end
49
- end
50
-
51
- describe ".load" do
52
- before(:each) do
53
- @enum = DataMapper::Types::Enum[:uno, :dos, :tres]
1
+ require 'spec_helper'
2
+
3
+ try_spec do
4
+ describe DataMapper::Types::Enum do
5
+ describe '.new' do
6
+ it 'returns a Class' do
7
+ DataMapper::Types::Enum.new.should be_instance_of(Class)
8
+ end
9
+
10
+ it 'returns an unique Class each time' do
11
+ DataMapper::Types::Enum.new.should_not == DataMapper::Types::Enum.new
12
+ end
13
+
14
+ it 'stores enumeration items' do
15
+ DataMapper::Types::Enum.new(:first, :second, :third).flag_map.values.should == [:first, :second, :third]
16
+ end
17
+
18
+ it 'assigns incremental numeric keys to enumeration items' do
19
+ DataMapper::Types::Enum.new(:one, :two, :three, :four).flag_map.keys.should == (1..4).to_a
20
+ end
21
+
22
+ it 'uses Integer as a primitive' do
23
+ DataMapper::Types::Enum.new.primitive.should == Integer
24
+ end
54
25
  end
55
26
 
56
- it "should return the value of the key match from the flag map" do
57
- @enum.load(1, :property).should == :uno
58
- @enum.load(2, :property).should == :dos
59
- @enum.load(3, :property).should == :tres
27
+ describe '.dump' do
28
+ before do
29
+ @enum = DataMapper::Types::Enum[:first, :second, :third]
30
+ end
31
+
32
+ it 'should return the key of the value match from the flag map' do
33
+ @enum.dump(:first, :property).should == 1
34
+ @enum.dump(:second, :property).should == 2
35
+ @enum.dump(:third, :property).should == 3
36
+ end
37
+
38
+ describe 'when there is no match' do
39
+ it 'should return nil' do
40
+ @enum.dump(:zero, :property).should be_nil
41
+ end
42
+ end
60
43
  end
61
44
 
62
- it "should return nil if there is no key" do
63
- @enum.load(-1, :property).should be_nil
45
+ describe '.load' do
46
+ before do
47
+ @enum = DataMapper::Types::Enum[:uno, :dos, :tres]
48
+ end
49
+
50
+ it 'returns the value of the key match from the flag map' do
51
+ @enum.load(1, :property).should == :uno
52
+ @enum.load(2, :property).should == :dos
53
+ @enum.load(3, :property).should == :tres
54
+ end
55
+
56
+ describe 'when there is no key' do
57
+ it 'returns nil' do
58
+ @enum.load(-1, :property).should be_nil
59
+ end
60
+ end
64
61
  end
65
- end
66
-
67
- describe ".typecast" do
68
- it 'should attempt to use the Enum type' do
69
- # Symbol.
70
- @sym_enum = DataMapper::Types::Enum[:uno]
71
- @sym_enum.typecast(:uno, :property).should == :uno
72
- @sym_enum.typecast("uno", :property).should == :uno
73
-
74
- # String
75
- @str_enum = DataMapper::Types::Enum["uno"]
76
- @str_enum.typecast(:uno, :property).should == "uno"
77
- @str_enum.typecast("uno", :property).should == "uno"
78
-
79
- # Integer
80
- @int_enum = DataMapper::Types::Enum[1, 2, 3]
81
- @int_enum.typecast(1, :property).should == 1
82
- @int_enum.typecast(1.1, :property).should == 1
83
- end
84
-
85
- it "should not throw an error when value is nil" do
86
- @sym_enum = DataMapper::Types::Enum[:uno]
87
- @sym_enum.typecast( nil, :property).should == nil
88
-
89
- @str_enum = DataMapper::Types::Enum["uno"]
90
- @str_enum.typecast( nil, :property).should == nil
91
62
 
92
- @int_enum = DataMapper::Types::Enum[1, 2, 3]
93
- @int_enum.typecast( nil, :property ).should == nil
63
+ describe '.typecast' do
64
+ describe 'of Enum created from a symbol' do
65
+ before :all do
66
+ @enum = DataMapper::Types::Enum[:uno]
67
+ end
68
+
69
+ describe 'when given a symbol' do
70
+ it 'uses Enum type' do
71
+ @enum.typecast(:uno, :property).should == :uno
72
+ end
73
+ end
74
+
75
+ describe 'when given a string' do
76
+ it 'uses Enum type' do
77
+ @enum.typecast('uno', :property).should == :uno
78
+ end
79
+ end
80
+
81
+ describe 'when given nil' do
82
+ it 'returns nil' do
83
+ @enum.typecast( nil, :property).should == nil
84
+ end
85
+ end
86
+ end
87
+
88
+ describe 'of Enum created from integer list' do
89
+ before :all do
90
+ @enum = DataMapper::Types::Enum[1, 2, 3]
91
+ end
92
+
93
+ describe 'when given an integer' do
94
+ it 'uses Enum type' do
95
+ @enum.typecast(1, :property).should == 1
96
+ end
97
+ end
98
+
99
+ describe 'when given a float' do
100
+ it 'uses Enum type' do
101
+ @enum.typecast(1.1, :property).should == 1
102
+ end
103
+ end
104
+
105
+ describe 'when given nil' do
106
+ it 'returns nil' do
107
+ @enum.typecast( nil, :property).should == nil
108
+ end
109
+ end
110
+ end
111
+
112
+ describe 'of Enum created from a string' do
113
+ before :all do
114
+ @enum = DataMapper::Types::Enum['uno']
115
+ end
116
+
117
+ describe 'when given a symbol' do
118
+ it 'uses Enum type' do
119
+ @enum.typecast(:uno, :property).should == 'uno'
120
+ end
121
+ end
122
+
123
+ describe 'when given a string' do
124
+ it 'uses Enum type' do
125
+ @enum.typecast('uno', :property).should == 'uno'
126
+ end
127
+ end
128
+
129
+ describe 'when given nil' do
130
+ it 'returns nil' do
131
+ @enum.typecast( nil, :property).should == nil
132
+ end
133
+ end
134
+ end
94
135
  end
95
136
  end
96
137
  end
@@ -1,37 +1,62 @@
1
- require 'pathname'
2
- require Pathname(__FILE__).dirname.parent.expand_path + 'spec_helper'
3
-
4
- describe DataMapper::Types::EpochTime do
5
-
6
- describe ".dump" do
7
- it "should accept Time objects" do
8
- t = Time.now
9
-
10
- DataMapper::Types::EpochTime.dump(t, :property).should == t.to_i
11
- end
12
-
13
- it "should accept DateTime objects" do
14
- t = DateTime.now
15
-
16
- DataMapper::Types::EpochTime.dump(t, :property).should == Time.parse(t.to_s).to_i
17
- end
18
-
19
- it "should accept Integer objects" do
20
- t = Time.now.to_i
21
-
22
- DataMapper::Types::EpochTime.dump(t, :property).should == t
23
- end
24
- end
25
-
26
- describe ".load" do
27
-
28
- it "should load null as nil" do
29
- DataMapper::Types::EpochTime.load(nil, :property).should == nil
1
+ require 'spec_helper'
2
+
3
+ try_spec do
4
+ describe DataMapper::Types::EpochTime do
5
+ describe '.dump' do
6
+ describe 'when given Time instance' do
7
+ before :all do
8
+ @input = Time.now
9
+ end
10
+
11
+ it 'returns timestamp' do
12
+ DataMapper::Types::EpochTime.dump(@input, :property).should == @input.to_i
13
+ end
14
+ end
15
+
16
+ describe 'when given DateTime instance' do
17
+ before :all do
18
+ @input = DateTime.now
19
+ end
20
+
21
+ it 'returns timestamp' do
22
+ DataMapper::Types::EpochTime.dump(@input, :property).should == Time.parse(@input.to_s).to_i
23
+ end
24
+ end
25
+
26
+ describe 'when given an integer' do
27
+ before :all do
28
+ @input = Time.now.to_i
29
+ end
30
+
31
+ it 'returns value as is' do
32
+ DataMapper::Types::EpochTime.dump(@input, :property).should == @input
33
+ end
34
+ end
35
+
36
+ describe 'when given nil' do
37
+ before :all do
38
+ @input = nil
39
+ end
40
+
41
+ it 'returns value as is' do
42
+ DataMapper::Types::EpochTime.dump(@input, :property).should == @input
43
+ end
44
+ end
30
45
  end
31
46
 
32
- it "should load #{Time.now.to_i} as Time.at(#{Time.now.to_i})" do
33
- t = Time.now.to_i
34
- DataMapper::Types::EpochTime.load(Time.now.to_i, :property).should == Time.at(t)
47
+ describe '.load' do
48
+ describe 'when value is nil' do
49
+ it 'returns nil' do
50
+ DataMapper::Types::EpochTime.load(nil, :property).should == nil
51
+ end
52
+ end
53
+
54
+ describe 'when value is an integer' do
55
+ it 'returns time object from timestamp' do
56
+ t = Time.now.to_i
57
+ DataMapper::Types::EpochTime.load(Time.now.to_i, :property).should == Time.at(t)
58
+ end
59
+ end
35
60
  end
36
61
  end
37
62
  end