smarter_dates 0.2.7.14 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in smarter_dates.gemspec
4
4
  gemspec
@@ -0,0 +1,51 @@
1
+ # validates attributes are parsable by the chronic gem
2
+ class ChronicParsableValidator < ActiveModel::EachValidator
3
+
4
+ # == Creation
5
+ # To use this Validator, initialize it as any other validator
6
+ #
7
+ # class ExampleValidator < ActiveRecord::Base
8
+ # validates :attr1, :chronic_parsable => true
9
+ # end
10
+
11
+ def initialize(*args) # :nodoc:
12
+ @errors = []
13
+ super(*args)
14
+ end
15
+
16
+ # :call-seq:
17
+ # validate_each :record, :attribute, :value
18
+ #
19
+ # <tt>:record</tt>:: AR instance
20
+ # <tt>:attribute</tt>:: symbol for attribute
21
+ # <tt>:value</tt>:: value to check validity
22
+
23
+ def validate_each(record, attribute, value = "") #:nodoc:
24
+ @value = value
25
+ unless is_valid?
26
+ record.errors[attribute] << 'not a valid Date or DateTime'
27
+ end
28
+ end
29
+
30
+ # :call-seq:
31
+ # is_valid?
32
+ #
33
+ # alias for :is_valid_datetime?
34
+
35
+ def is_valid?
36
+ is_valid_datetime?
37
+ end
38
+
39
+ # :call-seq:
40
+ # is_valid_datetime?
41
+ #
42
+ # returns true if the string is parsable by chronic
43
+
44
+ def is_valid_datetime?
45
+ obj = Chronic.parse(@value.respond_to?(:to_date) ?
46
+ @value.to_date : @value.to_s)
47
+ !obj.nil?
48
+ end
49
+
50
+ end
51
+
@@ -2,23 +2,21 @@ require 'smarter_dates/version'
2
2
  require 'chronic'
3
3
 
4
4
  module SmarterDates
5
- def self.included( klass ) # :nodoc:
5
+ def self.included(klass) # :nodoc:
6
6
  attr_accessor :dt_attributes
7
7
 
8
8
  @dt_attributes = []
9
9
  db_migrated = true
10
10
  if defined?(Rails)
11
11
  begin
12
- @dt_attributes.concat(klass.column_names.select{|k|k.match(/_(?:at|on|dt|d)$/)})
13
- Rails.logger.debug(RuntimeError,"unused include - #{klass.class.to_s} does not have any attributes ending in _at, _on, _dt, or _d") if db_migrated && @dt_attributes.empty?
14
- rescue ActiveRecord::StatementInvalid => e
15
- db_migrated = false
16
- rescue => e
17
- Rails.logger.debug(e.inspect)
18
- db_migrated = false
12
+ @dt_attributes.concat(klass.column_names.select { |k| k.match(/_(?:at|on|dt|d)$/) })
13
+ Rails.logger.debug(RuntimeError, "unused include - #{klass.class.to_s} does not have any attributes ending in _at, _on, _dt, or _d") if db_migrated && @dt_attributes.empty?
14
+ rescue ActiveRecord::StatementInvalid => _
15
+ rescue => err
16
+ Rails.logger.debug(err.inspect)
19
17
  end
20
18
  else
21
- @dt_attributes.concat(klass.instance_methods.select{|k|k.match(/_(?:at|on|dt|d)$/)})
19
+ @dt_attributes.concat(klass.instance_methods.select { |k| k.match(/_(?:at|on|dt|d)$/) })
22
20
  end
23
21
 
24
22
  # :call-seq:
@@ -38,7 +36,7 @@ def self.included( klass ) # :nodoc:
38
36
  begin
39
37
  dt = Chronic.parse(val.to_s)
40
38
  rescue
41
- dt = DateTime.parse(val)
39
+ dt = DateTime.parse(val.to_s)
42
40
  rescue
43
41
  dt = Date.parse(val)
44
42
  rescue
@@ -53,7 +51,7 @@ def self.included( klass ) # :nodoc:
53
51
  self[k] = dt
54
52
  end
55
53
  else
56
- instance_variable_set(:"@#{k}",dt)
54
+ instance_variable_set(:"@#{k}", dt)
57
55
  end
58
56
  end
59
57
  klass.send(:define_method, "#{k}=".to_sym, &parse)
@@ -1,4 +1,4 @@
1
1
  module SmarterDates
2
- VERSION = '0.2.7.14'
2
+ VERSION = '0.2.8'
3
3
  end
4
4
 
data/lib/smarter_dates.rb CHANGED
@@ -1,3 +1,6 @@
1
- require File.join('smarter_dates','version')
2
- require File.join('smarter_dates','parser')
1
+ require File.join('smarter_dates', 'version')
2
+ require File.join('smarter_dates', 'parser')
3
+ if defined? ActiveModel
4
+ require File.join('smarter_dates', 'chronic_parsable_validator')
5
+ end
3
6
 
@@ -2,22 +2,35 @@
2
2
  $:.push File.expand_path('../lib', __FILE__)
3
3
  require 'smarter_dates/version'
4
4
 
5
- Gem::Specification.new do |s|
6
- s.name = 'smarter_dates'
7
- s.version = SmarterDates::VERSION
8
- s.authors = ['Paul Belt']
9
- s.email = ['paul.belt@gmail.com']
10
- s.homepage = 'http://github.com/belt/smarter_dates'
11
- s.summary = %q{Natural language date processing}
12
- s.description = %q{Humans want to think of date and datetime attributes in a natural manner. Standard ruby Date and DateTime objects do not support this well.}
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'smarter_dates'
7
+ spec.version = SmarterDates::VERSION
8
+ spec.authors = ['Paul Belt']
9
+ spec.email = %w(paul.belt@gmail.com)
10
+ spec.homepage = 'http://github.com/belt/smarter_dates'
11
+ spec.summary = %q{Natural language date processing}
12
+ spec.description = %q{Humans want to think of date and datetime attributes in a natural manner. Standard ruby Date and DateTime objects do not support this well.}
13
13
 
14
- s.rubyforge_project = 'smarter_dates'
14
+ spec.rubyforge_project = 'smarter_dates'
15
15
 
16
- s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
- s.require_paths = ['lib']
16
+ spec.files = `git ls-files`.split("\n")
17
+ spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ spec.require_paths = %w(lib)
20
+ spec.required_ruby_version = Gem::Requirement.new('>= 1.8.7')
21
+ spec.required_rubygems_version = Gem::Requirement.new('>= 0') if spec.respond_to? :required_rubygems_version=
20
22
 
21
- s.add_dependency('chronic')
23
+ if spec.respond_to? :specification_version
24
+ spec.specification_version = 3
25
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0')
26
+ spec.add_runtime_dependency 'chronic', ['>= 0']
27
+ spec.add_development_dependency 'bundler', ['~> 1.3']
28
+ spec.add_development_dependency 'rake', ['>= 0']
29
+ else
30
+ spec.add_dependency('chronic')
31
+ end
32
+ else
33
+ spec.add_dependency('chronic')
34
+ end
22
35
  end
23
36
 
@@ -1,6 +1,6 @@
1
1
  require 'test/unit'
2
2
 
3
- if $LOAD_PATH.include?(File.expand_path(File.join(File.dirname(__FILE__),'..','lib')))
3
+ if $LOAD_PATH.include?(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
4
4
  require 'smarter_dates'
5
5
  else
6
6
  raise RuntimeError, "Try ruby -Ilib test/#{File.basename(__FILE__)}"
@@ -26,13 +26,13 @@ class SmarterDatesTest < Test::Unit::TestCase
26
26
  last_week = now - 60 * 60 * 24 * 7
27
27
  yesterday = now - 60 * 60 * 24
28
28
 
29
- @model.name = "Paul Belt"
30
- @model.birth_d = "22 April 1976"
31
- @model.meeting_dt = "today"
32
- @model.created_on = "one week ago"
33
- @model.updated_at = "yesterday"
29
+ @model.name = 'Paul Belt'
30
+ @model.birth_d = '22 April 1976'
31
+ @model.meeting_dt = 'today'
32
+ @model.created_on = 'one week ago'
33
+ @model.updated_at = 'yesterday'
34
34
 
35
- assert_equal "Paul Belt", @model.name
35
+ assert_equal 'Paul Belt', @model.name
36
36
 
37
37
  assert_equal 1976, @model.birth_d.year
38
38
  assert_equal 4, @model.birth_d.mon
@@ -53,7 +53,7 @@ class SmarterDatesTest < Test::Unit::TestCase
53
53
  end
54
54
 
55
55
  def test_parsing_failures
56
- @model.birth_d = "32 April 1976"
56
+ @model.birth_d = '32 April 1976'
57
57
  assert_equal nil, @model.birth_d
58
58
 
59
59
  @model.birth_d = nil
@@ -61,7 +61,7 @@ class SmarterDatesTest < Test::Unit::TestCase
61
61
 
62
62
  # TODO: fix this in chronic
63
63
  if false
64
- @model.birth_d = "30 Feb 1976"
64
+ @model.birth_d = '30 Feb 1976'
65
65
  assert_equal nil, @model.birth_d
66
66
  end
67
67
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smarter_dates
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7.14
4
+ version: 0.2.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-14 00:00:00.000000000Z
12
+ date: 2013-03-11 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: chronic
16
- requirement: &2193725540 !ruby/object:Gem::Requirement
16
+ requirement: &2267243440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,29 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2193725540
24
+ version_requirements: *2267243440
25
+ - !ruby/object:Gem::Dependency
26
+ name: bundler
27
+ requirement: &2267242960 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '1.3'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2267242960
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
38
+ requirement: &2267242480 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2267242480
25
47
  description: Humans want to think of date and datetime attributes in a natural manner.
26
48
  Standard ruby Date and DateTime objects do not support this well.
27
49
  email:
@@ -37,6 +59,7 @@ files:
37
59
  - Rakefile
38
60
  - VERSION.yml
39
61
  - lib/smarter_dates.rb
62
+ - lib/smarter_dates/chronic_parsable_validator.rb
40
63
  - lib/smarter_dates/parser.rb
41
64
  - lib/smarter_dates/version.rb
42
65
  - smarter_dates.gemspec
@@ -52,7 +75,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
52
75
  requirements:
53
76
  - - ! '>='
54
77
  - !ruby/object:Gem::Version
55
- version: '0'
78
+ version: 1.8.7
56
79
  required_rubygems_version: !ruby/object:Gem::Requirement
57
80
  none: false
58
81
  requirements:
@@ -67,4 +90,3 @@ specification_version: 3
67
90
  summary: Natural language date processing
68
91
  test_files:
69
92
  - test/smarter_dates_test.rb
70
- has_rdoc: