relativity 0.0.4 → 0.0.5

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/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Changelog.rdoc CHANGED
@@ -1,3 +1,9 @@
1
+ 0.0.5 2012-02-06:
2
+
3
+ * DayTimeRange can now be created
4
+
5
+ * DayTime.new("8:30") now takes a string
6
+
1
7
  0.0.4 2012-01-17:
2
8
 
3
9
  * Revert seconds_since_start to seconds_since_midnight
data/README.rdoc CHANGED
@@ -4,14 +4,17 @@ Time, Date and DateTime classes don't have a mode for working with relative
4
4
  time inside 1 day (or 1 week, 1 month, 1 quarter, etc.).
5
5
 
6
6
  A relative time object, relative to a day or a week, is useful to describe
7
- e.g. opening hours of a business. In a next phase, time ranges will
8
- be built on top, so the ranges of opening hours can be represented.
7
+ e.g. opening hours of a business. Time ranges are built on top, so the
8
+ ranges of opening hours can be represented.
9
9
 
10
10
  == Example
11
11
 
12
12
  require 'relativity'
13
13
  opens_at = DayTime.new(9) #=> 09:00:00
14
- closes_at = DayTime.new(18,30) #=> 18:30:00
14
+ closes_at = DayTime.new(12,30) #=> 12:30:00
15
+
16
+ opens_at = DayTime.new("8:35") #=> 08:35:00
17
+ closes_at = DayTime.new("17:59:30") #=> 17:59:30
15
18
 
16
19
  dt = DayTime.new #=> 21:17:40
17
20
  dt.seconds_since_midnight #=> #<BigDecimal:9d35d48,'0.7666056825 7238E5',18(45)>
@@ -19,3 +22,11 @@ be built on top, so the ranges of opening hours can be represented.
19
22
  dt.minutes #=> 17
20
23
  dt.seconds #=> 40
21
24
  dt.nano_seconds #=> 568257238
25
+
26
+ dtr = DayTimeRange.new("8 until 12:30")
27
+ # => #<DayTimeRange:0x9bfa4ec @start_day_time=08:00:00, @end_day_time=12:30:00>
28
+ dtr.start # => 08:00:00
29
+ dtr.end # => 12:30:00
30
+
31
+ night_shift = DayTimeRange.new("21:45..06:05", :separator => '..')
32
+ # => #<DayTimeRange:0x9b997dc @start_day_time=21:45:00, @end_day_time=06:05:00>
data/TODO CHANGED
@@ -10,3 +10,75 @@ week_time_range
10
10
  week_day_range
11
11
 
12
12
  ActiveRecord coupling (Aggregation ?)
13
+
14
+ =====================================
15
+ A discussion I sent on 2012-01-12 on ruby-talk:
16
+
17
+ Also, in version 0.0.3 that is now online, I changed the concept more
18
+ fundamentally to #{"period"Time} and #{"period"Day}:
19
+
20
+ * DayTime (a time inside a "cycle" of 1 day, think %)
21
+ * planning also this
22
+ * WeekTime (a time inside a "cycle" of 1 week, no start_of_week needed, just time + day names)
23
+ * WeekDay (a day inside a "cycle" of 1 week, no start_of_week (cyclical), just a day names)
24
+ * QuarterDay etc.
25
+ * DayTimeRange
26
+ * WeekTimeRange
27
+ * WeekDayRange
28
+ etc.
29
+
30
+ Will be really useful to code things like:
31
+
32
+ bar.opening_hours = WeekTimeMultiRange.new <<
33
+ WeekTimeRange.new("Monday 09:00 until Monday 18:00") <<
34
+ WeekTimeRange.new("Tuesday 13:00 until Tuesday 21:30") <<
35
+ WeekTimeRange.new(WeekTime.new("Wednesday 19:00"), WeekTime.new("Thursday 02:00")) <<
36
+ WeekTimeRange.new("Thursday 22:00 until Friday 02:00") <<
37
+ WeekTimeRange.new("Sunday 22:00 until Monday 02:00") # seeming "overflow" but no issue since cyclical
38
+
39
+ if bar.opening_hours.include?(Time.now)
40
+ display_open
41
+ end
42
+
43
+ workdays = WeekDayRange.new("Monday until Friday")
44
+
45
+ if workdays.include?(Time.now)
46
+ go_to_work
47
+ end
48
+
49
+ Also, what I really want to do is an abstract presentation of
50
+ the "last day of the month" (independent of the which month
51
+ we are actually in, just the abstract concept).
52
+
53
+ first_day = MonthDay.new(:first)
54
+ first_day = MonthDay.new(1) # in days, the first is 1 (not 0) ... Pascal anyone ;-)
55
+
56
+ last_day = MonthDay.new(:last)
57
+ last_day = MonthDay.new(0) # logically, the last one then becomes 0 in a cyclic counter
58
+ before_last_day = MonthDay.new(-1) # E.g. 30 Dec is a before_last_day
59
+ pay_day = MonthDay.new(-5) # E.g. 26 Jan would be pay_day in monthly scheme
60
+
61
+ if pay_day.today?
62
+ prepare_paycheck
63
+ end
64
+
65
+ Similar:
66
+
67
+ reporting_day = QuarterDay.new(+15)
68
+ blocked_period = QuarterDayRange(reporting_day-28, reporting_day+1)
69
+
70
+ if reporting_day.today?
71
+ publish_quarterly_reports
72
+ end
73
+
74
+ if blocked_period.today?
75
+ forbid_employee_stock_transactions
76
+ end
77
+
78
+ I know ActiveSupport has support for certain aspects, but I dont think it is
79
+ as abstract as I want it. IIRC , ActiveSupport works on actual Date instances
80
+ (which are not "relative" but anchored to a specific absolute time or date).
81
+ I did not see this abstract concept of the "last day of the month" or
82
+ "a Friday in a random week" fully implemented.
83
+
84
+
@@ -0,0 +1,7 @@
1
+ module DayTime::Comparison
2
+
3
+ def ==(other)
4
+ self.seconds_since_midnight == other.seconds_since_midnight
5
+ end
6
+
7
+ end
@@ -0,0 +1,35 @@
1
+ module DayTime::Conversions
2
+
3
+ def hours
4
+ hours = Integer(@seconds_since_midnight/3600).tap do |h|
5
+ raise Relativity::InternalError, "hours is out of bound : #{h}" if (h < 0 || h > 23)
6
+ end
7
+ end
8
+
9
+ def minutes
10
+ Integer(@seconds_since_midnight / 60) % 60
11
+ end
12
+
13
+ def seconds
14
+ Integer(@seconds_since_midnight) % 60
15
+ end
16
+
17
+ def nano_seconds
18
+ Integer((@seconds_since_midnight % 1) * 1000000000)
19
+ end
20
+
21
+ def to_s
22
+ [hours, minutes, seconds].map{|e| rjust_2_0(e.to_s)}.join(self.class.separator)
23
+ end
24
+
25
+ def self.separator
26
+ ':'
27
+ end
28
+
29
+ private
30
+
31
+ def rjust_2_0(s)
32
+ s.rjust(2,'0')
33
+ end
34
+
35
+ end
@@ -0,0 +1,42 @@
1
+ module DayTime::New
2
+
3
+ attr_reader :seconds_since_midnight
4
+
5
+ def initialize(first= nil, minutes = nil, seconds = nil, nano_seconds = nil)
6
+ super()
7
+ case first
8
+ when Integer
9
+ hh = first #hours
10
+ mm = minutes || 0
11
+ ss = seconds || 0
12
+ nn = nano_seconds || 0
13
+ when String
14
+ hh, mm, ss = hh_mm_ss_from_string(first)
15
+ nn = 0
16
+ else
17
+ t = Time.new
18
+ hh = t.hour
19
+ mm = t.min
20
+ ss = t.sec
21
+ nn = t.nsec
22
+ end
23
+ @seconds_since_midnight = ((hh * 3600) + (mm * 60) + ss + BigDecimal(nn)/BigDecimal(1000000000))%(24*3600)
24
+ end
25
+
26
+ private
27
+
28
+ def hh_mm_ss_from_string(input)
29
+ separator = self.class.separator
30
+ separator = Regexp.escape(separator) # e.g. separator is '.'
31
+ input.strip!
32
+ match_hh = '(?<hh>\d\d?)'
33
+ match_mm = '(' + separator + '(?<mm>\d\d?))?'
34
+ match_ss = '(' + separator + '(?<ss>\d\d?))?'
35
+ matcher = '\A' + match_hh + match_mm + match_ss + '\Z'
36
+ r = Regexp.new(matcher)
37
+ matchdata = r.match(input)
38
+ raise Relativity::InvalidFormat if matchdata.nil?
39
+ return [matchdata[:hh].to_i, matchdata[:mm].to_i, matchdata[:ss].to_i]
40
+ end
41
+
42
+ end
@@ -1,52 +1,15 @@
1
1
  class DayTime
