rspec-validates_timeliness 0.1.0 → 0.1.1

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: e33418e0bc1ca0d9159d7261d703e400d64c5580
4
- data.tar.gz: d07b63180655408b4919558a75bf3e001ab186bc
3
+ metadata.gz: 29e14959d36cf8d82f3c1b1f628d57d5124ad4d4
4
+ data.tar.gz: f66a2898132974c51bf5a783f3c388e3088927bf
5
5
  SHA512:
6
- metadata.gz: 533b1d9f4d0737feaee37c26ef12a0d66d67c28e213b743c7fb11a697af7d0affc1b33a92a6f044a152ab1f510b6c265e2b595045f92d6a33252a0d6cb4ee945
7
- data.tar.gz: 1898aba67ad2dcc7ba31da36cee42b726efa18a88aedfa6e51a876e81c51d90960b4fcdc90b3d95fd860a6f855b295e4c7234cfc6480af135526c63a09d1804d
6
+ metadata.gz: 65f71a940a09f8ccb851fd35efe7cbe2a3f0ef1fada7aa2f1b159e36de84be7b5310dc51b9bfab4e497a44430384c071c92ed8b2357b84ab738e5c4590305a25
7
+ data.tar.gz: 22a2f0ecedd75841d16b20d28deba1a7805048553d3e262b4d14075d053900f1311d4b78197da5923c042e36fec74daf0e547fbd31ea272b43044277eeaf0351
@@ -1,5 +1,13 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
+ - 2.1
5
+ - 2.2
6
+ - 2.3.0
4
7
  - 2.3.1
5
- before_install: gem install bundler -v 1.12.5
8
+ before_install:
9
+ - "gem install bundler -v '~> 1.12'"
10
+ bundler_args: "--jobs=2"
11
+ cache: bundler
12
+ script:
13
+ - "bundle exec rspec"
data/README.md CHANGED
@@ -1,13 +1,12 @@
1
- # RSpec::ValidatesTimeliness
1
+ # RSpec::ValidatesTimeliness [![Build Status](https://travis-ci.org/yhirano55/rspec-validates_timeliness.svg?branch=master)](https://travis-ci.org/yhirano55/rspec-validates_timeliness)
2
2
 
3
3
  Simple RSpec matchers for [validates_timeliness](https://github.com/adzap/validates_timeliness)
4
4
 
5
5
  ## Matchers
6
6
 
7
- - **validates_timeliness_of** tests usage of validates_timeliness
8
- - **validates_datetime** tests usage of `validates_datetime` (alias of `validates_timeliness_of`).
9
- - **validates_date** tests usage of `validates_date` (alias of `validates_timeliness_of`).
10
- - **validates_time** tests usage of `validate_time` (alias of `validates_timeliness_of`).
7
+ - **validates_datetime** tests usage of validates_timeliness's `validates_datetime`.
8
+ - **validates_date** tests usage of validates_timeliness's `validates_date`.
9
+ - **validates_time** tests usage of validates_timeliness's `validate_time`.
11
10
 
12
11
  ## Installation
13
12
 
@@ -37,8 +36,8 @@ class Person
37
36
  validates_time :breakfast_time, is_at: '7:00am'
38
37
  validates_time :updated_at, between: ['9:00am', '5:00pm']
39
38
 
40
- # validates_datetime :start_time, before: :finish_time **[CAUTION] Method symbol is not support**
41
- # validates_date :created_at, on_or_after: :today **[CAUTION] Shorthand is not support**
39
+ # validates_datetime :start_time, before: :finish_time **[NOT SUPPORT] Method symbol
40
+ # validates_date :created_at, on_or_after: :today **[NOT SUPPORT] Shorthand
42
41
  end
43
42
  ```
44
43
 
@@ -48,9 +47,11 @@ And with `rspec-validates_timeliness` we can now make simple assertions about th
48
47
  require 'spec_helper'
49
48
 
50
49
  describe Person, type: :model do
51
- it { is_expected.to validates_date(:date_of_birth).before { 18.years.ago.to_date } }
50
+ it { is_expected.to validates_date(:date_of_birth).before(lambda { 18.years.ago }) }
51
+ it { is_expected.to validates_date(:date_of_birth).before { 18.years.ago } } # The same as previous example
52
52
  it { is_expected.to validates_time(:breakfast_time).is_at('7:00am') }
53
53
  it { is_expected.to validates_time(:updated_at).between(['9:00am', '5:00pm']) }
54
+ it { is_expected.to validates_time(:updated_at).on_or_after('9:00am').on_or_before('5:00pm') } # The same as previous example
54
55
  end
55
56
  ```
56
57
 
@@ -64,4 +65,8 @@ end
64
65
 
65
66
  ## Changelog
66
67
 
67
- * Release 0.0.1 (Jun 12, 2016)
68
+ #### Release 0.1.1 (Jun 13, 2016)
69
+
70
+ * Fix to optimize expected values.
71
+
72
+ #### Release 0.1.0 (Jun 12, 2016)
@@ -6,6 +6,9 @@ require 'rspec-validates_timeliness/matchers/expected_value'
6
6
  require 'rspec-validates_timeliness/matchers/message_builder'
7
7
  require 'rspec-validates_timeliness/matchers/validation_matcher'
8
8
  require 'rspec-validates_timeliness/matchers/validator_proxy'
9
+ require 'rspec-validates_timeliness/matchers/validates_date_matcher'
10
+ require 'rspec-validates_timeliness/matchers/validates_datetime_matcher'
11
+ require 'rspec-validates_timeliness/matchers/validates_time_matcher'
9
12
 
10
13
  module RSpec
11
14
  module ValidatesTimeliness
@@ -1,8 +1,8 @@
1
1
  module RSpec::ValidatesTimeliness
2
2
  module Matchers
3
3
  class ExpectedValue
4
- def initialize(value)
5
- @value = evaluate(value)
4
+ def initialize(value, type)
5
+ @value = evaluate(value, type)
6
6
  end
7
7
 
8
8
  def equal
@@ -31,11 +31,12 @@ module RSpec::ValidatesTimeliness
31
31
 
32
32
  attr_reader :value
33
33
 
34
- def evaluate(value)
34
+ def evaluate(value, type)
35
35
  case value
36
- when Proc then value.call
37
- when Time, DateTime, Date then value
38
- when String then value.to_time
36
+ when Proc
37
+ value.call.try("to_#{type}")
38
+ when Time, DateTime, Date, String
39
+ value.try("to_#{type}")
39
40
  else nil
40
41
  end
41
42
  end
@@ -0,0 +1,16 @@
1
+ module RSpec::ValidatesTimeliness
2
+ module Matchers
3
+ def validates_date(attr_name)
4
+ ValidatesDateMatcher.new(attr_name)
5
+ end
6
+
7
+ class ValidatesDateMatcher < ValidationMatcher
8
+ private
9
+
10
+ def type
11
+ :date
12
+ end
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,16 @@
1
+ module RSpec::ValidatesTimeliness
2
+ module Matchers
3
+ def validates_datetime(attr_name)
4
+ ValidatesDatetimeMatcher.new(attr_name)
5
+ end
6
+
7
+ class ValidatesDatetimeMatcher < ValidationMatcher
8
+ private
9
+
10
+ def type
11
+ :datetime
12
+ end
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,16 @@
1
+ module RSpec::ValidatesTimeliness
2
+ module Matchers
3
+ def validates_time(attr_name)
4
+ ValidatesTimeMatcher.new(attr_name)
5
+ end
6
+
7
+ class ValidatesTimeMatcher < ValidationMatcher
8
+ private
9
+
10
+ def type
11
+ :time
12
+ end
13
+ end
14
+ end
15
+ end
16
+
@@ -1,13 +1,5 @@
1
1
  module RSpec::ValidatesTimeliness
2
2
  module Matchers
3
- def validates_timeliness_of(attr_name)
4
- ValidationMatcher.new(attr_name)
5
- end
6
-
7
- alias validates_date validates_timeliness_of
8
- alias validates_time validates_timeliness_of
9
- alias validates_datetime validates_timeliness_of
10
-
11
3
  class ValidationMatcher
12
4
  attr_reader :description
13
5
 
@@ -68,7 +60,7 @@ module RSpec::ValidatesTimeliness
68
60
 
69
61
  private
70
62
 
71
- attr_reader :attr_name, :options, :subject
63
+ attr_reader :attr_name, :options, :subject, :type
72
64
 
73
65
  def base_description
74
66
  "validate that :#{attr_name} must be"
@@ -93,7 +85,7 @@ module RSpec::ValidatesTimeliness
93
85
 
94
86
  def is_at_correct?
95
87
  run_correct do
96
- value = ExpectedValue.new(options[:is_at])
88
+ value = ExpectedValue.new(options[:is_at], type)
97
89
  description << "at #{value.equal}"
98
90
  valid?(value.equal) && invalid?(value.over) && invalid?(value.under)
99
91
  end
@@ -101,7 +93,7 @@ module RSpec::ValidatesTimeliness
101
93
 
102
94
  def after_correct?
103
95
  run_correct do
104
- value = ExpectedValue.new(options[:after])
96
+ value = ExpectedValue.new(options[:after], type)
105
97
  description << "after #{value.equal}"
106
98
  valid?(value.over) && invalid?(value.equal) && invalid?(value.under)
107
99
  end
@@ -109,7 +101,7 @@ module RSpec::ValidatesTimeliness
109
101
 
110
102
  def on_or_after_correct?
111
103
  run_correct do
112
- value = ExpectedValue.new(options[:on_or_after])
104
+ value = ExpectedValue.new(options[:on_or_after], type)
113
105
  description << "on or after #{value.equal}"
114
106
  valid?(value.equal) && valid?(value.over) && invalid?(value.under)
115
107
  end
@@ -117,7 +109,7 @@ module RSpec::ValidatesTimeliness
117
109
 
118
110
  def before_correct?
119
111
  run_correct do
120
- value = ExpectedValue.new(options[:before])
112
+ value = ExpectedValue.new(options[:before], type)
121
113
  description << "before #{value.equal}"
122
114
  valid?(value.under) && invalid?(value.equal) && invalid?(value.over)
123
115
  end
@@ -125,7 +117,7 @@ module RSpec::ValidatesTimeliness
125
117
 
126
118
  def on_or_before_correct?
127
119
  run_correct do
128
- value = ExpectedValue.new(options[:on_or_before])
120
+ value = ExpectedValue.new(options[:on_or_before], type)
129
121
  description << "on or before #{value.equal}"
130
122
  valid?(value.equal) && valid?(value.under) && invalid?(value.over)
131
123
  end
@@ -135,6 +127,10 @@ module RSpec::ValidatesTimeliness
135
127
  @validator_proxy ||= ValidatorProxy.new(subject, attr_name)
136
128
  end
137
129
 
130
+ def type
131
+ fail NotImplementedError
132
+ end
133
+
138
134
  delegate :valid?, to: :validator_proxy
139
135
  delegate :invalid?, to: :validator_proxy
140
136
  end
@@ -1,5 +1,5 @@
1
1
  module RSpec
2
2
  module ValidatesTimeliness
3
- VERSION = '0.1.0'.freeze
3
+ VERSION = '0.1.1'.freeze
4
4
  end
5
5
  end
@@ -13,7 +13,7 @@ end
13
13
 
14
14
  describe ValidatesDate do
15
15
  it { is_expected.to validates_date(:date_of_birth).is_at { Date.current } }
16
- it { is_expected.to validates_date(:date_of_start).after { 1.week.ago.to_date }.before { 1.week.since.to_date } }
17
- it { is_expected.to validates_date(:date_of_finish).on_or_after { 1.year.ago.to_date }.on_or_before { 1.year.since.to_date } }
18
- it { is_expected.to validates_date(:date_of_expiry).between([3.days.ago.to_date, 3.days.since.to_date]) }
16
+ it { is_expected.to validates_date(:date_of_start).after { 1.week.ago }.before { 1.week.since } }
17
+ it { is_expected.to validates_date(:date_of_finish).on_or_after { 1.year.ago }.on_or_before { 1.year.since } }
18
+ it { is_expected.to validates_date(:date_of_expiry).between([3.days.ago, 3.days.since]) }
19
19
  end
@@ -1,19 +1,19 @@
1
1
  require 'spec_helper'
2
2
 
3
- class ValidatesDateTime
3
+ class ValidatesDatetime
4
4
  include ActiveModel::Model
5
5
 
6
6
  attr_reader :started_at, :finished_at, :created_at, :updated_at
7
7
 
8
8
  validates_datetime :started_at, is_at: lambda { DateTime.current }
9
- validates_datetime :finished_at, after: lambda { 1.week.ago.to_datetime }, before: lambda { 1.week.since.to_datetime }
10
- validates_datetime :created_at, on_or_after: lambda { 1.year.ago.to_datetime }, on_or_before: lambda { 1.year.since.to_datetime }
9
+ validates_datetime :finished_at, after: lambda { 1.week.ago }, before: lambda { 1.week.since }
10
+ validates_datetime :created_at, on_or_after: lambda { 1.year.ago }, on_or_before: lambda { 1.year.since }
11
11
  validates_datetime :updated_at, between: [DateTime.new(2008, 9, 1, 10, 5, 0), DateTime.new(2009, 4, 1, 0, 30, 0)]
12
12
  end
13
13
 
14
- describe ValidatesDateTime do
14
+ describe ValidatesDatetime do
15
15
  it { is_expected.to validates_datetime(:started_at).is_at { DateTime.current } }
16
- it { is_expected.to validates_datetime(:finished_at).after { 1.week.ago.to_datetime }.before { 1.week.since.to_datetime } }
17
- it { is_expected.to validates_datetime(:created_at).on_or_after { 1.year.ago.to_datetime }.on_or_before { 1.year.since.to_datetime } }
16
+ it { is_expected.to validates_datetime(:finished_at).after { 1.week.ago }.before { 1.week.since } }
17
+ it { is_expected.to validates_datetime(:created_at).on_or_after { 1.year.ago }.on_or_before { 1.year.since } }
18
18
  it { is_expected.to validates_datetime(:updated_at).between([DateTime.new(2008, 9, 1, 10, 5, 0), DateTime.new(2009, 4, 1, 0, 30, 0)]) }
19
19
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe RSpec::ValidatesTimeliness::Matchers::ExpectedValue do
4
4
  describe '#equal' do
5
5
  let(:result) { Date.current }
6
- let(:model) { described_class.new(result) }
6
+ let(:model) { described_class.new(result, :date) }
7
7
 
8
8
  subject { model.equal }
9
9
 
@@ -11,12 +11,13 @@ describe RSpec::ValidatesTimeliness::Matchers::ExpectedValue do
11
11
  end
12
12
 
13
13
  describe '#over' do
14
- let(:model) { described_class.new(value) }
14
+ let(:model) { described_class.new(value, type) }
15
15
 
16
16
  subject { model.over }
17
17
 
18
18
  context 'value is kind of Date' do
19
19
  let(:value) { Date.current }
20
+ let(:type) { :date }
20
21
  let(:result) { value + 1.day }
21
22
 
22
23
  it 'returns value + 1.day (tomorrow)' do
@@ -26,6 +27,7 @@ describe RSpec::ValidatesTimeliness::Matchers::ExpectedValue do
26
27
 
27
28
  context 'value is not kind of Date' do
28
29
  let(:value) { DateTime.current }
30
+ let(:type) { :datetime }
29
31
  let(:result) { value + 1.second }
30
32
 
31
33
  it 'returns value + 1.second' do
@@ -35,12 +37,13 @@ describe RSpec::ValidatesTimeliness::Matchers::ExpectedValue do
35
37
  end
36
38
 
37
39
  describe '#under' do
38
- let(:model) { described_class.new(value) }
40
+ let(:model) { described_class.new(value, type) }
39
41
 
40
42
  subject { model.under }
41
43
 
42
44
  context 'value is kind of Date' do
43
45
  let(:value) { Date.current }
46
+ let(:type) { :date }
44
47
  let(:result) { value - 1.day }
45
48
 
46
49
  it 'returns value - 1.day (yesterday)' do
@@ -50,6 +53,7 @@ describe RSpec::ValidatesTimeliness::Matchers::ExpectedValue do
50
53
 
51
54
  context 'value is not kind of Date' do
52
55
  let(:value) { DateTime.current }
56
+ let(:type) { :datetime }
53
57
  let(:result) { value - 1.second }
54
58
 
55
59
  it 'returns value - 1.second' do
@@ -59,39 +63,46 @@ describe RSpec::ValidatesTimeliness::Matchers::ExpectedValue do
59
63
  end
60
64
 
61
65
  describe '#evaluate' do
62
- let(:model) { described_class.new(nil) }
66
+ let(:model) { described_class.new(nil, nil) }
67
+ let(:type) { :datetime }
63
68
 
64
- subject { model.send(:evaluate, value) }
69
+ subject { model.send(:evaluate, value, type) }
70
+
71
+ shared_examples 'exactly value' do
72
+ let(:result) { value.try("to_#{type}") }
73
+
74
+ it { is_expected.to eq result }
75
+ end
65
76
 
66
77
  context 'velue is kind of Proc' do
67
78
  let(:value) { proc { Date.today } }
79
+ let(:result) { value.call.try("to_#{type}") }
68
80
 
69
- it { is_expected.to eq value.call }
81
+ it { is_expected.to eq result }
70
82
  end
71
83
 
72
84
  context 'value is kind of Time' do
73
85
  let(:value) { Time.now }
74
86
 
75
- it { is_expected.to eq value }
87
+ it_behaves_like 'exactly value'
76
88
  end
77
89
 
78
90
  context 'value is kind of DateTime' do
79
91
  let(:value) { DateTime.current }
80
92
 
81
- it { is_expected.to eq value }
93
+ it_behaves_like 'exactly value'
82
94
  end
83
95
 
84
96
  context 'value is kind of Date' do
85
97
  let(:value) { Date.current }
86
98
 
87
- it { is_expected.to eq value }
99
+ it_behaves_like 'exactly value'
88
100
  end
89
101
 
90
102
  context 'value is kind of String' do
91
103
  let(:value) { '9:00am' }
92
- let(:result) { value.to_time }
93
104
 
94
- it { is_expected.to eq result }
105
+ it_behaves_like 'exactly value'
95
106
  end
96
107
 
97
108
  context 'value is not kind of Proc, Time, DateTime, Date' do
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe RSpec::ValidatesTimeliness::Matchers::ValidatesDateMatcher do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe RSpec::ValidatesTimeliness::Matchers::ValidatesDatetimeMatcher do
4
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe RSpec::ValidatesTimeliness::Matchers::ValidatesTimeMatcher do
4
+ end
5
+
@@ -1,18 +1,22 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe RSpec::ValidatesTimeliness::Matchers do
4
- describe '#validates_timeliness_of' do
5
- before do
6
- class DummyModel
7
- include RSpec::ValidatesTimeliness::Matchers
8
- end
4
+ before do
5
+ class DummyModel
6
+ include RSpec::ValidatesTimeliness::Matchers
9
7
  end
8
+ end
9
+
10
+ let(:model) { DummyModel.new }
11
+ let(:attr_name) { :one }
10
12
 
11
- let(:model) { DummyModel.new }
12
- let(:attr_name) { :one }
13
+ %i(validates_date validates_datetime validates_time).each do |matcher_name|
14
+ describe "##{matcher_name}" do
15
+ let(:type) { "RSpec::ValidatesTimeliness::Matchers::#{matcher_name.to_s.classify}Matcher".constantize }
13
16
 
14
- subject { model.validates_timeliness_of(attr_name) }
17
+ subject { model.try(matcher_name, attr_name) }
15
18
 
16
- it { is_expected.to be_kind_of(RSpec::ValidatesTimeliness::Matchers::ValidationMatcher) }
19
+ it { is_expected.to be_kind_of(type) }
20
+ end
17
21
  end
18
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-validates_timeliness
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshiyuki Hirano
@@ -130,15 +130,21 @@ files:
130
130
  - lib/rspec-validates_timeliness/matchers.rb
131
131
  - lib/rspec-validates_timeliness/matchers/expected_value.rb
132
132
  - lib/rspec-validates_timeliness/matchers/message_builder.rb
133
+ - lib/rspec-validates_timeliness/matchers/validates_date_matcher.rb
134
+ - lib/rspec-validates_timeliness/matchers/validates_datetime_matcher.rb
135
+ - lib/rspec-validates_timeliness/matchers/validates_time_matcher.rb
133
136
  - lib/rspec-validates_timeliness/matchers/validation_matcher.rb
134
137
  - lib/rspec-validates_timeliness/matchers/validator_proxy.rb
135
138
  - lib/rspec-validates_timeliness/version.rb
136
139
  - rspec-validates_timeliness.gemspec
137
140
  - spec/acceptance/validates_date_spec.rb
138
- - spec/acceptance/validates_date_time_spec.rb
141
+ - spec/acceptance/validates_datetime_spec.rb
139
142
  - spec/acceptance/validates_time_spec.rb
140
143
  - spec/lib/rspec-validates_timeliness/matchers/expected_value_spec.rb
141
144
  - spec/lib/rspec-validates_timeliness/matchers/message_builder_spec.rb
145
+ - spec/lib/rspec-validates_timeliness/matchers/validates_date_matcher_spec.rb
146
+ - spec/lib/rspec-validates_timeliness/matchers/validates_datetime_matcher_spec.rb
147
+ - spec/lib/rspec-validates_timeliness/matchers/validates_time_matcher_spec.rb
142
148
  - spec/lib/rspec-validates_timeliness/matchers/validation_matcher_spec.rb
143
149
  - spec/lib/rspec-validates_timeliness/matchers/validator_proxy_spec.rb
144
150
  - spec/lib/rspec-validates_timeliness/matchers_spec.rb
@@ -169,10 +175,13 @@ specification_version: 4
169
175
  summary: Simple RSpec matchers for validates_timeliness
170
176
  test_files:
171
177
  - spec/acceptance/validates_date_spec.rb
172
- - spec/acceptance/validates_date_time_spec.rb
178
+ - spec/acceptance/validates_datetime_spec.rb
173
179
  - spec/acceptance/validates_time_spec.rb
174
180
  - spec/lib/rspec-validates_timeliness/matchers/expected_value_spec.rb
175
181
  - spec/lib/rspec-validates_timeliness/matchers/message_builder_spec.rb
182
+ - spec/lib/rspec-validates_timeliness/matchers/validates_date_matcher_spec.rb
183
+ - spec/lib/rspec-validates_timeliness/matchers/validates_datetime_matcher_spec.rb
184
+ - spec/lib/rspec-validates_timeliness/matchers/validates_time_matcher_spec.rb
176
185
  - spec/lib/rspec-validates_timeliness/matchers/validation_matcher_spec.rb
177
186
  - spec/lib/rspec-validates_timeliness/matchers/validator_proxy_spec.rb
178
187
  - spec/lib/rspec-validates_timeliness/matchers_spec.rb