icalendar 1.4.0 → 1.4.1
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 +4 -4
- data/History.txt +4 -0
- data/lib/icalendar/base.rb +1 -1
- data/lib/icalendar/component.rb +17 -20
- data/lib/icalendar/parser.rb +1 -1
- data/lib/icalendar/rrule.rb +21 -19
- data/test/test_conversions.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bac1e484f0c1f2c316989f0fb092e799cdcbc768
|
4
|
+
data.tar.gz: 43df9e195316a6fa72ea53ef22b615c62dccf807
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f3facfc15d82ac4d1364d82fd8f9dbca4d6101e725a93acd182a86a35571ec8180dd3fcf85b92fdce31b79a1cb7e7ef68aa07eca27bfc5bb81bcfb41b16bcc5
|
7
|
+
data.tar.gz: b9732aa49cfe06380fc0a401499bca6334c3dafdaad1a640f50d7e7d97d32be9f8651904064653436f892293896e0b5280651a77d48523e81e2b2eb926f809d2
|
data/History.txt
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
=== 1.4.1 2013-06-25
|
2
|
+
* Don't escape semicolon in GEO property - temirov
|
3
|
+
* Allow access to various parts of RRule class
|
4
|
+
|
1
5
|
=== 1.4.0 2013-05-21
|
2
6
|
* Implement ACKNOWLEDGED property for VALARM - tsuzuki08
|
3
7
|
* Output VERSION property as first line after BEGIN:VCALENDAR
|
data/lib/icalendar/base.rb
CHANGED
data/lib/icalendar/component.rb
CHANGED
@@ -136,22 +136,19 @@ module Icalendar
|
|
136
136
|
end
|
137
137
|
|
138
138
|
# Property name
|
139
|
-
|
140
|
-
prelude = "#{key.gsub(/_/, '-').upcase}"
|
141
|
-
|
142
|
-
# Possible parameters
|
143
|
-
print_parameters(val)
|
139
|
+
if !multiline_property?(key)
|
140
|
+
prelude = "#{key.gsub(/_/, '-').upcase}#{print_parameters val}"
|
144
141
|
|
145
142
|
# Property value
|
146
143
|
value = ":#{val.to_ical}"
|
147
|
-
value = escape_chars(value) unless %w[rrule categories exdate].include?(key)
|
144
|
+
value = escape_chars(value) unless %w[geo rrule categories exdate].include?(key)
|
148
145
|
add_sliced_text(s, prelude + value)
|
149
146
|
else
|
150
147
|
prelude = "#{key.gsub(/_/, '-').upcase}"
|
151
148
|
val.each do |v|
|
152
149
|
params = print_parameters(v)
|
153
150
|
value = ":#{v.to_ical}"
|
154
|
-
value = escape_chars(value)
|
151
|
+
value = escape_chars(value)
|
155
152
|
add_sliced_text(s, prelude + params + value)
|
156
153
|
end
|
157
154
|
end
|
@@ -174,7 +171,7 @@ module Icalendar
|
|
174
171
|
# Print the parameters for a specific property.
|
175
172
|
def print_parameters(value)
|
176
173
|
s = ""
|
177
|
-
return s unless value.respond_to?(:ical_params)
|
174
|
+
return s unless value.respond_to?(:ical_params) && !value.ical_params.nil?
|
178
175
|
|
179
176
|
value.ical_params.each do |key, val|
|
180
177
|
s << ";#{key}"
|
@@ -213,12 +210,12 @@ module Icalendar
|
|
213
210
|
# Make it protected so we can monitor usage...
|
214
211
|
protected
|
215
212
|
|
216
|
-
def
|
213
|
+
def self.ical_component(*syms)
|
217
214
|
hash_accessor :@components, *syms
|
218
215
|
end
|
219
216
|
|
220
217
|
# Define a set of methods supporting a new property
|
221
|
-
def
|
218
|
+
def self.ical_property(property, alias_name = nil, prop_name = nil)
|
222
219
|
property = "#{property}".strip.downcase
|
223
220
|
alias_name = "#{alias_name}".strip.downcase unless alias_name.nil?
|
224
221
|
# If a prop_name was given then we use that for the actual storage
|
@@ -231,7 +228,7 @@ module Icalendar
|
|
231
228
|
|
232
229
|
# Define a set of methods defining a new property, which
|
233
230
|
# supports multiple values for the same property name.
|
234
|
-
def
|
231
|
+
def self.ical_multi_property(property, singular, plural)
|
235
232
|
property = "#{property}".strip.downcase.gsub(/-/, '_')
|
236
233
|
plural = "#{plural}".strip.downcase
|
237
234
|
|
@@ -248,7 +245,7 @@ module Icalendar
|
|
248
245
|
|
249
246
|
# Define a set of methods defining a new property, which
|
250
247
|
# supports multiple values in multiple lines with same property name
|
251
|
-
def
|
248
|
+
def self.ical_multiline_property(property, singular, plural)
|
252
249
|
@@multiline_properties["#{property}"] = true
|
253
250
|
ical_multi_property(property, singular, plural)
|
254
251
|
end
|
@@ -256,7 +253,7 @@ module Icalendar
|
|
256
253
|
|
257
254
|
private
|
258
255
|
|
259
|
-
def
|
256
|
+
def self.generate_getter(property, alias_name)
|
260
257
|
unless instance_methods.include? property
|
261
258
|
code = <<-code
|
262
259
|
def #{property}(val = nil, params = nil)
|
@@ -284,7 +281,7 @@ module Icalendar
|
|
284
281
|
end
|
285
282
|
end
|
286
283
|
|
287
|
-
def
|
284
|
+
def self.generate_setter(property, alias_name)
|
288
285
|
setter = property + '='
|
289
286
|
unless instance_methods.include? setter
|
290
287
|
code = <<-code
|
@@ -298,7 +295,7 @@ module Icalendar
|
|
298
295
|
end
|
299
296
|
end
|
300
297
|
|
301
|
-
def
|
298
|
+
def self.generate_query(property, alias_name)
|
302
299
|
query = "#{property}?"
|
303
300
|
unless instance_methods.include? query
|
304
301
|
code = <<-code
|
@@ -313,7 +310,7 @@ module Icalendar
|
|
313
310
|
end
|
314
311
|
end
|
315
312
|
|
316
|
-
def
|
313
|
+
def self.generate_multi_getter(property, plural)
|
317
314
|
# Getter for whole array
|
318
315
|
unless instance_methods.include? plural
|
319
316
|
code = <<-code
|
@@ -330,7 +327,7 @@ module Icalendar
|
|
330
327
|
end
|
331
328
|
end
|
332
329
|
|
333
|
-
def
|
330
|
+
def self.generate_multi_setter(property, plural)
|
334
331
|
# Setter for whole array
|
335
332
|
unless instance_methods.include? plural+'+'
|
336
333
|
code = <<-code
|
@@ -353,7 +350,7 @@ module Icalendar
|
|
353
350
|
end
|
354
351
|
end
|
355
352
|
|
356
|
-
def
|
353
|
+
def self.generate_multi_query(property, plural)
|
357
354
|
# Query for any of these properties
|
358
355
|
unless instance_methods.include? plural+'?'
|
359
356
|
code = <<-code
|
@@ -366,7 +363,7 @@ module Icalendar
|
|
366
363
|
end
|
367
364
|
end
|
368
365
|
|
369
|
-
def
|
366
|
+
def self.generate_multi_adder(property, singular)
|
370
367
|
adder = "add_"+singular.to_s
|
371
368
|
# Add another item to this properties array
|
372
369
|
unless instance_methods.include? adder
|
@@ -397,7 +394,7 @@ module Icalendar
|
|
397
394
|
end
|
398
395
|
end
|
399
396
|
|
400
|
-
def
|
397
|
+
def self.generate_multi_remover(property, singular)
|
401
398
|
# Remove an item from this properties array
|
402
399
|
unless instance_methods.include? "remove_#{singular}"
|
403
400
|
code = <<-code
|
data/lib/icalendar/parser.rb
CHANGED
data/lib/icalendar/rrule.rb
CHANGED
@@ -33,15 +33,15 @@ module Icalendar
|
|
33
33
|
"#{@position}#{@day}"
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
37
|
-
|
36
|
+
|
37
|
+
attr_accessor :frequency, :until, :count, :interval, :by_list, :wkst
|
38
|
+
|
39
|
+
def initialize(name, params, value)
|
38
40
|
@value = value
|
39
41
|
frequency_match = value.match(/FREQ=(SECONDLY|MINUTELY|HOURLY|DAILY|WEEKLY|MONTHLY|YEARLY)/)
|
40
|
-
raise Icalendar::InvalidPropertyValue.new("FREQ must be specified for RRULE values") unless frequency_match
|
41
42
|
@frequency = frequency_match[1]
|
42
43
|
@until = parse_date_val("UNTIL", value)
|
43
44
|
@count = parse_int_val("COUNT", value)
|
44
|
-
raise Icalendar::InvalidPropertyValue.new("UNTIL and COUNT must not both be specified for RRULE values") if [@until, @count].compact.length > 1
|
45
45
|
@interval = parse_int_val("INTERVAL", value)
|
46
46
|
@by_list = {:bysecond => parse_int_list("BYSECOND", value)}
|
47
47
|
@by_list[:byminute] = parse_int_list("BYMINUTE",value)
|
@@ -59,23 +59,25 @@ module Icalendar
|
|
59
59
|
def orig_value
|
60
60
|
@value
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
def to_ical
|
64
|
-
|
65
|
-
|
66
|
-
result
|
67
|
-
result << "
|
68
|
-
|
64
|
+
raise Icalendar::InvalidPropertyValue.new("FREQ must be specified for RRULE values") unless frequency
|
65
|
+
raise Icalendar::InvalidPropertyValue.new("UNTIL and COUNT must not both be specified for RRULE values") if [self.until, count].compact.length > 1
|
66
|
+
result = ["FREQ=#{frequency}"]
|
67
|
+
result << "UNTIL=#{self.until.to_ical}" if self.until
|
68
|
+
result << "COUNT=#{count}" if count
|
69
|
+
result << "INTERVAL=#{interval}" if interval
|
70
|
+
by_list.each do |key, value|
|
69
71
|
if value
|
70
72
|
if key == :byday
|
71
|
-
result << "
|
73
|
+
result << "BYDAY=#{value.join ','}"
|
72
74
|
else
|
73
|
-
result << "
|
75
|
+
result << "#{key.to_s.upcase}=#{value}"
|
74
76
|
end
|
75
77
|
end
|
76
78
|
end
|
77
|
-
result << "
|
78
|
-
result.join
|
79
|
+
result << "WKST=#{wkst}" if wkst
|
80
|
+
result.join ';'
|
79
81
|
end
|
80
82
|
|
81
83
|
def parse_date_val(name, string)
|
@@ -122,11 +124,11 @@ module Icalendar
|
|
122
124
|
# TODO: Incomplete
|
123
125
|
def occurrences_of_event_starting(event, datetime)
|
124
126
|
initial_start = event.dtstart
|
125
|
-
(0
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
127
|
+
(0...count).map do |day_offset|
|
128
|
+
occurrence = event.clone
|
129
|
+
occurrence.dtstart = initial_start + day_offset
|
130
|
+
occurrence.clone
|
131
|
+
end
|
130
132
|
end
|
131
133
|
end
|
132
134
|
|
data/test/test_conversions.rb
CHANGED
@@ -19,7 +19,7 @@ DESCRIPTION:desc
|
|
19
19
|
DTSTAMP:20060720T174052
|
20
20
|
DTSTART:20060720
|
21
21
|
EXDATE:20121012T170000Z,20121102T170000Z
|
22
|
-
GEO:46.01
|
22
|
+
GEO:46.01;8.57
|
23
23
|
LAST-MODIFIED:19960817T133000
|
24
24
|
ORGANIZER:mailto:joe@example.com?subject=Ruby
|
25
25
|
RRULE:FREQ=WEEKLY;UNTIL=20130220T180000Z;BYDAY=FR
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: icalendar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Ahearn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyforge
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '4.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '4.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: newgem
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '3.
|
61
|
+
version: '3.6'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '3.
|
68
|
+
version: '3.6'
|
69
69
|
description: "This is a Ruby library for dealing with iCalendar files. Rather than\nexplaining
|
70
70
|
myself, here is the introduction from RFC-2445, which\ndefines the format:\n\nThe
|
71
71
|
use of calendaring and scheduling has grown considerably in the\nlast decade. Enterprise
|