2
2
 
3
3
  require 'bigdecimal'
4
+ require 'relativity/day_time/new'
5
+ require 'relativity/day_time/conversions'
6
+ require 'relativity/day_time/comparison'
7
+ include DayTime::Comparison
8
+ include DayTime::New
9
+ include DayTime::Conversions
4
10
 
5
- attr_reader :seconds_since_midnight
6
-
7
- def initialize(hours = nil, minutes = nil, seconds = nil, nano_seconds = nil)
8
- super()
9
- if hours
10
- hh = hours.to_i
11
- mm = minutes.to_i
12
- ss = seconds.to_i
13
- nn = nano_seconds.to_i
14
- else
15
- t = Time.new
16
- hh = t.hour
17
- mm = t.min
18
- ss = t.sec
19
- nn = t.nsec
20
- end
21
- @seconds_since_midnight = ((hh * 3600) + (mm * 60) + ss + BigDecimal(nn)/BigDecimal(1000000000))%(24*3600)
22
- end
23
-
24
- def hours
25
- hours = Integer(@seconds_since_midnight/3600).tap do |h|
26
- raise Relativity::InternalError, "hours is out of bound : #{h}" if (h < 0 || h > 23)
27
- end
28
- end
29
-
30
- def minutes
31
- Integer(@seconds_since_midnight / 60) % 60
32
- end
33
-
34
- def seconds
35
- Integer(@seconds_since_midnight) % 60
11
+ def self.separator
12
+ ':'
36
13
  end
37
14
 
38
- def nano_seconds
39
- Integer((@seconds_since_midnight % 1) * 1000000000)
40
- end
41
-
42
- def to_s
43
- [hours, minutes, seconds].map{|e| rjust_2_0(e.to_s)}.join(':')
44
- end
45
-
46
- def rjust_2_0(s)
47
- s.rjust(2,'0')
48
- end
49
-
50
- private :rjust_2_0
51
-
52
15
  end
@@ -2,5 +2,34 @@ class DayTimeRange
2
2
 
3
3
  def initialize(first, second = nil)
4
4
  super()
5
+ @start_day_time, @end_day_time =
6
+ case first
7
+ when String
8
+ start_end_from_string(first, second)
9
+ end
5
10
  end
11
+
12
+ def start
13
+ @start_day_time
14
+ end
15
+
16
+ def end
17
+ @end_day_time
18
+ end
19
+
20
+ def self.separator
21
+ " until "
22
+ end
23
+
24
+ private
25
+
26
+ def start_end_from_string(input, options)
27
+ separator = (options && options[:separator]) || self.class.separator
28
+ separator = Regexp.escape(separator)
29
+ matcher = '\A(?<start>.+)' + separator + '(?<end>.+)\Z'
30
+ r = Regexp.new(matcher)
31
+ matchdata = r.match(input)
32
+ return [DayTime.new(matchdata[:start]), DayTime.new(matchdata[:end])]
33
+ end
34
+
6
35
  end
@@ -1,4 +1,9 @@
1
1
  module Relativity
2
- class InternalError < StandardError
2
+
3
+ class InternalError < RuntimeError
3
4
  end
5
+
6
+ class InvalidFormat < ArgumentError
7
+ end
8
+
4
9
  end
@@ -1,3 +1,3 @@
1
1
  module Relativity
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -0,0 +1,29 @@
1
+ class WeekTime
2
+
3
+ require 'bigdecimal'
4
+ require 'time'
5
+
6
+ attr_reader :seconds_since_sunday_midnight
7
+
8
+ def initialize(week_day_string=nil, hours = nil, minutes = nil, seconds = nil, nano_seconds = nil)
9
+ super()
10
+ if week_day_string
11
+ # week_day_d =
12
+ # hh = hours.to_i
13
+ # mm = minutes.to_i
14
+ # ss = seconds.to_i
15
+ # nn = nano_seconds.to_i
16
+ else
17
+ t = Time.new
18
+ week_day_d = t.wday
19
+ hh = t.hour
20
+ mm = t.min
21
+ ss = t.sec
22
+ nn = t.nsec
23
+ end
24
+
25
+ seconds_since_midnight = ((hh * 3600) + (mm * 60) + ss + BigDecimal(nn)/BigDecimal(1000000000))%(24*3600)
26
+ @seconds_since_sunday_midnight = week_day_d * 24 * 3600 + seconds_since_midnight
27
+ end
28
+
29
+ end
data/lib/relativity.rb CHANGED
@@ -2,3 +2,4 @@ require 'relativity/version'
2
2
  require 'relativity/exception'
3
3
  require 'relativity/day_time'
4
4
  require 'relativity/day_time_range'
5
+ require 'relativity/week_time'
data/relativity.gemspec CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |s|
18
18
 
19
19
  # specify any dependencies here; for example:
20
20
  s.add_development_dependency 'rspec', '>= 2.7'
21
- s.add_development_dependency 'guard-rspec', '>= 0.5'
22
- if RUBY_PLATFORM.match(/linux/)
23
- s.add_development_dependency 'rb-inotify'
24
- s.add_development_dependency 'libnotify'
25
- end
21
+ # this will only work on Linux, so commented out by default
22
+ # for Mac use an alternative strategy
23
+ # s.add_development_dependency 'guard-rspec', '>= 0.5'
24
+ # s.add_development_dependency 'rb-inotify'
25
+ # s.add_development_dependency 'libnotify'
26
26
  end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe DayTime do
