timeliness 0.3.6 → 0.3.7
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.
- data/CHANGELOG.rdoc +5 -0
- data/Rakefile +1 -1
- data/lib/timeliness.rb +4 -13
- data/lib/timeliness/definitions.rb +16 -8
- data/lib/timeliness/format_set.rb +1 -1
- data/lib/timeliness/parser.rb +13 -3
- data/lib/timeliness/version.rb +1 -1
- data/spec/timeliness/core_ext/string_spec.rb +11 -11
- data/spec/timeliness/definitions_spec.rb +21 -9
- data/spec/timeliness/format_spec.rb +17 -17
- data/spec/timeliness/parser_spec.rb +67 -62
- metadata +19 -40
    
        data/CHANGELOG.rdoc
    CHANGED
    
    | @@ -1,3 +1,8 @@ | |
| 1 | 
            +
            = 0.3.7 - 2012-10-03
         | 
| 2 | 
            +
            * Change to a hot switch between US and Euro formats without a compile.
         | 
| 3 | 
            +
            * Fix date parsing with bad month name defaulting to 1 if year and day present.
         | 
| 4 | 
            +
            * Fix date parsing with nil month.
         | 
| 5 | 
            +
             | 
| 1 6 | 
             
            = 0.3.6 - 2012-03-29
         | 
| 2 7 | 
             
            * Fix bug with month_index using Integer method and leading zeroes treated as octal.
         | 
| 3 8 |  | 
    
        data/Rakefile
    CHANGED
    
    
    
        data/lib/timeliness.rb
    CHANGED
    
    | @@ -24,20 +24,11 @@ module Timeliness | |
| 24 24 | 
             
              #   - :current
         | 
| 25 25 | 
             
              #   - 'Zone name'
         | 
| 26 26 | 
             
              #
         | 
| 27 | 
            -
               | 
| 27 | 
            +
              self.default_timezone = :local
         | 
| 28 28 |  | 
| 29 29 | 
             
              # Set the default date part for a time type values.
         | 
| 30 | 
            -
               | 
| 31 | 
            -
             | 
| 32 | 
            -
              def self.date_for_time_type
         | 
| 33 | 
            -
                case @date_for_time_type
         | 
| 34 | 
            -
                when Array
         | 
| 35 | 
            -
                  @date_for_time_type
         | 
| 36 | 
            -
                when Proc
         | 
| 37 | 
            -
                  v = @date_for_time_type.call
         | 
| 38 | 
            -
                  [v.year, v.month, v.day]
         | 
| 39 | 
            -
                end
         | 
| 40 | 
            -
              end
         | 
| 30 | 
            +
              #
         | 
| 31 | 
            +
              self.date_for_time_type = lambda { Time.now }
         | 
| 41 32 |  | 
| 42 33 | 
             
              # Set the threshold value for a two digit year to be considered last century
         | 
| 43 34 | 
             
              #
         | 
| @@ -47,7 +38,7 @@ module Timeliness | |
| 47 38 | 
             
              #     year = '29' is considered 2029
         | 
| 48 39 | 
             
              #     year = '30' is considered 1930
         | 
| 49 40 | 
             
              #
         | 
| 50 | 
            -
               | 
| 41 | 
            +
              self.ambiguous_year_threshold = 30
         | 
| 51 42 | 
             
            end
         | 
| 52 43 |  | 
| 53 44 | 
             
            Timeliness::Definitions.compile_formats
         | 
| @@ -130,6 +130,7 @@ module Timeliness | |
| 130 130 |  | 
| 131 131 | 
             
                # Mapping some common timezone abbreviations which are not mapped or
         | 
| 132 132 | 
             
                # mapped inconsistenly in ActiveSupport (TzInfo).
         | 
| 133 | 
            +
                #
         | 
