timecop 0.4.5 → 0.4.6

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/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 5
2
+ :patch: 6
3
3
  :major: 0
4
4
  :minor: 4
@@ -19,10 +19,12 @@ class Time #:nodoc:
19
19
  alias_method :now, :now_with_mock_time
20
20
 
21
21
  alias_method :new_without_mock_time, :new
22
+
22
23
  def new_with_mock_time *args
23
- if args.size > 0
24
+ begin
25
+ raise ArgumentError.new if args.size <= 0
24
26
  new_without_mock_time *args
25
- else
27
+ rescue ArgumentError
26
28
  now
27
29
  end
28
30
  end
@@ -54,15 +54,20 @@ class Timecop
54
54
  end
55
55
 
56
56
  def date(date_klass=Date)
57
- date_klass.jd( time.to_date.jd )
57
+ date_klass.jd(time.__send__(:to_date).jd)
58
58
  end
59
59
 
60
60
  def datetime(datetime_klass=DateTime)
61
61
  # DateTime doesn't know about DST, so let's remove its presence
62
62
  our_offset = utc_offset + dst_adjustment
63
- fractions_of_a_second = time.to_f % 1
64
- datetime_klass.new(year, month, day, hour, min, sec + fractions_of_a_second,
65
- utc_offset_to_rational(our_offset))
63
+ if Float.method_defined?(:to_r)
64
+ fractions_of_a_second = time.to_f % 1
65
+ datetime_klass.new(year, month, day, hour, min, sec + fractions_of_a_second,
66
+ utc_offset_to_rational(our_offset))
67
+ else
68
+ our_offset = utc_offset + dst_adjustment
69
+ datetime_klass.new(year, month, day, hour, min, sec, utc_offset_to_rational(our_offset))
70
+ end
66
71
  end
67
72
 
68
73
  def dst_adjustment
data/test/timecop_test.rb CHANGED
@@ -56,8 +56,47 @@ class TestTimecop < Test::Unit::TestCase
56
56
  end
57
57
 
58
58
  def test_travel_does_not_reduce_precision_of_datetime
59
- Timecop.travel(1)
60
- assert_not_equal DateTime.now, DateTime.now
59
+ # requires to_r on Float (>= 1.9)
60
+ if Float.method_defined?(:to_r)
61
+ Timecop.travel(1)
62
+ assert_not_equal DateTime.now, DateTime.now
63
+ end
64
+ end
65
+
66
+ def test_freeze_in_time_subclass_returns_mocked_subclass
67
+ t = Time.local(2008, 10, 10, 10, 10, 10)
68
+ custom_timeklass = Class.new(Time) do
69
+ def custom_format_method() strftime('%F') end
70
+ end
71
+ Timecop.freeze(2008, 10, 10, 10, 10, 10) do
72
+ assert custom_timeklass.now.is_a? custom_timeklass
73
+ assert Time.now.eql? custom_timeklass.now
74
+ assert custom_timeklass.now.respond_to? :custom_format_method
75
+ end
76
+ end
77
+
78
+ def test_freeze_in_date_subclass_returns_mocked_subclass
79
+ t = Time.local(2008, 10, 10, 10, 10, 10)
80
+ custom_dateklass = Class.new(Date) do
81
+ def custom_format_method() strftime('%F') end
82
+ end
83
+ Timecop.freeze(2008, 10, 10, 10, 10, 10) do
84
+ assert custom_dateklass.today.is_a? custom_dateklass
85
+ assert Date.today.eql? custom_dateklass.today
86
+ assert custom_dateklass.today.respond_to? :custom_format_method
87
+ end
88
+ end
89
+
90
+ def test_freeze_in_datetime_subclass_returns_mocked_subclass
91
+ t = Time.local(2008, 10, 10, 10, 10, 10)
92
+ custom_datetimeklass = Class.new(DateTime) do
93
+ def custom_format_method() strftime('%F') end
94
+ end
95
+ Timecop.freeze(2008, 10, 10, 10, 10, 10) do
96
+ assert custom_datetimeklass.now.is_a? custom_datetimeklass
97
+ assert DateTime.now.eql? custom_datetimeklass.now
98
+ assert custom_datetimeklass.now.respond_to? :custom_format_method
99
+ end
61
100
  end
62
101
 
63
102
  def test_recursive_freeze
@@ -319,6 +358,13 @@ class TestTimecop < Test::Unit::TestCase
319
358
  end
320
359
  end
321
360
 
361
+ def test_freeze_with_new_date
362
+ date = Date.new(2012, 6, 9)
363
+ Timecop.freeze(Date.new(2012, 6, 9)) do
364
+ assert_equal date, Time.now.__send__(:to_date)
365
+ end
366
+ end
367
+
322
368
  def test_return_to_baseline_without_a_baseline_set_returns_to_current_time
323
369
  time_before_travel = Time.now
324
370
  Timecop.travel Time.now - 60
metadata CHANGED
@@ -1,27 +1,35 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: timecop
3
- version: !ruby/object:Gem::Version
4
- version: 0.4.5
3
+ version: !ruby/object:Gem::Version
4
+ hash: 3
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 4
9
+ - 6
10
+ version: 0.4.6
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Travis Jeffery
9
14
  - John Trupiano
10
15
  autorequire:
11
16
  bindir: bin
12
17
  cert_chain: []
13
- date: 2012-07-09 00:00:00.000000000 Z
18
+
19
+ date: 2012-09-05 00:00:00 -05:00
20
+ default_executable:
14
21
  dependencies: []
15
- description: A gem providing "time travel" and "time freezing" capabilities, making
16
- it dead simple to test time-dependent code. It provides a unified method to mock
17
- Time.now, Date.today, and DateTime.now in a single call.
22
+
23
+ description: A gem providing "time travel" and "time freezing" capabilities, making it dead simple to test time-dependent code. It provides a unified method to mock Time.now, Date.today, and DateTime.now in a single call.
18
24
  email: travisjeffery@gmail.com
19
25
  executables: []
26
+
20
27
  extensions: []
21
- extra_rdoc_files:
28
+
29
+ extra_rdoc_files:
22
30
  - LICENSE
23
31
  - README.markdown
24
- files:
32
+ files:
25
33
  - History.rdoc
26
34
  - LICENSE
27
35
  - README.markdown
@@ -37,34 +45,41 @@ files:
37
45
  - test/timecop_test.rb
38
46
  - test/timecop_without_date_test.rb
39
47
  - test/timecop_without_date_but_with_time_test.rb
48
+ has_rdoc: true
40
49
  homepage: http://github.com/jtrupiano/timecop
41
50
  licenses: []
51
+
42
52
  post_install_message:
43
- rdoc_options:
53
+ rdoc_options:
44
54
  - --charset=UTF-8
45
- require_paths:
55
+ require_paths:
46
56
  - lib
47
- required_ruby_version: !ruby/object:Gem::Requirement
57
+ required_ruby_version: !ruby/object:Gem::Requirement
48
58
  none: false
49
- requirements:
50
- - - ! '>='
51
- - !ruby/object:Gem::Version
52
- version: '0'
53
- required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
67
  none: false
55
- requirements:
56
- - - ! '>='
57
- - !ruby/object:Gem::Version
58
- version: '0'
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
59
75
  requirements: []
76
+
60
77
  rubyforge_project: johntrupiano
61
- rubygems_version: 1.8.10
78
+ rubygems_version: 1.6.2
62
79
  signing_key:
63
80
  specification_version: 3
64
- summary: A gem providing "time travel" and "time freezing" capabilities, making it
65
- dead simple to test time-dependent code. It provides a unified method to mock Time.now,
66
- Date.today, and DateTime.now in a single call.
67
- test_files:
81
+ summary: A gem providing "time travel" and "time freezing" capabilities, making it dead simple to test time-dependent code. It provides a unified method to mock Time.now, Date.today, and DateTime.now in a single call.
82
+ test_files:
68
83
  - test/test_helper.rb
69
84
  - test/time_stack_item_test.rb
70
85
  - test/timecop_test.rb