4
+
5
+ it "== reports exact equality for hours" do
6
+ dt_1 = DayTime.new(8)
7
+ dt_2 = DayTime.new(8)
8
+ dt_1.should == dt_2
9
+ end
10
+
11
+ it "== reports difference when different" do
12
+ dt_1 = DayTime.new(8)
13
+ dt_2 = DayTime.new(8, 0, 0, 1) # 1 nanosecond off
14
+ dt_1.should_not == dt_2
15
+ end
16
+
17
+ it "== reports exact equality for all arguments" do
18
+ dt_1 = DayTime.new(0,23,45,457834889)
19
+ dt_2 = DayTime.new(0,23,45,457834889)
20
+ dt_1.should == dt_2
21
+ end
22
+
23
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe DayTime do
4
+
5
+ it "hours" do
6
+ (((subject.hours - Time.new.hour).abs+1)%24).should be <= 2
7
+ end
8
+
9
+ it "hours should be Integer" do
10
+ subject.hours.should be_kind_of(Integer)
11
+ end
12
+
13
+ it "minutes" do
14
+ (((subject.minutes - Time.new.min).abs+1)%60).should be <= 2
15
+ end
16
+
17
+ it "minutes should be Integer" do
18
+ subject.minutes.should be_kind_of(Integer)
19
+ end
20
+
21
+ it "seconds" do
22
+ (((subject.seconds - Time.new.sec).abs+2)%60).should be <= 4
23
+ end
24
+
25
+ it "seconds should be Integer" do
26
+ subject.seconds.should be_kind_of(Integer)
27
+ end
28
+
29
+ it "nano_seconds should be Integer" do
30
+ subject.nano_seconds.should be_kind_of(Integer)
31
+ end
32
+
33
+ it "seconds_since_midnight" do
34
+ lambda { subject.seconds_since_midnight }.should_not raise_error
35
+ end
36
+
37
+ it "seconds_since_midnight should be BigDecimal" do
38
+ subject.seconds_since_midnight.should be_kind_of(BigDecimal)
39
+ end
40
+
41
+ end
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+
3
+ describe DayTime do
4
+
5
+ it "new builds a DayTime" do
6
+ lambda { subject }.should_not raise_error
7
+ end
8
+
9
+ it "new creates a DayTime close to now" do
10
+ dt_s = subject.seconds_since_midnight
11
+ t = Time.new
12
+ t_s = (t.hour*60 + t.min)*60 + t.sec + t.nsec/1E9 # seconds_since_midnight from Time
13
+ (((t_s-dt_s).abs+2)%(24*60*60)).should be <= 4
14
+ end
15
+
16
+ it "new with argument hours" do
17
+ dt = DayTime.new(20)
18
+ dt.hours.should == 20
19
+ dt.minutes.should == 0
20
+ dt.seconds.should == 0
21
+ dt.nano_seconds.should == 0
22
+ end
23
+
24
+ it "new with argument minutes" do
25
+ dt = DayTime.new(10,25)
26
+ dt.minutes.should == 25
27
+ dt.seconds.should == 0
28
+ dt.nano_seconds.should == 0
29
+ end
30
+
31
+ it "new with argument seconds" do
32
+ dt = DayTime.new(10,37,45)
33
+ dt.seconds.should == 45
34
+ dt.nano_seconds.should == 0
35
+ end
36
+
37
+ it "new with argument nano_seconds" do
38
+ dt = DayTime.new(0,23,45,457834889)
39
+ dt.nano_seconds.should == 457834889
40
+ end
41
+
42
+ it 'new with string argument "8"' do
43
+ dt = DayTime.new("8")
44
+ dt.hours.should == 8
45
+ dt.minutes.should == 0
46
+ dt.seconds.should == 0
47
+ dt.nano_seconds.should == 0
48
+ end
49
+
50
+ it 'new with string argument "8:35"' do
51
+ dt = DayTime.new("8:35")
52
+ dt.hours.should == 8
53
+ dt.minutes.should == 35
54
+ dt.seconds.should == 0
55
+ dt.nano_seconds.should == 0
56
+ end
57
+
58
+ it 'new with string argument "8:35:30"' do
59
+ dt = DayTime.new("8:35:30")
60
+ dt.hours.should == 8
61
+ dt.minutes.should == 35
62
+ dt.seconds.should == 30
63
+ dt.nano_seconds.should == 0
64
+ end
65
+
66
+ it 'new with string does implicit strip' do
67
+ dt = DayTime.new(" 8:35:30 ")
68
+ dt.hours.should == 8
69
+ dt.minutes.should == 35
70
+ end
71
+
72
+ it 'new with string rejects too much separators' do
73
+ lambda { DayTime.new("8:35:30:45") }.should raise_error Relativity::InvalidFormat
74
+ end
75
+
76
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe DayTimeRange do
4
+
5
+ it "builds new with 1 argument" do
6
+ lambda { DayTimeRange.new("8 until 11") }.should_not raise_error
7
+ end
8
+
9
+ it "start day_time is correct" do
10
+ dtr = DayTimeRange.new("8 until 11")
11
+ dtr.start.should == DayTime.new(8)
12
+ end
13
+
14
+ it "end day_time is correct" do
15
+ dtr = DayTimeRange.new("8 until 11")
16
+ dtr.end.should == DayTime.new(11)
17
+ end
18
+
19
+ it "day_times are correct with complex time" do
20
+ dtr = DayTimeRange.new("8:35 until 17:59:30")
21
+ dtr.start.should == DayTime.new(8,35)
22
+ dtr.end.should == DayTime.new(17,59,30)
23
+ end
24
+
25
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe DayTimeRange do
4
+
5
+ it "default separator is ' until '" do
6
+ DayTimeRange.separator.should == ' until '
7
+ end
8
+
9
+ it "start time is correct" do
10
+ dtr = DayTimeRange.new("8 until 11", :separator => " until ")
11
+ dtr.start.should == DayTime.new(8)
12
+ end
13
+
14
+ it "start time is correct" do
15
+ dtr = DayTimeRange.new("8 - 11", :separator => " - ")
16
+ dtr.start.should == DayTime.new(8)
17
+ end
18
+
19
+ it "start time is correct" do
20
+ dtr = DayTimeRange.new("8..11", :separator => "..")
21
+ dtr.start.should == DayTime.new(8)
22
+ end
23
+
24
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe WeekTime do
4
+
5
+ it "new builds a WeekTime" do
6
+ lambda { subject }.should_not raise_error
7
+ end
8
+
9
+ it "seconds_since_sunday_midnight" do
10
+ lambda { subject.seconds_since_sunday_midnight }.should_not raise_error
11
+ end
12
+
13
+ it "new creates a WeekTime close to now" do
14
+ wt_s = subject.seconds_since_sunday_midnight
15
+ t = Time.new
16
+ day_time_s = (t.hour*60 + t.min)*60 + t.sec + t.nsec/1E9
17
+ week_day_d = t.wday #0..6 0 is Sunday
18
+ week_day_s = week_day_d * 24 * 3600
19
+ week_time_s = day_time_s + week_day_s
20
+ (((week_time_s - wt_s).abs+2)%(7*24*3600)).should be <= 4
21
+ end
22
+
23
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relativity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-17 00:00:00.000000000 Z
12
+ date: 2012-02-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &81174410 !ruby/object:Gem::Requirement
16
+ requirement: &78729730 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,40 +21,7 @@ dependencies:
21
21
  version: '2.7'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *81174410
