validates_timeliness 3.0.0.beta → 3.0.0.beta.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -29,10 +29,10 @@ As plugin (from master)
29
29
 
30
30
  rails plugin install git://github.com/adzap/validates_timeliness.git
31
31
 
32
- As gem (not working as yet)
32
+ As gem (in beta)
33
33
 
34
34
  # in Gemfile
35
- gem 'validates_timeliness'
35
+ gem 'validates_timeliness', '3.0.0.beta'
36
36
 
37
37
  # Run bundler
38
38
  $ bundle install
@@ -18,6 +18,7 @@ module ValidatesTimeliness
18
18
  def #{attr_name}=(value)
19
19
  @attributes_cache ||= {}
20
20
  @attributes_cache["_#{attr_name}_before_type_cast"] = value
21
+ #{ "value = ValidatesTimeliness::Parser.parse(value, :#{type}) if value.is_a?(String)" if ValidatesTimeliness.use_plugin_parser }
21
22
  super
22
23
  end
23
24
  EOV
@@ -10,30 +10,28 @@ module ValidatesTimeliness
10
10
  end
11
11
 
12
12
  module ValidationMethods
13
- def validates_timeliness_of(*attr_names)
14
- options = _merge_attributes(attr_names)
15
- attributes = options[:attributes].inject({}) {|validated, attr_name|
16
- attr_name = attr_name.to_s
17
- validated[attr_name] = options[:type]
18
- validated
19
- }
20
- self.timeliness_validated_attributes = attributes
21
- validates_with Validator, options
22
- end
23
-
24
13
  def validates_date(*attr_names)
25
- options = attr_names.extract_options!
26
- validates_timeliness_of *(attr_names << options.merge(:type => :date))
14
+ timeliness_validation_for attr_names, :date
27
15
  end
28
16
 
29
17
  def validates_time(*attr_names)
30
- options = attr_names.extract_options!
31
- validates_timeliness_of *(attr_names << options.merge(:type => :time))
18
+ timeliness_validation_for attr_names, :time
32
19
  end
33
20
 
34
21
  def validates_datetime(*attr_names)
35
- options = attr_names.extract_options!
36
- validates_timeliness_of *(attr_names << options.merge(:type => :datetime))
22
+ timeliness_validation_for attr_names, :datetime
23
+ end
24
+
25
+ def timeliness_validation_for(attr_names, type)
26
+ options = _merge_attributes(attr_names)
27
+ options[:type] = type
28
+ attributes = attr_names.inject({}) {|validated, attr_name|
29
+ attr_name = attr_name.to_s
30
+ validated[attr_name] = type
31
+ validated
32
+ }
33
+ self.timeliness_validated_attributes = attributes
34
+ validates_with Validator, options
37
35
  end
38
36
 
39
37
  end
@@ -10,15 +10,7 @@ module ValidatesTimeliness
10
10
  # string values.
11
11
  #
12
12
  class Parser
13
- cattr_accessor :time_formats,
14
- :date_formats,
15
- :datetime_formats,
16
- :time_expressions,
17
- :date_expressions,
18
- :datetime_expressions,
19
- :format_tokens,
20
- :format_proc_args
21
-
13
+ cattr_reader :time_expressions, :date_expressions, :datetime_expressions
22
14
 
23
15
  # Set the threshold value for a two digit year to be considered last century
24
16
  #
@@ -73,6 +65,7 @@ module ValidatesTimeliness
73
65
  # by the next lowest length valid repeating token (e.g. yyy will be
74
66
  # replaced with yy)
75
67
 
68
+ cattr_accessor :time_formats
76
69
  @@time_formats = [
77
70
  'hh:nn:ss',
78
71
  'hh-nn-ss',
@@ -87,6 +80,7 @@ module ValidatesTimeliness
87
80
  'h_ampm'
88
81
  ]
89
82
 
83
+ cattr_accessor :date_formats
90
84
  @@date_formats = [
91
85
  'yyyy-mm-dd',
92
86
  'yyyy/mm/dd',
@@ -101,6 +95,7 @@ module ValidatesTimeliness
101
95
  'd mmm yy'
102
96
  ]
103
97
 
