timeliness 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5416676829597b429ae232b78e90623d8e1aabc2
4
+ data.tar.gz: 0ab3eb69ceead65aa57c127daf153c7ebe8702f6
5
+ SHA512:
6
+ metadata.gz: 417eee657c054357f1be5d59a461d993c95a58248dfaa942198625627d79516204917d27973ac5b17ff44429ae749abe8a727665ad50656e264745e18c6d7e4c
7
+ data.tar.gz: 0b6316ca2d841d7f827409e2ebcd31b9162cfa6dc29d8d686501b27b71edc34e114de8569aa4e008fe42e025974404ade97208bc4e9d815715da0c629f16e025
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - ruby-head
5
+ - jruby-19mode
6
+ - rbx-19mode
7
+ script: 'bundle exec rspec'
@@ -78,7 +78,9 @@ module Timeliness
78
78
  'yyyy-mm-ddThh:nn:ssZ', # ISO 8601 without zone offset
79
79
  'yyyy-mm-ddThh:nn:sszo', # ISO 8601 with zone offset
80
80
  'yyyy-mm-ddThh:nn:ss.u', # ISO 8601 with usec
81
- 'yyyy-mm-ddThh:nn:ss.uzo' # ISO 8601 with usec and offset
81
+ 'yyyy-mm-ddThh:nn:ss.uzo', # ISO 8601 with usec and offset
82
+ 'yyyy-mm-dd hh:nn:ss zo', # Ruby time string in later versions
83
+ 'yyyy-mm-dd hh:nn:ss tz', # Ruby time string for UTC in later versions
82
84
  ]
83
85
 
84
86
  # All tokens available for format construction. The token array is made of
@@ -145,6 +147,8 @@ module Timeliness
145
147
  }
146
148
 
147
149
  US_FORMAT_REGEXP = /\Am{1,2}[^m]/
150
+ FormatNotFound = Class.new(StandardError)
151
+ DuplicateFormat = Class.new(StandardError)
148
152
 
149
153
  class << self
150
154
  attr_accessor :time_formats, :date_formats, :datetime_formats, :format_tokens, :format_components, :timezone_mapping
@@ -160,10 +164,10 @@ module Timeliness
160
164
  formats = send("#{type}_formats")
161
165
  options = add_formats.last.is_a?(Hash) ? add_formats.pop : {}
162
166
  before = options[:before]
163
- raise "Format for :before option #{format} was not found." if before && !formats.include?(before)
167
+ raise FormatNotFound, "Format for :before option #{before.inspect} was not found." if before && !formats.include?(before)
164
168
 
165
169
  add_formats.each do |format|
166
- raise "Format #{format} is already included in #{type} formats" if formats.include?(format)
170
+ raise DuplicateFormat, "Format #{format.inspect} is already included in #{type.inspect} formats" if formats.include?(format)
167
171
 
168
172
  index = before ? formats.index(before) : -1
169
173
  formats.insert(index, format)
@@ -176,7 +180,7 @@ module Timeliness
176
180
  def remove_formats(type, *remove_formats)
177
181
  remove_formats.each do |format|
178
182
  unless send("#{type}_formats").delete(format)
179
- raise "Format #{format} not found in #{type} formats"
183
+ raise FormatNotFound, "Format #{format.inspect} not found in #{type.inspect} formats"
180
184
  end
181
185
  end
182
186
  compile_formats
@@ -1,9 +1,9 @@
1
1
  module Timeliness
2
- class CompilationError < StandardError; end
3
-
4
2
  class Format
5
3
  include Helpers
6
4
 
5
+ CompilationFailed = Class.new(StandardError)
6
+
7
7
  attr_reader :format_string, :regexp, :regexp_string, :token_count
8
8
 
9
9
  def initialize(format_string)
@@ -41,7 +41,7 @@ module Timeliness
41
41
  @regexp = Regexp.new("^(#{format})$")
42
42
  self
43
43
  rescue => ex
44
- raise CompilationError, "The format '#{format_string}' failed to compile using regexp string #{format}. Error message: #{ex.inspect}"
44
+ raise CompilationFailed, "The format '#{format_string}' failed to compile using regexp string #{format}. Error message: #{ex.inspect}"
45
45
  end
46
46
 
47
47
  # Redefined on compile
@@ -23,7 +23,7 @@ module Timeliness
23
23
  regexp_string = "#{regexp_string}(#{format.regexp_string})|"
24
24
  index + format.token_count + 1 # add one for wrapper capture
25
25
  }
26
- @regexp = Regexp.new("^(?:#{regexp_string.chop})$")
26
+ @regexp = %r[\A(?:#{regexp_string.chop})\z]
27
27
  self
28
28
  end
29
29
 
@@ -5,7 +5,8 @@ module Timeliness
5
5
  class << self
6
6
 
7
7
  def parse(value, *args)
8
- return value unless value.is_a?(String)
8
+ return value if acts_like_temporal?(value)
9
+ return nil unless parseable?(value)
9
10
 
10
11
  type, options = type_and_options_from_args(args)
11
12
 
@@ -47,6 +48,14 @@ module Timeliness
47
48
 
48
49
  private
49
50
 
51
+ def parseable?(value)
52
+ value.is_a?(String)
53
+ end
54
+
55
+ def acts_like_temporal?(value)
56
+ value.is_a?(Time) || value.is_a?(Date) || value.respond_to?(:acts_like_date?) || value.respond_to?(:acts_like_time?)
57
+ end
58
+
50
59
  def type_and_options_from_args(args)
51
60
  options = args.last.is_a?(Hash) ? args.pop : {}
52
61
  type_or_now = args.first
@@ -129,7 +138,7 @@ module Timeliness
129
138
 
130
139
  # Taken from ActiveSupport and simplified
131
140
  def time_with_datetime_fallback(utc_or_local, year, month=1, day=1, hour=0, min=0, sec=0, usec=0)
132
- return nil if hour > 23 || min > 59 || sec > 59
141
+ return nil if hour > 23 || min > 59 || sec > 59
133
142
  ::Time.send(utc_or_local, year, month, day, hour, min, sec, usec)
134
143
  rescue
135
144
  offset = utc_or_local == :local ? (::Time.local(2007).utc_offset.to_r/86400) : 0
@@ -1,3 +1,3 @@
1
1
  module Timeliness
2
- VERSION = '0.3.7'
2
+ VERSION = '0.3.8'
3
3
  end
@@ -1,37 +1,96 @@
1
- require 'rspec'
2
-
3
- require 'active_support/time'
4
- require 'timecop'
5
- require 'timeliness'
6
- require 'timeliness/core_ext'
7
-
8
- module TimelinessHelpers
9
- def parser
10
- Timeliness::Parser
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # The generated `.rspec` file contains `--require spec_helper` which will cause
4
+ # this file to always be loaded, without a need to explicitly require it in any
5
+ # files.
6
+ #
7
+ # Given that it is always loaded, you are encouraged to keep this file as
8
+ # light-weight as possible. Requiring heavyweight dependencies from this file
9
+ # will add to the boot time of your test suite on EVERY test run, even for an
10
+ # individual file that may not need all of that loaded. Instead, consider making
11
+ # a separate helper file that requires the additional dependencies and performs
12
+ # the additional setup, and require it from the spec files that actually need
13
+ # it.
14
+ #
15
+ # The `.rspec` file also contains a few flags that are not defaults but that
16
+ # users commonly want.
17
+ #
18
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
19
+ RSpec.configure do |config|
20
+ # rspec-expectations config goes here. You can use an alternate
21
+ # assertion/expectation library such as wrong or the stdlib/minitest
22
+ # assertions if you prefer.
23
+ config.expect_with :rspec do |expectations|
24
+ # This option will default to `true` in RSpec 4. It makes the `description`
25
+ # and `failure_message` of custom matchers include text for helper methods
26
+ # defined using `chain`, e.g.:
27
+ # be_bigger_than(2).and_smaller_than(4).description
28
+ # # => "be bigger than 2 and smaller than 4"
29
+ # ...rather than:
30
+ # # => "be bigger than 2"
31
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
11
32
  end
12
33
 
13
- def definitions
14
- Timeliness::Definitions
34
+ # rspec-mocks config goes here. You can use an alternate test double
35
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
36
+ config.mock_with :rspec do |mocks|
37
+ # Prevents you from mocking or stubbing a method that does not exist on
38
+ # a real object. This is generally recommended, and will default to
39
+ # `true` in RSpec 4.
40
+ mocks.verify_partial_doubles = true
15
41
  end
16
42
 
17
- def parse(*args)
18
- Timeliness::Parser.parse(*args)
19
- end
43
+ # The settings below are suggested to provide a good initial experience
44
+ # with RSpec, but feel free to customize to your heart's content.
45
+ =begin
46
+ # These two settings work together to allow you to limit a spec run
47
+ # to individual examples or groups you care about by tagging them with
48
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
49
+ # get run.
50
+ config.filter_run :focus
51
+ config.run_all_when_everything_filtered = true
20
52
 
21
- def current_date(options={})
22
- Timeliness::Parser.send(:current_date, options)
23
- end
53
+ # Allows RSpec to persist some state between runs in order to support
54
+ # the `--only-failures` and `--next-failure` CLI options. We recommend
55
+ # you configure your source control system to ignore this file.
56
+ config.example_status_persistence_file_path = "spec/examples.txt"
24
57
 
25
- def should_parse(*args)
26
- Timeliness::Parser.parse(*args).should_not be_nil
27
- end
58
+ # Limits the available syntax to the non-monkey patched syntax that is
59
+ # recommended. For more details, see:
60
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
61
+ # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
62
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
63
+ config.disable_monkey_patching!
28
64
 
29
- def should_not_parse(*args)
30
- Timeliness::Parser.parse(*args).should be_nil
65
+ # This setting enables warnings. It's recommended, but in some cases may
66
+ # be too noisy due to issues in dependencies.
67
+ config.warnings = true
68
+
69
+ # Many RSpec users commonly either run the entire suite or an individual
70
+ # file, and it's useful to allow more verbose output when running an
71
+ # individual spec file.
72
+ if config.files_to_run.one?
73
+ # Use the documentation formatter for detailed output,
74
+ # unless a formatter has already been configured
75
+ # (e.g. via a command-line flag).
76
+ config.default_formatter = 'doc'
31
77
  end
32
- end
33
78
 
34
- RSpec.configure do |c|
35
- c.mock_with :rspec
36
- c.include TimelinessHelpers
79
+ # Print the 10 slowest examples and example groups at the
80
+ # end of the spec run, to help surface which specs are running
81
+ # particularly slow.
82
+ config.profile_examples = 10
83
+
84
+ # Run specs in random order to surface order dependencies. If you find an
85
+ # order dependency and want to debug it, you can fix the order by providing
86
+ # the seed, which is printed after each run.
87
+ # --seed 1234
88
+ config.order = :random
89
+
90
+ # Seed global randomization in this process using the `--seed` CLI option.
91
+ # Setting this allows you to use `--seed` to deterministically reproduce
92
+ # test failures related to randomization by passing the same `--seed` value
93
+ # as the one that triggered the failure.
94
+ Kernel.srand config.seed
95
+ =end
37
96
  end
@@ -1,71 +1,69 @@
1
- require 'spec_helper'
2
-
3
1
  describe Timeliness::CoreExt, 'String' do
4
2
  # Test values taken from ActiveSupport unit tests for compatibility
5
3
 
6
4
  describe "#to_time" do
7
5
  it 'should convert valid string to Time object in default zone' do
8
- "2005-02-27 23:50".to_time.should eq Time.utc(2005, 2, 27, 23, 50)
6
+ expect("2005-02-27 23:50".to_time).to eq Time.utc(2005, 2, 27, 23, 50)
9
7
  end
10
8
 
11
9
  it 'should convert ISO 8601 string to Time object' do
12
- "2005-02-27T23:50:19.275038".to_time.should eq Time.utc(2005, 2, 27, 23, 50, 19, 275038)
10
+ expect("2005-02-27T23:50:19.275038".to_time).to eq Time.utc(2005, 2, 27, 23, 50, 19, 275038)
13
11
  end
14
12
 
15
13
  context "with :local" do
16
14
  it 'should convert valid string to local time' do
17
- "2005-02-27 23:50".to_time(:local).should eq Time.local(2005, 2, 27, 23, 50)
15
+ expect("2005-02-27 23:50".to_time(:local)).to eq Time.local(2005, 2, 27, 23, 50)
18
16
  end
19
17
 
20
18
  it 'should convert ISO 8601 string to local time' do
21
- "2005-02-27T23:50:19.275038".to_time(:local).should eq Time.local(2005, 2, 27, 23, 50, 19, 275038)
19
+ expect("2005-02-27T23:50:19.275038".to_time(:local)).to eq Time.local(2005, 2, 27, 23, 50, 19, 275038)
22
20
  end
23
21
  end
24
22
 
25
23
  it 'should convert valid future string to Time object' do
26
- "2039-02-27 23:50".to_time(:local).should eq Time.local_time(2039, 2, 27, 23, 50)
24
+ expect("2039-02-27 23:50".to_time(:local)).to eq Time.local(2039, 2, 27, 23, 50)
27
25
  end
28
26
 
29
27
  it 'should convert valid future string to Time object' do
30
- "2039-02-27 23:50".to_time.should eq DateTime.civil(2039, 2, 27, 23, 50)
28
+ expect("2039-02-27 23:50".to_time).to eq DateTime.civil(2039, 2, 27, 23, 50)
31
29
  end
32
30
 
33
31
  it 'should convert empty string to nil' do
34
- ''.to_time.should be_nil
32
+ expect(''.to_time).to be_nil
35
33
  end
36
34
  end
37
35
 
38
36
  describe "#to_datetime" do
39
37
  it 'should convert valid string to DateTime object' do
40
- "2039-02-27 23:50".to_datetime.should eq DateTime.civil(2039, 2, 27, 23, 50)
38
+ expect("2039-02-27 23:50".to_datetime).to eq DateTime.civil(2039, 2, 27, 23, 50)
41
39
  end
42
40
 
43
41
  it 'should convert to DateTime object with UTC offset' do
44
- "2039-02-27 23:50".to_datetime.offset.should eq 0
42
+ expect("2039-02-27 23:50".to_datetime.offset).to eq 0
45
43
  end
46
44
 
47
45
  it 'should convert ISO 8601 string to DateTime object' do
48
46
  datetime = DateTime.civil(2039, 2, 27, 23, 50, 19 + Rational(275038, 1000000), "-04:00")
49
- "2039-02-27T23:50:19.275038-04:00".to_datetime.should eq datetime
47
+ expect("2039-02-27T23:50:19.275038-04:00".to_datetime).to eq datetime
50
48
  end
51
49
 
52
50
  it 'should use Rubys default start value' do
53
51
  # Taken from ActiveSupport unit tests. Not sure on the implication.
54
- "2039-02-27 23:50".to_datetime.start.should eq ::Date::ITALY
52
+ expect("2039-02-27 23:50".to_datetime.start).to eq ::Date::ITALY
55
53
  end
56
54
 
57
55
  it 'should convert empty string to nil' do
58
- ''.to_datetime.should be_nil
56
+ expect(''.to_datetime).to be_nil
59
57
  end
60
58
  end
61
59
 
62
60
  describe "#to_date" do
63
61
  it 'should convert string to Date object' do
64
- "2005-02-27".to_date.should eq Date.new(2005, 2, 27)
62
+ expect("2005-02-27".to_date).to eq Date.new(2005, 2, 27)
65
63
  end
66
64
 
67
65
  it 'should convert empty string to nil' do
68
- ''.to_date.should be_nil
66
+ expect(''.to_date).to be_nil
69
67
  end
70
68
  end
71
69
 
@@ -1,5 +1,3 @@
1
- require 'spec_helper'
2
-
3
1
  describe Timeliness::Definitions do
4
2
 
5
3
  context "add_formats" do
@@ -9,7 +7,7 @@ describe Timeliness::Definitions do
9
7
 
10
8
  it "should add format to format array" do
11
9
  definitions.add_formats(:time, "h o'clock")
12
- definitions.time_formats.should include("h o'clock")
10
+ expect(definitions.time_formats).to include("h o'clock")
13
11
  end
14
12
 
15
13
  it "should parse new format after its added" do
@@ -19,18 +17,18 @@ describe Timeliness::Definitions do
19
17
  end
20
18
 
21
19
  it "should raise error if format exists" do
22
- expect { definitions.add_formats(:time, "hh:nn:ss") }.to raise_error
20
+ expect { definitions.add_formats(:time, "hh:nn:ss") }.to raise_error(Timeliness::Definitions::DuplicateFormat)
23
21
  end
24
22
 
25
23
  context "with :before option" do
26
24
  it "should add new format with higher precedence" do
27
25
  definitions.add_formats(:time, "ss:hh:nn", :before => 'hh:nn:ss')
28
26
  time_array = parser._parse('59:23:58', :time)
29
- time_array.should eq [nil,nil,nil,23,58,59,nil,nil]
27
+ expect(time_array).to eq [nil,nil,nil,23,58,59,nil,nil]
30
28
  end
31
29
 
32
30
  it "should raise error if :before format does not exist" do
33
- expect { definitions.add_formats(:time, "ss:hh:nn", :before => 'nn:hh:ss') }.to raise_error
31
+ expect { definitions.add_formats(:time, "ss:hh:nn", :before => 'nn:hh:ss') }.to raise_error(Timeliness::Definitions::FormatNotFound)
34
32
  end
35
33
  end
36
34
 
@@ -47,13 +45,13 @@ describe Timeliness::Definitions do
47
45
 
48
46
  it "should remove a single format from the formats array for type" do
49
47
  definitions.remove_formats(:time, 'h.nn_ampm')
50
- definitions.time_formats.should_not include('h.nn_ampm')
48
+ expect(definitions.time_formats).not_to include('h.nn_ampm')
51
49
  end
52
50
 
53
51
  it "should remove multiple formats from formats array for type" do
54
52
  definitions.remove_formats(:time, 'h:nn', 'h.nn_ampm')
55
- definitions.time_formats.should_not include('h:nn')
56
- definitions.time_formats.should_not include('h.nn_ampm')
53
+ expect(definitions.time_formats).not_to include('h:nn')
54
+ expect(definitions.time_formats).not_to include('h.nn_ampm')
57
55
  end
58
56
 
59
57
  it "should prevent parsing of removed format" do
@@ -63,7 +61,7 @@ describe Timeliness::Definitions do
63
61
  end
64
62
 
65
63
  it "should raise error if format does not exist" do
66
- expect { definitions.remove_formats(:time, "ss:hh:nn") }.to raise_error()
64
+ expect { definitions.remove_formats(:time, "ss:hh:nn") }.to raise_error(Timeliness::Definitions::FormatNotFound)
67
65
  end
68
66
 
69
67
  after do
@@ -74,14 +72,14 @@ describe Timeliness::Definitions do
74
72
 
75
73
  context "use_euro_formats" do
76
74
  it "should allow ambiguous date to be parsed as European format" do
77
- parser._parse('01/02/2000', :date).should eq [2000,1,2,nil,nil,nil,nil,nil]
75
+ expect(parser._parse('01/02/2000', :date)).to eq [2000,1,2,nil,nil,nil,nil,nil]
78
76
  definitions.use_euro_formats
79
- parser._parse('01/02/2000', :date).should eq [2000,2,1,nil,nil,nil,nil,nil]
77
+ expect(parser._parse('01/02/2000', :date)).to eq [2000,2,1,nil,nil,nil,nil,nil]
80
78
  end
81
79
 
82
80
  it "should not parse formats on switch to euro after initial compile" do
83
81
  definitions.compile_formats
84
- Timeliness::FormatSet.should_not_receive(:compile)
82
+ expect(Timeliness::FormatSet).not_to receive(:compile)
85
83
  definitions.use_euro_formats
86
84
  end
87
85
  end
@@ -92,14 +90,14 @@ describe Timeliness::Definitions do
92
90
  end
93
91
 
94
92
  it "should allow ambiguous date to be parsed as European format" do
95
- parser._parse('01/02/2000', :date).should eq [2000,2,1,nil,nil,nil,nil,nil]
93
+ expect(parser._parse('01/02/2000', :date)).to eq [2000,2,1,nil,nil,nil,nil,nil]
96
94
  definitions.use_us_formats
97
- parser._parse('01/02/2000', :date).should eq [2000,1,2,nil,nil,nil,nil,nil]
95
+ expect(parser._parse('01/02/2000', :date)).to eq [2000,1,2,nil,nil,nil,nil,nil]
98
96
  end
99
97
 
100
98
  it "should not parse formats on switch to euro after initial compile" do
101
99
  definitions.compile_formats
102
- Timeliness::FormatSet.should_not_receive(:compile)
100
+ expect(Timeliness::FormatSet).not_to receive(:compile)
103
101
  definitions.use_us_formats
104
102
  end
105
103
  end
@@ -1,12 +1,10 @@
1
- require 'spec_helper'
2
-
3
1
  describe Timeliness::FormatSet do
4
2
  context "#compile!" do
5
3
  let(:set) { Timeliness::FormatSet.new(['yyyy-mm-dd', 'dd/mm/yyyy']) }
6
4
 
7
5
  it 'should set the regexp for the set' do
8
6
  set.compile!
9
- set.regexp.should_not be_nil
7
+ expect(set.regexp).not_to be_nil
10
8
  end
11
9
  end
12
10
 
@@ -28,8 +26,8 @@ describe Timeliness::FormatSet do
28
26
  format_tests.each do |format, values|
29
27
  it "should correctly match times in format '#{format}'" do
30
28
  regexp = compile_regexp(format)
31
- values[:pass].each {|value| value.should match(regexp)}
32
- values[:fail].each {|value| value.should_not match(regexp)}
29
+ values[:pass].each {|value| expect(value).to match(regexp)}
30
+ values[:fail].each {|value| expect(value).not_to match(regexp)}
33
31
  end
34
32
  end
35
33
  end
@@ -51,8 +49,8 @@ describe Timeliness::FormatSet do
51
49
  format_tests.each do |format, values|
52
50
  it "should correctly match dates in format '#{format}'" do
53
51
  regexp = compile_regexp(format)
54
- values[:pass].each {|value| value.should match(regexp)}
55
- values[:fail].each {|value| value.should_not match(regexp)}
52
+ values[:pass].each {|value| expect(value).to match(regexp)}
53
+ values[:fail].each {|value| expect(value).not_to match(regexp)}
56
54
  end
57
55
  end
58
56
  end
@@ -65,8 +63,8 @@ describe Timeliness::FormatSet do
65
63
  format_tests.each do |format, values|
66
64
  it "should correctly match datetimes in format '#{format}'" do
67
65
  regexp = compile_regexp(format)
68
- values[:pass].each {|value| value.should match(regexp)}
69
- values[:fail].each {|value| value.should_not match(regexp)}
66
+ values[:pass].each {|value| expect(value).to match(regexp)}
67
+ values[:fail].each {|value| expect(value).not_to match(regexp)}
70
68
  end
71
69
  end
72
70
  end
@@ -77,21 +75,21 @@ describe Timeliness::FormatSet do
77
75
  let(:set) { Timeliness::FormatSet.compile(['yyyy-mm-dd', 'dd/mm/yyyy']) }
78
76
 
79
77
  it 'should return array if string matches a format in set' do
80
- set.match('2000-01-02').should be_kind_of(Array)
78
+ expect(set.match('2000-01-02')).to be_kind_of(Array)
81
79
  end
82
80
 
83
81
  it 'should return nil if string does not matches a format in set' do
84
- set.match('2nd Feb 2000').should be_nil
82
+ expect(set.match('2nd Feb 2000')).to be_nil
85
83
  end
86
84
 
87
85
  it 'should only use specific format string for match if provided' do
88
- set.match('2000-01-02', 'yyyy-mm-dd').should be_kind_of(Array)
89
- set.match('2000-01-02', 'dd/mm/yyyy').should be_nil
86
+ expect(set.match('2000-01-02', 'yyyy-mm-dd')).to be_kind_of(Array)
87
+ expect(set.match('2000-01-02', 'dd/mm/yyyy')).to be_nil
90
88
  end
91
89
 
92
90
  it 'should compile unknown format for one off match' do
93
- set.match('20001011').should be_nil
94
- set.match('20001011', 'yyyymmdd').should be_kind_of(Array)
91
+ expect(set.match('20001011')).to be_nil
92
+ expect(set.match('20001011', 'yyyymmdd')).to be_kind_of(Array)
95
93
  end
96
94
  end
97
95