ohm-contrib 0.0.28 → 0.0.29
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/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/ohm/contrib/boundaries.rb +10 -2
- data/lib/ohm/contrib/extra_validations.rb +4 -1
- data/lib/ohm/contrib/length_validations.rb +31 -0
- data/lib/ohm/contrib/locking.rb +4 -4
- data/lib/ohm/contrib/lunar_macros.rb +5 -1
- data/lib/ohm/contrib/typecast.rb +10 -1
- data/lib/ohm/contrib.rb +2 -1
- data/ohm-contrib.gemspec +7 -7
- data/test/test_ohm_boundaries.rb +2 -2
- data/test/test_ohm_length_validations.rb +32 -0
- data/test/test_ohm_typecast.rb +44 -0
- metadata +17 -19
data/Rakefile
CHANGED
@@ -12,7 +12,7 @@ begin
|
|
12
12
|
gem.authors = ["Cyril David"]
|
13
13
|
gem.add_development_dependency "contest", ">= 0"
|
14
14
|
gem.add_development_dependency "redis", ">= 0"
|
15
|
-
gem.add_development_dependency "ohm", ">= 0"
|
15
|
+
# gem.add_development_dependency "ohm", ">= 0"
|
16
16
|
gem.add_development_dependency "timecop", ">= 0"
|
17
17
|
gem.add_development_dependency "mocha", ">= 0"
|
18
18
|
gem.add_development_dependency "lunar", ">= 0"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.29
|
@@ -21,11 +21,19 @@ module Ohm
|
|
21
21
|
|
22
22
|
module ClassMethods
|
23
23
|
def first(opts = {})
|
24
|
-
|
24
|
+
if opts.any?
|
25
|
+
find(opts).first
|
26
|
+
else
|
27
|
+
all.first(opts)
|
28
|
+
end
|
25
29
|
end
|
26
30
|
|
27
31
|
def last(opts = {})
|
28
|
-
|
32
|
+
if opts.any?
|
33
|
+
find(opts).first(:order => "DESC")
|
34
|
+
else
|
35
|
+
all.first(:order => "DESC")
|
36
|
+
end
|
29
37
|
end
|
30
38
|
end
|
31
39
|
end
|
@@ -23,6 +23,8 @@ module Ohm
|
|
23
23
|
# assert_url :url
|
24
24
|
# assert_email :author_email
|
25
25
|
# assert_date :birthday
|
26
|
+
# assert_min_length :slug, 10
|
27
|
+
# assert_max_length :slug, 25
|
26
28
|
# end
|
27
29
|
# end
|
28
30
|
#
|
@@ -30,11 +32,12 @@ module Ohm
|
|
30
32
|
# post.valid?
|
31
33
|
# post.errors
|
32
34
|
# # [[:price, :not_decimal], [:state, :not_member], [:ipaddr, :not_ipaddr],
|
33
|
-
# # [:url, :not_url], [:author_email, :not_email]]
|
35
|
+
# # [:url, :not_url], [:author_email, :not_email],[:slug, :too_short]]
|
34
36
|
module ExtraValidations
|
35
37
|
include NumberValidations
|
36
38
|
include WebValidations
|
37
39
|
include DateValidations
|
40
|
+
include LengthValidations
|
38
41
|
|
39
42
|
protected
|
40
43
|
def assert_member(att, set, error = [att, :not_member])
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Ohm
|
2
|
+
module LengthValidations
|
3
|
+
|
4
|
+
def assert_min_length(att, length, error = [att, :too_short])
|
5
|
+
if assert_present(att, error)
|
6
|
+
m = send(att).to_s
|
7
|
+
assert is_long_enough?(m, length), error
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def assert_max_length(att, length, error = [att, :too_long])
|
12
|
+
if assert_present(att, error)
|
13
|
+
m = send(att).to_s
|
14
|
+
assert is_too_long?(m, length), error
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def is_too_long?(string, length)
|
20
|
+
string.size <= length
|
21
|
+
rescue ArgumentError
|
22
|
+
return false
|
23
|
+
end
|
24
|
+
|
25
|
+
def is_long_enough?(string, length)
|
26
|
+
string.size >= length
|
27
|
+
rescue ArgumentError
|
28
|
+
return false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/ohm/contrib/locking.rb
CHANGED
@@ -29,11 +29,11 @@ module Ohm
|
|
29
29
|
#
|
30
30
|
# @see Model#mutex
|
31
31
|
def lock!(wait = 0.1)
|
32
|
-
until
|
33
|
-
next unless lock =
|
32
|
+
until key[:_lock].setnx(lock_timeout)
|
33
|
+
next unless lock = key[:_lock].get
|
34
34
|
sleep(wait) and next unless lock_expired?(lock)
|
35
35
|
|
36
|
-
break unless lock =
|
36
|
+
break unless lock = key[:_lock].getset(lock_timeout)
|
37
37
|
break if lock_expired?(lock)
|
38
38
|
end
|
39
39
|
end
|
@@ -41,7 +41,7 @@ module Ohm
|
|
41
41
|
# Release the lock.
|
42
42
|
# @see Model#mutex
|
43
43
|
def unlock!
|
44
|
-
|
44
|
+
key[:_lock].del
|
45
45
|
end
|
46
46
|
|
47
47
|
def lock_timeout
|
@@ -39,7 +39,11 @@ module Ohm
|
|
39
39
|
self.class.lunar_fields(type).each do |field|
|
40
40
|
value = send(field)
|
41
41
|
|
42
|
-
|
42
|
+
if type == :text and value.kind_of?(Enumerable)
|
43
|
+
i.text field, value.join(' ') unless value.empty?
|
44
|
+
else
|
45
|
+
i.send type, field, value unless value.to_s.empty?
|
46
|
+
end
|
43
47
|
end
|
44
48
|
end
|
45
49
|
end
|
data/lib/ohm/contrib/typecast.rb
CHANGED
@@ -111,8 +111,17 @@ module Ohm
|
|
111
111
|
class Time < Primitive
|
112
112
|
delegate_to ::Time
|
113
113
|
|
114
|
+
YYYY_MM_DD = /\A([0-9]{4})-([01]?[0-9])-([0123]?[0-9])\z/
|
115
|
+
YYYY_MM_DD_HH_MM_SS = /\A([0-9]{4})-([01]?[0-9])-([0123]?[0-9]) ([\d]{1,2}):([\d]{1,2})(:([\d]{1,2}))?\z/
|
116
|
+
|
114
117
|
def object
|
115
|
-
|
118
|
+
if @raw =~ YYYY_MM_DD
|
119
|
+
::Time.utc($1, $2, $3)
|
120
|
+
elsif @raw =~ YYYY_MM_DD_HH_MM_SS
|
121
|
+
::Time.utc($1, $2, $3, $4, $5, $7)
|
122
|
+
else
|
123
|
+
::Time.parse(@raw)
|
124
|
+
end
|
116
125
|
end
|
117
126
|
end
|
118
127
|
|
data/lib/ohm/contrib.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
module Ohm
|
2
2
|
module Contrib
|
3
|
-
VERSION = '0.0.
|
3
|
+
VERSION = '0.0.29'
|
4
4
|
end
|
5
5
|
|
6
6
|
autoload :Boundaries, "ohm/contrib/boundaries"
|
7
7
|
autoload :Timestamping, "ohm/contrib/timestamping"
|
8
8
|
autoload :ToHash, "ohm/contrib/to_hash"
|
9
|
+
autoload :LengthValidations, "ohm/contrib/length_validations"
|
9
10
|
autoload :WebValidations, "ohm/contrib/web_validations"
|
10
11
|
autoload :NumberValidations, "ohm/contrib/number_validations"
|
11
12
|
autoload :DateValidations, "ohm/contrib/date_validations"
|
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.29"
|
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-07-
|
12
|
+
s.date = %q{2010-07-27}
|
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 = [
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
"lib/ohm/contrib/callbacks.rb",
|
29
29
|
"lib/ohm/contrib/date_validations.rb",
|
30
30
|
"lib/ohm/contrib/extra_validations.rb",
|
31
|
+
"lib/ohm/contrib/length_validations.rb",
|
31
32
|
"lib/ohm/contrib/locking.rb",
|
32
33
|
"lib/ohm/contrib/lunar_macros.rb",
|
33
34
|
"lib/ohm/contrib/number_validations.rb",
|
@@ -43,6 +44,7 @@ Gem::Specification.new do |s|
|
|
43
44
|
"test/test_ohm_contrib_callbacks.rb",
|
44
45
|
"test/test_ohm_date_validations.rb",
|
45
46
|
"test/test_ohm_extra_validations.rb",
|
47
|
+
"test/test_ohm_length_validations.rb",
|
46
48
|
"test/test_ohm_lunar_macros.rb",
|
47
49
|
"test/test_ohm_number_validations.rb",
|
48
50
|
"test/test_ohm_slug.rb",
|
@@ -54,7 +56,7 @@ Gem::Specification.new do |s|
|
|
54
56
|
s.homepage = %q{http://labs.sinefunc.com/ohm-contrib}
|
55
57
|
s.rdoc_options = ["--charset=UTF-8"]
|
56
58
|
s.require_paths = ["lib"]
|
57
|
-
s.rubygems_version = %q{1.3.
|
59
|
+
s.rubygems_version = %q{1.3.7}
|
58
60
|
s.summary = %q{A collection of ohm related modules}
|
59
61
|
s.test_files = [
|
60
62
|
"test/helper.rb",
|
@@ -63,6 +65,7 @@ Gem::Specification.new do |s|
|
|
63
65
|
"test/test_ohm_contrib_callbacks.rb",
|
64
66
|
"test/test_ohm_date_validations.rb",
|
65
67
|
"test/test_ohm_extra_validations.rb",
|
68
|
+
"test/test_ohm_length_validations.rb",
|
66
69
|
"test/test_ohm_lunar_macros.rb",
|
67
70
|
"test/test_ohm_number_validations.rb",
|
68
71
|
"test/test_ohm_slug.rb",
|
@@ -76,17 +79,15 @@ Gem::Specification.new do |s|
|
|
76
79
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
77
80
|
s.specification_version = 3
|
78
81
|
|
79
|
-
if Gem::Version.new(Gem::
|
82
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
80
83
|
s.add_development_dependency(%q<contest>, [">= 0"])
|
81
84
|
s.add_development_dependency(%q<redis>, [">= 0"])
|
82
|
-
s.add_development_dependency(%q<ohm>, [">= 0"])
|
83
85
|
s.add_development_dependency(%q<timecop>, [">= 0"])
|
84
86
|
s.add_development_dependency(%q<mocha>, [">= 0"])
|
85
87
|
s.add_development_dependency(%q<lunar>, [">= 0"])
|
86
88
|
else
|
87
89
|
s.add_dependency(%q<contest>, [">= 0"])
|
88
90
|
s.add_dependency(%q<redis>, [">= 0"])
|
89
|
-
s.add_dependency(%q<ohm>, [">= 0"])
|
90
91
|
s.add_dependency(%q<timecop>, [">= 0"])
|
91
92
|
s.add_dependency(%q<mocha>, [">= 0"])
|
92
93
|
s.add_dependency(%q<lunar>, [">= 0"])
|
@@ -94,7 +95,6 @@ Gem::Specification.new do |s|
|
|
94
95
|
else
|
95
96
|
s.add_dependency(%q<contest>, [">= 0"])
|
96
97
|
s.add_dependency(%q<redis>, [">= 0"])
|
97
|
-
s.add_dependency(%q<ohm>, [">= 0"])
|
98
98
|
s.add_dependency(%q<timecop>, [">= 0"])
|
99
99
|
s.add_dependency(%q<mocha>, [">= 0"])
|
100
100
|
s.add_dependency(%q<lunar>, [">= 0"])
|
data/test/test_ohm_boundaries.rb
CHANGED
@@ -60,14 +60,14 @@ class TestOhmBoundaries < Test::Unit::TestCase
|
|
60
60
|
context "when searching name => linus" do
|
61
61
|
test "linus is first and last" do
|
62
62
|
assert_equal @linus, Person.first(:name => "linus")
|
63
|
-
assert_equal @linus, Person.last(:name => "linus")
|
63
|
+
assert_equal @linus, Person.last(:name => "linus")
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
67
|
context "when searching name => quentin" do
|
68
68
|
should "have nil as first and last" do
|
69
69
|
assert_nil Person.first(:name => "quentin")
|
70
|
-
assert_nil Person.last(:name => "quentin")
|
70
|
+
assert_nil Person.last(:name => "quentin")
|
71
71
|
end
|
72
72
|
end
|
73
73
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
class LengthValidationsTest < Test::Unit::TestCase
|
4
|
+
describe "length validation with a normal string column" do
|
5
|
+
class Person < Ohm::Model
|
6
|
+
include Ohm::LengthValidations
|
7
|
+
|
8
|
+
attribute :name
|
9
|
+
|
10
|
+
def validate
|
11
|
+
assert_min_length :name, 5
|
12
|
+
assert_max_length :name, 10
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
test "valid length name" do
|
17
|
+
assert Person.new(:name => "bob smith").valid?
|
18
|
+
end
|
19
|
+
|
20
|
+
test "also catches short strings" do
|
21
|
+
assert ! Person.new(:name => "bob").valid?
|
22
|
+
end
|
23
|
+
|
24
|
+
test "also catches long strings" do
|
25
|
+
assert ! Person.new(:name => "robert smithson").valid?
|
26
|
+
end
|
27
|
+
|
28
|
+
test "invalid when empty" do
|
29
|
+
assert ! Person.new(:name => "").valid?
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/test/test_ohm_typecast.rb
CHANGED
@@ -289,6 +289,50 @@ class TestOhmTypecast < Test::Unit::TestCase
|
|
289
289
|
end
|
290
290
|
end
|
291
291
|
|
292
|
+
context "timezones and the Time type" do
|
293
|
+
class Post < Ohm::Model
|
294
|
+
include Ohm::Typecast
|
295
|
+
|
296
|
+
attribute :printed_at, Time
|
297
|
+
end
|
298
|
+
|
299
|
+
test "2010-08-07 is parsed as 2010-08-07 00:00:00 UTC" do
|
300
|
+
post = Post.new(:printed_at => "2010-08-07")
|
301
|
+
assert_equal Time.utc(2010, 8, 7).to_s, post.printed_at.utc.to_s
|
302
|
+
|
303
|
+
post.save
|
304
|
+
post = Post[post.id]
|
305
|
+
assert_equal Time.utc(2010, 8, 7).to_s, post.printed_at.utc.to_s
|
306
|
+
end
|
307
|
+
|
308
|
+
test "2010-08-07 00:00 is parsed as 2010-08-07 00:00:00 UTC" do
|
309
|
+
post = Post.new(:printed_at => "2010-08-07 00:00")
|
310
|
+
assert_equal Time.utc(2010, 8, 7).to_s, post.printed_at.utc.to_s
|
311
|
+
|
312
|
+
post.save
|
313
|
+
post = Post[post.id]
|
314
|
+
assert_equal Time.utc(2010, 8, 7).to_s, post.printed_at.utc.to_s
|
315
|
+
end
|
316
|
+
|
317
|
+
test "2010-08-07 18:29 is parsed as 2010-08-07 18:29:00 UTC" do
|
318
|
+
post = Post.new(:printed_at => "2010-08-07 18:29")
|
319
|
+
assert_equal Time.utc(2010, 8, 7, 18, 29).to_s, post.printed_at.utc.to_s
|
320
|
+
|
321
|
+
post.save
|
322
|
+
post = Post[post.id]
|
323
|
+
assert_equal Time.utc(2010, 8, 7, 18, 29).to_s, post.printed_at.utc.to_s
|
324
|
+
end
|
325
|
+
|
326
|
+
test "2010-08-07 18:29:31 is parsed as 2010-08-07 18:29:31 UTC" do
|
327
|
+
post = Post.new(:printed_at => "2010-08-07 18:29:31")
|
328
|
+
assert_equal Time.utc(2010, 8, 7, 18, 29, 31).to_s, post.printed_at.utc.to_s
|
329
|
+
|
330
|
+
post.save
|
331
|
+
post = Post[post.id]
|
332
|
+
assert_equal Time.utc(2010, 8, 7, 18, 29, 31).to_s, post.printed_at.utc.to_s
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
292
336
|
context "when using a date" do
|
293
337
|
class Post < Ohm::Model
|
294
338
|
include Ohm::Typecast
|
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
|
+
- 29
|
9
|
+
version: 0.0.29
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Cyril David
|
@@ -14,13 +14,14 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-07-
|
17
|
+
date: 2010-07-27 00:00:00 +08:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: contest
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
24
25
|
requirements:
|
25
26
|
- - ">="
|
26
27
|
- !ruby/object:Gem::Version
|
@@ -33,6 +34,7 @@ dependencies:
|
|
33
34
|
name: redis
|
34
35
|
prerelease: false
|
35
36
|
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
36
38
|
requirements:
|
37
39
|
- - ">="
|
38
40
|
- !ruby/object:Gem::Version
|
@@ -42,9 +44,10 @@ dependencies:
|
|
42
44
|
type: :development
|
43
45
|
version_requirements: *id002
|
44
46
|
- !ruby/object:Gem::Dependency
|
45
|
-
name:
|
47
|
+
name: timecop
|
46
48
|
prerelease: false
|
47
49
|
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
48
51
|
requirements:
|
49
52
|
- - ">="
|
50
53
|
- !ruby/object:Gem::Version
|
@@ -54,9 +57,10 @@ dependencies:
|
|
54
57
|
type: :development
|
55
58
|
version_requirements: *id003
|
56
59
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
60
|
+
name: mocha
|
58
61
|
prerelease: false
|
59
62
|
requirement: &id004 !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
60
64
|
requirements:
|
61
65
|
- - ">="
|
62
66
|
- !ruby/object:Gem::Version
|
@@ -66,9 +70,10 @@ dependencies:
|
|
66
70
|
type: :development
|
67
71
|
version_requirements: *id004
|
68
72
|
- !ruby/object:Gem::Dependency
|
69
|
-
name:
|
73
|
+
name: lunar
|
70
74
|
prerelease: false
|
71
75
|
requirement: &id005 !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
72
77
|
requirements:
|
73
78
|
- - ">="
|
74
79
|
- !ruby/object:Gem::Version
|
@@ -77,18 +82,6 @@ dependencies:
|
|
77
82
|
version: "0"
|
78
83
|
type: :development
|
79
84
|
version_requirements: *id005
|
80
|
-
- !ruby/object:Gem::Dependency
|
81
|
-
name: lunar
|
82
|
-
prerelease: false
|
83
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
84
|
-
requirements:
|
85
|
-
- - ">="
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
segments:
|
88
|
-
- 0
|
89
|
-
version: "0"
|
90
|
-
type: :development
|
91
|
-
version_requirements: *id006
|
92
85
|
description: Highly decoupled drop-in functionality for Ohm models
|
93
86
|
email: cyx.ucron@gmail.com
|
94
87
|
executables: []
|
@@ -110,6 +103,7 @@ files:
|
|
110
103
|
- lib/ohm/contrib/callbacks.rb
|
111
104
|
- lib/ohm/contrib/date_validations.rb
|
112
105
|
- lib/ohm/contrib/extra_validations.rb
|
106
|
+
- lib/ohm/contrib/length_validations.rb
|
113
107
|
- lib/ohm/contrib/locking.rb
|
114
108
|
- lib/ohm/contrib/lunar_macros.rb
|
115
109
|
- lib/ohm/contrib/number_validations.rb
|
@@ -125,6 +119,7 @@ files:
|
|
125
119
|
- test/test_ohm_contrib_callbacks.rb
|
126
120
|
- test/test_ohm_date_validations.rb
|
127
121
|
- test/test_ohm_extra_validations.rb
|
122
|
+
- test/test_ohm_length_validations.rb
|
128
123
|
- test/test_ohm_lunar_macros.rb
|
129
124
|
- test/test_ohm_number_validations.rb
|
130
125
|
- test/test_ohm_slug.rb
|
@@ -142,6 +137,7 @@ rdoc_options:
|
|
142
137
|
require_paths:
|
143
138
|
- lib
|
144
139
|
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
145
141
|
requirements:
|
146
142
|
- - ">="
|
147
143
|
- !ruby/object:Gem::Version
|
@@ -149,6 +145,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
149
145
|
- 0
|
150
146
|
version: "0"
|
151
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
|
+
none: false
|
152
149
|
requirements:
|
153
150
|
- - ">="
|
154
151
|
- !ruby/object:Gem::Version
|
@@ -158,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
158
155
|
requirements: []
|
159
156
|
|
160
157
|
rubyforge_project:
|
161
|
-
rubygems_version: 1.3.
|
158
|
+
rubygems_version: 1.3.7
|
162
159
|
signing_key:
|
163
160
|
specification_version: 3
|
164
161
|
summary: A collection of ohm related modules
|
@@ -169,6 +166,7 @@ test_files:
|
|
169
166
|
- test/test_ohm_contrib_callbacks.rb
|
170
167
|
- test/test_ohm_date_validations.rb
|
171
168
|
- test/test_ohm_extra_validations.rb
|
169
|
+
- test/test_ohm_length_validations.rb
|
172
170
|
- test/test_ohm_lunar_macros.rb
|
173
171
|
- test/test_ohm_number_validations.rb
|
174
172
|
- test/test_ohm_slug.rb
|