98
+ cattr_accessor :datetime_formats
104
99
  @@datetime_formats = [
105
100
  'yyyy-mm-dd hh:nn:ss',
106
101
  'yyyy-mm-dd h:nn',
@@ -132,11 +127,11 @@ module ValidatesTimeliness
132
127
  # is required. The first capture group will be considered a literal and put
133
128
  # into the validation regexp string as-is. This is a hack.
134
129
  #
130
+ cattr_accessor :format_tokens
135
131
  @@format_tokens = {
136
132
  'ddd' => [ '\w{3,9}' ],
137
133
  'dd' => [ '\d{2}', :day ],
138
134
  'd' => [ '\d{1,2}', :day ],
139
- 'ampm' => [ '[aApP]\.?[mM]\.?', :meridian ],
140
135
  'mmm' => [ '\w{3,9}', :month ],
141
136
  'mm' => [ '\d{2}', :month ],
142
137
  'm' => [ '\d{1,2}', :month ],
@@ -149,6 +144,7 @@ module ValidatesTimeliness
149
144
  'ss' => [ '\d{2}', :sec ],
150
145
  's' => [ '\d{1,2}', :sec ],
151
146
  'u' => [ '\d{1,6}', :usec ],
147
+ 'ampm' => [ '[aApP]\.?[mM]\.?', :meridian ],
152
148
  'zo' => [ '[+-]\d{2}:?\d{2}', :offset ],
153
149
  'tz' => [ '[A-Z]{1,4}' ],
154
150
  '_' => [ '\s?' ]
@@ -163,6 +159,7 @@ module ValidatesTimeliness
163
159
  # The code can be used to manipulate the arg value if required, otherwise
164
160
  # should just be the arg name.
165
161
  #
162
+ cattr_accessor :format_proc_args
166
163
  @@format_proc_args = {
167
164
  :year => [0, 'y', 'unambiguous_year(y)'],
168
165
  :month => [1, 'm', 'month_index(m)'],
@@ -175,7 +172,6 @@ module ValidatesTimeliness
175
172
  :meridian => [nil, 'md', nil]
176
173
  }
177
174
 
178
-
179
175
  @@type_wrapper = {
180
176
  :date => [/\A/, nil],
181
177
  :time => [nil , /\Z/],
@@ -1,3 +1,3 @@
1
1
  module ValidatesTimeliness
2
- VERSION = '3.0.0.beta'
2
+ VERSION = '3.0.0.beta.2'
3
3
  end
@@ -9,6 +9,7 @@ require 'active_support/core_ext/date_time/acts_like'
9
9
  require 'active_support/core_ext/date_time/conversions'
10
10
 
11
11
  module ValidatesTimeliness
12
+ autoload :Parser, 'validates_timeliness/parser'
12
13
  autoload :VERSION, 'validates_timeliness/version'
13
14
 
14
15
  # Add plugin to supported ORMs (only :active_record for now)
@@ -45,7 +46,6 @@ module ValidatesTimeliness
45
46
  end
46
47
  end
47
48
 
48
- require 'validates_timeliness/parser'
49
49
  require 'validates_timeliness/conversion'
50
50
  require 'validates_timeliness/validator'
51
51
  require 'validates_timeliness/helper_methods'
data/spec/spec_helper.rb CHANGED
@@ -56,6 +56,7 @@ class Person
56
56
  define_attribute_methods model_attributes
57
57
  end
58
58
 
59
+ ActiveRecord::Base.time_zone_aware_attributes = true
59
60
  ActiveRecord::Base.establish_connection({:adapter => 'sqlite3', :database => ':memory:'})
60
61
  ActiveRecord::Migration.verbose = false
61
62
  ActiveRecord::Schema.define(:version => 1) do
@@ -6,16 +6,43 @@ describe ValidatesTimeliness::AttributeMethods do
6
6
  end
7
7
 
8
8
  context "attribute write method" do
9
- class EmployeeCopy < ActiveRecord::Base
9
+ class EmployeeWithCache < ActiveRecord::Base
10
10
  set_table_name 'employees'
11
11
  validates_datetime :birth_datetime
12
12
  end
13
13
 
14
14
  it 'should cache attribute raw value' do
15
- r = EmployeeCopy.new
15
+ r = EmployeeWithCache.new
16
16
  r.birth_datetime = date_string = '2010-01-01'
17
17
  r._timeliness_raw_value_for(:birth_datetime).should == date_string
18
18
  end
19
+
20
+ context "with plugin parser" do
21
+ class EmployeeWithParser < ActiveRecord::Base
22
+ set_table_name 'employees'
23
+ validates_datetime :birth_date
24
+ end
25
+
26
+ before :all do
27
+ ValidatesTimeliness.use_plugin_parser = true
28
+ end
29
+
30
+ it 'should parse a string value' do
31
+ ValidatesTimeliness::Parser.should_receive(:parse)
32
+ r = EmployeeWithParser.new
33
+ r.birth_date = '2010-01-01'
34
+ end
35
+
36
+ it 'should be strict on day values' do
37
+ r = EmployeeWithParser.new
38
+ r.birth_date = '2010-02-31'
39
+ r.birth_date.should be_nil
40
+ end
41
+
42
+ after :all do
43
+ ValidatesTimeliness.use_plugin_parser = false
44
+ end
45
+ end
19
46
  end
20
47
 
21
48
  context "before_type_cast method" do
@@ -2,12 +2,12 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{validates_timeliness}
5
- s.version = "3.0.0.beta"
5
+ s.version = "3.0.0.beta.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Adam Meehan"]
9
9
  s.autorequire = %q{validates_timeliness}
10
- s.date = %q{2010-09-17}
10
+ s.date = %q{2010-09-21}
11
11
  s.description = %q{Date and time validation plugin for Rails which allows custom formats}
12
12
  s.email = %q{adam.meehan@gmail.com}
13
13
  s.extra_rdoc_files = ["README.rdoc", "LICENSE", "CHANGELOG"]
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validates_timeliness
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31098225
4
+ hash: 62196423
5
5
  prerelease: true
6
6
  segments:
7
7
  - 3
8
8
  - 0
9
9
  - 0
10
10
  - beta
11
- version: 3.0.0.beta
11
+ - 2
12
+ version: 3.0.0.beta.2
12
13
  platform: ruby
13
14
  authors:
14
15
  - Adam Meehan
@@ -16,7 +17,7 @@ autorequire: validates_timeliness
16
17
  bindir: bin
17
18
  cert_chain: []
18
19
 
19
- date: 2010-09-17 00:00:00 +10:00
20
+ date: 2010-09-21 00:00:00 +10:00
20
21
  default_executable:
21
22
  dependencies: []
22
23