ice_cube 0.6.10 → 0.6.11

Sign up to get free protection for your applications and to get access to all the features.
data/lib/ice_cube/rule.rb CHANGED
@@ -5,6 +5,12 @@ module IceCube
5
5
  attr_reader :occurrence_count, :until_date
6
6
 
7
7
  include ValidationTypes
8
+ include Comparable
9
+
10
+ # Compare based on hash representations
11
+ def <=>(other)
12
+ to_hash <=> other.to_hash
13
+ end
8
14
 
9
15
  def to_hash
10
16
  hash = Hash.new
@@ -168,6 +168,14 @@ module IceCube
168
168
  @rrule_occurrence_heads << RuleOccurrence.new(rule, @start_date, @end_time)
169
169
  end
170
170
 
171
+ # Remove a recurrence rule, returns the removed rules, or nil
172
+ def remove_recurrence_rule(rule)
173
+ raise ArgumentError.new('Argument must be a valid rule') unless rule.class < Rule
174
+ deletions = []
175
+ @rrule_occurrence_heads.delete_if { |h| deletions << h.rule if h.rule == rule }
176
+ deletions
177
+ end
178
+
171
179
  def rrules
172
180
  @rrule_occurrence_heads.map { |h| h.rule }
173
181
  end
@@ -178,6 +186,14 @@ module IceCube
178
186
  @exrule_occurrence_heads << RuleOccurrence.new(rule, @start_date, @end_time)
179
187
  end
180
188
 
189
+ # Remove an exception rule, returns the removed rule, or nil
190
+ def remove_exception_rule(rule)
191
+ raise ArgumentError.new('Argument must be a valid rule') unless rule.class < Rule
192
+ deletions = []
193
+ @exrule_occurrence_heads.delete_if { |h| deletions << h.rule if h.rule == rule }
194
+ deletions
195
+ end
196
+
181
197
  def exrules
182
198
  @exrule_occurrence_heads.map { |h| h.rule }
183
199
  end
@@ -187,11 +203,23 @@ module IceCube
187
203
  @rdates << date unless date.nil?
188
204
  end
189
205
 
206
+ # Remove an individual date from this schedule's recurrence dates
207
+ # return date that was removed, nil otherwise
208
+ def remove_recurrence_date(date)
209
+ @rdates.delete(date)
210
+ end
211
+
190
212
  # Add an individual date exception to this schedule
191
213
  def add_exception_date(date)
192
214
  @exdates << date unless date.nil?
193
215
  end
194
216
 
217
+ # Remove an individual date exception from this schedule's exception dates
218
+ # return date that was removed, nil otherwise
219
+ def remove_exception_date(date)
220
+ @exdates.delete(date)
221
+ end
222
+
195
223
  def occurrences_between(begin_time, end_time)
196
224
  # adjust to the propert end date
197
225
  end_time = @end_time if @end_time && @end_time < end_time
@@ -209,10 +237,15 @@ module IceCube
209
237
  end
210
238
 
211
239
  alias :rdate :add_recurrence_date
212
- alias rrule add_recurrence_rule
213
- alias exdate add_exception_date
214
- alias exrule add_exception_rule
215
-
240
+ alias :rrule :add_recurrence_rule
241
+ alias :exdate :add_exception_date
242
+ alias :exrule :add_exception_rule
243
+ alias :recurrence_dates :rdates
244
+ alias :exception_dates :exdates
245
+ alias :remove_rdate :remove_recurrence_date
246
+ alias :remove_exdate :remove_exception_date
247
+ alias :remove_rrule :remove_recurrence_rule
248
+ alias :remove_exrule :remove_exception_rule
216
249
 
217
250
  private
218
251
 
@@ -1,5 +1,5 @@
1
1
  module IceCube
2
2
 
3
- VERSION = '0.6.10'
3
+ VERSION = '0.6.11'
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.6.10
4
+ version: 0.6.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
17
- requirement: &70363623868640 !ruby/object:Gem::Requirement
17
+ requirement: &70126045890940 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,7 +22,7 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70363623868640
25
+ version_requirements: *70126045890940
26
26
  description: ice_cube is a recurring date library for Ruby. It allows for quick,
27
27
  programatic expansion of recurring date rules.
28
28
  email: john@crepezzi.com