timeliness 0.2.0 → 0.3.0

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.
@@ -5,7 +5,7 @@ module Timeliness
5
5
  hour = hour.to_i
6
6
  return hour if meridian.nil?
7
7
  if meridian.delete('.').downcase == 'am'
8
- raise if hour == 0 || hour > 12
8
+ raise(ArgumentError) if hour == 0 || hour > 12
9
9
  hour == 12 ? 0 : hour
10
10
  else
11
11
  hour == 12 ? hour : hour + 12
@@ -7,42 +7,40 @@ module Timeliness
7
7
  def parse(value, *args)
8
8
  return value unless value.is_a?(String)
9
9
 
10
- options = args.last.is_a?(Hash) ? args.pop : {}
11
- type = args.first
10
+ type, options = type_and_options_from_args(args)
12
11
 
13
12
  time_array = _parse(value, type, options)
14
13
  return nil if time_array.nil?
15
14
 
16
- override_values_by_type(time_array, type, options) unless type == :datetime
17
- make_time(time_array[0..6], options[:zone])
15
+ default_values_by_type(time_array, type, options) unless type == :datetime
16
+
17
+ make_time(time_array[0..7], options[:zone])
18
18
  rescue NoMethodError => ex
19
19
  raise ex unless ex.message =~ /zone/
20
20
  raise MissingTimezoneSupport, "ActiveSupport must be loaded to use timezones other than :utc and :local."
21
21
  end
22
22
 
23
- def make_time(time_array, zone=nil)
23
+ def make_time(time_array, zone_option=nil)
24
24
  return nil unless fast_date_valid_with_fallback(*time_array[0..2])
25
25
 
26
- zone ||= Timeliness.default_timezone
27
- case zone
28
- when :utc, :local
29
- time_with_datetime_fallback(zone, *time_array.compact)
30
- when :current
31
- Time.zone.local(*time_array)
32
- else
33
- Time.use_zone(zone) { Time.zone.local(*time_array) }
34
- end
26
+ zone_or_offset = time_array.delete_at(7)
27
+ zone, offset = zone_and_offset(zone_or_offset) if zone_or_offset
28
+
29
+ value = create_time_in_zone(time_array, zone || zone_option)
30
+ value = time_in_zone(value, zone_option) if zone
31
+
32
+ offset ? value + (value.utc_offset - offset) : value
35
33
  rescue ArgumentError, TypeError
36
34
  nil
37
35
  end
38
36
 
39
37
  def _parse(string, type=nil, options={})
40
38
  if options[:strict] && type
41
- set = Formats.send("#{type}_format_set")
39
+ set = Definitions.send("#{type}_format_set")
42
40
  set.match(string, options[:format])
43
41
  else
44
42
  values = nil
45
- Formats.format_set(type, string).find {|set| values = set.match(string, options[:format]) }
43
+ Definitions.format_sets(type, string).find {|set| values = set.match(string, options[:format]) }
46
44
  values
47
45
  end
48
46
  rescue
@@ -51,7 +49,18 @@ module Timeliness
51
49
 
52
50
  private
53
51
 
54
- def override_values_by_type(values, type, options)
52
+ def type_and_options_from_args(args)
53
+ options = args.last.is_a?(Hash) ? args.pop : {}
54
+ type_or_now = args.first
55
+ if type_or_now.is_a?(Symbol)
56
+ type = type_or_now
57
+ elsif !type_or_now.is_a?(Hash)
58
+ options[:now] = type_or_now
59
+ end
60
+ return type, options
61
+ end
62
+
63
+ def default_values_by_type(values, type, options)
55
64
  case type
56
65
  when :date
57
66
  values[3..7] = nil
@@ -87,6 +96,39 @@ module Timeliness
87
96
  end
88
97
  end
89
98
 
99
+ def time_in_zone(time, zone=nil)
100
+ zone ||= Timeliness.default_timezone
101
+ case zone
102
+ when :utc, :local
103
+ time.send("get#{zone}")
104
+ when :current
105
+ time.in_time_zone
106
+ else
107
+ Time.use_zone(zone) { time.in_time_zone }
108
+ end
109
+ end
110
+
111
+ def create_time_in_zone(time_array, zone=nil)
112
+ zone ||= Timeliness.default_timezone
113
+ case zone
114
+ when :utc, :local
115
+ time_with_datetime_fallback(zone, *time_array.compact)
116
+ when :current
117
+ Time.zone.local(*time_array)
118
+ else
119
+ Time.use_zone(zone) { Time.zone.local(*time_array) }
120
+ end
121
+ end
122
+
123
+ def zone_and_offset(parsed_value)
124
+ if parsed_value.is_a?(String)
125
+ zone = Definitions.timezone_mapping[parsed_value] || parsed_value
126
+ else
127
+ offset = parsed_value
128
+ end
129
+ return zone, offset
130
+ end
131
+
90
132
  # Taken from ActiveSupport and simplified
91
133
  def time_with_datetime_fallback(utc_or_local, year, month=1, day=1, hour=0, min=0, sec=0, usec=0)
92
134
  return nil if hour > 23 || min > 59 || sec > 59
@@ -1,3 +1,3 @@
1
1
  module Timeliness
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -9,8 +9,8 @@ module TimelinessHelpers
9
9
  Timeliness::Parser
10
10
  end
11
11
 
12
- def formats
13
- Timeliness::Formats
12
+ def definitions
13
+ Timeliness::Definitions
14
14
  end
15
15
 
16
16
  def parse(*args)
@@ -1,93 +1,93 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Timeliness::Formats do
3
+ describe Timeliness::Definitions do
4
4
 
5
5
  context "add_formats" do
6
6
  before do
7
- @default_formats = formats.time_formats.dup
7
+ @default_formats = definitions.time_formats.dup
8
8
  end
9
9
 
10
10
  it "should add format to format array" do
11
- formats.add_formats(:time, "h o'clock")
12
- formats.time_formats.should include("h o'clock")
11
+ definitions.add_formats(:time, "h o'clock")
12
+ definitions.time_formats.should include("h o'clock")
13
13
  end
14
14
 
15
15
  it "should parse new format after its added" do
16
16
  should_not_parse("12 o'clock", :time)
17
- formats.add_formats(:time, "h o'clock")
17
+ definitions.add_formats(:time, "h o'clock")
18
18
  should_parse("12 o'clock", :time)
19
19
  end
20
20
 
21
21
  it "should raise error if format exists" do
22
- lambda { formats.add_formats(:time, "hh:nn:ss") }.should raise_error
22
+ expect { definitions.add_formats(:time, "hh:nn:ss") }.should raise_error
23
23
  end
24
24
 
25
25
  context "with :before option" do
26
26
  it "should add new format with higher precedence" do
27
- formats.add_formats(:time, "ss:hh:nn", :before => 'hh:nn:ss')
27
+ definitions.add_formats(:time, "ss:hh:nn", :before => 'hh:nn:ss')
28
28
  time_array = parser._parse('59:23:58', :time)
29
29
  time_array.should == [nil,nil,nil,23,58,59,nil,nil]
30
30
  end
31
31
 
32
32
  it "should raise error if :before format does not exist" do
33
- lambda { formats.add_formats(:time, "ss:hh:nn", :before => 'nn:hh:ss') }.should raise_error
33
+ expect { definitions.add_formats(:time, "ss:hh:nn", :before => 'nn:hh:ss') }.should raise_error
34
34
  end
35
35
  end
36
36
 
37
37
  after do
38
- formats.time_formats = @default_formats
39
- formats.compile_formats
38
+ definitions.time_formats = @default_formats
39
+ definitions.compile_formats
40
40
  end
41
41
  end
42
42
 
43
43
  context "remove_formats" do
44
44
  before do
45
- @default_formats = formats.time_formats.dup
45
+ @default_formats = definitions.time_formats.dup
46
46
  end
47
47
 
