timing 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d6f6f145028cd5331680c01a8365eaa4f56cfee1
4
- data.tar.gz: 3c032ab78e222d16d58ccbeb8a741c2e47c54519
3
+ metadata.gz: e9d92a18e938feee6b80f8aaa64a028be7bf2a11
4
+ data.tar.gz: afc68085d3083b521a802ae80fc5416df7dcca07
5
5
  SHA512:
6
- metadata.gz: 7e6b80824b06f9db1a4561214a518b79321cb75123558dc525f21a948b5805b0920a17b9ec1763b2d35f319afefdc81f490ba43028e3dc1b2097ceae62635945
7
- data.tar.gz: 25bec6e9461646ba7d789ca0b98f576e772162527f19187fedb15347d38da5a4dea5c6bb3b92dee883a89cb1e72078e30341f725bf499e1dd299031b85888573
6
+ metadata.gz: 2ebafcc6ae241ec71978cc47571d21fe9e7f20e393f00321373cd4edabde9e186c092f3a2affee979b900d0a3928cd8fdcedf432515529a327ac005e2132c3a3
7
+ data.tar.gz: c8375675559778a628314ee196517ad9efd8a3239b253e00a6cf5f05c073e1204df2c2bf41fa885b7243c0a8c2e7bace04b5581a685c7da23523996cefa9bd3d
@@ -1,5 +1,5 @@
1
1
  module Timing
2
- class Interval < SimpleDelegator
2
+ class Interval < TransparentProxy
3
3
 
4
4
  UNITS_NAMES = {
5
5
  s: :seconds,
@@ -312,7 +312,7 @@ module Timing
312
312
 
313
313
  class ZoneOffset < Treetop::Runtime::SyntaxNode
314
314
  def value
315
- ::ZoneOffset.parse text_value
315
+ Timing::ZoneOffset.parse text_value
316
316
  end
317
317
  end
318
318
 
@@ -24,11 +24,14 @@ module Timing
24
24
  alias_method :gmtoff, :zone_offset
25
25
 
26
26
  def +(seconds)
27
+ raise ArgumentError, "#{seconds} must be a valid seconds count" unless seconds.is_a? Numeric
27
28
  self.class.new (time + seconds), zone_offset
28
29
  end
29
30
 
30
31
  def -(seconds)
31
- self.class.new (time - seconds), zone_offset
32
+ raise ArgumentError, "#{seconds} must be a time or a valid seconds count" unless seconds.respond_to? :to_f
33
+ result = self.class.at (time.to_f - seconds.to_f), zone_offset
34
+ seconds.is_a?(Numeric) ? result : result.to_f
32
35
  end
33
36
 
34
37
  def utc?
@@ -58,6 +61,18 @@ module Timing
58
61
  time_with_offset.strftime format.gsub('%Z', '').gsub('%z', zone_offset.to_s)
59
62
  end
60
63
 
64
+ def iso8601
65
+ strftime "%FT%T#{zone_offset.iso8601}"
66
+ end
67
+
68
+ def as_json(*args)
69
+ iso8601
70
+ end
71
+
72
+ def to_json(*args)
73
+ "\"#{as_json(*args)}\""
74
+ end
75
+
61
76
  %w(hour day week month year).each do |interval|
62
77
  beginning_method_name = "beginning_of_#{interval}"
63
78
  define_method beginning_method_name do
@@ -1,3 +1,3 @@
1
1
  module Timing
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
@@ -1,5 +1,5 @@
1
1
  module Timing
2
- class ZoneOffset < SimpleDelegator
2
+ class ZoneOffset < TransparentProxy
3
3
 
4
4
  REGEXP = /^([+-]?)(\d\d):?(\d\d)$/
5
5
 
@@ -9,11 +9,11 @@ module Timing
9
9
  end
10
10
 
11
11
  def to_s
12
- hours = Interval.new(to_f).to_hours.to_i
13
- minutes = Interval.new(to_f % Interval.hours(1)).to_minutes.to_i
14
- sign = self < 0 ? '-' : '+'
12
+ "#{sign}#{hour.to_s.rjust(2, '0')}#{minute.to_s.rjust(2, '0')}"
13
+ end
15
14
 
16
- "#{sign}#{hours.to_s.rjust(2, '0')}#{minutes.to_s.rjust(2, '0')}"
15
+ def iso8601
16
+ "#{sign}#{hour.to_s.rjust(2, '0')}:#{minute.to_s.rjust(2, '0')}"
17
17
  end
18
18
 
19
19
  def inspect
@@ -32,5 +32,19 @@ module Timing
32
32
  new (Interval.hours(hours) + Interval.minutes(minutes)) * sign
33
33
  end
34
34
 
35
+ private
36
+
37
+ def hour
38
+ Interval.new(to_f).to_hours.to_i
39
+ end
40
+
41
+ def minute
42
+ Interval.new(to_f % Interval.hours(1)).to_minutes.to_i
43
+ end
44
+
45
+ def sign
46
+ self < 0 ? '-' : '+'
47
+ end
48
+
35
49
  end
36
50
  end
data/lib/timing.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'time'
2
2
  require 'date'
3
- require 'delegate'
3
+ require 'transparent_proxy'
4
4
  require 'forwardable'
5
5
  require 'treetop'
6
6
 
data/timing.gemspec CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency 'treetop'
22
+ spec.add_dependency 'treetop', '~> 1.6.3'
23
+ spec.add_dependency 'transparent_proxy', '~> 0.0.4'
23
24
 
24
25
  spec.add_development_dependency 'bundler', '~> 1.6'
25
26
  spec.add_development_dependency 'rake'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Naiman
@@ -14,16 +14,30 @@ dependencies:
14
14
  name: treetop
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 1.6.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 1.6.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: transparent_proxy
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.4
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.4
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement