ohm-contrib 0.0.3 → 0.0.4

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 CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -1,6 +1,6 @@
1
1
  module Ohm
2
2
  module Contrib
3
- VERSION = '0.0.3'
3
+ VERSION = '0.0.4'
4
4
  end
5
5
 
6
6
  autoload :Boundaries, "ohm/contrib/boundaries"
@@ -3,15 +3,72 @@ require 'time'
3
3
  require 'date'
4
4
 
5
5
  module Ohm
6
+ module Types
7
+ class String < ::String
8
+ def self.[](value)
9
+ value
10
+ end
11
+ end
12
+
13
+ class Time < ::Time
14
+ def self.[](value)
15
+ return value if value.to_s.empty?
16
+
17
+ ret = parse(value)
18
+ ret.to_s == value ? ret : value
19
+ end
20
+ end
21
+
22
+ class Date < ::Date
23
+ def self.[](value)
24
+ return value if value.to_s.empty?
25
+
26
+ parse(value)
27
+ rescue ArgumentError
28
+ value
29
+ end
30
+ end
31
+
32
+ class Decimal
33
+ def self.[](value)
34
+ return value if value.to_s.empty?
35
+
36
+ BigDecimal(value)
37
+ end
38
+ end
39
+
40
+ class Float < ::Float
41
+ def self.[](value)
42
+ return value if value.to_s.empty?
43
+
44
+ Float(value)
45
+ rescue ArgumentError
46
+ value
47
+ end
48
+ end
49
+
50
+ class Integer < ::Integer
51
+ def self.[](value)
52
+ return value if value.to_s.empty?
53
+
54
+ Integer(value)
55
+ rescue ArgumentError
56
+ value
57
+ end
58
+ end
59
+ end
60
+
6
61
  module Typecast
62
+ include Types
63
+
7
64
  def self.included(base)
8
- base.extend Macros
65
+ base.extend Macros
9
66
  end
10
-
67
+
11
68
  module Macros
12
- def attribute(name, type = :string)
69
+ def attribute(name, type = String)
13
70
  define_method(name) do
14
- typecast(read_local(name), type)
71
+ type[read_local(name)]
15
72
  end
16
73
 
17
74
  define_method(:"#{name}=") do |value|
@@ -21,28 +78,5 @@ module Ohm
21
78
  attributes << name unless attributes.include?(name)
22
79
  end
23
80
  end
24
-
25
- protected
26
- def typecast(val, type)
27
- return val if val.to_s.empty?
28
-
29
- case type
30
- when :integer then Integer(val)
31
- when :float then Float(val)
32
- when :decimal then BigDecimal(val)
33
- when :time
34
- ret = Time.parse(val)
35
- ret.to_s == val ? ret : val
36
-
37
- when :date then Date.parse(val)
38
- when :string then val
39
- end
40
-
41
- # All of the casting methods used above raises an ArgumentError
42
- # if it fails to parse the value properly. If this happens,
43
- # the least surprising behavior is to return the original value
44
- rescue ArgumentError
45
- val
46
- end
47
81
  end
48
82
  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.3"
8
+ s.version = "0.0.4"
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"]
@@ -5,7 +5,7 @@ class TestOhmTypecast < Test::Unit::TestCase
5
5
  class Product < Ohm::Model
6
6
  include Ohm::Typecast
7
7
 
8
- attribute :price, :decimal
8
+ attribute :price, Decimal
9
9
  end
10
10
 
11
11
  should "properly preserve the right precision" do
@@ -22,7 +22,7 @@ class TestOhmTypecast < Test::Unit::TestCase
22
22
  class Product < Ohm::Model
23
23
  include Ohm::Typecast
24
24
 
25
- attribute :start_of_sale, :time
25
+ attribute :start_of_sale, Time
26
26
  end
27
27
 
28
28
  test "read / write" do
@@ -37,8 +37,8 @@ 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
-
41
- assert_instance_of Time, product.start_of_sale
40
+
41
+ assert_kind_of Time, product.start_of_sale
42
42
  end
43
43
 
44
44
  test "an invalid string" do
@@ -63,7 +63,7 @@ class TestOhmTypecast < Test::Unit::TestCase
63
63
  class Product < Ohm::Model
64
64
  include Ohm::Typecast
65
65
 
66
- attribute :date_bought, :date
66
+ attribute :date_bought, Date
67
67
  end
68
68
 
69
69
  test "read / write" do
@@ -79,7 +79,7 @@ class TestOhmTypecast < Test::Unit::TestCase
79
79
  product = Product.create(:date_bought => @date)
80
80
  product = Product[product.id]
81
81
 
82
- assert_instance_of Date, product.date_bought
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
@@ -101,7 +101,7 @@ class TestOhmTypecast < Test::Unit::TestCase
101
101
  class Product < Ohm::Model
102
102
  include Ohm::Typecast
103
103
 
104
- attribute :stock_count, :integer
104
+ attribute :stock_count, Integer
105
105
  end
106
106
 
107
107
  test "when nil" do
@@ -129,7 +129,7 @@ class TestOhmTypecast < Test::Unit::TestCase
129
129
  class Product < Ohm::Model
130
130
  include Ohm::Typecast
131
131
 
132
- attribute :vat, :float
132
+ attribute :vat, Float
133
133
  end
134
134
 
135
135
  test "when nil" do
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Cyril David