ohm-contrib 0.0.31 → 0.0.33

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/LICENSE +2 -1
  2. data/README.markdown +2 -1
  3. data/Rakefile +4 -53
  4. data/lib/ohm/contrib.rb +2 -2
  5. data/lib/ohm/contrib/boundaries.rb +1 -0
  6. data/lib/ohm/contrib/callbacks.rb +5 -4
  7. data/lib/ohm/contrib/date_validations.rb +2 -1
  8. data/lib/ohm/contrib/extra_validations.rb +1 -0
  9. data/lib/ohm/contrib/length_validations.rb +1 -0
  10. data/lib/ohm/contrib/locking.rb +2 -1
  11. data/lib/ohm/contrib/lunar_macros.rb +5 -4
  12. data/lib/ohm/contrib/number_validations.rb +1 -0
  13. data/lib/ohm/contrib/slug.rb +1 -0
  14. data/lib/ohm/contrib/timestamping.rb +1 -0
  15. data/lib/ohm/contrib/typecast.rb +1 -0
  16. data/lib/ohm/contrib/web_validations.rb +2 -1
  17. data/test/autoload_test.rb +19 -0
  18. data/test/boundaries_test.rb +45 -0
  19. data/test/callbacks_lint.rb +105 -0
  20. data/test/date_validations_test.rb +29 -0
  21. data/test/helper.rb +19 -10
  22. data/test/instance_callbacks_test.rb +45 -0
  23. data/test/length_validations_test.rb +31 -0
  24. data/test/lunar_macros_test.rb +146 -0
  25. data/test/macro_callbacks_test.rb +57 -0
  26. data/test/membership_validation_test.rb +31 -0
  27. data/test/number_validations_test.rb +37 -0
  28. data/test/slug_test.rb +30 -0
  29. data/test/timestamping_test.rb +32 -0
  30. data/test/typecast_array_test.rb +154 -0
  31. data/test/typecast_boolean_test.rb +43 -0
  32. data/test/typecast_date_test.rb +77 -0
  33. data/test/typecast_decimal_test.rb +77 -0
  34. data/test/typecast_float_test.rb +52 -0
  35. data/test/typecast_hash_test.rb +117 -0
  36. data/test/typecast_integer_test.rb +66 -0
  37. data/test/typecast_string_test.rb +38 -0
  38. data/test/typecast_time_test.rb +67 -0
  39. data/test/typecast_timezone_test.rb +37 -0
  40. data/test/web_validations_test.rb +79 -0
  41. metadata +47 -56
  42. data/.document +0 -5
  43. data/.gitignore +0 -25
  44. data/VERSION +0 -1
  45. data/lib/ohm/contrib/to_hash.rb +0 -39
  46. data/ohm-contrib.gemspec +0 -103
  47. data/test/test_ohm_boundaries.rb +0 -74
  48. data/test/test_ohm_contrib.rb +0 -70
  49. data/test/test_ohm_contrib_callbacks.rb +0 -375
  50. data/test/test_ohm_date_validations.rb +0 -30
  51. data/test/test_ohm_extra_validations.rb +0 -32
  52. data/test/test_ohm_length_validations.rb +0 -32
  53. data/test/test_ohm_lunar_macros.rb +0 -165
  54. data/test/test_ohm_number_validations.rb +0 -59
  55. data/test/test_ohm_slug.rb +0 -29
  56. data/test/test_ohm_timestamping.rb +0 -64
  57. data/test/test_ohm_to_hash.rb +0 -67
  58. data/test/test_ohm_typecast.rb +0 -707
  59. data/test/test_ohm_web_validations.rb +0 -114
@@ -0,0 +1,66 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("./helper", File.dirname(__FILE__))
4
+
5
+ class Post < Ohm::Model
6
+ include Ohm::Typecast
7
+
8
+ attribute :price, Integer
9
+ end
10
+
11
+ test "handles nil case correctly" do
12
+ post = Post.create(:price => nil)
13
+ post = Post[post.id]
14
+
15
+ assert nil == post.price
16
+ end
17
+
18
+ test "handles empty string case correctly" do
19
+ post = Post.create(:price => "")
20
+ post = Post[post.id]
21
+
22
+ assert "" == post.price.to_s
23
+ end
24
+
25
+ test "allows respond_to on an invalid integer" do
26
+ post = Post.new(:price => "FooBar")
27
+
28
+ assert_nothing_raised ArgumentError do
29
+ post.price.respond_to?(:**)
30
+ end
31
+
32
+ assert ! post.price.respond_to?(:**)
33
+ end
34
+
35
+ test "falls back to String#respond_to? when invalid" do
36
+ post = Post.new(:price => "FooBar")
37
+ assert post.price.respond_to?(:capitalize)
38
+ end
39
+
40
+ test "allows for real arithmetic" do
41
+ post = Post.create(:price => "3")
42
+ post = Post[post.id]
43
+
44
+ assert 6 == post.price + post.price
45
+ assert 0 == post.price - post.price
46
+ assert 9 == post.price * post.price
47
+ assert 1 == post.price / post.price
48
+ end
49
+
50
+ test "raises when trying to do arithmetic ops on a non-int" do
51
+ post = Post.create(:price => "FooBar")
52
+ post = Post[post.id]
53
+
54
+ assert_raise ArgumentError do
55
+ post.price * post.price
56
+ end
57
+ end
58
+
59
+ test "inspecting" do
60
+ post = Post.new(:price => "50000")
61
+ assert '"50000"' == post.price.inspect
62
+
63
+ post.price = 'FooBar'
64
+ assert '"FooBar"' == post.price.inspect
65
+ end
66
+
@@ -0,0 +1,38 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("./helper", File.dirname(__FILE__))
4
+
5
+ class Post < Ohm::Model
6
+ include Ohm::Typecast
7
+
8
+ attribute :content
9
+ end
10
+
11
+ test "handles nil case correctly" do
12
+ post = Post.create(:content => nil)
13
+ post = Post[post.id]
14
+
15
+ assert nil == post.content
16
+ end
17
+
18
+ test "still responds to string methods properly" do
19
+ post = Post.create(:content => "FooBar")
20
+ post = Post[post.id]
21
+
22
+ assert "foobar" == post.content.downcase
23
+ end
24
+
25
+ test "mutating methods like upcase!" do
26
+ post = Post.create(:content => "FooBar")
27
+ post = Post[post.id]
28
+
29
+ post.content.upcase!
30
+
31
+ assert "FOOBAR" == post.content.to_s
32
+ end
33
+
34
+ test "inspecting" do
35
+ post = Post.new(:content => "FooBar")
36
+ assert 'FooBar' == post.content
37
+ end
38
+
@@ -0,0 +1,67 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("./helper", File.dirname(__FILE__))
4
+
5
+ class Post < Ohm::Model
6
+ include Ohm::Typecast
7
+
8
+ attribute :created_at, Time
9
+
10
+ def now
11
+ Time.now
12
+ end
13
+
14
+ def new_time
15
+ Time.new
16
+ end
17
+ end
18
+
19
+ test "still able to access top level Time" do
20
+ assert Post.new.now.to_s == Time.now.to_s
21
+ end
22
+
23
+ test "should be able to use Time.new inside the class" do
24
+ assert Post.new.new_time.to_s == Time.new.to_s
25
+ end
26
+
27
+ test "handles nil case correctly" do
28
+ post = Post.create(:created_at => nil)
29
+ post = Post[post.id]
30
+
31
+ assert nil == post.created_at
32
+ end
33
+
34
+ test "handles empty string case correctly" do
35
+ post = Post.create(:created_at => "")
36
+ post = Post[post.id]
37
+
38
+ assert "" == post.created_at.to_s
39
+ end
40
+
41
+ test "allows for real time operations" do
42
+ post = Post.create(:created_at => "2010-05-10T00:00Z")
43
+ post = Post[post.id]
44
+
45
+ assert post.created_at.respond_to?(:strftime)
46
+ assert "2010-05-10" == post.created_at.strftime('%Y-%m-%d')
47
+ end
48
+
49
+ test "raises when trying to do non-time operations" do
50
+ post = Post.create(:created_at => "FooBar")
51
+ post = Post[post.id]
52
+
53
+ assert ! post.created_at.respond_to?(:abs)
54
+
55
+ assert_raise NoMethodError do
56
+ post.created_at.abs
57
+ end
58
+ end
59
+
60
+ test "inspecting" do
61
+ post = Post.create(:created_at => Time.utc(2010, 05, 05))
62
+ assert '"2010-05-05 00:00:00 UTC"' == post.created_at.inspect
63
+
64
+ post.created_at = 'FooBar'
65
+ assert '"FooBar"' == post.created_at.inspect
66
+ end
67
+
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("./helper", File.dirname(__FILE__))
4
+
5
+ class Post < Ohm::Model
6
+ include Ohm::Typecast
7
+
8
+ attribute :printed_at, Time
9
+ end
10
+
11
+ test "2010-08-07T00:00Z is parsed as 2010-08-07 00:00:00 UTC" do
12
+ post = Post.new(:printed_at => "2010-08-07T00:00Z")
13
+ assert Time.utc(2010, 8, 7).to_s == post.printed_at.utc.to_s
14
+
15
+ post.save
16
+ post = Post[post.id]
17
+ assert Time.utc(2010, 8, 7).to_s == post.printed_at.utc.to_s
18
+ end
19
+
20
+ test "2010-08-07 18:29Z is parsed as 2010-08-07 18:29:00 UTC" do
21
+ post = Post.new(:printed_at => "2010-08-07 18:29Z")
22
+ assert Time.utc(2010, 8, 7, 18, 29).to_s == post.printed_at.utc.to_s
23
+
24
+ post.save
25
+ post = Post[post.id]
26
+ assert Time.utc(2010, 8, 7, 18, 29).to_s == post.printed_at.utc.to_s
27
+ end
28
+
29
+ test "2010-08-07T18:29:31Z is parsed as 2010-08-07 18:29:31 UTC" do
30
+ post = Post.new(:printed_at => "2010-08-07T18:29:31Z")
31
+ assert Time.utc(2010, 8, 7, 18, 29, 31).to_s == post.printed_at.utc.to_s
32
+
33
+ post.save
34
+ post = Post[post.id]
35
+ assert Time.utc(2010, 8, 7, 18, 29, 31).to_s == post.printed_at.utc.to_s
36
+ end
37
+
@@ -0,0 +1,79 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("./helper", File.dirname(__FILE__))
4
+
5
+ class BlogPost < Ohm::Model
6
+ include Ohm::WebValidations
7
+
8
+ attribute :slug
9
+
10
+ index :slug
11
+
12
+ def validate
13
+ assert_slug :slug
14
+ end
15
+ end
16
+
17
+ class Comment < Ohm::Model
18
+ include Ohm::WebValidations
19
+
20
+ attribute :ip_address
21
+ attribute :homepage
22
+ attribute :email
23
+
24
+ def validate
25
+ assert_ipaddr :ip_address
26
+ assert_url :homepage
27
+ assert_email :email
28
+ end
29
+ end
30
+
31
+ test "invalid slug scenario" do
32
+ p = BlogPost.new(:slug => "This is a title, not a SLUG")
33
+ assert ! p.valid?
34
+ assert [[:slug, :not_slug]] == p.errors
35
+ end
36
+
37
+ test "valid slug scenario" do
38
+ p = BlogPost.new(:slug => "this-is-a-valid-slug")
39
+ assert p.valid?
40
+ end
41
+
42
+ test "slug uniqueness validation" do
43
+ p1 = BlogPost.create(:slug => "this-is-a-valid-slug")
44
+ p2 = BlogPost.create(:slug => "this-is-a-valid-slug")
45
+
46
+ assert ! p2.valid?
47
+ assert [[:slug, :not_unique]] == p2.errors
48
+ end
49
+
50
+ test "ip address validation" do
51
+ c = Comment.new(:ip_address => "400.500.600.700")
52
+ assert ! c.valid?
53
+ assert c.errors.include?([:ip_address, :not_ipaddr])
54
+ end
55
+
56
+ test "email address validation" do
57
+ c = Comment.new(:email => "something.com")
58
+ assert ! c.valid?
59
+ assert c.errors.include?([:email, :not_email])
60
+
61
+ c = Comment.new(:email => "john@doe.com")
62
+ c.valid?
63
+ assert ! c.errors.include?([:email, :not_email])
64
+ end
65
+
66
+ test "url validaiton" do
67
+ c = Comment.new(:homepage => "somehing")
68
+ assert ! c.valid?
69
+ assert c.errors.include?([:homepage, :not_url])
70
+
71
+ c = Comment.new(:homepage => "irc://irc.freenode.net/something")
72
+ assert ! c.valid?
73
+ assert c.errors.include?([:homepage, :not_url])
74
+
75
+ c = Comment.new(:homepage => "http://test.com")
76
+ c.valid?
77
+ assert ! c.errors.include?([:homepage, :not_url])
78
+ end
79
+
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 31
9
- version: 0.0.31
8
+ - 33
9
+ version: 0.0.33
10
10
  platform: ruby
11
11
  authors:
12
12
  - Cyril David
@@ -14,11 +14,11 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-11 00:00:00 +08:00
17
+ date: 2010-05-12 00:00:00 +08:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: contest
21
+ name: ohm
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
@@ -28,10 +28,10 @@ dependencies:
28
28
  segments:
29
29
  - 0
30
30
  version: "0"
31
- type: :development
31
+ type: :runtime
32
32
  version_requirements: *id001
33
33
  - !ruby/object:Gem::Dependency
34
- name: redis
34
+ name: cutest
35
35
  prerelease: false
36
36
  requirement: &id002 !ruby/object:Gem::Requirement
37
37
  none: false
@@ -44,7 +44,7 @@ dependencies:
44
44
  type: :development
45
45
  version_requirements: *id002
46
46
  - !ruby/object:Gem::Dependency
47
- name: timecop
47
+ name: redis
48
48
  prerelease: false
49
49
  requirement: &id003 !ruby/object:Gem::Requirement
50
50
  none: false
@@ -57,7 +57,7 @@ dependencies:
57
57
  type: :development
58
58
  version_requirements: *id003
59
59
  - !ruby/object:Gem::Dependency
60
- name: mocha
60
+ name: lunar
61
61
  prerelease: false
62
62
  requirement: &id004 !ruby/object:Gem::Requirement
63
63
  none: false
@@ -70,7 +70,7 @@ dependencies:
70
70
  type: :development
71
71
  version_requirements: *id004
72
72
  - !ruby/object:Gem::Dependency
73
- name: lunar
73
+ name: override
74
74
  prerelease: false
75
75
  requirement: &id005 !ruby/object:Gem::Requirement
76
76
  none: false
@@ -82,23 +82,15 @@ dependencies:
82
82
  version: "0"
83
83
  type: :development
84
84
  version_requirements: *id005
85
- description: Highly decoupled drop-in functionality for Ohm models
85
+ description:
86
86
  email: cyx.ucron@gmail.com
87
87
  executables: []
88
88
 
89
89
  extensions: []
90
90
 
91
- extra_rdoc_files:
92
- - LICENSE
93
- - README.markdown
91
+ extra_rdoc_files: []
92
+
94
93
  files:
95
- - .document
96
- - .gitignore
97
- - LICENSE
98
- - README.markdown
99
- - Rakefile
100
- - VERSION
101
- - lib/ohm/contrib.rb
102
94
  - lib/ohm/contrib/boundaries.rb
103
95
  - lib/ohm/contrib/callbacks.rb
104
96
  - lib/ohm/contrib/date_validations.rb
@@ -109,31 +101,43 @@ files:
109
101
  - lib/ohm/contrib/number_validations.rb
110
102
  - lib/ohm/contrib/slug.rb
111
103
  - lib/ohm/contrib/timestamping.rb
112
- - lib/ohm/contrib/to_hash.rb
113
104
  - lib/ohm/contrib/typecast.rb
114
105
  - lib/ohm/contrib/web_validations.rb
115
- - ohm-contrib.gemspec
106
+ - lib/ohm/contrib.rb
107
+ - README.markdown
108
+ - LICENSE
109
+ - Rakefile
110
+ - test/autoload_test.rb
111
+ - test/boundaries_test.rb
112
+ - test/callbacks_lint.rb
113
+ - test/date_validations_test.rb
116
114
  - test/helper.rb
117
- - test/test_ohm_boundaries.rb
118
- - test/test_ohm_contrib.rb
119
- - test/test_ohm_contrib_callbacks.rb
120
- - test/test_ohm_date_validations.rb
121
- - test/test_ohm_extra_validations.rb
122
- - test/test_ohm_length_validations.rb
123
- - test/test_ohm_lunar_macros.rb
124
- - test/test_ohm_number_validations.rb
125
- - test/test_ohm_slug.rb
126
- - test/test_ohm_timestamping.rb
127
- - test/test_ohm_to_hash.rb
128
- - test/test_ohm_typecast.rb
129
- - test/test_ohm_web_validations.rb
115
+ - test/instance_callbacks_test.rb
116
+ - test/length_validations_test.rb
117
+ - test/lunar_macros_test.rb
118
+ - test/macro_callbacks_test.rb
119
+ - test/membership_validation_test.rb
120
+ - test/number_validations_test.rb
121
+ - test/slug_test.rb
122
+ - test/timestamping_test.rb
123
+ - test/typecast_array_test.rb
124
+ - test/typecast_boolean_test.rb
125
+ - test/typecast_date_test.rb
126
+ - test/typecast_decimal_test.rb
127
+ - test/typecast_float_test.rb
128
+ - test/typecast_hash_test.rb
129
+ - test/typecast_integer_test.rb
130
+ - test/typecast_string_test.rb
131
+ - test/typecast_time_test.rb
132
+ - test/typecast_timezone_test.rb
133
+ - test/web_validations_test.rb
130
134
  has_rdoc: true
131
- homepage: http://labs.sinefunc.com/ohm-contrib
135
+ homepage: http://github.com/cyx/ohm-contrib
132
136
  licenses: []
133
137
 
134
138
  post_install_message:
135
- rdoc_options:
136
- - --charset=UTF-8
139
+ rdoc_options: []
140
+
137
141
  require_paths:
138
142
  - lib
139
143
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -154,23 +158,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
158
  version: "0"
155
159
  requirements: []
156
160
 
157
- rubyforge_project:
161
+ rubyforge_project: ohm-contrib
158
162
  rubygems_version: 1.3.7
159
163
  signing_key:
160
- specification_version: 3
161
- summary: A collection of ohm related modules
162
- test_files:
163
- - test/helper.rb
164
- - test/test_ohm_boundaries.rb
165
- - test/test_ohm_contrib.rb
166
- - test/test_ohm_contrib_callbacks.rb
167
- - test/test_ohm_date_validations.rb
168
- - test/test_ohm_extra_validations.rb
169
- - test/test_ohm_length_validations.rb
170
- - test/test_ohm_lunar_macros.rb
171
- - test/test_ohm_number_validations.rb
172
- - test/test_ohm_slug.rb
173
- - test/test_ohm_timestamping.rb
174
- - test/test_ohm_to_hash.rb
175
- - test/test_ohm_typecast.rb
176
- - test/test_ohm_web_validations.rb
164
+ specification_version: 2
165
+ summary: A collection of decoupled drop-in modules for Ohm
166
+ test_files: []
167
+