| 133 134 | 
             
                @timezone_mapping = {
         | 
| 134 135 | 
             
                  'AEST' => 'Australia/Sydney',
         | 
| 135 136 | 
             
                  'AEDT' => 'Australia/Sydney',
         | 
| @@ -184,22 +185,28 @@ module Timeliness | |
| 184 185 | 
             
                  # Removes US date formats so that ambiguous dates are parsed as European format
         | 
| 185 186 | 
             
                  #
         | 
| 186 187 | 
             
                  def use_euro_formats
         | 
| 187 | 
            -
                    @date_format_set     =  | 
| 188 | 
            -
                    @datetime_format_set =  | 
| 188 | 
            +
                    @date_format_set     = @euro_date_format_set
         | 
| 189 | 
            +
                    @datetime_format_set = @euro_datetime_format_set
         | 
| 189 190 | 
             
                  end
         | 
| 190 191 |  | 
| 191 192 | 
             
                  # Restores default to parse ambiguous dates as US format
         | 
| 192 193 | 
             
                  #
         | 
| 193 194 | 
             
                  def use_us_formats
         | 
| 194 | 
            -
                    @date_format_set     =  | 
| 195 | 
            -
                    @datetime_format_set =  | 
| 195 | 
            +
                    @date_format_set     = @us_date_format_set
         | 
| 196 | 
            +
                    @datetime_format_set = @us_datetime_format_set
         | 
| 196 197 | 
             
                  end
         | 
| 197 198 |  | 
| 198 199 | 
             
                  def compile_formats
         | 
| 199 | 
            -
                    @sorted_token_keys | 
| 200 | 
            -
                    @time_format_set | 
| 201 | 
            -
             | 
| 202 | 
            -
                    @ | 
| 200 | 
            +
                    @sorted_token_keys = nil
         | 
| 201 | 
            +
                    @time_format_set   = FormatSet.compile(time_formats)
         | 
| 202 | 
            +
             | 
| 203 | 
            +
                    @us_date_format_set       = FormatSet.compile(date_formats)
         | 
| 204 | 
            +
                    @us_datetime_format_set   = FormatSet.compile(datetime_formats)
         | 
| 205 | 
            +
                    @euro_date_format_set     = FormatSet.compile(date_formats.select { |format| US_FORMAT_REGEXP !~ format })
         | 
| 206 | 
            +
                    @euro_datetime_format_set = FormatSet.compile(datetime_formats.select { |format| US_FORMAT_REGEXP !~ format })
         | 
| 207 | 
            +
             | 
| 208 | 
            +
                    @date_format_set     = @us_date_format_set
         | 
| 209 | 
            +
                    @datetime_format_set = @us_datetime_format_set
         | 
| 203 210 | 
             
                  end
         | 
| 204 211 |  | 
| 205 212 | 
             
                  def sorted_token_keys
         | 
| @@ -208,6 +215,7 @@ module Timeliness | |
| 208 215 |  | 
| 209 216 | 
             
                  # Returns format for type and other possible matching format set based on type
         | 
| 210 217 | 
             
                  # and value length. Gives minor speed-up by checking string length.
         | 
| 218 | 
            +
                  #
         | 
| 211 219 | 
             
                  def format_sets(type, string)
         | 
| 212 220 | 
             
                    case type
         | 
| 213 221 | 
             
                    when :date
         | 
    
        data/lib/timeliness/parser.rb
    CHANGED
    
    | @@ -67,7 +67,7 @@ module Timeliness | |
| 67 67 | 
             
                    when nil
         | 
| 68 68 | 
             
                      dummy_date = current_date(options)
         | 
| 69 69 | 
             
                      values[0] ||= dummy_date[0]
         | 
| 70 | 
            -
                      values[1] ||= dummy_date[1]
         | 
| 70 | 
            +
                      values[1] ||= dummy_date[1] unless values.values_at(0,2).all?
         | 
| 71 71 | 
             
                      values[2] ||= dummy_date[2]
         | 
| 72 72 | 
             
                    end
         | 
| 73 73 | 
             
                  end
         | 
| @@ -78,7 +78,7 @@ module Timeliness | |
| 78 78 | 
             
                    elsif options[:zone]
         | 
| 79 79 | 
             
                      current_time_in_zone(options[:zone])
         | 
| 80 80 | 
             
                    else
         | 
| 81 | 
            -
                       | 
| 81 | 
            +
                      evaluate_date_for_time_type
         | 
| 82 82 | 
             
                    end
         | 
| 83 83 | 
             
                    now.is_a?(Array) ? now[0..2] : [now.year, now.month, now.day]
         | 
| 84 84 | 
             
                  end
         | 
| @@ -139,7 +139,17 @@ module Timeliness | |
| 139 139 | 
             
                  # Enforce strict date part validity which the Time class does not.
         | 
| 140 140 | 
             
                  # Only does full date check if month and day are possibly invalid.
         | 
| 141 141 | 
             
                  def fast_date_valid_with_fallback(year, month, day)
         | 
| 142 | 
            -
                    month < 13 && (day < 29 || Date.valid_civil?(year, month, day))
         | 
| 142 | 
            +
                    month && month < 13 && (day < 29 || Date.valid_civil?(year, month, day))
         | 
| 143 | 
            +
                  end
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                  def evaluate_date_for_time_type
         | 
| 146 | 
            +
                    case Timeliness.date_for_time_type
         | 
| 147 | 
            +
                    when Array
         | 
| 148 | 
            +
                      Timeliness.date_for_time_type
         | 
| 149 | 
            +
                    when Proc
         | 
| 150 | 
            +
                      v = Timeliness.date_for_time_type.call
         | 
| 151 | 
            +
                      [v.year, v.month, v.day]
         | 
| 152 | 
            +
                    end
         | 
| 143 153 | 
             
                  end
         | 
| 144 154 |  | 
| 145 155 | 
             
                end
         | 
    
        data/lib/timeliness/version.rb
    CHANGED
    
    
| @@ -5,29 +5,29 @@ describe Timeliness::CoreExt, 'String' do | |
| 5 5 |  | 
| 6 6 | 
             
              describe "#to_time" do
         | 
| 7 7 | 
             
                it 'should convert valid string to Time object in default zone' do
         | 
| 8 | 
            -
                  "2005-02-27 23:50".to_time.should  | 
| 8 | 
            +
                  "2005-02-27 23:50".to_time.should eq Time.utc(2005, 2, 27, 23, 50)
         | 
| 9 9 | 
             
                end
         | 
| 10 10 |  | 
| 11 11 | 
             
                it 'should convert ISO 8601 string to Time object' do
         | 
| 12 | 
            -
                  "2005-02-27T23:50:19.275038".to_time.should  | 
| 12 | 
            +
                  "2005-02-27T23:50:19.275038".to_time.should eq Time.utc(2005, 2, 27, 23, 50, 19, 275038)
         | 
| 13 13 | 
             
                end
         | 
| 14 14 |  | 
| 15 15 | 
             
                context "with :local" do
         | 
| 16 16 | 
             
                  it 'should convert valid string to local time' do
         | 
| 17 | 
            -
                    "2005-02-27 23:50".to_time(:local).should  | 
| 17 | 
            +
                    "2005-02-27 23:50".to_time(:local).should eq Time.local(2005, 2, 27, 23, 50)
         | 
| 18 18 | 
             
                  end
         | 
| 19 19 |  | 
| 20 20 | 
             
                  it 'should convert ISO 8601 string to local time' do
         | 
| 21 | 
            -
                    "2005-02-27T23:50:19.275038".to_time(:local).should  | 
| 21 | 
            +
                    "2005-02-27T23:50:19.275038".to_time(:local).should eq Time.local(2005, 2, 27, 23, 50, 19, 275038)
         | 
| 22 22 | 
             
                  end
         | 
| 23 23 | 
             
                end
         | 
| 24 24 |  | 
| 25 25 | 
             
                it 'should convert valid future string to Time object' do
         | 
| 26 | 
            -
                  "2039-02-27 23:50".to_time(:local).should  | 
| 26 | 
            +
                  "2039-02-27 23:50".to_time(:local).should eq Time.local_time(2039, 2, 27, 23, 50)
         | 
| 27 27 | 
             
                end
         | 
| 28 28 |  | 
| 29 29 | 
             
                it 'should convert valid future string to Time object' do
         | 
| 30 | 
            -
                  "2039-02-27 23:50".to_time.should  | 
| 30 | 
            +
                  "2039-02-27 23:50".to_time.should eq DateTime.civil(2039, 2, 27, 23, 50)
         | 
| 31 31 | 
             
                end
         | 
| 32 32 |  | 
| 33 33 | 
             
                it 'should convert empty string to nil' do
         | 
| @@ -37,21 +37,21 @@ describe Timeliness::CoreExt, 'String' do | |
| 37 37 |  | 
| 38 38 | 
             
              describe "#to_datetime" do
         | 
| 39 39 | 
             
                it 'should convert valid string to DateTime object' do
         | 
| 40 | 
            -
                  "2039-02-27 23:50".to_datetime.should  | 
| 40 | 
            +
                  "2039-02-27 23:50".to_datetime.should eq DateTime.civil(2039, 2, 27, 23, 50)
         | 
| 41 41 | 
             
                end
         | 
| 42 42 |  | 
| 43 43 | 
             
                it 'should convert to DateTime object with UTC offset' do
         | 
| 44 | 
            -
                  "2039-02-27 23:50".to_datetime.offset.should  | 
| 44 | 
            +
                  "2039-02-27 23:50".to_datetime.offset.should eq 0
         | 
| 45 45 | 
             
                end
         | 
| 46 46 |  | 
| 47 47 | 
             
                it 'should convert ISO 8601 string to DateTime object' do
         | 
| 48 48 | 
             
                  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  | 
| 49 | 
            +
                  "2039-02-27T23:50:19.275038-04:00".to_datetime.should eq datetime
         | 
| 50 50 | 
             
                end
         | 
| 51 51 |  | 
| 52 52 | 
             
                it 'should use Rubys default start value' do
         | 
| 53 53 | 
             
                  # Taken from ActiveSupport unit tests. Not sure on the implication.
         | 
| 54 | 
            -
                  "2039-02-27 23:50".to_datetime.start.should  | 
| 54 | 
            +
                  "2039-02-27 23:50".to_datetime.start.should eq ::Date::ITALY
         | 
| 55 55 | 
             
                end
         | 
| 56 56 |  | 
| 57 57 | 
             
                it 'should convert empty string to nil' do
         | 
| @@ -61,7 +61,7 @@ describe Timeliness::CoreExt, 'String' do | |
| 61 61 |  | 
| 62 62 | 
             
              describe "#to_date" do
         | 
| 63 63 | 
             
                it 'should convert string to Date object' do
         | 
| 64 | 
            -
                  "2005-02-27".to_date.should  | 
| 64 | 
            +
                  "2005-02-27".to_date.should eq Date.new(2005, 2, 27)
         | 
| 65 65 | 
             
                end
         | 
| 66 66 |  | 
| 67 67 | 
             
                it 'should convert empty string to nil' do
         | 
| @@ -19,18 +19,18 @@ describe Timeliness::Definitions do | |
| 19 19 | 
             
                end
         | 
| 20 20 |  | 
| 21 21 | 
             
                it "should raise error if format exists" do
         | 
| 22 | 
            -
                  expect { definitions.add_formats(:time, "hh:nn:ss") }. | 
| 22 | 
            +
                  expect { definitions.add_formats(:time, "hh:nn:ss") }.to 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 27 | 
             
                    definitions.add_formats(:time, "ss:hh:nn", :before => 'hh:nn:ss')
         | 
| 28 28 | 
             
                    time_array = parser._parse('59:23:58', :time)
         | 
| 29 | 
            -
                    time_array.should  | 
| 29 | 
            +
                    time_array.should eq [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 | 
            -
                    expect { definitions.add_formats(:time, "ss:hh:nn", :before => 'nn:hh:ss') }. | 
| 33 | 
            +
                    expect { definitions.add_formats(:time, "ss:hh:nn", :before => 'nn:hh:ss') }.to raise_error
         | 
| 34 34 | 
             
                  end
         | 
| 35 35 | 
             
                end
         | 
| 36 36 |  | 
| @@ -63,7 +63,7 @@ describe Timeliness::Definitions do | |
| 63 63 | 
             
                end
         | 
| 64 64 |  | 
| 65 65 | 
             
                it "should raise error if format does not exist" do
         | 
| 66 | 
            -
                  expect { definitions.remove_formats(:time, "ss:hh:nn") }. | 
| 66 | 
            +
                  expect { definitions.remove_formats(:time, "ss:hh:nn") }.to raise_error()
         | 
| 67 67 | 
             
                end
         | 
| 68 68 |  | 
| 69 69 | 
             
                after do
         | 
| @@ -74,21 +74,33 @@ describe Timeliness::Definitions do | |
| 74 74 |  | 
| 75 75 | 
             
              context "use_euro_formats" do
         | 
| 76 76 | 
             
                it "should allow ambiguous date to be parsed as European format" do
         | 
| 77 | 
            -
                  parser._parse('01/02/2000', :date).should  | 
| 77 | 
            +
                  parser._parse('01/02/2000', :date).should eq [2000,1,2,nil,nil,nil,nil,nil]
         | 
| 78 | 
            +
                  definitions.use_euro_formats
         | 
| 79 | 
            +
                  parser._parse('01/02/2000', :date).should eq [2000,2,1,nil,nil,nil,nil,nil]
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                it "should not parse formats on switch to euro after initial compile" do
         | 
| 83 | 
            +
                  definitions.compile_formats
         | 
| 84 | 
            +
                  Timeliness::FormatSet.should_not_receive(:compile)
         | 
| 78 85 | 
             
                  definitions.use_euro_formats
         | 
| 79 | 
            -
                  parser._parse('01/02/2000', :date).should == [2000,2,1,nil,nil,nil,nil,nil]
         | 
| 80 86 | 
             
                end
         | 
| 81 87 | 
             
              end
         | 
| 82 88 |  | 
| 83 | 
            -
              context " | 
| 89 | 
            +
              context "use_us_formats" do
         | 
| 84 90 | 
             
                before do
         | 
| 85 91 | 
             
                  definitions.use_euro_formats
         | 
| 86 92 | 
             
                end
         | 
| 87 93 |  | 
| 88 94 | 
             
                it "should allow ambiguous date to be parsed as European format" do
         | 
| 89 | 
            -
                  parser._parse('01/02/2000', :date).should  | 
| 95 | 
            +
                  parser._parse('01/02/2000', :date).should eq [2000,2,1,nil,nil,nil,nil,nil]
         | 
| 96 | 
            +
                  definitions.use_us_formats
         | 
| 97 | 
            +
                  parser._parse('01/02/2000', :date).should eq [2000,1,2,nil,nil,nil,nil,nil]
         | 
| 98 | 
            +
                end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                it "should not parse formats on switch to euro after initial compile" do
         | 
| 101 | 
            +
                  definitions.compile_formats
         | 
| 102 | 
            +
                  Timeliness::FormatSet.should_not_receive(:compile)
         | 
| 90 103 | 
             
                  definitions.use_us_formats
         | 
| 91 | 
            -
                  parser._parse('01/02/2000', :date).should == [2000,1,2,nil,nil,nil,nil,nil]
         | 
| 92 104 | 
             
                end
         | 
| 93 105 | 
             
              end
         | 
| 94 106 | 
             
            end
         | 
| @@ -5,60 +5,60 @@ describe Timeliness::Format do | |
| 5 5 | 
             
                it 'should compile valid string format' do
         | 
| 6 6 | 
             
                  expect { 
         | 
| 7 7 | 
             
                    Timeliness::Format.new('yyyy-mm-dd hh:nn:ss.u zo').compile!
         | 
| 8 | 
            -
                  }. | 
| 8 | 
            +
                  }.to_not raise_error
         | 
| 9 9 | 
             
                end
         | 
| 10 10 |  | 
| 11 11 | 
             
                it 'should return self' do
         | 
| 12 12 | 
             
                  format = Timeliness::Format.new('yyyy-mm-dd hh:nn:ss.u zo')
         | 
| 13 | 
            -
                  format.compile!.should  | 
| 13 | 
            +
                  format.compile!.should eq format
         | 
| 14 14 | 
             
                end
         | 
| 15 15 |  | 
| 16 16 | 
             
                it 'should raise compilation error for bad format' do
         | 
| 17 17 | 
             
                  expect { 
         | 
| 18 18 | 
             
                    Timeliness::Format.new('|--[)').compile!
         | 
| 19 | 
            -
                  }. | 
| 19 | 
            +
                  }.to raise_error(Timeliness::CompilationError)
         | 
| 20 20 | 
             
                end
         | 
| 21 21 | 
             
              end
         | 
| 22 22 |  | 
| 23 23 | 
             
              describe "#process" do
         | 
| 24 24 | 
             
                it "should define method which outputs date array with values in correct order" do
         | 
| 25 | 
            -
                  format_for('yyyy-mm-dd').process('2000', '1', '2').should  | 
| 25 | 
            +
                  format_for('yyyy-mm-dd').process('2000', '1', '2').should eq [2000,1,2,nil,nil,nil,nil,nil]
         | 
| 26 26 | 
             
                end
         | 
| 27 27 |  | 
| 28 28 | 
             
                it "should define method which outputs date array from format with different order" do
         | 
| 29 | 
            -
                  format_for('dd/mm/yyyy').process('2', '1', '2000').should  | 
| 29 | 
            +
                  format_for('dd/mm/yyyy').process('2', '1', '2000').should eq [2000,1,2,nil,nil,nil,nil,nil]
         | 
| 30 30 | 
             
                end
         | 
| 31 31 |  | 
| 32 32 | 
             
                it "should define method which outputs date array with zeros when month and day are '0'" do
         | 
| 33 | 
            -
                  format_for('m/d/yy').process('0', '0', '0000').should  | 
| 33 | 
            +
                  format_for('m/d/yy').process('0', '0', '0000').should eq [0,0,0,nil,nil,nil,nil,nil]
         | 
| 34 34 | 
             
                end
         | 
| 35 35 |  | 
| 36 36 | 
             
                it "should define method which outputs date array with zeros when month and day are '00'" do
         | 
| 37 | 
            -
                  format_for('m/d/yy').process('00', '00', '0000').should  | 
| 37 | 
            +
                  format_for('m/d/yy').process('00', '00', '0000').should eq [0,0,0,nil,nil,nil,nil,nil]
         | 
| 38 38 | 
             
                end
         | 
| 39 39 |  | 
| 40 40 | 
             
                it "should define method which outputs time array" do
         | 
| 41 | 
            -
                  format_for('hh:nn:ss').process('01', '02', '03').should  | 
| 41 | 
            +
                  format_for('hh:nn:ss').process('01', '02', '03').should eq [nil,nil,nil,1,2,3,nil,nil]
         | 
| 42 42 | 
             
                end
         | 
| 43 43 |  | 
| 44 44 | 
             
                it "should define method which outputs time array with meridian 'pm' adjusted hour" do
         | 
| 45 | 
            -
                  format_for('hh:nn:ss ampm').process('01', '02', '03', 'pm').should  | 
| 45 | 
            +
                  format_for('hh:nn:ss ampm').process('01', '02', '03', 'pm').should eq [nil,nil,nil,13,2,3,nil,nil]
         | 
| 46 46 | 
             
                end
         | 
| 47 47 |  | 
| 48 48 | 
             
                it "should define method which outputs time array with meridian 'am' unadjusted hour" do
         | 
| 49 | 
            -
                  format_for('hh:nn:ss ampm').process('01', '02', '03', 'am').should  | 
| 49 | 
            +
                  format_for('hh:nn:ss ampm').process('01', '02', '03', 'am').should eq [nil,nil,nil,1,2,3,nil,nil]
         | 
| 50 50 | 
             
                end
         | 
| 51 51 |  | 
| 52 52 | 
             
                it "should define method which outputs time array with microseconds" do
         | 
| 53 | 
            -
                  format_for('hh:nn:ss.u').process('01', '02', '03', '99').should  | 
| 53 | 
            +
                  format_for('hh:nn:ss.u').process('01', '02', '03', '99').should eq [nil,nil,nil,1,2,3,990000,nil]
         | 
| 54 54 | 
             
                end
         | 
| 55 55 |  | 
| 56 56 | 
             
                it "should define method which outputs datetime array with zone offset" do
         | 
| 57 | 
            -
                  format_for('yyyy-mm-dd hh:nn:ss.u zo').process('2001', '02', '03', '04', '05', '06', '99', '+10:00').should  | 
| 57 | 
            +
                  format_for('yyyy-mm-dd hh:nn:ss.u zo').process('2001', '02', '03', '04', '05', '06', '99', '+10:00').should eq [2001,2,3,4,5,6,990000,36000]
         | 
| 58 58 | 
             
                end
         | 
| 59 59 |  | 
| 60 60 | 
             
                it "should define method which outputs datetime array with timezone string" do
         | 
| 61 | 
            -
                  format_for('yyyy-mm-dd hh:nn:ss.u tz').process('2001', '02', '03', '04', '05', '06', '99', 'EST').should  | 
| 61 | 
            +
                  format_for('yyyy-mm-dd hh:nn:ss.u tz').process('2001', '02', '03', '04', '05', '06', '99', 'EST').should eq [2001,2,3,4,5,6,990000,'EST']
         | 
| 62 62 | 
             
                end
         | 
| 63 63 |  | 
| 64 64 | 
             
                context "with long month" do
         | 
| @@ -72,11 +72,11 @@ describe Timeliness::Format do | |
| 72 72 | 
             
                    end
         | 
| 73 73 |  | 
| 74 74 | 
             
                    it 'should parse abbreviated month for current locale to correct value' do
         | 
| 75 | 
            -
                      format.process('2', 'Ene', '2000').should  | 
| 75 | 
            +
                      format.process('2', 'Ene', '2000').should eq [2000,1,2,nil,nil,nil,nil,nil]
         | 
| 76 76 | 
             
                    end
         | 
| 77 77 |  | 
| 78 78 | 
             
                    it 'should parse full month for current locale to correct value' do
         | 
| 79 | 
            -
                      format.process('2', 'Enero', '2000').should  | 
| 79 | 
            +
                      format.process('2', 'Enero', '2000').should eq [2000,1,2,nil,nil,nil,nil,nil]
         | 
| 80 80 | 
             
                    end
         | 
| 81 81 |  | 
| 82 82 | 
             
                    after(:all) do
         | 
| @@ -91,11 +91,11 @@ describe Timeliness::Format do | |
| 91 91 | 
             
                    end
         | 
| 92 92 |  | 
| 93 93 | 
             
                    it 'should parse abbreviated month to correct value' do
         | 
| 94 | 
            -
                      format.process('2', 'Jan', '2000').should  | 
| 94 | 
            +
                      format.process('2', 'Jan', '2000').should eq [2000,1,2,nil,nil,nil,nil,nil]
         | 
| 95 95 | 
             
                    end
         | 
| 96 96 |  | 
| 97 97 | 
             
                    it 'should parse full month to correct value' do
         | 
| 98 | 
            -
                      format.process('2', 'January', '2000').should  | 
| 98 | 
            +
                      format.process('2', 'January', '2000').should eq [2000,1,2,nil,nil,nil,nil,nil]
         | 
| 99 99 | 
             
                    end
         | 
| 100 100 | 
             
                  end
         | 
| 101 101 | 
             
                end
         | 
| @@ -20,7 +20,7 @@ describe Timeliness::Parser do | |
| 20 20 |  | 
| 21 21 | 
             
                it "should return return same value if value not a string" do
         | 
| 22 22 | 
             
                  value = Time.now
         | 
| 23 | 
            -
                  parse(value).should  | 
| 23 | 
            +
                  parse(value).should eq value
         | 
| 24 24 | 
             
                end
         | 
| 25 25 |  | 
| 26 26 | 
             
                it "should return time object for valid date string" do
         | 
| @@ -39,6 +39,10 @@ describe Timeliness::Parser do | |
| 39 39 | 
             
                  should_not_parse("00/01/2000")
         | 
| 40 40 | 
             
                end
         | 
| 41 41 |  | 
| 42 | 
            +
                it "should return nil for invalid date month string" do
         | 
| 43 | 
            +
                  should_not_parse("1 Foo 2000")
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 42 46 | 
             
                it "should return time object for valid time string" do
         | 
| 43 47 | 
             
                  parse("12:13:14").should be_kind_of(Time)
         | 
| 44 48 | 
             
                end
         | 
| @@ -59,14 +63,14 @@ describe Timeliness::Parser do | |
| 59 63 | 
             
                  context "when current timezone is earler than string zone" do
         | 
| 60 64 | 
             
                    it 'should return value shifted by positive offset in default timezone' do
         | 
| 61 65 | 
             
                      value = parse("2000-06-01T12:00:00+02:00")
         | 
| 62 | 
            -
                      value.should  | 
| 63 | 
            -
                      value.utc_offset.should  | 
| 66 | 
            +
                      value.should eq Time.local(2000,6,1,20,0,0)
         | 
| 67 | 
            +
                      value.utc_offset.should eq 10.hours
         | 
| 64 68 | 
             
                    end
         | 
| 65 69 |  | 
| 66 70 | 
             
                    it 'should return value shifted by negative offset in default timezone' do
         | 
| 67 71 | 
             
                      value = parse("2000-06-01T12:00:00-01:00")
         | 
| 68 | 
            -
                      value.should  | 
| 69 | 
            -
                      value.utc_offset.should  | 
| 72 | 
            +
                      value.should eq Time.local(2000,6,1,23,0,0)
         | 
| 73 | 
            +
                      value.utc_offset.should eq 10.hours
         | 
| 70 74 | 
             
                    end
         | 
| 71 75 | 
             
                  end
         | 
| 72 76 |  | 
| @@ -78,14 +82,14 @@ describe Timeliness::Parser do | |
| 78 82 |  | 
| 79 83 | 
             
                    it 'should return value shifted by positive offset in default timezone' do
         | 
| 80 84 | 
             
                      value = parse("2000-06-01T12:00:00+02:00")
         | 
| 81 | 
            -
                      value.should  | 
| 82 | 
            -
                      value.utc_offset.should  | 
| 85 | 
            +
                      value.should eq Time.zone.local(2000,6,1,3,0,0)
         | 
| 86 | 
            +
                      value.utc_offset.should eq -7.hours
         | 
| 83 87 | 
             
                    end
         | 
| 84 88 |  | 
| 85 89 | 
             
                    it 'should return value shifted by negative offset in default timezone' do
         | 
| 86 90 | 
             
                      value = parse("2000-06-01T12:00:00-01:00")
         | 
| 87 | 
            -
                      value.should  | 
| 88 | 
            -
                      value.utc_offset.should  | 
| 91 | 
            +
                      value.should eq Time.zone.local(2000,6,1,6,0,0)
         | 
| 92 | 
            +
                      value.utc_offset.should eq -7.hours
         | 
| 89 93 | 
             
                    end
         | 
| 90 94 |  | 
| 91 95 | 
             
                    after(:all) do
         | 
| @@ -103,23 +107,23 @@ describe Timeliness::Parser do | |
| 103 107 | 
             
                  it 'should return value using string zone adjusted to default :local timezone' do
         | 
| 104 108 | 
             
                    Timeliness.default_timezone = :local
         | 
| 105 109 | 
             
                    value = parse("Thu, 01 Jun 2000 03:00:00 MST")
         | 
| 106 | 
            -
                    value.should  | 
| 107 | 
            -
                    value.utc_offset.should  | 
| 110 | 
            +
                    value.should eq Time.local(2000,6,1,20,0,0)
         | 
| 111 | 
            +
                    value.utc_offset.should eq 10.hours
         | 
| 108 112 | 
             
                  end
         | 
| 109 113 |  | 
| 110 114 | 
             
                  it 'should return value using string zone adjusted to default :current timezone' do
         | 
| 111 115 | 
             
                    Timeliness.default_timezone = :current
         | 
| 112 116 | 
             
                    Time.zone = 'Adelaide'
         | 
| 113 117 | 
             
                    value = parse("Thu, 01 Jun 2000 03:00:00 MST")
         | 
| 114 | 
            -
                    value.should  | 
| 115 | 
            -
                    value.utc_offset.should  | 
| 118 | 
            +
                    value.should eq Time.zone.local(2000,6,1,19,30,0)
         | 
| 119 | 
            +
                    value.utc_offset.should eq 9.5.hours
         | 
| 116 120 | 
             
                  end
         | 
| 117 121 |  | 
| 118 122 | 
             
                  it 'should return value using string zone adjusted to :zone option string timezone' do
         | 
| 119 123 | 
             
                    Timeliness.default_timezone = :local
         | 
| 120 124 | 
             
                    value = parse("Thu, 01 Jun 2000 03:00:00 MST", :zone => 'Perth')
         | 
| 121 | 
            -
                    value.should  | 
| 122 | 
            -
                    value.utc_offset.should  | 
| 125 | 
            +
                    value.should eq Time.use_zone('Perth') { Time.zone.local(2000,6,1,18,0,0) }
         | 
| 126 | 
            +
                    value.utc_offset.should eq 8.hours
         | 
| 123 127 | 
             
                  end
         | 
| 124 128 |  | 
| 125 129 | 
             
                  after do
         | 
| @@ -129,7 +133,7 @@ describe Timeliness::Parser do | |
| 129 133 |  | 
| 130 134 | 
             
                context "with :datetime type" do
         | 
| 131 135 | 
             
                  it "should return time object for valid datetime string" do
         | 
| 132 | 
            -
                    parse("2000-01-01 12:13:14", :datetime).should  | 
| 136 | 
            +
                    parse("2000-01-01 12:13:14", :datetime).should eq Time.local(2000,1,1,12,13,14)
         | 
| 133 137 | 
             
                  end
         | 
| 134 138 |  | 
| 135 139 | 
             
                  it "should return nil for invalid date string" do
         | 
| @@ -139,11 +143,11 @@ describe Timeliness::Parser do | |
| 139 143 |  | 
| 140 144 | 
             
                context "with :date type" do
         | 
| 141 145 | 
             
                  it "should return time object for valid date string" do
         | 
| 142 | 
            -
                    parse("2000-01-01", :date).should  | 
| 146 | 
            +
                    parse("2000-01-01", :date).should eq Time.local(2000,1,1)
         | 
| 143 147 | 
             
                  end
         | 
| 144 148 |  | 
| 145 149 | 
             
                  it "should ignore time in datetime string" do
         | 
| 146 | 
            -
                    parse('2000-02-01 12:13', :date).should  | 
| 150 | 
            +
                    parse('2000-02-01 12:13', :date).should eq Time.local(2000,2,1)
         | 
| 147 151 | 
             
                  end
         | 
| 148 152 |  | 
| 149 153 | 
             
                  it "should return nil for invalid date string" do
         | 
| @@ -153,11 +157,11 @@ describe Timeliness::Parser do | |
| 153 157 |  | 
| 154 158 | 
             
                context "with :time type" do
         | 
| 155 159 | 
             
                  it "should return time object with a dummy date values" do
         | 
| 156 | 
            -
                    parse('12:13', :time).should  | 
| 160 | 
            +
                    parse('12:13', :time).should eq Time.local(2010,1,1,12,13)
         | 
| 157 161 | 
             
                  end
         | 
| 158 162 |  | 
| 159 163 | 
             
                  it "should ignore date in datetime string" do
         | 
| 160 | 
            -
                    parse('2010-02-01 12:13', :time).should  | 
| 164 | 
            +
                    parse('2010-02-01 12:13', :time).should eq Time.local(2010,1,1,12,13)
         | 
| 161 165 | 
             
                  end
         | 
| 162 166 |  | 
| 163 167 | 
             
                  it "should raise error if time hour is out of range for AM meridian" do
         | 
| @@ -168,14 +172,14 @@ describe Timeliness::Parser do | |
| 168 172 | 
             
                context "with :now option" do
         | 
| 169 173 | 
             
                  it 'should use date parts if string does not specify' do
         | 
| 170 174 | 
             
                    time = parse("12:13:14", :now => Time.local(2010,1,1))
         | 
| 171 | 
            -
                    time.should  | 
| 175 | 
            +
                    time.should eq Time.local(2010,1,1,12,13,14)
         | 
| 172 176 | 
             
                  end
         | 
| 173 177 | 
             
                end
         | 
| 174 178 |  | 
| 175 179 | 
             
                context "with time value argument" do
         | 
| 176 180 | 
             
                  it 'should use argument as :now option value' do
         | 
| 177 181 | 
             
                    time = parse("12:13:14", Time.local(2010,1,1))
         | 
| 178 | 
            -
                    time.should  | 
| 182 | 
            +
                    time.should eq Time.local(2010,1,1,12,13,14)
         | 
| 179 183 | 
             
                  end
         | 
| 180 184 | 
             
                end
         | 
| 181 185 |  | 
| @@ -183,7 +187,7 @@ describe Timeliness::Parser do | |
| 183 187 | 
             
                  context ":utc" do
         | 
| 184 188 | 
             
                    it "should return time object in utc timezone" do
         | 
| 185 189 | 
             
                      time = parse("2000-06-01 12:13:14", :datetime, :zone => :utc)
         | 
| 186 | 
            -
                      time.utc_offset.should  | 
| 190 | 
            +
                      time.utc_offset.should eq 0
         | 
| 187 191 | 
             
                    end
         | 
| 188 192 |  | 
| 189 193 | 
             
                    it 'should return nil for partial invalid time component' do
         | 
| @@ -194,7 +198,7 @@ describe Timeliness::Parser do | |
| 194 198 | 
             
                  context ":local" do
         | 
| 195 199 | 
             
                    it "should return time object in local system timezone" do
         | 
| 196 200 | 
             
                      time = parse("2000-06-01 12:13:14", :datetime, :zone => :local)
         | 
| 197 | 
            -
                      time.utc_offset.should  | 
| 201 | 
            +
                      time.utc_offset.should eq 10.hours
         | 
| 198 202 | 
             
                    end
         | 
| 199 203 |  | 
| 200 204 | 
             
                    it 'should return nil for partial invalid time component' do
         | 
| @@ -206,7 +210,7 @@ describe Timeliness::Parser do | |
| 206 210 | 
             
                    it "should return time object in current timezone" do
         | 
| 207 211 | 
             
                      Time.zone = 'Adelaide'
         | 
| 208 212 | 
             
                      time = parse("2000-06-01 12:13:14", :datetime, :zone => :current)
         | 
| 209 | 
            -
                      time.utc_offset.should  | 
| 213 | 
            +
                      time.utc_offset.should eq 9.5.hours
         | 
| 210 214 | 
             
                    end
         | 
| 211 215 |  | 
| 212 216 | 
             
                    it 'should return nil for partial invalid time component' do
         | 
| @@ -217,7 +221,7 @@ describe Timeliness::Parser do | |
| 217 221 | 
             
                  context "named zone" do
         | 
| 218 222 | 
             
                    it "should return time object in the timezone" do
         | 
| 219 223 | 
             
                      time = parse("2000-06-01 12:13:14", :datetime, :zone => 'London')
         | 
| 220 | 
            -
                      time.utc_offset.should  | 
| 224 | 
            +
                      time.utc_offset.should eq 1.hour
         | 
| 221 225 | 
             
                    end
         | 
| 222 226 |  | 
| 223 227 | 
             
                    it 'should return nil for partial invalid time component' do
         | 
| @@ -230,17 +234,17 @@ describe Timeliness::Parser do | |
| 230 234 | 
             
                      expect {
         | 
| 231 235 | 
             
                        Time.should_receive(:zone).and_raise(NoMethodError.new("undefined method `zone' for Time:Class"))
         | 
| 232 236 | 
             
                        parse("2000-06-01 12:13:14", :zone => :current)
         | 
| 233 | 
            -
                      }. | 
| 237 | 
            +
                      }.to raise_error(Timeliness::Parser::MissingTimezoneSupport)
         | 
| 234 238 |  | 
| 235 239 | 
             
                      expect {
         | 
| 236 240 | 
             
                        Time.should_receive(:current).and_raise(NoMethodError.new("undefined method `current' for Time:Class"))
         | 
| 237 241 | 
             
                        parse("12:13:14", :zone => :current)
         | 
| 238 | 
            -
                      }. | 
| 242 | 
            +
                      }.to raise_error(Timeliness::Parser::MissingTimezoneSupport)
         | 
| 239 243 |  | 
| 240 244 | 
             
                      expect {
         | 
| 241 245 | 
             
                        Time.should_receive(:use_zone).and_raise(NoMethodError.new("undefined method `use_zone' for Time:Class"))
         | 
| 242 246 | 
             
                        parse("2000-06-01 12:13:14", :zone => 'London')
         | 
| 243 | 
            -
                      }. | 
| 247 | 
            +
                      }.to raise_error(Timeliness::Parser::MissingTimezoneSupport)
         | 
| 244 248 | 
             
                    end
         | 
| 245 249 | 
             
                  end
         | 
| 246 250 | 
             
                end
         | 
| @@ -253,12 +257,12 @@ describe Timeliness::Parser do | |
| 253 257 |  | 
| 254 258 | 
             
                    it 'should return date array' do
         | 
| 255 259 | 
             
                      Timeliness.date_for_time_type = [2010,1,1]
         | 
| 256 | 
            -
                      parse('12:13:14', :time).should  | 
| 260 | 
            +
                      parse('12:13:14', :time).should eq Time.local(2010,1,1,12,13,14)
         | 
| 257 261 | 
             
                    end
         | 
| 258 262 |  | 
| 259 263 | 
             
                    it 'should return date array evaluated lambda' do
         | 
| 260 264 | 
             
                      Timeliness.date_for_time_type = lambda { Time.local(2010,2,1) }
         | 
| 261 | 
            -
                      parse('12:13:14', :time).should  | 
| 265 | 
            +
                      parse('12:13:14', :time).should eq Time.local(2010,2,1,12,13,14)
         | 
| 262 266 | 
             
                    end
         | 
| 263 267 |  | 
| 264 268 | 
             
                    after do
         | 
| @@ -268,16 +272,16 @@ describe Timeliness::Parser do | |
| 268 272 |  | 
| 269 273 | 
             
                  context "with :now option" do
         | 
| 270 274 | 
             
                    it 'should use date from :now' do
         | 
| 271 | 
            -
                      parse('12:13:14', :time, :now => Time.local(2010, 6, 1)).should  | 
| 275 | 
            +
                      parse('12:13:14', :time, :now => Time.local(2010, 6, 1)).should eq Time.local(2010,6,1,12,13,14)
         | 
| 272 276 | 
             
                    end
         | 
| 273 277 | 
             
                  end
         | 
| 274 278 |  | 
| 275 279 | 
             
                  context "with :zone option" do
         | 
| 276 280 | 
             
                    it "should use date from the specified zone" do
         | 
| 277 281 | 
             
                      time = parse("12:13:14", :time, :zone => :utc)
         | 
| 278 | 
            -
                      time.year.should  | 
| 279 | 
            -
                      time.month.should  | 
| 280 | 
            -
                      time.day.should  | 
| 282 | 
            +
                      time.year.should eq 2009
         | 
| 283 | 
            +
                      time.month.should eq 12
         | 
| 284 | 
            +
                      time.day.should eq 31
         | 
| 281 285 | 
             
                    end
         | 
| 282 286 | 
             
                  end
         | 
| 283 287 |  | 
| @@ -288,54 +292,54 @@ describe Timeliness::Parser do | |
| 288 292 | 
             
                context "with no type" do
         | 
| 289 293 | 
             
                  it "should return date array from date string" do
         | 
| 290 294 | 
             
                    time_array = parser._parse('2000-02-01')
         | 
| 291 | 
            -
                    time_array.should  | 
| 295 | 
            +
                    time_array.should eq [2000,2,1,nil,nil,nil,nil,nil]
         | 
| 292 296 | 
             
                  end
         | 
| 293 297 |  | 
| 294 298 | 
             
                  it "should return time array from time string" do
         | 
| 295 299 | 
             
                    time_array = parser._parse('12:13:14', :time)
         | 
| 296 | 
            -
                    time_array.should  | 
| 300 | 
            +
                    time_array.should eq [nil,nil,nil,12,13,14,nil,nil]
         | 
| 297 301 | 
             
                  end
         | 
| 298 302 |  | 
| 299 303 | 
             
                  it "should return datetime array from datetime string" do
         | 
| 300 304 | 
             
                    time_array = parser._parse('2000-02-01 12:13:14')
         | 
| 301 | 
            -
                    time_array.should  | 
| 305 | 
            +
                    time_array.should eq [2000,2,1,12,13,14,nil,nil]
         | 
| 302 306 | 
             
                  end
         | 
| 303 307 | 
             
                end
         | 
| 304 308 |  | 
| 305 309 | 
             
                context "with type" do
         | 
| 306 310 | 
             
                  it "should return date array from date string" do
         | 
| 307 311 | 
             
                    time_array = parser._parse('2000-02-01', :date)
         | 
| 308 | 
            -
                    time_array.should  | 
| 312 | 
            +
                    time_array.should eq [2000,2,1,nil,nil,nil,nil,nil]
         | 
| 309 313 | 
             
                  end
         | 
| 310 314 |  | 
| 311 315 | 
             
                  it "should not return time array from time string for :date type" do
         | 
| 312 316 | 
             
                    time_array = parser._parse('12:13:14', :date)
         | 
| 313 | 
            -
                    time_array.should  | 
| 317 | 
            +
                    time_array.should eq nil
         | 
| 314 318 | 
             
                  end
         | 
| 315 319 |  | 
| 316 320 | 
             
                  it "should return time array from time string" do
         | 
| 317 321 | 
             
                    time_array = parser._parse('12:13:14', :time)
         | 
| 318 | 
            -
                    time_array.should  | 
| 322 | 
            +
                    time_array.should eq [nil,nil,nil,12,13,14,nil,nil]
         | 
| 319 323 | 
             
                  end
         | 
| 320 324 |  | 
| 321 325 | 
             
                  it "should not return date array from date string for :time type" do
         | 
| 322 326 | 
             
                    time_array = parser._parse('2000-02-01', :time)
         | 
| 323 | 
            -
                    time_array.should  | 
| 327 | 
            +
                    time_array.should eq nil
         | 
| 324 328 | 
             
                  end
         | 
| 325 329 |  | 
| 326 330 | 
             
                  it "should return datetime array from datetime string when type is date" do
         | 
| 327 331 | 
             
                    time_array = parser._parse('2000-02-01 12:13:14', :date)
         | 
| 328 | 
            -
                    time_array.should  | 
| 332 | 
            +
                    time_array.should eq [2000,2,1,12,13,14,nil,nil]
         | 
| 329 333 | 
             
                  end
         | 
| 330 334 |  | 
| 331 335 | 
             
                  it "should return date array from date string when type is datetime" do
         | 
| 332 336 | 
             
                    time_array = parser._parse('2000-02-01', :datetime)
         | 
| 333 | 
            -
                    time_array.should  | 
| 337 | 
            +
                    time_array.should eq [2000,2,1,nil,nil,nil,nil,nil]
         | 
| 334 338 | 
             
                  end
         | 
| 335 339 |  | 
| 336 340 | 
             
                  it "should not return time array from time string when type is datetime" do
         | 
| 337 341 | 
             
                    time_array = parser._parse('12:13:14', :datetime)
         | 
| 338 | 
            -
                    time_array.should  | 
| 342 | 
            +
                    time_array.should eq nil
         | 
| 339 343 | 
             
                  end
         | 
| 340 344 | 
             
                end
         | 
| 341 345 |  | 
| @@ -379,7 +383,7 @@ describe Timeliness::Parser do | |
| 379 383 | 
             
                context "with :format option" do
         | 
| 380 384 | 
             
                  it "should return values if string matches specified format" do
         | 
| 381 385 | 
             
                    time_array = parser._parse('2000-02-01 12:13:14', :datetime, :format => 'yyyy-mm-dd hh:nn:ss')
         | 
| 382 | 
            -
                    time_array.should  | 
| 386 | 
            +
                    time_array.should eq [2000,2,1,12,13,14,nil,nil]
         | 
| 383 387 | 
             
                  end
         | 
| 384 388 |  | 
| 385 389 | 
             
                  it "should return nil if string does not match specified format" do
         | 
| @@ -391,21 +395,21 @@ describe Timeliness::Parser do | |
| 391 395 | 
             
                context "date with ambiguous year" do
         | 
| 392 396 | 
             
                  it "should return year in current century if year below threshold" do
         | 
| 393 397 | 
             
                    time_array = parser._parse('01-02-29', :date)
         | 
| 394 | 
            -
                    time_array.should  | 
| 398 | 
            +
                    time_array.should eq [2029,2,1,nil,nil,nil,nil,nil]
         | 
| 395 399 | 
             
                  end
         | 
| 396 400 |  | 
| 397 401 | 
             
                  it "should return year in last century if year at or above threshold" do
         | 
| 398 402 | 
             
                    time_array = parser._parse('01-02-30', :date)
         | 
| 399 | 
            -
                    time_array.should  | 
| 403 | 
            +
                    time_array.should eq [1930,2,1,nil,nil,nil,nil,nil]
         | 
| 400 404 | 
             
                  end
         | 
| 401 405 |  | 
| 402 406 | 
             
                  it "should allow custom threshold" do
         | 
| 403 407 | 
             
                    default = Timeliness.ambiguous_year_threshold
         | 
| 404 408 | 
             
                    Timeliness.ambiguous_year_threshold = 40
         | 
| 405 409 | 
             
                    time_array = parser._parse('01-02-39', :date)
         | 
| 406 | 
            -
                    time_array.should  | 
| 410 | 
            +
                    time_array.should eq [2039,2,1,nil,nil,nil,nil,nil]
         | 
| 407 411 | 
             
                    time_array = parser._parse('01-02-40', :date)
         | 
| 408 | 
            -
                    time_array.should  | 
| 412 | 
            +
                    time_array.should eq [1940,2,1,nil,nil,nil,nil,nil]
         | 
| 409 413 | 
             
                    Timeliness.ambiguous_year_threshold = default
         | 
| 410 414 | 
             
                  end
         | 
| 411 415 | 
             
                end
         | 
| @@ -414,7 +418,7 @@ describe Timeliness::Parser do | |
| 414 418 | 
             
              describe "make_time" do
         | 
| 415 419 | 
             
                it "should return time object for valid time array" do
         | 
| 416 420 | 
             
                  time = parser.make_time([2010,9,8,12,13,14])
         | 
| 417 | 
            -
                  time.should  | 
| 421 | 
            +
                  time.should eq Time.local(2010,9,8,12,13,14)
         | 
| 418 422 | 
             
                end
         | 
| 419 423 |  | 
| 420 424 | 
             
                it "should return nil for invalid date in array" do
         | 
| @@ -435,7 +439,7 @@ describe Timeliness::Parser do | |
| 435 439 | 
             
                  it "should be used if no zone value" do
         | 
| 436 440 | 
             
                    Timeliness.default_timezone = :utc
         | 
| 437 441 | 
             
                    time = parser.make_time([2000,6,1,12,0,0])
         | 
| 438 | 
            -
                    time.utc_offset.should  | 
| 442 | 
            +
                    time.utc_offset.should eq 0
         | 
| 439 443 | 
             
                  end
         | 
| 440 444 |  | 
| 441 445 | 
             
                  after do
         | 
| @@ -447,14 +451,14 @@ describe Timeliness::Parser do | |
| 447 451 | 
             
                  context ":utc" do
         | 
| 448 452 | 
             
                    it "should return time object in utc timezone" do
         | 
| 449 453 | 
             
                      time = parser.make_time([2000,6,1,12,0,0], :utc)
         | 
| 450 | 
            -
                      time.utc_offset.should  | 
| 454 | 
            +
                      time.utc_offset.should eq 0
         | 
| 451 455 | 
             
                    end
         | 
| 452 456 | 
             
                  end
         | 
| 453 457 |  | 
| 454 458 | 
             
                  context ":local" do
         | 
| 455 459 | 
             
                    it "should return time object in local system timezone" do
         | 
| 456 460 | 
             
                      time = parser.make_time([2000,6,1,12,0,0], :local)
         | 
| 457 | 
            -
                      time.utc_offset.should  | 
| 461 | 
            +
                      time.utc_offset.should eq 10.hours
         | 
| 458 462 | 
             
                    end
         | 
| 459 463 | 
             
                  end
         | 
| 460 464 |  | 
| @@ -462,14 +466,14 @@ describe Timeliness::Parser do | |
| 462 466 | 
             
                    it "should return time object in current timezone" do
         | 
| 463 467 | 
             
                      Time.zone = 'Adelaide'
         | 
| 464 468 | 
             
                      time = parser.make_time([2000,6,1,12,0,0], :current)
         | 
| 465 | 
            -
                      time.utc_offset.should  | 
| 469 | 
            +
                      time.utc_offset.should eq 9.5.hours
         | 
| 466 470 | 
             
                    end
         | 
| 467 471 | 
             
                  end
         | 
| 468 472 |  | 
| 469 473 | 
             
                  context "named zone" do
         | 
| 470 474 | 
             
                    it "should return time object in the timezone" do
         | 
| 471 475 | 
             
                      time = parser.make_time([2000,6,1,12,0,0], 'London')
         | 
| 472 | 
            -
                      time.utc_offset.should  | 
| 476 | 
            +
                      time.utc_offset.should eq 1.hour
         | 
| 473 477 | 
             
                    end
         | 
| 474 478 | 
             
                  end
         | 
| 475 479 | 
             
                end
         | 
| @@ -479,7 +483,8 @@ describe Timeliness::Parser do | |
| 479 483 |  | 
| 480 484 | 
             
                context "with no options" do
         | 
| 481 485 | 
             
                  it 'should return date_for_time_type values with no options' do
         | 
| 482 | 
            -
                     | 
| 486 | 
            +
                    dummy_date = Timeliness.date_for_time_type.call
         | 
| 487 | 
            +
                    current_date.should eq [ dummy_date.year, dummy_date.month, dummy_date.day ]
         | 
| 483 488 | 
             
                  end
         | 
| 484 489 | 
             
                end
         | 
| 485 490 |  | 
| @@ -487,7 +492,7 @@ describe Timeliness::Parser do | |
| 487 492 | 
             
                  it 'should return date array from Time value' do
         | 
| 488 493 | 
             
                    time = Time.now
         | 
| 489 494 | 
             
                    date_array = [time.year, time.month, time.day]
         | 
| 490 | 
            -
                    current_date(:now => time).should  | 
| 495 | 
            +
                    current_date(:now => time).should eq date_array
         | 
| 491 496 | 
             
                  end
         | 
| 492 497 | 
             
                end
         | 
| 493 498 |  | 
| @@ -495,26 +500,26 @@ describe Timeliness::Parser do | |
| 495 500 | 
             
                  it 'should return date array for utc zone' do
         | 
| 496 501 | 
             
                    time = Time.now.getutc
         | 
| 497 502 | 
             
                    date_array = [time.year, time.month, time.day]
         | 
| 498 | 
            -
                    current_date(:zone => :utc).should  | 
| 503 | 
            +
                    current_date(:zone => :utc).should eq date_array
         | 
| 499 504 | 
             
                  end
         | 
| 500 505 |  | 
| 501 506 | 
             
                  it 'should return date array for local zone' do
         | 
| 502 507 | 
             
                    time = Time.now
         | 
| 503 508 | 
             
                    date_array = [time.year, time.month, time.day]
         | 
| 504 | 
            -
                    current_date(:zone => :local).should  | 
| 509 | 
            +
                    current_date(:zone => :local).should eq date_array
         | 
| 505 510 | 
             
                  end
         | 
| 506 511 |  | 
| 507 512 | 
             
                  it 'should return date array for current zone' do
         | 
| 508 513 | 
             
                    Time.zone = 'London'
         | 
| 509 514 | 
             
                    time = Time.current
         | 
| 510 515 | 
             
                    date_array = [time.year, time.month, time.day]
         | 
| 511 | 
            -
                    current_date(:zone => :current).should  | 
| 516 | 
            +
                    current_date(:zone => :current).should eq date_array
         | 
| 512 517 | 
             
                  end
         | 
| 513 518 |  | 
| 514 519 | 
             
                  it 'should return date array for named zone' do
         | 
| 515 520 | 
             
                    time = Time.use_zone('London') { Time.current }
         | 
| 516 521 | 
             
                    date_array = [time.year, time.month, time.day]
         | 
| 517 | 
            -
                    current_date(:zone => 'London').should  | 
| 522 | 
            +
                    current_date(:zone => 'London').should eq date_array
         | 
| 518 523 | 
             
                  end
         | 
| 519 524 | 
             
                end
         | 
| 520 525 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,34 +1,24 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: timeliness
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version | 
| 4 | 
            -
               | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.3.7
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 | 
            -
              segments: 
         | 
| 7 | 
            -
              - 0
         | 
| 8 | 
            -
              - 3
         | 
| 9 | 
            -
              - 6
         | 
| 10 | 
            -
              version: 0.3.6
         | 
| 11 6 | 
             
            platform: ruby
         | 
| 12 | 
            -
            authors: | 
| 7 | 
            +
            authors:
         | 
| 13 8 | 
             
            - Adam Meehan
         | 
| 14 9 | 
             
            autorequire: 
         | 
| 15 10 | 
             
            bindir: bin
         | 
| 16 11 | 
             
            cert_chain: []
         | 
| 17 | 
            -
             | 
| 18 | 
            -
            date: 2012-04-01 01:00:00 +11:00
         | 
| 19 | 
            -
            default_executable: 
         | 
| 12 | 
            +
            date: 2012-10-03 00:00:00.000000000 Z
         | 
| 20 13 | 
             
            dependencies: []
         | 
| 21 | 
            -
             | 
| 22 14 | 
             
            description: Fast date/time parser with customisable formats, timezone and I18n support.
         | 
| 23 15 | 
             
            email: adam.meehan@gmail.com
         | 
| 24 16 | 
             
            executables: []
         | 
| 25 | 
            -
             | 
| 26 17 | 
             
            extensions: []
         | 
| 27 | 
            -
             | 
| 28 | 
            -
            extra_rdoc_files: 
         | 
| 18 | 
            +
            extra_rdoc_files:
         | 
| 29 19 | 
             
            - README.rdoc
         | 
| 30 20 | 
             
            - CHANGELOG.rdoc
         | 
| 31 | 
            -
            files: | 
| 21 | 
            +
            files:
         | 
| 32 22 | 
             
            - CHANGELOG.rdoc
         | 
| 33 23 | 
             
            - LICENSE
         | 
| 34 24 | 
             
            - README.rdoc
         | 
| @@ -50,39 +40,28 @@ files: | |
| 50 40 | 
             
            - spec/timeliness/format_spec.rb
         | 
| 51 41 | 
             
            - spec/timeliness/parser_spec.rb
         | 
| 52 42 | 
             
            - timeliness.gemspec
         | 
| 53 | 
            -
            has_rdoc: true
         | 
| 54 43 | 
             
            homepage: http://github.com/adzap/timeliness
         | 
| 55 44 | 
             
            licenses: []
         | 
| 56 | 
            -
             | 
| 57 45 | 
             
            post_install_message: 
         | 
| 58 46 | 
             
            rdoc_options: []
         | 
| 59 | 
            -
             | 
| 60 | 
            -
            require_paths: 
         | 
| 47 | 
            +
            require_paths:
         | 
| 61 48 | 
             
            - lib
         | 
| 62 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement | 
| 49 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 63 50 | 
             
              none: false
         | 
| 64 | 
            -
              requirements: | 
| 65 | 
            -
              - -  | 
| 66 | 
            -
                - !ruby/object:Gem::Version | 
| 67 | 
            -
                   | 
| 68 | 
            -
             | 
| 69 | 
            -
                  - 0
         | 
| 70 | 
            -
                  version: "0"
         | 
| 71 | 
            -
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 51 | 
            +
              requirements:
         | 
| 52 | 
            +
              - - ! '>='
         | 
| 53 | 
            +
                - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                  version: '0'
         | 
| 55 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 72 56 | 
             
              none: false
         | 
| 73 | 
            -
              requirements: | 
| 74 | 
            -
              - -  | 
| 75 | 
            -
                - !ruby/object:Gem::Version | 
| 76 | 
            -
                   | 
| 77 | 
            -
                  segments: 
         | 
| 78 | 
            -
                  - 0
         | 
| 79 | 
            -
                  version: "0"
         | 
| 57 | 
            +
              requirements:
         | 
| 58 | 
            +
              - - ! '>='
         | 
| 59 | 
            +
                - !ruby/object:Gem::Version
         | 
| 60 | 
            +
                  version: '0'
         | 
| 80 61 | 
             
            requirements: []
         | 
| 81 | 
            -
             | 
| 82 62 | 
             
            rubyforge_project: timeliness
         | 
| 83 | 
            -
            rubygems_version: 1. | 
| 63 | 
            +
            rubygems_version: 1.8.24
         | 
| 84 64 | 
             
            signing_key: 
         | 
| 85 65 | 
             
            specification_version: 3
         | 
| 86 66 | 
             
            summary: Date/time parsing for the control freak.
         | 
| 87 67 | 
             
            test_files: []
         | 
| 88 | 
            -
             |