smarter_dates 0.2.7.14 → 0.2.8

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/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: