daily_affirmation 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f9de5dd78a0bef74b3651afb803f155368e25584
4
- data.tar.gz: 09f91e14d2dbb1b5792f6e839f33df8652060294
3
+ metadata.gz: ad1c5a4b4e1e7249d7c2d5dbf1fa15f12359e42c
4
+ data.tar.gz: f78b555770fa41e2d8fa5067386fc222f4cedcd1
5
5
  SHA512:
6
- metadata.gz: 274adb6724f09c22837e088d1b05c879114d9cfbc1a76ba1b7055d8e8dfd9d0adb1761514d9ad2af20916bb96cfa7ecbb657009773fc5d40f820b764c5415068
7
- data.tar.gz: 9ac90e5455aa763cba07ef3c6c062a72bd7f6a4267ac4efb4163d79f5866c9281077e10e76dcc3ae16e9f94da53222c09009a49b240227e3f34688240ec3bcea
6
+ metadata.gz: 021ecc75cfd176b1c0dcef4c20483390eae03c1cd6fbc70ed1ecb59a017668c26407ef50d953b82d95e2f69a073c8bd68cae5755d0ff848d495abbbe8d92e268
7
+ data.tar.gz: 59f2f6394cf6d359e39b8a7c441b2ae9882ce7e6bd63f993a4690418dd114c06d418b29810a5339f427e164ca99bb2153f8cc3cb0a1aab6b67c2eb0c4c5e1785
@@ -0,0 +1,43 @@
1
+ require_relative "../validator"
2
+
3
+ module DailyAffirmation
4
+ module Validators
5
+ class DateValidator < Validator
6
+ def valid?
7
+ @valid ||= parseable?
8
+ end
9
+
10
+ def error_message
11
+ @error_message ||= i18n_error_message(
12
+ :format, :default => "#{attribute} is not a valid #{as}"
13
+ )
14
+ end
15
+
16
+ private
17
+
18
+ def parseable?
19
+ value.is_a?(klass) || !!klass.parse(value)
20
+ rescue ArgumentError
21
+ false
22
+ end
23
+
24
+ def as
25
+ opts.fetch(:as, :date)
26
+ end
27
+
28
+ def klass
29
+ case as
30
+ when :date
31
+ Date
32
+ when :datetime
33
+ DateTime
34
+ when :time
35
+ Time
36
+ else
37
+ raise OptionError,
38
+ "Invalid value for `:as`: #{opts[:as]}. Valid options are :date, :datetime and :time."
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -1,3 +1,3 @@
1
1
  module DailyAffirmation
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -4,6 +4,7 @@ require_relative "daily_affirmation/validators/absence_validator"
4
4
  require_relative "daily_affirmation/validators/acceptance_validator"
5
5
  require_relative "daily_affirmation/validators/confirmation_validator"
6
6
  require_relative "daily_affirmation/validators/custom_validator"
7
+ require_relative "daily_affirmation/validators/date_validator"
7
8
  require_relative "daily_affirmation/validators/equality_validator"
8
9
  require_relative "daily_affirmation/validators/exclusion_validator"
9
10
  require_relative "daily_affirmation/validators/format_validator"
@@ -14,6 +15,8 @@ require_relative "daily_affirmation/validators/presence_validator"
14
15
  require_relative "daily_affirmation/version"
15
16
 
16
17
  module DailyAffirmation
18
+ OptionError = Class.new(StandardError)
19
+
17
20
  def self.affirmations
18
21
  Module.new do
19
22
  def self.included(descendant)
@@ -21,7 +21,11 @@ describe "Validator" do
21
21
  end
22
22
 
23
23
  context "i18n required" do
24
- before(:all) { require "i18n" }
24
+ before(:all) do
25
+ require "i18n"
26
+ I18n.enforce_available_locales = false
27
+ end
28
+
25
29
  after(:all) { Object.send(:remove_const, :I18n) if defined?(I18n) }
26
30
 
27
31
  it "uses specific translation if available" do
@@ -0,0 +1,135 @@
1
+ require_relative "../spec_helper"
2
+ require_relative "../../lib/daily_affirmation/validators/date_validator"
3
+
4
+ require "date"
5
+
6
+ unless defined?(DailyAffirmation::OptionError)
7
+ DailyAffirmation::OptionError = Class.new(StandardError)
8
+ end
9
+
10
+ describe "DateValidator" do
11
+ subject { DailyAffirmation::Validators::DateValidator }
12
+
13
+ context ":as is unset" do
14
+ it "passes validation if the attribute is a valid date" do
15
+ obj1 = double(:created_at => Date.today)
16
+ obj2 = double(:created_at => Date.today.to_s)
17
+
18
+ validator1 = subject.new(obj1, :created_at)
19
+ validator2 = subject.new(obj2, :created_at)
20
+ expect(validator1).to be_valid
21
+ expect(validator2).to be_valid
22
+ end
23
+
24
+ it "fails validation if the attribute is an invalid date" do
25
+ obj = double(:created_at => "Invalid Date")
26
+
27
+ validator = subject.new(obj, :created_at)
28
+ expect(validator).to_not be_valid
29
+ end
30
+
31
+ it "has the correct error message" do
32
+ obj = double(:created_at => "Invalid Date")
33
+
34
+ validator = subject.new(obj, :created_at)
35
+ expect(validator.error_message).to eq(
36
+ "created_at is not a valid date"
37
+ )
38
+ end
39
+ end
40
+
41
+ context ":as is :date" do
42
+ it "passes validation if the attribute is a valid date" do
43
+ obj1 = double(:created_at => Date.today)
44
+ obj2 = double(:created_at => Date.today.to_s)
45
+
46
+ validator1 = subject.new(obj1, :created_at, :as => :date)
47
+ validator2 = subject.new(obj2, :created_at, :as => :date)
48
+ expect(validator1).to be_valid
49
+ expect(validator2).to be_valid
50
+ end
51
+
52
+ it "fails validation if the attribute is an invalid date" do
53
+ obj = double(:created_at => "Invalid Date")
54
+
55
+ validator = subject.new(obj, :created_at, :as => :date)
56
+ expect(validator).to_not be_valid
57
+ end
58
+
59
+ it "has the correct error message" do
60
+ obj = double(:created_at => "Invalid Date")
61
+
62
+ validator = subject.new(obj, :created_at, :as => :date)
63
+ expect(validator.error_message).to eq(
64
+ "created_at is not a valid date"
65
+ )
66
+ end
67
+ end
68
+
69
+ context ":as is :datetime" do
70
+ it "passes validation if the attribute is a valid datetime" do
71
+ obj1 = double(:created_at => DateTime.now)
72
+ obj2 = double(:created_at => DateTime.now.to_s)
73
+
74
+ validator1 = subject.new(obj1, :created_at, :as => :datetime)
75
+ validator2 = subject.new(obj2, :created_at, :as => :datetime)
76
+ expect(validator1).to be_valid
77
+ expect(validator2).to be_valid
78
+ end
79
+
80
+ it "fails validation if the attribute is an invalid datetime" do
81
+ obj = double(:created_at => "Invalid DateTime")
82
+
83
+ validator = subject.new(obj, :created_at, :as => :datetime)
84
+ expect(validator).to_not be_valid
85
+ end
86
+
87
+ it "has the correct error message" do
88
+ obj = double(:created_at => "Invalid DateTime")
89
+
90
+ validator = subject.new(obj, :created_at, :as => :datetime)
91
+ expect(validator.error_message).to eq(
92
+ "created_at is not a valid datetime"
93
+ )
94
+ end
95
+ end
96
+
97
+ context ":as is :time" do
98
+ it "passes validation if the attribute is a valid time" do
99
+ obj1 = double(:created_at => Time.now)
100
+ obj2 = double(:created_at => Time.now.to_s)
101
+
102
+ validator1 = subject.new(obj1, :created_at, :as => :time)
103
+ validator2 = subject.new(obj2, :created_at, :as => :time)
104
+ expect(validator1).to be_valid
105
+ expect(validator2).to be_valid
106
+ end
107
+
108
+ it "fails validation if the attribute is an invalid time" do
109
+ obj = double(:created_at => "Invalid Time")
110
+
111
+ validator = subject.new(obj, :created_at, :as => :time)
112
+ expect(validator).to_not be_valid
113
+ end
114
+
115
+ it "has the correct error message" do
116
+ obj = double(:created_at => "Invalid Time")
117
+
118
+ validator = subject.new(obj, :created_at, :as => :time)
119
+ expect(validator.error_message).to eq(
120
+ "created_at is not a valid time"
121
+ )
122
+ end
123
+ end
124
+
125
+ context ":as is invalid" do
126
+ it "raises an ArgumentError" do
127
+ obj = double(:created_at => "Invalid Time")
128
+
129
+ validator = subject.new(obj, :created_at, :as => :foo)
130
+ expect {
131
+ validator.valid?
132
+ }.to raise_error(DailyAffirmation::OptionError)
133
+ end
134
+ end
135
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daily_affirmation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Emmons
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-06 00:00:00.000000000 Z
11
+ date: 2014-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -87,6 +87,7 @@ files:
87
87
  - lib/daily_affirmation/validators/acceptance_validator.rb
88
88
  - lib/daily_affirmation/validators/confirmation_validator.rb
89
89
  - lib/daily_affirmation/validators/custom_validator.rb
90
+ - lib/daily_affirmation/validators/date_validator.rb
90
91
  - lib/daily_affirmation/validators/equality_validator.rb
91
92
  - lib/daily_affirmation/validators/exclusion_validator.rb
92
93
  - lib/daily_affirmation/validators/format_validator.rb
@@ -105,6 +106,7 @@ files:
105
106
  - spec/validators/acceptance_validator_spec.rb
106
107
  - spec/validators/confirmation_validator_spec.rb
107
108
  - spec/validators/custom_validator_spec.rb
109
+ - spec/validators/date_validator_spec.rb
108
110
  - spec/validators/equality_validator_spec.rb
109
111
  - spec/validators/exclusion_validator_spec.rb
110
112
  - spec/validators/format_validator_spec.rb
@@ -147,6 +149,7 @@ test_files:
147
149
  - spec/validators/acceptance_validator_spec.rb
148
150
  - spec/validators/confirmation_validator_spec.rb
149
151
  - spec/validators/custom_validator_spec.rb
152
+ - spec/validators/date_validator_spec.rb
150
153
  - spec/validators/equality_validator_spec.rb
151
154
  - spec/validators/exclusion_validator_spec.rb
152
155
  - spec/validators/format_validator_spec.rb