ice_cube 0.5.3 → 0.5.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.
@@ -1,13 +1,12 @@
1
1
  module IceCube
2
2
 
3
3
  class RuleOccurrence
4
-
5
- include Comparable
6
-
7
- #allow to be compared to dates
8
- def <=>(other)
9
- to_time <=> other
10
- end
4
+
5
+ # allow to be compared to dates (awesome but not used anymore)
6
+ # include Comparable
7
+ # def <=>(other)
8
+ # to_time <=> other
9
+ # end
11
10
 
12
11
  def to_time
13
12
  @date
@@ -45,8 +44,8 @@ module IceCube
45
44
  begin
46
45
  return nil if @end_time && date > @end_time
47
46
  return nil if @rule.until_date && date > @rule.until_date # until check
48
- next unless @rule.in_interval?(date, @start_date)
49
47
  return nil if yield(date)
48
+ next unless @rule.in_interval?(date, @start_date)
50
49
  return RuleOccurrence.new(@rule, @start_date, @end_time, date, @index + 1)
51
50
  end while date = @rule.next_suggestion(date)
52
51
  end
@@ -165,7 +165,7 @@ module IceCube
165
165
  # adjust to the propert end date
166
166
  end_time = @end_time if @end_time && @end_time < end_time
167
167
  # collect the occurrences
168
- include_dates = SortedSet.new(@rdates)
168
+ include_dates, exclude_dates = SortedSet.new(@rdates), Set.new(@exdates)
169
169
  @rrule_occurrence_heads.each do |rrule_occurrence_head|
170
170
  include_dates.merge(rrule_occurrence_head.between(begin_time, end_time))
171
171
  end
@@ -173,7 +173,7 @@ module IceCube
173
173
  exclude_dates.merge(exrule_occurrence_head.between(begin_time, end_time))
174
174
  end
175
175
  # reject all of the ones outside of the range
176
- include_dates.reject! { |date| (@exdates && @exdates.include?(date)) || date < begin_time || date > end_time }
176
+ include_dates.reject! { |date| exclude_dates.include?(date) || date < begin_time || date > end_time }
177
177
  include_dates.to_a
178
178
  end
179
179
 
@@ -3,14 +3,15 @@ module IceCube
3
3
  class Validation
4
4
 
5
5
  NUMBER_SUFFIX = ['th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th']
6
-
7
- def adjust(goal, date)
6
+ SPECIAL_SUFFIX = { 11 => 'th', 12 => 'th', 13 => 'th', 14 => 'th' }
7
+
8
+ def self.adjust(goal, date)
8
9
  return goal if goal.utc_offset == date.utc_offset
9
10
  goal - goal.utc_offset + date.utc_offset
10
11
  end
11
12
 
12
13
  # influences by ActiveSupport's to_sentence
13
- def sentence(array)
14
+ def self.sentence(array)
14
15
  case array.length
15
16
  when 0 ; ''
16
17
  when 1 ; array[0].to_s
@@ -19,23 +20,25 @@ module IceCube
19
20
  end
20
21
  end
21
22
 
22
- def nice_numbers(array)
23
+ def self.nice_numbers(array)
23
24
  array.sort!
24
- sentence array.map { |d| nice_number(d) }
25
+ self.sentence array.map { |d| nice_number(d) }
25
26
  end
26
27
 
27
28
  private
28
29
 
29
- def nice_number(number)
30
+ def self.nice_number(number)
30
31
  if number == -1
31
32
  'last'
32
33
  elsif number < -1
33
- number.abs.to_s << NUMBER_SUFFIX[number.abs % 10] << ' to last'
34
+ suffix = SPECIAL_SUFFIX.include?(number) ? SPECIAL_SUFFIX[number] : NUMBER_SUFFIX[number.abs % 10]
35
+ number.abs.to_s << suffix << ' to last'
34
36
  else
35
- number.to_s << NUMBER_SUFFIX[number % 10]
37
+ suffix = SPECIAL_SUFFIX.include?(number) ? SPECIAL_SUFFIX[number] : NUMBER_SUFFIX[number.abs % 10]
38
+ number.to_s << suffix
36
39
  end
37
40
  end
38
41
 
39
42
  end
40
43
 
41
- end
44
+ end
@@ -21,12 +21,12 @@ module IceCube
21
21
  days.compact!
22
22
  # go to the closest distance away, the start of that day
23
23
  goal = date + days.min * IceCube::ONE_DAY
24
- adjust(goal, date)
24
+ self.class.adjust(goal, date)
25
25
  end
26
26
 
27
27
  def to_s
28
28
  days_dup = (@days - @rule.validations[:day_of_week].keys if @rule.validations[:day_of_week]) || @days # don't list twice
29
- 'on ' << sentence(days_dup.map { |d| Date::DAYNAMES[d] + 's' }) unless days_dup.empty?
29
+ 'on ' << self.class.sentence(days_dup.map { |d| Date::DAYNAMES[d] + 's' }) unless days_dup.empty?
30
30
  end
31
31
 
32
32
  def to_ical
@@ -36,4 +36,4 @@ module IceCube
36
36
 
37
37
  end
38
38
 
39
- end
39
+ end
@@ -34,11 +34,11 @@ module IceCube
34
34
  return nil if distances.empty?
35
35
  # return the start of the proper day
36
36
  goal = date + distances.min * IceCube::ONE_DAY
37
- adjust(goal, date)
37
+ self.class.adjust(goal, date)
38
38
  end
39
39
 
40
40
  def to_s