48
48
  it "should remove a single format from the formats array for type" do
49
- formats.remove_formats(:time, 'h.nn_ampm')
50
- formats.time_formats.should_not include('h.nn_ampm')
49
+ definitions.remove_formats(:time, 'h.nn_ampm')
50
+ definitions.time_formats.should_not include('h.nn_ampm')
51
51
  end
52
52
 
53
53
  it "should remove multiple formats from formats array for type" do
54
- formats.remove_formats(:time, 'h:nn', 'h.nn_ampm')
55
- formats.time_formats.should_not include('h:nn')
56
- formats.time_formats.should_not include('h.nn_ampm')
54
+ 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')
57
57
  end
58
58
 
59
59
  it "should prevent parsing of removed format" do
60
60
  should_parse('2.12am', :time)
61
- formats.remove_formats(:time, 'h.nn_ampm')
61
+ definitions.remove_formats(:time, 'h.nn_ampm')
62
62
  should_not_parse('2.12am', :time)
63
63
  end
64
64
 
65
65
  it "should raise error if format does not exist" do
66
- lambda { formats.remove_formats(:time, "ss:hh:nn") }.should raise_error()
66
+ expect { definitions.remove_formats(:time, "ss:hh:nn") }.should raise_error()
67
67
  end
68
68
 
69
69
  after do
70
- formats.time_formats = @default_formats
71
- formats.compile_formats
70
+ definitions.time_formats = @default_formats
71
+ definitions.compile_formats
72
72
  end
73
73
  end
74
74
 
75
75
  context "use_euro_formats" do
76
76
  it "should allow ambiguous date to be parsed as European format" do
77
77
  parser._parse('01/02/2000', :date).should == [2000,1,2,nil,nil,nil,nil,nil]
78
- formats.use_euro_formats
78
+ definitions.use_euro_formats
79
79
  parser._parse('01/02/2000', :date).should == [2000,2,1,nil,nil,nil,nil,nil]
80
80
  end
81
81
  end
82
82
 
83
83
  context "use_use_formats" do
84
84
  before do
85
- formats.use_euro_formats
85
+ definitions.use_euro_formats
86
86
  end
87
87
 
88
88
  it "should allow ambiguous date to be parsed as European format" do
89
89
  parser._parse('01/02/2000', :date).should == [2000,2,1,nil,nil,nil,nil,nil]
90
- formats.use_us_formats
90
+ definitions.use_us_formats
91
91
  parser._parse('01/02/2000', :date).should == [2000,1,2,nil,nil,nil,nil,nil]
92
92
  end
93
93
  end
@@ -1,42 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Timeliness::FormatSet do
4
- context ".define_format_method" do
5
- it "should define method which outputs date array with values in correct order" do
6
- define_method_for('yyyy-mm-dd').call('2000', '1', '2').should == [2000,1,2,nil,nil,nil,nil,nil]
7
- end
8
-
9
- it "should define method which outputs date array from format with different order" do
10
- define_method_for('dd/mm/yyyy').call('2', '1', '2000').should == [2000,1,2,nil,nil,nil,nil,nil]
11
- end
12
-
13
- it "should define method which outputs time array" do
14
- define_method_for('hh:nn:ss').call('01', '02', '03').should == [nil,nil,nil,1,2,3,nil,nil]
15
- end
16
-
17
- it "should define method which outputs time array with meridian 'pm' adjusted hour" do
18
- define_method_for('hh:nn:ss ampm').call('01', '02', '03', 'pm').should == [nil,nil,nil,13,2,3,nil,nil]
19
- end
20
-
21
- it "should define method which outputs time array with meridian 'am' unadjusted hour" do
22
- define_method_for('hh:nn:ss ampm').call('01', '02', '03', 'am').should == [nil,nil,nil,1,2,3,nil,nil]
23
- end
24
-
25
- it "should define method which outputs time array with microseconds" do
26
- define_method_for('hh:nn:ss.u').call('01', '02', '03', '99').should == [nil,nil,nil,1,2,3,990000,nil]
27
- end
28
-
29
- it "should define method which outputs datetime array with zone offset" do
30
- define_method_for('yyyy-mm-dd hh:nn:ss.u zo').call('2001', '02', '03', '04', '05', '06', '99', '+10:00').should == [2001,2,3,4,5,6,990000,36000]
31
- end
4
+ context "#compile!" do
5
+ let(:set) { Timeliness::FormatSet.new(['yyyy-mm-dd', 'dd/mm/yyyy']) }
32
6
 
