ohm-contrib 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE CHANGED
@@ -17,4 +17,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
17
  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
18
  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
19
  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -14,14 +14,14 @@ Example usage
14
14
 
15
15
  require 'ohm'
16
16
  require 'ohm/contrib'
17
-
17
+
18
18
  class Post < Ohm::Model
19
19
  include Ohm::Timestamping
20
20
  include Ohm::ToHash
21
21
  include Ohm::Boundaries
22
22
  include Ohm::WebValidations
23
23
  include Ohm::NumberValidations
24
-
24
+
25
25
  attribute :amount
26
26
  attribute :url
27
27
  attribute :poster_email
@@ -51,12 +51,12 @@ Example usage
51
51
  # Casting example
52
52
  class Product
53
53
  include Ohm::Typecast
54
-
55
- attribute :price, :decimal
56
- attribute :start_of_sale, :time
57
- attribute :end_of_sale, :time
58
- attribute :priority, :integer
59
- attribute :rating, :float
54
+
55
+ attribute :price, Decimal
56
+ attribute :start_of_sale, Time
57
+ attribute :end_of_sale, Time
58
+ attribute :priority, Integer
59
+ attribute :rating, Float
60
60
  end
61
61
 
62
62
  Credits
@@ -70,10 +70,10 @@ Note on Patches/Pull Requests
70
70
  * Add tests for it. This is important so I don't break it in a
71
71
  future version unintentionally.
72
72
  * Commit, do not mess with rakefile, version, or history.
73
- (if you want to have your own version, that is fine but bump version in a
73
+ (if you want to have your own version, that is fine but bump version in a
74
74
  commit by itself I can ignore when I pull)
75
75
  * Send me a pull request. Bonus points for topic branches.
76
76
 
77
77
  Copyright
78
78
  ---------
79
- Copyright (c) 2010 Cyril David. See LICENSE for details.
79
+ Copyright (c) 2010 Cyril David. See LICENSE for details.
data/Rakefile CHANGED
@@ -52,4 +52,4 @@ Rake::RDocTask.new do |rdoc|
52
52
  rdoc.title = "ohm-contrib #{version}"
53
53
  rdoc.rdoc_files.include('README*')
54
54
  rdoc.rdoc_files.include('lib/**/*.rb')
55
- end
55
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5
@@ -1,6 +1,6 @@
1
1
  module Ohm
2
2
  module Contrib
3
- VERSION = '0.0.4'
3
+ VERSION = '0.0.5'
4
4
  end
5
5
 
6
6
  autoload :Boundaries, "ohm/contrib/boundaries"
@@ -1,7 +1,7 @@
1
1
  module Ohm
2
2
  module Boundaries
3
3
  def self.included(base)
4
- base.extend ClassMethods
4
+ base.extend ClassMethods
5
5
  end
6
6
 
7
7
  module ClassMethods
@@ -14,4 +14,4 @@ module Ohm
14
14
  end
15
15
  end
16
16
  end
17
- end
17
+ end
@@ -6,4 +6,4 @@ module Ohm
6
6
  assert_format(att, /^(\d+)?(\.\d+)?$/, error)
7
7
  end
8
8
  end
9
- end
9
+ end
@@ -4,7 +4,7 @@ module Ohm
4
4
  base.attribute :created_at
5
5
  base.attribute :updated_at
6
6
  end
7
-
7
+
8
8
  def create
9
9
  self.created_at ||= Time.now.utc
10
10
 
@@ -18,4 +18,4 @@ module Ohm
18
18
  super
19
19
  end
20
20
  end
21
- end
21
+ end
@@ -8,4 +8,4 @@ module Ohm
8
8
  end
9
9
  alias :to_h :to_hash
10
10
  end
11
- end
11
+ end
@@ -22,7 +22,7 @@ module Ohm
22
22
  class Date < ::Date
23
23
  def self.[](value)
24
24
  return value if value.to_s.empty?
25
-
25
+
26
26
  parse(value)
27
27
  rescue ArgumentError
28
28
  value
@@ -30,10 +30,16 @@ module Ohm
30
30
  end
31
31
 
32
32
  class Decimal
33
+ CANONICAL = /^(\d+)?(\.\d+)?(E[+\-]\d+)?$/
34
+
33
35
  def self.[](value)
34
36
  return value if value.to_s.empty?
35
37
 
36
- BigDecimal(value)
38
+ if value.to_s =~ CANONICAL
39
+ BigDecimal(value)
40
+ else
41
+ value
42
+ end
37
43
  end
38
44
  end
39
45
 
@@ -64,7 +70,7 @@ module Ohm
64
70
  def self.included(base)
65
71
  base.extend Macros
66
72
  end
67
-
73
+
68
74
  module Macros
69
75
  def attribute(name, type = String)
70
76
  define_method(name) do
@@ -79,4 +85,4 @@ module Ohm
79
85
  end
80
86
  end
81
87
  end
82
- end
88
+ end
@@ -32,4 +32,4 @@ module Ohm
32
32
  assert_ipv4(att, error)
33
33
  end
34
34
  end
35
- end
35
+ end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ohm-contrib}
8
- s.version = "0.0.4"
8
+ s.version = "0.0.5"
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,4 +12,4 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
12
12
  require 'ohm/contrib'
13
13
 
14
14
  class Test::Unit::TestCase
15
- end
15
+ end
@@ -4,20 +4,20 @@ class TestOhmBoundaries < Test::Unit::TestCase
4
4
  setup do
5
5
  Ohm.flush
6
6
  end
7
-
7
+
8
8
  class Person < Ohm::Model
9
9
  include Ohm::Boundaries
10
10
 
11
11
  attribute :name
12
12
  end
13
-
13
+
14
14
  context "when there are no People" do
15
15
  should "have a nil Person.first" do
16
16
  assert_nil Person.first
17
17
  end
18
18
 
19
19
  should "have a nil Person.last" do
20
- assert_nil Person.last
20
+ assert_nil Person.last
21
21
  end
22
22
  end
23
23
 
@@ -31,7 +31,7 @@ class TestOhmBoundaries < Test::Unit::TestCase
31
31
  end
32
32
 
33
33
  should "have matz as the last person" do
34
- assert_equal @matz, Person.last
34
+ assert_equal @matz, Person.last
35
35
  end
36
36
  end
37
37
 
@@ -40,13 +40,13 @@ class TestOhmBoundaries < Test::Unit::TestCase
40
40
  @matz = Person.create(:name => "matz")
41
41
  @linus = Person.create(:name => "linus")
42
42
  end
43
-
43
+
44
44
  should "have matz as the first Person" do
45
45
  assert_equal @matz, Person.first
46
- end
46
+ end
47
47
 
48
48
  should "have linus as the last Person" do
49
49
  assert_equal @linus, Person.last
50
- end
50
+ end
51
51
  end
52
- end
52
+ end
@@ -30,10 +30,10 @@ class TestOhmContrib < Test::Unit::TestCase
30
30
  Ohm::NumberValidations
31
31
  end
32
32
  end
33
-
33
+
34
34
  test "autoloading of Typecast" do
35
35
  assert_nothing_raised NameError, LoadError do
36
36
  Ohm::Typecast
37
37
  end
38
38
  end
39
- end
39
+ end
@@ -12,7 +12,7 @@ class TestOhmNumberValidations < Test::Unit::TestCase
12
12
  assert_decimal :optional_price unless optional_price.to_s.empty?
13
13
  end
14
14
  end
15
-
15
+
16
16
  context "given no price" do
17
17
  should "still validate as :not_decimal" do
18
18
  product = Product.new(:price => nil)
@@ -29,7 +29,7 @@ class TestOhmNumberValidations < Test::Unit::TestCase
29
29
  assert product.valid?
30
30
  end
31
31
  end
32
-
32
+
33
33
  context "given 1 as a value" do
34
34
  should "validate as a decimal" do
35
35
  product = Product.new(:price => 1)
@@ -56,4 +56,4 @@ class TestOhmNumberValidations < Test::Unit::TestCase
56
56
  assert product.valid?
57
57
  end
58
58
  end
59
- end
59
+ end
@@ -11,11 +11,11 @@ class TestOhmTimestamping < Test::Unit::TestCase
11
11
 
12
12
  context "a new? record" do
13
13
  should "have no created_at" do
14
- assert_nil Person.new.created_at
14
+ assert_nil Person.new.created_at
15
15
  end
16
16
 
17
17
  should "have no updated_at" do
18
- assert_nil Person.new.updated_at
18
+ assert_nil Person.new.updated_at
19
19
  end
20
20
  end
21
21
 
@@ -26,8 +26,8 @@ class TestOhmTimestamping < Test::Unit::TestCase
26
26
  @person = Person.create
27
27
  @person = Person[@person.id]
28
28
  end
29
-
30
-
29
+
30
+
31
31
  should "set the created_at equal to the current time" do
32
32
  assert_equal @now.to_s, @person.created_at
33
33
  end
@@ -48,13 +48,13 @@ class TestOhmTimestamping < Test::Unit::TestCase
48
48
  @person.save
49
49
  @person = Person[@person.id]
50
50
  end
51
-
51
+
52
52
  should "leave created_at unchanged" do
53
53
  assert_equal @old_created_at, @person.created_at
54
54
  end
55
-
55
+
56
56
  should "set updated_at to the current Time" do
57
57
  assert_equal @now.to_s, @person.updated_at
58
58
  end
59
59
  end
60
- end
60
+ end
@@ -18,7 +18,7 @@ class TestOhmToHash < Test::Unit::TestCase
18
18
  @person = Person.create(:name => 'matz', :skills => 10)
19
19
  @person = Person[@person.id]
20
20
  end
21
-
21
+
22
22
  should "have a to_hash of { id: 1, name: 'matz', age: nil, skills: 10 }" do
23
23
  assert_equal(
24
24
  { :id => '1', :name => "matz", :age => nil, :skills => '10' },
@@ -26,7 +26,7 @@ class TestOhmToHash < Test::Unit::TestCase
26
26
  )
27
27
  end
28
28
  end
29
-
29
+
30
30
  context "when a Post has a votes counter" do
31
31
  class Post < Ohm::Model
32
32
  include Ohm::ToHash
@@ -48,7 +48,7 @@ class TestOhmToHash < Test::Unit::TestCase
48
48
 
49
49
  context "when a comment has a reference to a person" do
50
50
  Person = Class.new(Ohm::Model)
51
-
51
+
52
52
  class Comment < Ohm::Model
53
53
  include Ohm::ToHash
54
54
 
@@ -64,4 +64,4 @@ class TestOhmToHash < Test::Unit::TestCase
64
64
  assert_equal({ :id => '1', :person_id => '1' }, @comment.to_hash)
65
65
  end
66
66
  end
67
- end
67
+ end
@@ -29,7 +29,7 @@ class TestOhmTypecast < Test::Unit::TestCase
29
29
  @time = Time.now.utc
30
30
  product = Product.create(:start_of_sale => @time)
31
31
  product = Product[product.id]
32
-
32
+
33
33
  assert_equal @time, product.start_of_sale
34
34
  end
35
35
 
@@ -37,7 +37,7 @@ class TestOhmTypecast < Test::Unit::TestCase
37
37
  @time = Time.now.utc
38
38
  product = Product.create(:start_of_sale => @time)
39
39
  product = Product[product.id]
40
-
40
+
41
41
  assert_kind_of Time, product.start_of_sale
42
42
  end
43
43
 
@@ -78,16 +78,16 @@ class TestOhmTypecast < Test::Unit::TestCase
78
78
  @date = Date.today
79
79
  product = Product.create(:date_bought => @date)
80
80
  product = Product[product.id]
81
-
81
+
82
82
  assert_kind_of Date, product.date_bought
83
83
  end
84
84
 
85
85
  test "assigning a string which is not a valid date before persisting" do
86
86
  product = Product.create(:date_bought => "Bla Bla")
87
-
87
+
88
88
  assert_equal "Bla Bla", product.date_bought
89
89
  end
90
-
90
+
91
91
  test "when nil" do
92
92
  assert_nil Product.new.date_bought
93
93
  end
@@ -156,4 +156,25 @@ class TestOhmTypecast < Test::Unit::TestCase
156
156
  assert_equal 0.12, Product.new(:vat => ".12").vat
157
157
  end
158
158
  end
159
- end
159
+
160
+ context "trying to validate numericality of a decimal" do
161
+ class Item < Ohm::Model
162
+ include Ohm::Typecast
163
+
164
+ attribute :price, Decimal
165
+
166
+ def validate
167
+ assert_numeric :price
168
+ end
169
+ end
170
+
171
+ setup do
172
+ @item = Item.new(:price => "FooBar")
173
+ end
174
+
175
+ test "invalidation of price" do
176
+ assert ! @item.valid?
177
+ assert_equal [[:price, :not_numeric]], @item.errors
178
+ end
179
+ end
180
+ end
@@ -26,7 +26,7 @@ class TestOhmWebValidations < Test::Unit::TestCase
26
26
  assert_email :email
27
27
  end
28
28
  end
29
-
29
+
30
30
  context "The slug should be valid" do
31
31
  def setup
32
32
  @blog_post_01 = BlogPost.new
@@ -36,7 +36,7 @@ class TestOhmWebValidations < Test::Unit::TestCase
36
36
  should "fail if the slug is not valid" do
37
37
  @blog_post_01.slug = "This is a title, not a SLUG"
38
38
  @blog_post_01.create
39
-
39
+
40
40
  assert @blog_post_01.new?
41
41
  assert_equal [[:slug, :not_slug]], @blog_post_01.errors
42
42
  end
@@ -108,6 +108,6 @@ class TestOhmWebValidations < Test::Unit::TestCase
108
108
  assert @comment.new?
109
109
  assert @comment.errors.include? [:homepage, :not_url]
110
110
  end
111
-
111
+
112
112
  end
113
- end
113
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 4
9
- version: 0.0.4
8
+ - 5
9
+ version: 0.0.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Cyril David