41
- 'on the ' << nice_numbers(@days_of_month) << (@days_of_month.size == 1 ? ' day' : ' days') << ' of the month' unless @days_of_month.empty?
41
+ 'on the ' << self.class.nice_numbers(@days_of_month) << (@days_of_month.size == 1 ? ' day' : ' days') << ' of the month' unless @days_of_month.empty?
42
42
  end
43
43
 
44
44
  def to_ical
@@ -26,7 +26,7 @@ module IceCube
26
26
  return nil if !@days_of_week || @days_of_week.empty?
27
27
  goal = date
28
28
  while goal += IceCube::ONE_DAY
29
- return adjust(goal, date) if validate(goal)
29
+ return self.class.adjust(goal, date) if validate(goal)
30
30
  end
31
31
  end
32
32
 
@@ -34,7 +34,7 @@ module IceCube
34
34
  representation = ''
35
35
  representation << 'on the '
36
36
  representation << @days_of_week.map do |day, occ|
37
- nice_numbers(occ) << ' ' << Date::DAYNAMES[day] << (occ.size != 1 ? 's' : '') unless @days_of_week.empty?
37
+ self.class.nice_numbers(occ) << ' ' << Date::DAYNAMES[day] << (occ.size != 1 ? 's' : '') unless @days_of_week.empty?
38
38
  end.join(' and the ')
39
39
  representation
40
40
  end
@@ -33,11 +33,11 @@ module IceCube
33
33
  return nil if distances.empty?
34
34
  # return the start of the proper day
35
35
  goal = date + distances.min * IceCube::ONE_DAY
36
- adjust(goal, date)
36
+ self.class.adjust(goal, date)
37
37
  end
38
38
 
39
39
  def to_s
40
- 'on the ' << nice_numbers(@days_of_year) << (@days_of_year.size == 1 ? ' day' : ' days') << ' of the year' unless @days_of_year.empty?
40
+ 'on the ' << self.class.nice_numbers(@days_of_year) << (@days_of_year.size == 1 ? ' day' : ' days') << ' of the year' unless @days_of_year.empty?
41
41
  end
42
42
 
43
43
  def to_ical
@@ -22,11 +22,11 @@ module IceCube
22
22
  # go to the closest distance away, the start of that hour
23
23
  closest_hour = hours.min
24
24
  goal = date + IceCube::ONE_HOUR * closest_hour
25
- adjust(goal, date)
25
+ self.class.adjust(goal, date)
26
26
  end
27
27
 
28
28
  def to_s
29
- 'on the ' << nice_numbers(@hours_of_day) << (@hours_of_day.size == 1 ? ' hour' : ' hours') << ' of the day' unless @hours_of_day.empty?
29
+ 'on the ' << self.class.nice_numbers(@hours_of_day) << (@hours_of_day.size == 1 ? ' hour' : ' hours') << ' of the day' unless @hours_of_day.empty?
30
30
  end
31
31
 
32
32
  def to_ical
@@ -22,11 +22,11 @@ module IceCube
22
22
  # go to the closest distance away, the beginning of that minute
23
23
  closest_minute = minutes.min
24
24
  goal = date + closest_minute * IceCube::ONE_MINUTE
25
- adjust(goal, date)
25
+ self.class.adjust(goal, date)
26
26
  end
27
27
 
28
28
  def to_s
29
- 'on the ' << nice_numbers(@minutes_of_hour) << (@minutes_of_hour.size == 1 ? ' minute' : ' minutes') << ' of the hour' unless @minutes_of_hour.empty?
29
+ 'on the ' << self.class.nice_numbers(@minutes_of_hour) << (@minutes_of_hour.size == 1 ? ' minute' : ' minutes') << ' of the hour' unless @minutes_of_hour.empty?
30
30
  end
31
31
 
32
32
  def to_ical
@@ -22,11 +22,11 @@ module IceCube
22
22
  # go to the closest distance away
23
23
  goal = date
24
24
  months.min.times { goal += TimeUtil.days_in_month(goal) * IceCube::ONE_DAY }
25
- adjust(goal, date)
25
+ self.class.adjust(goal, date)
26
26
  end
27
27
 
28
28
  def to_s
29
- 'in ' << @months_of_year.map { |m| Date::MONTHNAMES[m] }.join(', ') unless @months_of_year.empty?
29
+ 'in ' << self.class.sentence(@months_of_year.map { |m| Date::MONTHNAMES[m] }) unless @months_of_year.empty?
30
30
  end
31
31
 
32
32
  def to_ical
@@ -35,4 +35,4 @@ module IceCube
35
35
 
36
36
  end
37
37
 
38
- end
38
+ end
@@ -22,11 +22,11 @@ module IceCube
22
22
  # go to the closest distance away
23
23
  closest_second = seconds.min
24
24
  goal = date + closest_second
25
- adjust(goal, date)
25
+ self.class.adjust(goal, date)
26
26
  end
27
27
 
28
28
  def to_s
29
- 'on the ' << nice_numbers(@seconds_of_minute) << (@seconds_of_minute.size == 1 ? ' second' : ' seconds') << ' of the minute' unless @seconds_of_minute.empty?
29
+ 'on the ' << self.class.nice_numbers(@seconds_of_minute) << (@seconds_of_minute.size == 1 ? ' second' : ' seconds') << ' of the minute' unless @seconds_of_minute.empty?
30
30
  end
31
31
 
32
32
  def to_ical
@@ -1,5 +1,5 @@
1
1
  module IceCube
2
2
 
3
- VERSION = '0.5.3'
3
+ VERSION = '0.5.4'
4
4
 
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ice_cube
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 3
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 3
10
- version: 0.5.3
9
+ - 4
10
+ version: 0.5.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - John Crepezzi
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-25 00:00:00 -04:00
18
+ date: 2010-08-27 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency