ohm-contrib 0.0.23 → 0.0.24
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/VERSION +1 -1
- data/lib/ohm/contrib.rb +2 -1
- data/lib/ohm/contrib/date_validations.rb +23 -0
- data/lib/ohm/contrib/extra_validations.rb +4 -1
- data/lib/ohm/contrib/typecast.rb +15 -5
- data/ohm-contrib.gemspec +5 -2
- data/test/test_ohm_contrib.rb +7 -1
- data/test/test_ohm_date_validations.rb +30 -0
- data/test/test_ohm_extra_validations.rb +1 -1
- data/test/test_ohm_typecast.rb +42 -1
- metadata +6 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.24
|
data/lib/ohm/contrib.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Ohm
|
2
2
|
module Contrib
|
3
|
-
VERSION = '0.0.
|
3
|
+
VERSION = '0.0.24'
|
4
4
|
end
|
5
5
|
|
6
6
|
autoload :Boundaries, "ohm/contrib/boundaries"
|
@@ -8,6 +8,7 @@ module Ohm
|
|
8
8
|
autoload :ToHash, "ohm/contrib/to_hash"
|
9
9
|
autoload :WebValidations, "ohm/contrib/web_validations"
|
10
10
|
autoload :NumberValidations, "ohm/contrib/number_validations"
|
11
|
+
autoload :DateValidations, "ohm/contrib/date_validations"
|
11
12
|
autoload :ExtraValidations, "ohm/contrib/extra_validations"
|
12
13
|
autoload :Typecast, "ohm/contrib/typecast"
|
13
14
|
autoload :Locking, "ohm/contrib/locking"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
module Ohm
|
4
|
+
module DateValidations
|
5
|
+
DATE = /\A([0-9]{4})-([01]?[0-9])-([0123]?[0-9])\z/
|
6
|
+
|
7
|
+
def assert_date(att, error = [att, :not_date])
|
8
|
+
if assert_format att, DATE, error
|
9
|
+
m = send(att).to_s.match(DATE)
|
10
|
+
assert is_date_parseable?(m[1], m[2], m[3]), error
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def is_date_parseable?(year, month, day)
|
16
|
+
Date.new(Integer(year), Integer(month), Integer(day))
|
17
|
+
rescue ArgumentError
|
18
|
+
return false
|
19
|
+
else
|
20
|
+
return true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -12,6 +12,7 @@ module Ohm
|
|
12
12
|
# attribute :author_email
|
13
13
|
# attribute :url
|
14
14
|
# attribute :ipaddr
|
15
|
+
# attribute :birthday
|
15
16
|
#
|
16
17
|
# def validate
|
17
18
|
# super
|
@@ -21,6 +22,7 @@ module Ohm
|
|
21
22
|
# assert_ipaddr :ipaddr
|
22
23
|
# assert_url :url
|
23
24
|
# assert_email :author_email
|
25
|
+
# assert_date :birthday
|
24
26
|
# end
|
25
27
|
# end
|
26
28
|
#
|
@@ -32,10 +34,11 @@ module Ohm
|
|
32
34
|
module ExtraValidations
|
33
35
|
include NumberValidations
|
34
36
|
include WebValidations
|
37
|
+
include DateValidations
|
35
38
|
|
36
39
|
protected
|
37
40
|
def assert_member(att, set, error = [att, :not_member])
|
38
41
|
assert set.include?(send(att)), error
|
39
42
|
end
|
40
43
|
end
|
41
|
-
end
|
44
|
+
end
|
data/lib/ohm/contrib/typecast.rb
CHANGED
@@ -15,6 +15,7 @@ module Ohm
|
|
15
15
|
# * Time
|
16
16
|
# * Hash
|
17
17
|
# * Array
|
18
|
+
# * Boolean
|
18
19
|
module Types
|
19
20
|
def self.defined?(type)
|
20
21
|
@constants ||= constants.map(&:to_s)
|
@@ -35,11 +36,15 @@ module Ohm
|
|
35
36
|
]
|
36
37
|
|
37
38
|
def self.[](value)
|
38
|
-
return
|
39
|
+
return empty if value.to_s.empty?
|
39
40
|
|
40
41
|
new(value)
|
41
42
|
end
|
42
43
|
|
44
|
+
def self.empty
|
45
|
+
defined?(self::RAW) ? self::RAW.new : nil
|
46
|
+
end
|
47
|
+
|
43
48
|
def self.delegate_to(klass, except = @@delegation_blacklist)
|
44
49
|
methods = klass.public_instance_methods.map(&:to_sym) - except
|
45
50
|
def_delegators :object, *methods
|
@@ -51,8 +56,6 @@ module Ohm
|
|
51
56
|
end
|
52
57
|
|
53
58
|
class Primitive < Base
|
54
|
-
EMPTY = nil
|
55
|
-
|
56
59
|
def initialize(value)
|
57
60
|
@raw = value
|
58
61
|
end
|
@@ -120,6 +123,15 @@ module Ohm
|
|
120
123
|
end
|
121
124
|
end
|
122
125
|
|
126
|
+
class Boolean
|
127
|
+
def self.[](value)
|
128
|
+
case value
|
129
|
+
when 'false', false, '0', 0 then false
|
130
|
+
when 'true', true, '1', 1 then true
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
123
135
|
class Serialized < Base
|
124
136
|
attr :object
|
125
137
|
|
@@ -152,7 +164,6 @@ module Ohm
|
|
152
164
|
end
|
153
165
|
|
154
166
|
class Hash < Serialized
|
155
|
-
EMPTY = {}
|
156
167
|
RAW = ::Hash
|
157
168
|
|
158
169
|
delegate_to ::Hash
|
@@ -165,7 +176,6 @@ module Ohm
|
|
165
176
|
end
|
166
177
|
|
167
178
|
class Array < Serialized
|
168
|
-
EMPTY = []
|
169
179
|
RAW = ::Array
|
170
180
|
|
171
181
|
delegate_to ::Array
|
data/ohm-contrib.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ohm-contrib}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.24"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Cyril David"]
|
12
|
-
s.date = %q{2010-06-
|
12
|
+
s.date = %q{2010-06-11}
|
13
13
|
s.description = %q{Highly decoupled drop-in functionality for Ohm models}
|
14
14
|
s.email = %q{cyx.ucron@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
"lib/ohm/contrib.rb",
|
27
27
|
"lib/ohm/contrib/boundaries.rb",
|
28
28
|
"lib/ohm/contrib/callbacks.rb",
|
29
|
+
"lib/ohm/contrib/date_validations.rb",
|
29
30
|
"lib/ohm/contrib/extra_validations.rb",
|
30
31
|
"lib/ohm/contrib/locking.rb",
|
31
32
|
"lib/ohm/contrib/number_validations.rb",
|
@@ -38,6 +39,7 @@ Gem::Specification.new do |s|
|
|
38
39
|
"test/test_ohm_boundaries.rb",
|
39
40
|
"test/test_ohm_contrib.rb",
|
40
41
|
"test/test_ohm_contrib_callbacks.rb",
|
42
|
+
"test/test_ohm_date_validations.rb",
|
41
43
|
"test/test_ohm_extra_validations.rb",
|
42
44
|
"test/test_ohm_number_validations.rb",
|
43
45
|
"test/test_ohm_timestamping.rb",
|
@@ -55,6 +57,7 @@ Gem::Specification.new do |s|
|
|
55
57
|
"test/test_ohm_boundaries.rb",
|
56
58
|
"test/test_ohm_contrib.rb",
|
57
59
|
"test/test_ohm_contrib_callbacks.rb",
|
60
|
+
"test/test_ohm_date_validations.rb",
|
58
61
|
"test/test_ohm_extra_validations.rb",
|
59
62
|
"test/test_ohm_number_validations.rb",
|
60
63
|
"test/test_ohm_timestamping.rb",
|
data/test/test_ohm_contrib.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
class DateValidationsTest < Test::Unit::TestCase
|
4
|
+
describe "date validation with a normal string column" do
|
5
|
+
class Person < Ohm::Model
|
6
|
+
include Ohm::DateValidations
|
7
|
+
|
8
|
+
attribute :birthday
|
9
|
+
|
10
|
+
def validate
|
11
|
+
assert_date :birthday
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
test "accepts all canonical dates" do
|
16
|
+
assert Person.new(:birthday => "2010-05-05").valid?
|
17
|
+
assert Person.new(:birthday => "2010-5-5").valid?
|
18
|
+
assert Person.new(:birthday => "2010-05-5").valid?
|
19
|
+
assert Person.new(:birthday => "2010-5-05").valid?
|
20
|
+
end
|
21
|
+
|
22
|
+
test "also catches invalid dates" do
|
23
|
+
assert ! Person.new(:birthday => "2010-02-29").valid?
|
24
|
+
end
|
25
|
+
|
26
|
+
test "invalid when empty" do
|
27
|
+
assert ! Person.new(:birthday => "").valid?
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/test/test_ohm_typecast.rb
CHANGED
@@ -614,4 +614,45 @@ class TestOhmTypecast < Test::Unit::TestCase
|
|
614
614
|
assert_equal %{"\\\"FooBar\\\""}, post.addresses.inspect
|
615
615
|
end
|
616
616
|
end
|
617
|
-
|
617
|
+
|
618
|
+
context "when using Boolean" do
|
619
|
+
class User < Ohm::Model
|
620
|
+
include Ohm::Typecast
|
621
|
+
|
622
|
+
attribute :is_admin, Boolean
|
623
|
+
end
|
624
|
+
|
625
|
+
test "empty is nil" do
|
626
|
+
assert_equal nil, User.new.is_admin
|
627
|
+
|
628
|
+
u = User.create
|
629
|
+
u = User[u.id]
|
630
|
+
|
631
|
+
assert_equal nil, User.new.is_admin
|
632
|
+
end
|
633
|
+
|
634
|
+
test "false, 0, '0' is false" do
|
635
|
+
[false, 0, '0'].each do |val|
|
636
|
+
assert_equal false, User.new(:is_admin => val).is_admin
|
637
|
+
end
|
638
|
+
|
639
|
+
[false, 0, '0'].each do |val|
|
640
|
+
u = User.create(:is_admin => val)
|
641
|
+
u = User[u.id]
|
642
|
+
assert_equal false, u.is_admin
|
643
|
+
end
|
644
|
+
end
|
645
|
+
|
646
|
+
test "true, 1, '1' is true" do
|
647
|
+
[true, 1, '1'].each do |val|
|
648
|
+
assert_equal true, User.new(:is_admin => val).is_admin
|
649
|
+
end
|
650
|
+
|
651
|
+
[true, 1, '1'].each do |val|
|
652
|
+
u = User.create(:is_admin => val)
|
653
|
+
u = User[u.id]
|
654
|
+
assert_equal true, u.is_admin
|
655
|
+
end
|
656
|
+
end
|
657
|
+
end
|
658
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 24
|
9
|
+
version: 0.0.24
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Cyril David
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-06-
|
17
|
+
date: 2010-06-11 00:00:00 +08:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- lib/ohm/contrib.rb
|
97
97
|
- lib/ohm/contrib/boundaries.rb
|
98
98
|
- lib/ohm/contrib/callbacks.rb
|
99
|
+
- lib/ohm/contrib/date_validations.rb
|
99
100
|
- lib/ohm/contrib/extra_validations.rb
|
100
101
|
- lib/ohm/contrib/locking.rb
|
101
102
|
- lib/ohm/contrib/number_validations.rb
|
@@ -108,6 +109,7 @@ files:
|
|
108
109
|
- test/test_ohm_boundaries.rb
|
109
110
|
- test/test_ohm_contrib.rb
|
110
111
|
- test/test_ohm_contrib_callbacks.rb
|
112
|
+
- test/test_ohm_date_validations.rb
|
111
113
|
- test/test_ohm_extra_validations.rb
|
112
114
|
- test/test_ohm_number_validations.rb
|
113
115
|
- test/test_ohm_timestamping.rb
|
@@ -149,6 +151,7 @@ test_files:
|
|
149
151
|
- test/test_ohm_boundaries.rb
|
150
152
|
- test/test_ohm_contrib.rb
|
151
153
|
- test/test_ohm_contrib_callbacks.rb
|
154
|
+
- test/test_ohm_date_validations.rb
|
152
155
|
- test/test_ohm_extra_validations.rb
|
153
156
|
- test/test_ohm_number_validations.rb
|
154
157
|
- test/test_ohm_timestamping.rb
|