25
- - !ruby/object:Gem::Dependency
26
- name: guard-rspec
27
- requirement: &81173310 !ruby/object:Gem::Requirement
28
- none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: '0.5'
33
- type: :development
34
- prerelease: false
35
- version_requirements: *81173310
36
- - !ruby/object:Gem::Dependency
37
- name: rb-inotify
38
- requirement: &81171830 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ! '>='
42
- - !ruby/object:Gem::Version
43
- version: '0'
44
- type: :development
45
- prerelease: false
46
- version_requirements: *81171830
47
- - !ruby/object:Gem::Dependency
48
- name: libnotify
49
- requirement: &81170730 !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- type: :development
56
- prerelease: false
57
- version_requirements: *81170730
24
+ version_requirements: *78729730
58
25
  description: time and time_ranges relative to day, week, month, quarter etc.
59
26
  email:
60
27
  - peter@vandenabeele.com
@@ -63,6 +30,7 @@ extensions: []
63
30
  extra_rdoc_files: []
64
31
  files:
65
32
  - .gitignore
33
+ - .rspec
66
34
  - .rvmrc
67
35
  - Changelog.rdoc
68
36
  - Gemfile
@@ -73,16 +41,24 @@ files:
73
41
  - TODO
74
42
  - lib/relativity.rb
75
43
  - lib/relativity/day_time.rb
44
+ - lib/relativity/day_time/comparison.rb
45
+ - lib/relativity/day_time/conversions.rb
46
+ - lib/relativity/day_time/new.rb
76
47
  - lib/relativity/day_time_range.rb
77
48
  - lib/relativity/exception.rb
78
49
  - lib/relativity/version.rb
50
+ - lib/relativity/week_time.rb
79
51
  - relativity.gemspec
80
- - spec/day_time/day_time_spec.rb
52
+ - spec/day_time/comparison_spec.rb
53
+ - spec/day_time/conversions_spec.rb
81
54
  - spec/day_time/exception_spec.rb
55
+ - spec/day_time/new_spec.rb
82
56
  - spec/day_time/output_spec.rb
83
57
  - spec/day_time/overflow_spec.rb
84
- - spec/day_time_range/day_time_range_spec.rb
58
+ - spec/day_time_range/new_spec.rb
59
+ - spec/day_time_range/parsing_spec.rb
85
60
  - spec/spec_helper.rb
61
+ - spec/week_time/week_time_spec.rb
86
62
  homepage: https://github.com/petervandenabeele/relativity
87
63
  licenses: []
88
64
  post_install_message:
@@ -1,79 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe DayTime do
4
-
5
- it "new build a DayTime" do
6
- lambda { subject }.should_not raise_error
7
- end
8
-
9
- it "seconds_since_midnight" do
10
- lambda { subject.seconds_since_midnight }.should_not raise_error
11
- end
12
-
13
- it "new creates a DayTime close to now" do
14
- rt_s = subject.seconds_since_midnight
15
- t = Time.new
16
- t_s = (t.hour*60 + t.min)*60 + t.sec + t.nsec/1E9 # seconds_since_midnight from Time
17
- (((t_s-rt_s).abs+2)%(24*60*60)).should be <= 4
18
- end
19
-
20
- it "hours" do
21
- (((subject.hours - Time.new.hour).abs+1)%24).should be <= 2
22
- end
23
-
24
- it "minutes" do
25
- (((subject.minutes - Time.new.min).abs+1)%60).should be <= 2
26
- end
27
-
28
- it "seconds" do
29
- (((subject.seconds - Time.new.sec).abs+2)%60).should be <= 4
30
- end
31
-
32
- it "seconds_since_midnight should be BigDecimal" do
33
- subject.seconds_since_midnight.should be_kind_of(BigDecimal)
34
- end
35
-
36
- it "hours should be Integer" do
37
- subject.hours.should be_kind_of(Integer)
38
- end
39
-
40
- it "minutes should be Integer" do
41
- subject.minutes.should be_kind_of(Integer)
42
- end
43
-
44
- it "seconds should be Integer" do
45
- subject.seconds.should be_kind_of(Integer)
46
- end
47
-
48
- it "nano_seconds should be Integer" do
49
- subject.nano_seconds.should be_kind_of(Integer)
50
- end
51
-
52
- it "new with argument hours" do
53
- DayTime.new(10).hours.should == 10
54
- rt = DayTime.new(20)
55
- rt.hours.should == 20
56
- rt.minutes.should == 0
57
- rt.seconds.should == 0
58
- rt.nano_seconds.should == 0
59
- end
60
-
61
- it "new with argument minutes" do
62
- rt = DayTime.new(10,25)
63
- rt.minutes.should == 25
64
- rt.seconds.should == 0
65
- rt.nano_seconds.should == 0
66
- end
67
-
68
- it "new with argument seconds" do
69
- rt = DayTime.new(10,37,45)
70
- rt.seconds.should == 45
71
- rt.nano_seconds.should == 0
72
- end
73
-
74
- it "new with argument nano_seconds" do
75
- rt = DayTime.new(0,23,45,457834889)
76
- rt.nano_seconds.should == 457834889
77
- end
78
-
79
- end
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe DayTimeRange do
4
-
5
- it "builds new with 1 argument" do
6
- lambda { DayTimeRange.new("8 until 11") }.should_not raise_error
7
- end
8
-
9
- end