ice_cube 0.7.11 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/ice_cube/rule.rb CHANGED
@@ -97,8 +97,8 @@ module IceCube
97
97
  end
98
98
 
99
99
  # Weekly Rule
100
- def weekly(interval = 1)
101
- WeeklyRule.new(interval)
100
+ def weekly(interval = 1, week_start = :sunday)
101
+ WeeklyRule.new(interval, week_start)
102
102
  end
103
103
 
104
104
  # Monthly Rule
@@ -4,8 +4,8 @@ module IceCube
4
4
 
5
5
  include Validations::WeeklyInterval
6
6
 
7
- def initialize(interval = 1)
8
- interval(interval)
7
+ def initialize(interval = 1, week_start = :sunday)
8
+ interval(interval, week_start)
9
9
  schedule_lock(:wday, :hour, :min, :sec)
10
10
  end
11
11
 
@@ -64,6 +64,18 @@ module IceCube
64
64
  day
65
65
  end
66
66
 
67
+ # Convert a symbol to an ical day (SU, MO)
68
+ def self.week_start(sym)
69
+ raise "No such day: #{sym}" unless DAYS.keys.include?(sym)
70
+ day = sym.to_s.upcase[0..1]
71
+ day
72
+ end
73
+
74
+ # Convert weekday from base sunday to the schedule's week start.
75
+ def self.normalize_weekday(daynum, week_start)
76
+ (daynum - symbol_to_day(week_start)) % 7
77
+ end
78
+
67
79
  # Return the count of the number of times wday appears in the month,
68
80
  # and which of those time falls on
69
81
  def self.which_occurrence_in_month(time, wday)
@@ -93,7 +105,7 @@ module IceCube
93
105
  def self.days_in_month_year(month, year)
94
106
  is_leap?(year) ? LEAP_YEAR_MONTH_DAYS[month - 1] : COMMON_YEAR_MONTH_DAYS[month - 1]
95
107
  end
96
-
108
+
97
109
  # Number of days in a year
98
110
  def self.days_in_year(time)
99
111
  is_leap?(time.year) ? 366 : 365
@@ -190,7 +202,7 @@ module IceCube
190
202
  yield
191
203
  end
192
204
  end
193
-
205
+
194
206
  def clear_sec
195
207
  @time -= @time.sec
196
208
  end
@@ -4,14 +4,15 @@ module IceCube
4
4
 
5
5
  module Validations::WeeklyInterval
6
6
 
7
- def interval(interval)
8
- validations_for(:interval) << Validation.new(interval)
7
+ def interval(interval, week_start = :sunday)
8
+ validations_for(:interval) << Validation.new(interval, week_start)
9
9
  clobber_base_validations(:day)
10
+ self
10
11
  end
11
12
 
12
13
  class Validation
13
14
 
14
- attr_reader :interval
15
+ attr_reader :interval, :week_start
15
16
 
16
17
  def type
17
18
  :day
@@ -25,6 +26,7 @@ module IceCube
25
26
  builder['FREQ'] << 'WEEKLY'
26
27
  unless interval == 1
27
28
  builder['INTERVAL'] << interval
29
+ builder['WKST'] << TimeUtil.week_start(week_start)
28
30
  end
29
31
  end
30
32
 
@@ -32,15 +34,19 @@ module IceCube
32
34
  builder[:interval] = interval
33
35
  end
34
36
 
35
- def initialize(interval)
37
+ def initialize(interval, week_start)
36
38
  @interval = interval
39
+ @week_start = week_start
37
40
  end
38
41
 
39
42
  def validate(time, schedule)
40
43
  date = Date.new(time.year, time.month, time.day)
41
44
  st = schedule.start_time
42
45
  start_date = Date.new(st.year, st.month, st.day)
43
- weeks = ((date - date.wday) - (start_date - start_date.wday)) / 7
46
+ weeks = (
47
+ (date - TimeUtil.normalize_weekday(date.wday, week_start)) -
48
+ (start_date - TimeUtil.normalize_weekday(start_date.wday, week_start))
49
+ ) / 7
44
50
  unless weeks % interval == 0
45
51
  (interval - (weeks % interval)) * 7
46
52
  end
@@ -1,5 +1,5 @@
1
1
  module IceCube
2
2
 
3
- VERSION = '0.7.11'
3
+ VERSION = '0.8.0'
4
4
 
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ice_cube
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.11
4
+ version: 0.8.0
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-03-20 00:00:00.000000000Z
12
+ date: 2012-03-25 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70353556988740 !ruby/object:Gem::Requirement
16
+ requirement: &70300114106600 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70353556988740
24
+ version_requirements: *70300114106600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: active_support
27
- requirement: &70353556988100 !ruby/object:Gem::Requirement
27
+ requirement: &70300114105840 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 3.0.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70353556988100
35
+ version_requirements: *70300114105840
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: tzinfo
38
- requirement: &70353556986140 !ruby/object:Gem::Requirement
38
+ requirement: &70300114105260 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70353556986140
46
+ version_requirements: *70300114105260
47
47
  description: ice_cube is a recurring date library for Ruby. It allows for quick,
48
48
  programatic expansion of recurring date rules.
49
49
  email: john@crepezzi.com