ohm-contrib 0.0.31 → 0.0.33

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,30 +0,0 @@
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
@@ -1,32 +0,0 @@
1
- require "helper"
2
-
3
- class OhmExtraValidationsTest < Test::Unit::TestCase
4
- context "membership assertion" do
5
- class Order < Ohm::Model
6
- include Ohm::ExtraValidations
7
-
8
- attribute :state
9
-
10
- def validate
11
- assert_member :state, %w(pending authorized declined)
12
- end
13
- end
14
-
15
- should "be successful given all the members" do
16
- order = Order.new(:state => 'pending')
17
- assert order.valid?
18
-
19
- order = Order.new(:state => 'authorized')
20
- assert order.valid?
21
-
22
- order = Order.new(:state => 'declined')
23
- assert order.valid?
24
- end
25
-
26
- should "fail on a non-member" do
27
- order = Order.new(:state => 'foobar')
28
- assert ! order.valid?
29
- assert_equal [[:state, :not_member]], order.errors
30
- end
31
- end
32
- end
@@ -1,32 +0,0 @@
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
@@ -1,165 +0,0 @@
1
- require "helper"
2
-
3
- class LunarMacrosTest < Test::Unit::TestCase
4
- setup do
5
- Ohm.flush
6
- end
7
-
8
- class Post < Ohm::Model
9
- include Ohm::LunarMacros
10
- end
11
-
12
- test "fuzzy / text / number / sortable" do
13
- Post.fuzzy :name
14
- assert_equal [:name], Post.fuzzy
15
-
16
- Post.text :name
17
- assert_equal [:name], Post.text
18
-
19
- Post.number :name
20
- assert_equal [:name], Post.number
21
-
22
- Post.sortable :name
23
- assert_equal [:name], Post.sortable
24
- end
25
-
26
- test "fuzzy / text / number / sortable done twice" do
27
- Post.fuzzy :name
28
- Post.fuzzy :name
29
- assert_equal [:name], Post.fuzzy
30
-
31
- Post.text :name
32
- Post.text :name
33
- assert_equal [:name], Post.text
34
-
35
- Post.number :name
36
- Post.number :name
37
- assert_equal [:name], Post.number
38
-
39
- Post.sortable :name
40
- Post.sortable :name
41
- assert_equal [:name], Post.sortable
42
- end
43
-
44
- context "on create" do
45
- class Document < Ohm::Model
46
- include Ohm::LunarMacros
47
-
48
- fuzzy :filename
49
- text :content
50
- number :author_id
51
- sortable :views
52
-
53
- def filename() "Filename" end
54
- def content() "Content" end
55
- def author_id() 100 end
56
- def views() 15 end
57
- end
58
-
59
- test "indexes filename" do
60
- doc = stub("Doc", fuzzy: nil, text: nil, number: nil, sortable: nil)
61
- Lunar.expects(:index).with(Document).yields(doc)
62
-
63
- doc.expects(:id).with('1')
64
- doc.expects(:fuzzy).with(:filename, 'Filename')
65
- doc = Document.create
66
- end
67
-
68
- test "indexes content" do
69
- doc = stub("Doc", fuzzy: nil, text: nil, number: nil, sortable: nil)
70
- Lunar.expects(:index).with(Document).yields(doc)
71
-
72
- doc.expects(:id).with('1')
73
- doc.expects(:text).with(:content, 'Content')
74
- doc = Document.create
75
- end
76
-
77
- test "indexes number" do
78
- doc = stub("Doc", fuzzy: nil, text: nil, number: nil, sortable: nil)
79
- Lunar.expects(:index).with(Document).yields(doc)
80
-
81
- doc.expects(:id).with('1')
82
- doc.expects(:number).with(:author_id, 100)
83
- doc = Document.create
84
- end
85
-
86
- test "indexes sortable" do
87
- doc = stub("Doc", fuzzy: nil, text: nil, number: nil, sortable: nil)
88
- Lunar.expects(:index).with(Document).yields(doc)
89
-
90
- doc.expects(:id).with('1')
91
- doc.expects(:sortable).with(:views, 15)
92
- doc = Document.create
93
- end
94
- end
95
-
96
- context "on update" do
97
- class Document < Ohm::Model
98
- include Ohm::LunarMacros
99
-
100
- fuzzy :filename
101
- text :content
102
- number :author_id
103
- sortable :views
104
-
105
- def filename() "Filename" end
106
- def content() "Content" end
107
- def author_id() 100 end
108
- def views() 15 end
109
- end
110
-
111
- test "indexes filename" do
112
- doc = stub("Doc", fuzzy: nil, text: nil, number: nil, sortable: nil)
113
- Lunar.expects(:index).times(2).with(Document).yields(doc)
114
-
115
- doc.expects(:id).times(2).with('1')
116
- doc.expects(:fuzzy).times(2).with(:filename, 'Filename')
117
- doc = Document.create
118
- doc.save
119
- end
120
-
121
- test "indexes content" do
122
- doc = stub("Doc", fuzzy: nil, text: nil, number: nil, sortable: nil)
123
- Lunar.expects(:index).times(2).with(Document).yields(doc)
124
-
125
- doc.expects(:id).times(2).with('1')
126
- doc.expects(:text).times(2).with(:content, 'Content')
127
- doc = Document.create
128
- doc.save
129
- end
130
-
131
- test "indexes number" do
132
- doc = stub("Doc", fuzzy: nil, text: nil, number: nil, sortable: nil)
133
- Lunar.expects(:index).times(2).with(Document).yields(doc)
134
-
135
- doc.expects(:id).times(2).with('1')
136
- doc.expects(:number).times(2).with(:author_id, 100)
137
- doc = Document.create
138
- doc.save
139
- end
140
-
141
- test "indexes sortable" do
142
- doc = stub("Doc", fuzzy: nil, text: nil, number: nil, sortable: nil)
143
- Lunar.expects(:index).times(2).with(Document).yields(doc)
144
-
145
- doc.expects(:id).times(2).with('1')
146
- doc.expects(:sortable).times(2).with(:views, 15)
147
- doc = Document.create
148
- doc.save
149
- end
150
- end
151
-
152
- context "on delete" do
153
- test "executes Lunar.delete" do
154
- doc = stub("Doc", id: nil, fuzzy: nil, text: nil, number: nil,
155
- sortable: nil)
156
-
157
- Lunar.expects(:index).with(Document).yields(doc)
158
-
159
- doc = Document.create
160
-
161
- Lunar.expects(:delete).with(Document, '1')
162
- doc.delete
163
- end
164
- end
165
- end
@@ -1,59 +0,0 @@
1
- require "helper"
2
-
3
- class TestOhmNumberValidations < Test::Unit::TestCase
4
- class Product < Ohm::Model
5
- include Ohm::NumberValidations
6
-
7
- attribute :price
8
- attribute :optional_price
9
-
10
- def validate
11
- assert_decimal :price
12
- assert_decimal :optional_price unless optional_price.to_s.empty?
13
- end
14
- end
15
-
16
- context "given no price" do
17
- should "still validate as :not_decimal" do
18
- product = Product.new(:price => nil)
19
- product.valid?
20
-
21
- assert_equal [[:price, :not_decimal]], product.errors
22
- end
23
- end
24
-
25
- context "given a 0.10 value" do
26
- should "validate as a decimal" do
27
- product = Product.new(:price => 0.10)
28
-
29
- assert product.valid?
30
- end
31
- end
32
-
33
- context "given 1 as a value" do
34
- should "validate as a decimal" do
35
- product = Product.new(:price => 1)
36
-
37
- assert product.valid?
38
- end
39
- end
40
-
41
- context "given 1 dot as a value" do
42
- should "not validate as a decimal" do
43
- product = Product.new(:price => "1.")
44
-
45
- assert ! product.valid?
46
- assert_equal [[:price, :not_decimal]], product.errors
47
- end
48
- end
49
-
50
- context "given no value for optional price" do
51
- should "have no validation errors" do
52
- product = Product.new(:price => 10.1, :optional_price => nil)
53
- assert product.valid?
54
-
55
- product = Product.new(:price => 10.1, :optional_price => '')
56
- assert product.valid?
57
- end
58
- end
59
- end
@@ -1,29 +0,0 @@
1
- require "helper"
2
-
3
- class OhmSlugTest < Test::Unit::TestCase
4
- module Finder
5
- def [](id)
6
- new(id)
7
- end
8
- end
9
-
10
- class BaseWithoutToParam < Struct.new(:id)
11
- extend Finder
12
-
13
- include Ohm::Slug
14
-
15
- def to_s
16
- "A very Unique and Interesting String?'"
17
- end
18
- end
19
-
20
- test "to_param" do
21
- obj = BaseWithoutToParam.new(1)
22
-
23
- assert_equal '1-a-very-unique-and-interesting-string', obj.to_param
24
- end
25
-
26
- test "finding" do
27
- assert_equal 1, BaseWithoutToParam['1-a-very-unique'].id
28
- end
29
- end
@@ -1,64 +0,0 @@
1
- require "helper"
2
-
3
- class TestOhmTimestamping < Test::Unit::TestCase
4
- setup do
5
- Ohm.flush
6
- end
7
-
8
- class Person < Ohm::Model
9
- include Ohm::Timestamping
10
- end
11
-
12
- context "a new? record" do
13
- should "have no created_at" do
14
- assert_nil Person.new.created_at
15
- end
16
-
17
- should "have no updated_at" do
18
- assert_nil Person.new.updated_at
19
- end
20
- end
21
-
22
- context "on create" do
23
- setup do
24
- @now = Time.utc(2010, 5, 12)
25
- Timecop.freeze(@now)
26
- @person = Person.create
27
- @person = Person[@person.id]
28
- end
29
-
30
-
31
- should "set the created_at equal to the current time" do
32
- assert_equal @now.to_s, @person.created_at
33
- end
34
-
35
- should "also set the updated_at equal to the current time" do
36
- assert_equal @now.to_s, @person.updated_at
37
- end
38
- end
39
-
40
- context "on update" do
41
- setup do
42
- Timecop.freeze(Time.utc(2010, 10, 30))
43
-
44
- @person = Person.create
45
- @old_created_at = @person.created_at.to_s
46
- @old_updated_at = @person.updated_at.to_s
47
-
48
- @now = Time.utc(2010, 10, 31)
49
- Timecop.freeze(@now)
50
-
51
- @person.save
52
- @person = Person[@person.id]
53
- end
54
-
55
- should "leave created_at unchanged" do
56
- assert_equal @old_created_at, @person.created_at
57
- end
58
-
59
- should "set updated_at to the current Time" do
60
- assert_not_equal @old_updated_at, @person.updated_at
61
- assert_equal @now.to_s, @person.updated_at
62
- end
63
- end
64
- end
@@ -1,67 +0,0 @@
1
- require "helper"
2
-
3
- class TestOhmToHash < Test::Unit::TestCase
4
- setup do
5
- Ohm.flush
6
- end
7
-
8
- context "a Person with name: matz, age: nil, skills: 10" do
9
- class Person < Ohm::Model
10
- include Ohm::ToHash
11
-
12
- attribute :name
13
- attribute :age
14
- attribute :skills
15
- end
16
-
17
- setup do
18
- @person = Person.create(:name => 'matz', :skills => 10)
19
- @person = Person[@person.id]
20
- end
21
-
22
- should "have a to_hash of { id: 1, name: 'matz', age: nil, skills: 10 }" do
23
- assert_equal(
24
- { :id => '1', :name => "matz", :age => nil, :skills => '10' },
25
- @person.to_hash
26
- )
27
- end
28
- end
29
-
30
- context "when a Post has a votes counter" do
31
- class Post < Ohm::Model
32
- include Ohm::ToHash
33
-
34
- counter :votes
35
- end
36
-
37
- setup do
38
- @post = Post.create
39
- @post.incr :votes
40
- @post.incr :votes
41
- @post.incr :votes
42
- end
43
-
44
- should "include the votes in the hash" do
45
- assert_equal({ :id => '1', :votes => 3 }, @post.to_hash)
46
- end
47
- end
48
-
49
- context "when a comment has a reference to a person" do
50
- self::Person = Class.new(Ohm::Model)
51
-
52
- class Comment < Ohm::Model
53
- include Ohm::ToHash
54
-
55
- reference :person, Person
56
- end
57
-
58
- setup do
59
- @person = Person.create
60
- @comment = Comment.create(:person => @person)
61
- end
62
-
63
- should "have the person_id in the hash" do
64
- assert_equal({ :id => '1', :person_id => '1' }, @comment.to_hash)
65
- end
66
- end
67
- end