33
- it "should define method which outputs datetime array with timezone string" do
34
- define_method_for('yyyy-mm-dd hh:nn:ss.u tz').call('2001', '02', '03', '04', '05', '06', '99', 'EST').should == [2001,2,3,4,5,6,990000,'EST']
7
+ it 'should set the regexp for the set' do
8
+ set.compile!
9
+ set.regexp.should_not be_nil
35
10
  end
36
11
  end
37
12
 
38
13
  context "compiled regexp" do
39
-
40
14
  context "for time formats" do
41
15
  format_tests = {
42
16
  'hh:nn:ss' => {:pass => ['12:12:12', '01:01:01'], :fail => ['1:12:12', '12:1:12', '12:12:1', '12-12-12']},
@@ -99,8 +73,21 @@ describe Timeliness::FormatSet do
99
73
 
100
74
  end
101
75
 
102
- def define_method_for(format)
103
- Timeliness::FormatSet.compile([format]).method(:"format_#{format}")
76
+ context "#match" do
77
+ let(:set) { Timeliness::FormatSet.compile(['yyyy-mm-dd', 'dd/mm/yyyy']) }
78
+
79
+ it 'should return array if string matches a format in set' do
80
+ set.match('2000-01-02').should be_kind_of(Array)
81
+ end
82
+
83
+ it 'should return nil if string does not matches a format in set' do
84
+ set.match('2nd Feb 2000').should be_nil
85
+ end
86
+
87
+ 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
90
+ end
104
91
  end
105
92
 
106
93
  def compile_regexp(format)
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe Timeliness::Format do
4
+ context "#process" do
5
+ it "should define method which outputs date array with values in correct order" do
6
+ format_for('yyyy-mm-dd').process('2000', '1', '2').should == [2000,1,2,nil,nil,nil,nil,nil]
7
+ end
8
+
9
+ it "should define method which outputs date array from format with different order" do
10
+ format_for('dd/mm/yyyy').process('2', '1', '2000').should == [2000,1,2,nil,nil,nil,nil,nil]
11
+ end
12
+
13
+ it "should define method which outputs time array" do
14
+ format_for('hh:nn:ss').process('01', '02', '03').should == [nil,nil,nil,1,2,3,nil,nil]
15
+ end
16
+
17
+ it "should define method which outputs time array with meridian 'pm' adjusted hour" do
18
+ format_for('hh:nn:ss ampm').process('01', '02', '03', 'pm').should == [nil,nil,nil,13,2,3,nil,nil]
19
+ end
20
+
21
+ it "should define method which outputs time array with meridian 'am' unadjusted hour" do
22
+ format_for('hh:nn:ss ampm').process('01', '02', '03', 'am').should == [nil,nil,nil,1,2,3,nil,nil]
23
+ end
24
+
25
+ it "should define method which outputs time array with microseconds" do
26
+ format_for('hh:nn:ss.u').process('01', '02', '03', '99').should == [nil,nil,nil,1,2,3,990000,nil]
27
+ end
28
+
29
+ it "should define method which outputs datetime array with zone offset" do
30
+ format_for('yyyy-mm-dd hh:nn:ss.u zo').process('2001', '02', '03', '04', '05', '06', '99', '+10:00').should == [2001,2,3,4,5,6,990000,36000]
31
+ end
32
+
33
+ it "should define method which outputs datetime array with timezone string" do
34
+ format_for('yyyy-mm-dd hh:nn:ss.u tz').process('2001', '02', '03', '04', '05', '06', '99', 'EST').should == [2001,2,3,4,5,6,990000,'EST']
35
+ end
36
+ end
37
+
38
+ def format_for(format)
39
+ Timeliness::Format.new(format).compile!
40
+ end
41
+ end
@@ -1,38 +1,128 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Timeliness::Parser do
4
- context "parse" do
4
+ before(:all) do
5
+ Timecop.freeze(2010,1,1,0,0,0)
6
+ end
7
+
8
+ describe "parse" do
9
+ it "should return time object for valid datetime string" do
10
+ parse("2000-01-01 12:13:14").should be_kind_of(Time)
11
+ end
12
+
13
+ it "should return nil for empty string" do
14
+ parse("").should be_nil
15
+ end
16
+
17
+ it "should return nil for nil value" do
18
+ parse(nil).should be_nil
19
+ end
20
+
21
+ it "should return return same value if value not a string" do
22
+ value = Time.now
23
+ parse(value).should == value
24
+ end
25
+
26
+ it "should return time object for valid date string" do
27
+ parse("2000-01-01").should be_kind_of(Time)
28
+ end
29
+
30
+ it "should return nil for invalid date string" do
31
+ should_not_parse("2000-02-30")
32
+ end
33
+
5
34
  it "should return time object for valid time string" do
6
- parse("2000-01-01 12:13:14", :datetime).should be_kind_of(Time)
35
+ parse("12:13:14").should be_kind_of(Time)
36
+ end
37
+
38
+ it "should return nil for invalid time string" do
39
+ should_not_parse("25:00:00")
7
40
  end
8
41
 
9
42
  it "should return nil for datetime string with invalid date part" do
10
- should_not_parse("2000-02-30 12:13:14", :datetime)
43
+ should_not_parse("2000-02-30 12:13:14")
11
44
  end
12
45
 
13
46
  it "should return nil for datetime string with invalid time part" do
14
- should_not_parse("2000-02-01 25:13:14", :datetime)
47
+ should_not_parse("2000-02-01 25:13:14")
15
48
  end
16
49
 
17
- it "should return nil for invalid date string" do
18
- should_not_parse("2000-02-30", :date)
50
+ context "string with zone offset value" do
51
+ context "when current timezone is earler than string zone" do
52
+ it 'should return value shifted by positive offset in default timezone' do
53
+ value = parse("2000-06-01T12:00:00+02:00")
54
+ value.should == Time.local(2000,6,1,20,0,0)
55
+ value.utc_offset.should == 10.hours
56
+ end
57
+
58
+ it 'should return value shifted by negative offset in default timezone' do
59
+ value = parse("2000-06-01T12:00:00-01:00")
60
+ value.should == Time.local(2000,6,1,23,0,0)
61
+ value.utc_offset.should == 10.hours
62
+ end
63
+ end
64
+
65
+ context "when current timezone is later than string zone" do
66
+ before(:all) do
67
+ Timeliness.default_timezone = :current
68
+ Time.zone = 'America/Phoenix'
69
+ end
70
+
71
+ it 'should return value shifted by positive offset in default timezone' do
72
+ value = parse("2000-06-01T12:00:00+02:00")
73
+ value.should == Time.zone.local(2000,6,1,3,0,0)
74
+ value.utc_offset.should == -7.hours
75
+ end
76
+
77
+ it 'should return value shifted by negative offset in default timezone' do
78
+ value = parse("2000-06-01T12:00:00-01:00")
79
+ value.should == Time.zone.local(2000,6,1,6,0,0)
80
+ value.utc_offset.should == -7.hours
81
+ end
82
+
83
+ after(:all) do
84
+ Time.zone = nil
85
+ Timeliness.default_timezone = :local
86
+ end
87
+ end
19
88
  end
20
89
 
21
- it "should return nil for invalid time string" do
22
- should_not_parse("25:00:00", :time)
90
+ context "string with zone abbreviation" do
91
+ it 'should return value using string zone in default timezone' do
92
+ value = parse("Thu, 01 Jun 2000 03:00:00 MST")
93
+ value.should == Time.local(2000,6,1,20,0,0)
94
+ value.utc_offset.should == 10.hours
95
+ end
23
96
  end
24
97
 
25
- it "should ignore time in datetime string for date type" do
26
- parse('2000-02-01 12:13', :date).should == Time.local(2000,2,1)
98
+ context "with :datetime type" do
99
+ it "should return time object for valid datetime string" do
100
+ parse("2000-01-01 12:13:14", :datetime).should == Time.local(2000,1,1,12,13,14)
101
+ end
27
102
  end
28
103
 
29
- it "should ignore date in datetime string for time type" do
30
- parse('2010-02-01 12:13', :time).should == Time.local(2000,1,1,12,13)
104
+ context "with :date type" do
105
+ it "should return time object for valid date string" do
106
+ parse("2000-01-01", :date).should == Time.local(2000,1,1)
107
+ end
108
+
109
+ it "should ignore time in datetime string" do
110
+ parse('2000-02-01 12:13', :date).should == Time.local(2000,2,1)
111
+ end
31
112
  end
32
113
 
33
- it "should return return same value if value not a string" do
34
- value = Time.now
35
- parse(value, :datetime).should == value
114
+ context "with :time type" do
115
+ it "should return time object with a dummy date values" do
116
+ parse('12:13', :time).should == Time.local(2010,1,1,12,13)
117
+ end
118
+
119
+ it "should ignore date in datetime string" do
120
+ parse('2010-02-01 12:13', :time).should == Time.local(2010,1,1,12,13)
121
+ end
122
+
123
+ it "should raise error if time hour is out of range for AM meridian" do
124
+ parse('13:14 am', :time).should be_nil
125
+ end
36
126
  end
37
127
 
38
128
  context "with :now option" do
@@ -75,14 +165,14 @@ describe Timeliness::Parser do
75
165
  context "without ActiveSupport loaded" do
76
166
  it 'should output message' do
77
167
  lambda {
78
- Time.should_receive(:use_zone).and_raise(NoMethodError.new("undefined method `zone' for Time:Class"))
79
- time = parse("2000-06-01 12:13:14", :datetime, :zone => 'London')
168
+ Time.should_receive(:zone).and_raise(NoMethodError.new("undefined method `zone' for Time:Class"))
169
+ time = parse("2000-06-01 12:13:14", :datetime, :zone => :current)
80
170
  }.should raise_error(Timeliness::Parser::MissingTimezoneSupport)
81
171
  end
82
172
  end
83
173
  end
84
174
 
85
- describe "for time type" do
175
+ context "for time type" do
86
176
  context "with date from date_for_time_type" do
87
177
  before do
88
178
  @original = Timeliness.date_for_time_type
@@ -110,28 +200,21 @@ describe Timeliness::Parser do
110
200
  end
111
201
 
112
202
  context "with :zone option" do
113
- before(:all) do
114
- Timecop.freeze(2010,1,1,0,0,0)
115
- end
116
-
117
203
  it "should use date from the specified zone" do
118
204
  time = parse("12:13:14", :time, :zone => :utc)
119
205
  time.year.should == 2009
120
206
  time.month.should == 12
121
207
  time.day.should == 31
122
208
  end
123
-
124
- after(:all) do
125
- Timecop.return
126
- end
127
209
  end
210
+
128
211
  end
129
212
  end
130
213
 
131
- context "_parse" do
132
- context "with type" do
214
+ describe "_parse" do
215
+ context "with no type" do
133
216
  it "should return date array from date string" do
134
- time_array = parser._parse('2000-02-01', :date)
217
+ time_array = parser._parse('2000-02-01')
135
218
  time_array.should == [2000,2,1,nil,nil,nil,nil,nil]
136
219
  end
137
220
 
@@ -141,45 +224,45 @@ describe Timeliness::Parser do
141
224
  end
142
225
 
143
226
  it "should return datetime array from datetime string" do
144
- time_array = parser._parse('2000-02-01 12:13:14', :datetime)
145
- time_array.should == [2000,2,1,12,13,14,nil,nil]
146
- end
147
-
148
- it "should return date array from date string when type is datetime" do
149
- time_array = parser._parse('2000-02-01', :datetime)
150
- time_array.should == [2000,2,1,nil,nil,nil,nil,nil]
151
- end
152
-
153
- it "should return datetime array from datetime string when type is date" do
154
- time_array = parser._parse('2000-02-01 12:13:14', :date)
227
+ time_array = parser._parse('2000-02-01 12:13:14')
155
228
  time_array.should == [2000,2,1,12,13,14,nil,nil]
156
229
  end
157
230
  end
158
231
 
159
- context "with no type" do
232
+ context "with type" do
160
233
  it "should return date array from date string" do
161
- time_array = parser._parse('2000-02-01')
234
+ time_array = parser._parse('2000-02-01', :date)
162
235
  time_array.should == [2000,2,1,nil,nil,nil,nil,nil]
163
236
  end
164
237
 
238
+ it "should not return time array from time string for :date type" do
239
+ time_array = parser._parse('12:13:14', :date)
240
+ time_array.should == nil
241
+ end
242
+
165
243
  it "should return time array from time string" do
166
244
  time_array = parser._parse('12:13:14', :time)
167
245
  time_array.should == [nil,nil,nil,12,13,14,nil,nil]
168
246
  end
169
247
 
170
- it "should return datetime array from datetime string" do
171
- time_array = parser._parse('2000-02-01 12:13:14')
248
+ it "should not return date array from date string for :time type" do
249
+ time_array = parser._parse('2000-02-01', :time)
250
+ time_array.should == nil
251
+ end
252
+
253
+ it "should return datetime array from datetime string when type is date" do
254
+ time_array = parser._parse('2000-02-01 12:13:14', :date)
172
255
  time_array.should == [2000,2,1,12,13,14,nil,nil]
173
256
  end
174
257
 
175
258
  it "should return date array from date string when type is datetime" do
176
- time_array = parser._parse('2000-02-01')
259
+ time_array = parser._parse('2000-02-01', :datetime)
177
260
  time_array.should == [2000,2,1,nil,nil,nil,nil,nil]
178
261
  end
179
262
 
180
- it "should return datetime array from datetime string when type is date" do
181
- time_array = parser._parse('2000-02-01 12:13:14')
182
- time_array.should == [2000,2,1,12,13,14,nil,nil]
263
+ it "should not return time array from time string when type is datetime" do
264
+ time_array = parser._parse('12:13:14', :datetime)
265
+ time_array.should == nil
183
266
  end
184
267
  end
185
268
 
@@ -220,13 +303,6 @@ describe Timeliness::Parser do
220
303
  end
221
304
  end
222
305
 
223
- it "should return nil if time hour is out of range for AM meridian" do
224
- time_array = parser._parse('13:14 am', :time)
225
- time_array.should == nil
226
- time_array = parser._parse('00:14 am', :time)
227
- time_array.should == nil
228
- end
229
-
230
306
  context "with :format option" do
231
307
  it "should return values if string matches specified format" do
232
308
  time_array = parser._parse('2000-02-01 12:13:14', :datetime, :format => 'yyyy-mm-dd hh:nn:ss')
@@ -327,9 +403,6 @@ describe Timeliness::Parser do
327
403
  end
328
404
 
329
405
  describe "current_date" do
330
- before(:all) do
331
- Timecop.freeze(2010,1,1,0,0,0)
332
- end
333
406
 
334
407
  context "with no options" do
335
408
  it 'should return date_for_time_type values with no options' do
@@ -371,9 +444,9 @@ describe Timeliness::Parser do
371
444
  current_date(:zone => 'London').should == date_array
372
445
  end
373
446
  end
447
+ end
374
448
 
375
- after(:all) do
376
- Timecop.return
377
- end
449
+ after(:all) do
450
+ Timecop.return
378
451
  end
379
452
  end