modelish 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ ## O.1.1 (2011-03-28)
2
+
3
+ * Add DateTime to standard supported property types.
4
+
5
+ ## 0.1.0 (2011-03-28)
6
+
7
+ * Initial release, extending hashie to add property types and validations.
@@ -29,6 +29,7 @@ module Modelish
29
29
  # * +Float+
30
30
  # * +Array+
31
31
  # * +Date+ -- converts using Date.parse on value.to_s
32
+ # * +DateTime+ -- converts using DateTime.parse on value.to_s
32
33
  # * +Symbol+ -- also converts from camel case to snake case
33
34
  # * +String+
34
35
  # * any arbitrary +Class+ -- will attempt conversion by passing the raw
@@ -112,8 +113,8 @@ module Modelish
112
113
  end
113
114
 
114
115
  def value_converter(property_type)
115
- if property_type == Date
116
- lambda { |val| Date.parse(val.to_s) }
116
+ if [Date, DateTime].include?(property_type)
117
+ lambda { |val| property_type.parse(val.to_s) }
117
118
  elsif property_type == Symbol
118
119
  lambda { |val| val.to_s.strip.gsub(/([A-Z]+)([A-Z][a-z])/, '\\1_\\2').
119
120
  gsub(/([a-z\d])([A-Z])/, '\\1_\\2').
@@ -172,6 +172,7 @@ module Modelish
172
172
  # * +Integer+
173
173
  # * +Float+
174
174
  # * +Date+
175
+ # * +DateTime+
175
176
  # * +Symbol+
176
177
  # * any arbitrary +Class+ -- validates based on the results of is_a?
177
178
  # @return [ArgumentError] when validation fails
@@ -185,8 +186,8 @@ module Modelish
185
186
  is_valid = (value.is_a?(Integer) || value.to_s =~ /^\-?\d+$/)
186
187
  elsif type == Float
187
188
  is_valid = (value.is_a?(Float) || value.to_s =~ /^\-?\d+\.?\d*$/)
188
- elsif type == Date
189
- is_valid = (value.is_a?(Date) || Date.parse(value))
189
+ elsif [Date, DateTime].include?(type)
190
+ is_valid = value.is_a?(type) || (type.parse(value.to_s) rescue false)
190
191
  elsif type == Symbol
191
192
  is_valid = value.respond_to?(:to_sym)
192
193
  else
@@ -1,3 +1,3 @@
1
1
  module Modelish
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -55,6 +55,16 @@ describe Modelish::PropertyTypes do
55
55
  end
56
56
  end
57
57
 
58
+ context "when property_type is DateTime" do
59
+ let(:property_type) { DateTime }
60
+
61
+ it_should_behave_like 'a typed property', :my_property, DateTime do
62
+ let(:valid_string) { '2011-02-24T14:09:43-07:00' }
63
+ let(:valid_typed_value) { DateTime.civil(2011, 2, 24, 14, 9, 43, Rational(-7, 24)) }
64
+ let(:invalid_value) { 'foo' }
65
+ end
66
+ end
67
+
58
68
  context "when property_type is String" do
59
69
  let(:property_type) { String }
60
70
 
@@ -389,6 +389,37 @@ describe Modelish::Validations do
389
389
  end
390
390
  end
391
391
 
392
+ context "for type DateTime" do
393
+ let(:property_type) { DateTime }
394
+
395
+ context "with nil value" do
396
+ let(:property_value) { nil }
397
+
398
+ it { should be_nil }
399
+ end
400
+
401
+ context "with valid string" do
402
+ let(:property_value) { '2011-03-10T03:15:23-05:00' }
403
+
404
+ it { should be_nil }
405
+ end
406
+
407
+ context "with valid DateTime" do
408
+ let(:property_value) { DateTime.civil(2011, 3, 10, 3, 15, 23, Rational(-5, 24)) }
409
+
410
+ it { should be_nil }
411
+ end
412
+
413
+ context "with invalid value" do
414
+ let(:property_value) { 'this is not a date time' }
415
+
416
+ it { should be_an ArgumentError }
417
+ its(:message) { should match(/#{property_name}/i) }
418
+ its(:message) { should match(/#{property_value.inspect}/i) }
419
+ its(:message) { should match(/#{property_type}/i) }
420
+ end
421
+ end
422
+
392
423
  context "for a Symbol type" do
393
424
  let(:property_type) { Symbol }
394
425
 
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: modelish
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 25
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
8
  - 1
8
- - 0
9
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
10
11
  platform: ruby
11
12
  authors:
12
13
  - Maeve Revels
@@ -25,6 +26,7 @@ dependencies:
25
26
  requirements:
26
27
  - - ~>
27
28
  - !ruby/object:Gem::Version
29
+ hash: 15
28
30
  segments:
29
31
  - 1
30
32
  - 0
@@ -39,6 +41,7 @@ dependencies:
39
41
  requirements:
40
42
  - - ~>
41
43
  - !ruby/object:Gem::Version
44
+ hash: 9
42
45
  segments:
43
46
  - 2
44
47
  - 5
@@ -53,6 +56,7 @@ dependencies:
53
56
  requirements:
54
57
  - - ~>
55
58
  - !ruby/object:Gem::Version
59
+ hash: 7
56
60
  segments:
57
61
  - 0
58
62
  - 6
@@ -67,6 +71,7 @@ dependencies:
67
71
  requirements:
68
72
  - - ~>
69
73
  - !ruby/object:Gem::Version
74
+ hash: 25
70
75
  segments:
71
76
  - 2
72
77
  - 0
@@ -82,6 +87,7 @@ dependencies:
82
87
  requirements:
83
88
  - - ">="
84
89
  - !ruby/object:Gem::Version
90
+ hash: 3
85
91
  segments:
86
92
  - 0
87
93
  version: "0"
@@ -100,6 +106,7 @@ files:
100
106
  - .gitignore
101
107
  - .rspec
102
108
  - .rvmrc
109
+ - CHANGELOG.md
103
110
  - Gemfile
104
111
  - LICENSE
105
112
  - README.md
@@ -132,6 +139,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
132
139
  requirements:
133
140
  - - ">="
134
141
  - !ruby/object:Gem::Version
142
+ hash: 3
135
143
  segments:
136
144
  - 0
137
145
  version: "0"
@@ -140,13 +148,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
148
  requirements:
141
149
  - - ">="
142
150
  - !ruby/object:Gem::Version
151
+ hash: 3
143
152
  segments:
144
153
  - 0
145
154
  version: "0"
146
155
  requirements: []
147
156
 
148
157
  rubyforge_project: modelish
149
- rubygems_version: 1.3.7
158
+ rubygems_version: 1.6.2
150
159
  signing_key:
151
160
  specification_version: 3
152
161
  summary: A lightweight pseudo-modeling not-quite-framework