rspec-validates_timeliness 0.1.0 → 0.1.1

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.
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