rubyredrick-ri_cal 0.0.2 → 0.0.3
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/History.txt +19 -2
- data/Manifest.txt +6 -3
- data/README.txt +130 -44
- data/Rakefile +1 -1
- data/copyrights.txt +1 -2
- data/lib/ri_cal/component/alarm.rb +1 -2
- data/lib/ri_cal/component/calendar.rb +25 -9
- data/lib/ri_cal/component/event.rb +1 -2
- data/lib/ri_cal/component/freebusy.rb +1 -2
- data/lib/ri_cal/component/journal.rb +1 -2
- data/lib/ri_cal/component/t_z_info_timezone.rb +1 -2
- data/lib/ri_cal/component/timezone/daylight_period.rb +1 -2
- data/lib/ri_cal/component/timezone/standard_period.rb +1 -2
- data/lib/ri_cal/component/timezone/timezone_period.rb +1 -2
- data/lib/ri_cal/component/timezone.rb +5 -2
- data/lib/ri_cal/component.rb +22 -7
- data/lib/ri_cal/core_extensions/date/conversions.rb +8 -7
- data/lib/ri_cal/core_extensions/date_time.rb +4 -2
- data/lib/ri_cal/core_extensions/object/conversions.rb +1 -1
- data/lib/ri_cal/core_extensions/string/conversions.rb +37 -6
- data/lib/ri_cal/core_extensions/time/conversions.rb +11 -7
- data/lib/ri_cal/core_extensions/time/tzid_access.rb +37 -0
- data/lib/ri_cal/core_extensions/time.rb +3 -1
- data/lib/ri_cal/floating_timezone.rb +32 -0
- data/lib/ri_cal/invalid_property_value.rb +8 -0
- data/lib/ri_cal/invalid_timezone_identifer.rb +2 -2
- data/lib/ri_cal/occurrence_enumerator.rb +5 -3
- data/lib/ri_cal/parser.rb +8 -8
- data/lib/ri_cal/properties/alarm.rb +8 -8
- data/lib/ri_cal/properties/event.rb +60 -60
- data/lib/ri_cal/properties/freebusy.rb +16 -16
- data/lib/ri_cal/properties/journal.rb +58 -58
- data/lib/ri_cal/properties/timezone_period.rb +23 -23
- data/lib/ri_cal/properties/todo.rb +63 -64
- data/lib/ri_cal/property_value/array.rb +10 -2
- data/lib/ri_cal/property_value/cal_address.rb +1 -2
- data/lib/ri_cal/property_value/date.rb +15 -3
- data/lib/ri_cal/property_value/date_time/additive_methods.rb +34 -33
- data/lib/ri_cal/property_value/date_time/time_machine.rb +175 -174
- data/lib/ri_cal/property_value/date_time/timezone_support.rb +70 -52
- data/lib/ri_cal/property_value/date_time.rb +47 -77
- data/lib/ri_cal/property_value/duration.rb +6 -3
- data/lib/ri_cal/property_value/geo.rb +1 -2
- data/lib/ri_cal/property_value/integer.rb +1 -2
- data/lib/ri_cal/property_value/occurrence_list.rb +79 -26
- data/lib/ri_cal/property_value/period.rb +23 -3
- data/lib/ri_cal/property_value/recurrence_rule/enumeration_support_methods.rb +1 -2
- data/lib/ri_cal/property_value/recurrence_rule/enumerator.rb +1 -2
- data/lib/ri_cal/property_value/recurrence_rule/initialization_methods.rb +1 -2
- data/lib/ri_cal/property_value/recurrence_rule/negative_setpos_enumerator.rb +1 -2
- data/lib/ri_cal/property_value/recurrence_rule/numbered_span.rb +1 -2
- data/lib/ri_cal/property_value/recurrence_rule/occurence_incrementer.rb +1 -2
- data/lib/ri_cal/property_value/recurrence_rule/recurring_day.rb +1 -2
- data/lib/ri_cal/property_value/recurrence_rule/recurring_month_day.rb +1 -2
- data/lib/ri_cal/property_value/recurrence_rule/recurring_numbered_week.rb +1 -2
- data/lib/ri_cal/property_value/recurrence_rule/recurring_year_day.rb +1 -2
- data/lib/ri_cal/property_value/recurrence_rule/validations.rb +1 -2
- data/lib/ri_cal/property_value/recurrence_rule.rb +3 -4
- data/lib/ri_cal/property_value/text.rb +1 -2
- data/lib/ri_cal/property_value/uri.rb +1 -2
- data/lib/ri_cal/property_value/utc_offset.rb +1 -2
- data/lib/ri_cal/property_value.rb +42 -11
- data/lib/ri_cal/required_timezones.rb +1 -2
- data/lib/ri_cal.rb +1 -2
- data/ri_cal.gemspec +6 -4
- data/spec/ri_cal/component/alarm_spec.rb +1 -2
- data/spec/ri_cal/component/calendar_spec.rb +1 -2
- data/spec/ri_cal/component/event_spec.rb +168 -13
- data/spec/ri_cal/component/freebusy_spec.rb +1 -2
- data/spec/ri_cal/component/journal_spec.rb +1 -2
- data/spec/ri_cal/component/t_z_info_timezone_spec.rb +1 -2
- data/spec/ri_cal/component/timezone_spec.rb +1 -2
- data/spec/ri_cal/component/todo_spec.rb +4 -5
- data/spec/ri_cal/component_spec.rb +30 -18
- data/spec/ri_cal/core_extensions/string/conversions_spec.rb +78 -0
- data/spec/ri_cal/core_extensions/time/calculations_spec.rb +1 -2
- data/spec/ri_cal/core_extensions/time/week_day_predicates_spec.rb +1 -2
- data/spec/ri_cal/occurrence_enumerator_spec.rb +23 -2
- data/spec/ri_cal/parser_spec.rb +6 -7
- data/spec/ri_cal/property_value/date_spec.rb +1 -2
- data/spec/ri_cal/property_value/date_time_spec.rb +54 -119
- data/spec/ri_cal/property_value/duration_spec.rb +12 -2
- data/spec/ri_cal/property_value/occurrence_list_spec.rb +67 -0
- data/spec/ri_cal/property_value/period_spec.rb +1 -2
- data/spec/ri_cal/property_value/recurrence_rule/recurring_year_day_spec.rb +1 -2
- data/spec/ri_cal/property_value/recurrence_rule_spec.rb +1 -2
- data/spec/ri_cal/property_value/text_spec.rb +1 -2
- data/spec/ri_cal/property_value/utc_offset_spec.rb +1 -2
- data/spec/ri_cal/property_value_spec.rb +19 -8
- data/spec/ri_cal/required_timezones_spec.rb +1 -2
- data/spec/ri_cal_spec.rb +1 -2
- data/spec/spec_helper.rb +2 -7
- data/tasks/ri_cal.rake +20 -13
- data/tasks/spec.rake +1 -1
- metadata +8 -5
- data/lib/ri_cal/core_extensions/date_time/conversions.rb +0 -27
- data/lib/ri_cal/time_with_floating_timezone.rb +0 -59
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
module RiCal
|
|
2
|
-
#- ©2009 Rick DeNatale
|
|
3
|
-
#- All rights reserved. Refer to the file README.txt for the license
|
|
2
|
+
#- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
|
|
4
3
|
#
|
|
5
4
|
# PropertyValue provides common implementation of various RFC 2445 property value types
|
|
6
5
|
class PropertyValue
|
|
@@ -12,11 +11,19 @@ module RiCal
|
|
|
12
11
|
validate_value(options)
|
|
13
12
|
({:params => {}}).merge(options).each do |attribute, val|
|
|
14
13
|
unless attribute == :name
|
|
15
|
-
setter = :"#{attribute.to_s}="
|
|
14
|
+
setter = :"#{attribute.to_s.downcase}="
|
|
16
15
|
send(setter, val)
|
|
17
16
|
end
|
|
18
17
|
end
|
|
19
18
|
end
|
|
19
|
+
|
|
20
|
+
def self.if_valid_string(timezone_finder, string) #:nodoc:
|
|
21
|
+
if valid_string?(string)
|
|
22
|
+
new(timezone_finder, :value => string)
|
|
23
|
+
else
|
|
24
|
+
nil
|
|
25
|
+
end
|
|
26
|
+
end
|
|
20
27
|
|
|
21
28
|
def validate_value(options) #:nodoc:
|
|
22
29
|
val = options[:value]
|
|
@@ -33,7 +40,7 @@ module RiCal
|
|
|
33
40
|
options_hash[:params] = params unless params.empty?
|
|
34
41
|
end
|
|
35
42
|
|
|
36
|
-
def self.date_or_date_time(
|
|
43
|
+
def self.date_or_date_time(timezone_finder, separated_line) # :nodoc:
|
|
37
44
|
match = separated_line[:value].match(/(\d\d\d\d)(\d\d)(\d\d)((T?)((\d\d)(\d\d)(\d\d))(Z?))?/)
|
|
38
45
|
raise Exception.new("Invalid date") unless match
|
|
39
46
|
if match[5] == "T" # date-time
|
|
@@ -43,18 +50,26 @@ module RiCal
|
|
|
43
50
|
raise Exception.new("Invalid time, cannot combine Zulu with timezone reference") if parms[:tzid]
|
|
44
51
|
parms['TZID'] = "UTC"
|
|
45
52
|
end
|
|
46
|
-
PropertyValue::DateTime.new(
|
|
53
|
+
PropertyValue::DateTime.new(timezone_finder, separated_line.merge(:params => parms))
|
|
47
54
|
else
|
|
48
|
-
PropertyValue::Date.new(
|
|
55
|
+
PropertyValue::Date.new(timezone_finder, separated_line)
|
|
49
56
|
end
|
|
50
57
|
end
|
|
51
|
-
|
|
52
|
-
def self.
|
|
53
|
-
|
|
58
|
+
|
|
59
|
+
def self.date_or_date_time_or_period(timezone_finder, separated_line) #:nodoc:
|
|
60
|
+
if separated_line[:value].include?("/")
|
|
61
|
+
PropertyValue::Period.new(timezone_finder, separated_line)
|
|
62
|
+
else
|
|
63
|
+
date_or_date_time(timezone_finder, separated_line)
|
|
64
|
+
end
|
|
54
65
|
end
|
|
55
66
|
|
|
56
|
-
def self.
|
|
57
|
-
|
|
67
|
+
# def self.from_string(string) # :nodoc:
|
|
68
|
+
# new(nil, :value => string)
|
|
69
|
+
# end
|
|
70
|
+
|
|
71
|
+
def self.convert(timezone_finder, value) #:nodoc:
|
|
72
|
+
new(timezone_finder, :value => value)
|
|
58
73
|
end
|
|
59
74
|
|
|
60
75
|
# Determine if another object is equivalent to the receiver.
|
|
@@ -101,6 +116,22 @@ module RiCal
|
|
|
101
116
|
def to_ri_cal_property_value #:nodoc:
|
|
102
117
|
self
|
|
103
118
|
end
|
|
119
|
+
|
|
120
|
+
def find_timezone(timezone_identifier) #:nodoc:
|
|
121
|
+
if timezone_finder
|
|
122
|
+
timezone_finder.find_timezone(timezone_identifier)
|
|
123
|
+
else
|
|
124
|
+
raise "Unable to find timezone with tzid #{timezone_identifier}"
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def default_tzid #:nodoc:
|
|
129
|
+
if timezone_finder
|
|
130
|
+
timezone_finder.default_tzid
|
|
131
|
+
else
|
|
132
|
+
PropertyValue::DateTime.default_tzid
|
|
133
|
+
end
|
|
134
|
+
end
|
|
104
135
|
end
|
|
105
136
|
end
|
|
106
137
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
module RiCal
|
|
2
|
-
#- ©2009 Rick DeNatale
|
|
3
|
-
#- All rights reserved. Refer to the file README.txt for the license
|
|
2
|
+
#- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
|
|
4
3
|
#
|
|
5
4
|
# RequireTimezones collects the timezones used by a given calendar component or set of calendar components
|
|
6
5
|
# For each timezone we collect it's id, and the earliest and latest times which reference the zone
|
data/lib/ri_cal.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
#- ©2009 Rick DeNatale
|
|
2
|
-
#- All rights reserved. Refer to the file README.txt for the license
|
|
1
|
+
#- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
|
|
3
2
|
#
|
|
4
3
|
# The RiCal module provides the outermost namespace, along with several convenience methods for parsing
|
|
5
4
|
# and building calendars and calendar components.
|
data/ri_cal.gemspec
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = %q{ri_cal}
|
|
5
|
-
s.version = "0.0.
|
|
5
|
+
s.version = "0.0.3"
|
|
6
6
|
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
8
8
|
s.authors = ["author=Rick DeNatale"]
|
|
9
|
-
s.date = %q{2009-05-
|
|
9
|
+
s.date = %q{2009-05-14}
|
|
10
10
|
s.default_executable = %q{ri_cal}
|
|
11
11
|
s.description = %q{This is an UNOFFICIAL version. The public official version will be released on RubyForge. Github will be used
|
|
12
12
|
for interim versions. USE THIS VERSION AT YOUR OWN RISK.
|
|
@@ -16,11 +16,13 @@ A new Ruby implementation of RFC2445 iCalendar.
|
|
|
16
16
|
The existing Ruby iCalendar libraries (e.g. icalendar, vpim) provide for parsing and generating icalendar files,
|
|
17
17
|
but do not support important things like enumerating occurrences of repeating events.
|
|
18
18
|
|
|
19
|
-
This is a clean-slate implementation of RFC2445.
|
|
19
|
+
This is a clean-slate implementation of RFC2445.
|
|
20
|
+
|
|
21
|
+
A Google group for discussion of this library has been set up http://groups.google.com/group/rical_gem}
|
|
20
22
|
s.email = ["rick.denatale@gmail.com"]
|
|
21
23
|
s.executables = ["ri_cal"]
|
|
22
24
|
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt", "copyrights.txt", "docs/draft-ietf-calsify-2446bis-08.txt", "docs/draft-ietf-calsify-rfc2445bis-09.txt", "docs/incrementers.txt"]
|
|
23
|
-
s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/ri_cal", "component_attributes/alarm.yml", "component_attributes/calendar.yml", "component_attributes/component_property_defs.yml", "component_attributes/event.yml", "component_attributes/freebusy.yml", "component_attributes/journal.yml", "component_attributes/timezone.yml", "component_attributes/timezone_period.yml", "component_attributes/todo.yml", "copyrights.txt", "docs/draft-ietf-calsify-2446bis-08.txt", "docs/draft-ietf-calsify-rfc2445bis-09.txt", "docs/incrementers.txt", "docs/rfc2445.pdf", "lib/ri_cal.rb", "lib/ri_cal/component.rb", "lib/ri_cal/component/alarm.rb", "lib/ri_cal/component/calendar.rb", "lib/ri_cal/component/event.rb", "lib/ri_cal/component/freebusy.rb", "lib/ri_cal/component/journal.rb", "lib/ri_cal/component/t_z_info_timezone.rb", "lib/ri_cal/component/timezone.rb", "lib/ri_cal/component/timezone/daylight_period.rb", "lib/ri_cal/component/timezone/standard_period.rb", "lib/ri_cal/component/timezone/timezone_period.rb", "lib/ri_cal/component/todo.rb", "lib/ri_cal/core_extensions.rb", "lib/ri_cal/core_extensions/array.rb", "lib/ri_cal/core_extensions/array/conversions.rb", "lib/ri_cal/core_extensions/date.rb", "lib/ri_cal/core_extensions/date/conversions.rb", "lib/ri_cal/core_extensions/date_time.rb", "lib/ri_cal/core_extensions/
|
|
25
|
+
s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/ri_cal", "component_attributes/alarm.yml", "component_attributes/calendar.yml", "component_attributes/component_property_defs.yml", "component_attributes/event.yml", "component_attributes/freebusy.yml", "component_attributes/journal.yml", "component_attributes/timezone.yml", "component_attributes/timezone_period.yml", "component_attributes/todo.yml", "copyrights.txt", "docs/draft-ietf-calsify-2446bis-08.txt", "docs/draft-ietf-calsify-rfc2445bis-09.txt", "docs/incrementers.txt", "docs/rfc2445.pdf", "lib/ri_cal.rb", "lib/ri_cal/component.rb", "lib/ri_cal/component/alarm.rb", "lib/ri_cal/component/calendar.rb", "lib/ri_cal/component/event.rb", "lib/ri_cal/component/freebusy.rb", "lib/ri_cal/component/journal.rb", "lib/ri_cal/component/t_z_info_timezone.rb", "lib/ri_cal/component/timezone.rb", "lib/ri_cal/component/timezone/daylight_period.rb", "lib/ri_cal/component/timezone/standard_period.rb", "lib/ri_cal/component/timezone/timezone_period.rb", "lib/ri_cal/component/todo.rb", "lib/ri_cal/core_extensions.rb", "lib/ri_cal/core_extensions/array.rb", "lib/ri_cal/core_extensions/array/conversions.rb", "lib/ri_cal/core_extensions/date.rb", "lib/ri_cal/core_extensions/date/conversions.rb", "lib/ri_cal/core_extensions/date_time.rb", "lib/ri_cal/core_extensions/object.rb", "lib/ri_cal/core_extensions/object/conversions.rb", "lib/ri_cal/core_extensions/string.rb", "lib/ri_cal/core_extensions/string/conversions.rb", "lib/ri_cal/core_extensions/time.rb", "lib/ri_cal/core_extensions/time/calculations.rb", "lib/ri_cal/core_extensions/time/conversions.rb", "lib/ri_cal/core_extensions/time/tzid_access.rb", "lib/ri_cal/core_extensions/time/week_day_predicates.rb", "lib/ri_cal/floating_timezone.rb", "lib/ri_cal/invalid_property_value.rb", "lib/ri_cal/invalid_timezone_identifer.rb", "lib/ri_cal/occurrence_enumerator.rb", "lib/ri_cal/parser.rb", "lib/ri_cal/properties/alarm.rb", "lib/ri_cal/properties/calendar.rb", "lib/ri_cal/properties/event.rb", "lib/ri_cal/properties/freebusy.rb", "lib/ri_cal/properties/journal.rb", "lib/ri_cal/properties/timezone.rb", "lib/ri_cal/properties/timezone_period.rb", "lib/ri_cal/properties/todo.rb", "lib/ri_cal/property_value.rb", "lib/ri_cal/property_value/array.rb", "lib/ri_cal/property_value/cal_address.rb", "lib/ri_cal/property_value/date.rb", "lib/ri_cal/property_value/date_time.rb", "lib/ri_cal/property_value/date_time/additive_methods.rb", "lib/ri_cal/property_value/date_time/time_machine.rb", "lib/ri_cal/property_value/date_time/timezone_support.rb", "lib/ri_cal/property_value/duration.rb", "lib/ri_cal/property_value/geo.rb", "lib/ri_cal/property_value/integer.rb", "lib/ri_cal/property_value/occurrence_list.rb", "lib/ri_cal/property_value/period.rb", "lib/ri_cal/property_value/recurrence_rule.rb", "lib/ri_cal/property_value/recurrence_rule/enumeration_support_methods.rb", "lib/ri_cal/property_value/recurrence_rule/enumerator.rb", "lib/ri_cal/property_value/recurrence_rule/initialization_methods.rb", "lib/ri_cal/property_value/recurrence_rule/negative_setpos_enumerator.rb", "lib/ri_cal/property_value/recurrence_rule/numbered_span.rb", "lib/ri_cal/property_value/recurrence_rule/occurence_incrementer.rb", "lib/ri_cal/property_value/recurrence_rule/recurring_day.rb", "lib/ri_cal/property_value/recurrence_rule/recurring_month_day.rb", "lib/ri_cal/property_value/recurrence_rule/recurring_numbered_week.rb", "lib/ri_cal/property_value/recurrence_rule/recurring_year_day.rb", "lib/ri_cal/property_value/recurrence_rule/validations.rb", "lib/ri_cal/property_value/text.rb", "lib/ri_cal/property_value/uri.rb", "lib/ri_cal/property_value/utc_offset.rb", "lib/ri_cal/required_timezones.rb", "ri_cal.gemspec", "sample_ical_files/from_ical_dot_app/test1.ics", "script/console", "script/destroy", "script/generate", "script/txt2html", "spec/ri_cal/component/alarm_spec.rb", "spec/ri_cal/component/calendar_spec.rb", "spec/ri_cal/component/event_spec.rb", "spec/ri_cal/component/freebusy_spec.rb", "spec/ri_cal/component/journal_spec.rb", "spec/ri_cal/component/t_z_info_timezone_spec.rb", "spec/ri_cal/component/timezone_spec.rb", "spec/ri_cal/component/todo_spec.rb", "spec/ri_cal/component_spec.rb", "spec/ri_cal/core_extensions/string/conversions_spec.rb", "spec/ri_cal/core_extensions/time/calculations_spec.rb", "spec/ri_cal/core_extensions/time/week_day_predicates_spec.rb", "spec/ri_cal/occurrence_enumerator_spec.rb", "spec/ri_cal/parser_spec.rb", "spec/ri_cal/property_value/date_spec.rb", "spec/ri_cal/property_value/date_time_spec.rb", "spec/ri_cal/property_value/duration_spec.rb", "spec/ri_cal/property_value/occurrence_list_spec.rb", "spec/ri_cal/property_value/period_spec.rb", "spec/ri_cal/property_value/recurrence_rule/recurring_year_day_spec.rb", "spec/ri_cal/property_value/recurrence_rule_spec.rb", "spec/ri_cal/property_value/text_spec.rb", "spec/ri_cal/property_value/utc_offset_spec.rb", "spec/ri_cal/property_value_spec.rb", "spec/ri_cal/required_timezones_spec.rb", "spec/ri_cal_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/ri_cal.rake", "tasks/spec.rake"]
|
|
24
26
|
s.has_rdoc = true
|
|
25
27
|
s.homepage = %q{http://rical.rubyforge.org/}
|
|
26
28
|
s.rdoc_options = ["--main", "README.txt"]
|
|
@@ -1,11 +1,170 @@
|
|
|
1
|
-
#- ©2009 Rick DeNatale
|
|
2
|
-
#- All rights reserved
|
|
1
|
+
#- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
|
|
3
2
|
|
|
4
3
|
require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
|
|
5
4
|
|
|
6
5
|
describe RiCal::Component::Event do
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
context "rdate property methods" do
|
|
8
|
+
before(:each) do
|
|
9
|
+
@event = RiCal.Event do
|
|
10
|
+
rdate "20090101"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "#rdate=" do
|
|
15
|
+
|
|
16
|
+
it "should accept a single Date and replace the existing rdate" do
|
|
17
|
+
@event.rdate = Date.parse("20090102")
|
|
18
|
+
@event.rdate.should == [[Date.parse("20090102")]]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should accept a single rfc2445 date format string and replace the existing rdate" do
|
|
22
|
+
@event.rdate = "20090102"
|
|
23
|
+
@event.rdate.should == [[Date.parse("20090102")]]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should accept a single DateTime and replace the existing rdate" do
|
|
27
|
+
@event.rdate = DateTime.parse("20090102T012345")
|
|
28
|
+
@event.rdate.should == [[DateTime.parse("20090102T012345")]]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should accept a single Time and replace the existing rdate" do
|
|
32
|
+
@event.rdate = Time.local(2009, 1, 2, 1, 23, 45)
|
|
33
|
+
@event.rdate.should == [[DateTime.parse("20090102T012345")]]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should accept a single rfc2445 date-time format string and replace the existing rdate" do
|
|
37
|
+
@event.rdate = "20090102T012345"
|
|
38
|
+
@event.rdate.should == [[DateTime.parse("20090102T012345")]]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should accept a tzid prefixed rfc2445 date-time format string and replace the existing rdate" do
|
|
42
|
+
@event.rdate = "TZID=America/New_York:20090102T012345"
|
|
43
|
+
@event.rdate.should == [[DateTime.civil(2009, 1, 2, 1, 23, 45, Rational(-5, 24))]]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
context "comment property methods" do
|
|
51
|
+
before(:each) do
|
|
52
|
+
@event = RiCal.Event
|
|
53
|
+
@event.comment = "Comment"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context "#comment=" do
|
|
57
|
+
it "should result in a single comment for the event" do
|
|
58
|
+
@event.comment.should == ["Comment"]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should replace existing comments" do
|
|
62
|
+
@event.comment = "Replacement"
|
|
63
|
+
@event.comment.should == ["Replacement"]
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context "#comments=" do
|
|
68
|
+
it "should result in a multiple comments for the event replacing existing comments" do
|
|
69
|
+
@event.comments = "New1", "New2"
|
|
70
|
+
@event.comment.should == ["New1", "New2"]
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
context "#add_comment" do
|
|
75
|
+
it "should add a single comment" do
|
|
76
|
+
@event.add_comment "New1"
|
|
77
|
+
@event.comment.should == ["Comment", "New1"]
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
context "#add_comments" do
|
|
82
|
+
it "should add multiple comments" do
|
|
83
|
+
@event.add_comments "New1", "New2"
|
|
84
|
+
@event.comment.should == ["Comment", "New1", "New2"]
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
context "#remove_comment" do
|
|
89
|
+
it "should remove a single comment" do
|
|
90
|
+
@event.add_comment "New1"
|
|
91
|
+
@event.remove_comment "Comment"
|
|
92
|
+
@event.comment.should == ["New1"]
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
context "#remove_comments" do
|
|
97
|
+
it "should remove multiple comments" do
|
|
98
|
+
@event.add_comments "New1", "New2", "New3"
|
|
99
|
+
@event.remove_comments "New2", "Comment"
|
|
100
|
+
@event.comment.should == ["New1", "New3"]
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
context ".dtstart=" do
|
|
106
|
+
before(:each) do
|
|
107
|
+
@event = RiCal.Event
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
context "with a datetime only string" do
|
|
111
|
+
before(:each) do
|
|
112
|
+
@event.dtstart = "20090514T202400"
|
|
113
|
+
@it = @event.dtstart
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "should interpret it as the correct date-time" do
|
|
117
|
+
@it.should == DateTime.civil(2009, 5, 14, 20, 24, 00, Rational(0,24))
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "should interpret it as a floating date" do
|
|
121
|
+
@it.tzid.should == :floating
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
context "with a TZID and datetime string" do
|
|
126
|
+
before(:each) do
|
|
127
|
+
@event.dtstart = "TZID=America/New_York:20090514T202400"
|
|
128
|
+
@it = @event.dtstart
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "should interpret it as the correct date-time" do
|
|
132
|
+
@it.should == DateTime.civil(2009, 5, 14, 20, 24, 00, Rational(-5,24))
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "should set the tzid to America/New_York" do
|
|
136
|
+
@it.tzid.should == "America/New_York"
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
context "with a zulu datetime only string" do
|
|
141
|
+
before(:each) do
|
|
142
|
+
@event.dtstart = "20090514T202400Z"
|
|
143
|
+
@it = @event.dtstart
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it "should interpret it as the correct date-time" do
|
|
147
|
+
@it.should == DateTime.civil(2009, 5, 14, 20, 24, 00, Rational(0,24))
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it "should set the tzid to UTC" do
|
|
151
|
+
@it.tzid.should == "UTC"
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
context "with a date string" do
|
|
156
|
+
before(:each) do
|
|
157
|
+
@event.dtstart = "20090514"
|
|
158
|
+
@it = @event.dtstart
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it "should interpret it as the correct date-time" do
|
|
162
|
+
@it.should == Date.parse("14 May 2009")
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
context ".entity_name" do
|
|
9
168
|
it "should be VEVENT" do
|
|
10
169
|
RiCal::Component::Event.entity_name.should == "VEVENT"
|
|
11
170
|
end
|
|
@@ -63,7 +222,7 @@ describe RiCal::Component::Event do
|
|
|
63
222
|
end
|
|
64
223
|
|
|
65
224
|
it "should reset the duration property if the dtend property is set" do
|
|
66
|
-
@it.dtend_property = "
|
|
225
|
+
@it.dtend_property = "19970101T123456".to_ri_cal_date_time_value
|
|
67
226
|
@it.duration_property.should be_nil
|
|
68
227
|
end
|
|
69
228
|
|
|
@@ -83,12 +242,12 @@ describe RiCal::Component::Event do
|
|
|
83
242
|
end
|
|
84
243
|
|
|
85
244
|
it "should reset the dtend property if the duration property is set" do
|
|
86
|
-
@it.duration_property = "
|
|
245
|
+
@it.duration_property = "P1H".to_ri_cal_duration_value
|
|
87
246
|
@it.dtend_property.should be_nil
|
|
88
247
|
end
|
|
89
248
|
|
|
90
249
|
it "should reset the dtend property if the duration ruby value is set" do
|
|
91
|
-
@it.duration = "
|
|
250
|
+
@it.duration = "P1H".to_ri_cal_duration_value
|
|
92
251
|
@it.dtend_property.should be_nil
|
|
93
252
|
end
|
|
94
253
|
end
|
|
@@ -112,13 +271,9 @@ describe RiCal::Component::Event do
|
|
|
112
271
|
require 'tzinfo'
|
|
113
272
|
|
|
114
273
|
def date_time_with_tzinfo_zone(date_time, timezone="America/New_York")
|
|
115
|
-
|
|
116
|
-
result.stub!(:acts_like_time?).and_return(true)
|
|
117
|
-
time_zone = TZInfo::Timezone.get(timezone)
|
|
118
|
-
result.stub!(:time_zone).and_return(time_zone)
|
|
119
|
-
result
|
|
274
|
+
date_time.dup.set_tzid(timezone)
|
|
120
275
|
end
|
|
121
|
-
|
|
276
|
+
|
|
122
277
|
# Undo the effects of RFC2445 line folding
|
|
123
278
|
def unfold(string)
|
|
124
279
|
string.gsub("\n ", "")
|
|
@@ -135,7 +290,7 @@ describe RiCal::Component::Event do
|
|
|
135
290
|
end
|
|
136
291
|
|
|
137
292
|
it "should properly format dtstart with a UTC date-time" do
|
|
138
|
-
@it.dtstart = DateTime.parse("April 22, 2009 1:23:45")
|
|
293
|
+
@it.dtstart = DateTime.parse("April 22, 2009 1:23:45").set_tzid("UTC")
|
|
139
294
|
unfold(@it.export).should match(/^DTSTART;VALUE=DATE-TIME:20090422T012345Z$/)
|
|
140
295
|
end
|
|
141
296
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
#- ©2009 Rick DeNatale
|
|
2
|
-
#- All rights reserved
|
|
1
|
+
#- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
|
|
3
2
|
|
|
4
3
|
require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
|
|
5
4
|
|
|
@@ -29,7 +28,7 @@ describe RiCal::Component::Todo do
|
|
|
29
28
|
end
|
|
30
29
|
|
|
31
30
|
it "should reset the duration property if the due property is set" do
|
|
32
|
-
@it.due_property = "
|
|
31
|
+
@it.due_property = "19970101T012345".to_ri_cal_date_time_value
|
|
33
32
|
@it.duration_property.should be_nil
|
|
34
33
|
end
|
|
35
34
|
|
|
@@ -49,12 +48,12 @@ describe RiCal::Component::Todo do
|
|
|
49
48
|
end
|
|
50
49
|
|
|
51
50
|
it "should reset the due property if the duration property is set" do
|
|
52
|
-
@it.duration_property = "
|
|
51
|
+
@it.duration_property = "P1H".to_ri_cal_duration_value
|
|
53
52
|
@it.due_property.should be_nil
|
|
54
53
|
end
|
|
55
54
|
|
|
56
55
|
it "should reset the duration property if the dtend ruby value is set" do
|
|
57
|
-
@it.duration = "
|
|
56
|
+
@it.duration = "P1H"
|
|
58
57
|
@it.due_property.should == nil
|
|
59
58
|
end
|
|
60
59
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
#- ©2009 Rick DeNatale
|
|
2
|
-
#- All rights reserved
|
|
1
|
+
#- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
|
|
3
2
|
|
|
4
3
|
require File.join(File.dirname(__FILE__), %w[.. spec_helper])
|
|
4
|
+
require 'tzinfo'
|
|
5
5
|
|
|
6
6
|
describe RiCal::Component do
|
|
7
7
|
|
|
@@ -28,28 +28,40 @@ describe RiCal::Component do
|
|
|
28
28
|
context "building a calendar with time zones" do
|
|
29
29
|
it 'should allow specifying the time zone identifier' do
|
|
30
30
|
event = RiCal.Event do
|
|
31
|
-
dtstart
|
|
31
|
+
dtstart DateTime.parse("Feb 20, 1962 14:47:39").set_tzid('US/Pacific')
|
|
32
32
|
end
|
|
33
33
|
event.dtstart_property.should == dt_prop(DateTime.parse("Feb 20, 1962 14:47:39"), tzid = 'US/Pacific')
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
context "adding an exception date" do
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
38
|
+
before(:each) do
|
|
39
|
+
@cal = RiCal.Calendar do
|
|
40
|
+
event do
|
|
41
|
+
add_exdate 'US/Eastern', "19620220T144739"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
@event = @cal.events.first
|
|
45
|
+
@prop = @event.exdate_property.first
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should produce an OccurrenceList for the property" do
|
|
49
|
+
@prop.should be_instance_of(RiCal::PropertyValue::OccurrenceList)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should have a property with the right ical representation" do
|
|
53
|
+
@prop.to_s.should == ";TZID=US/Eastern:19620220T144739"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context "its ruby_value" do
|
|
57
|
+
it "should have the right value" do
|
|
58
|
+
@prop.ruby_value.should == [DateTime.civil(1962, 2, 20, 14, 47, 39, Rational(-5, 24))]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should have the right tzid" do
|
|
62
|
+
@prop.ruby_value.first.tzid.should == "US/Eastern"
|
|
63
|
+
end
|
|
64
|
+
end
|
|
53
65
|
end
|
|
54
66
|
end
|
|
55
67
|
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
|
|
2
|
+
|
|
3
|
+
require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
|
|
4
|
+
|
|
5
|
+
describe RiCal::CoreExtensions::String::Conversions do
|
|
6
|
+
context "#to_ri_cal_date_time_value" do
|
|
7
|
+
|
|
8
|
+
it "should produce a DateTime property for a valid RFC 2445 datetime string" do
|
|
9
|
+
"20090304T123456".to_ri_cal_date_time_value.should == RiCal::PropertyValue::DateTime.new(nil, :value => "20090304T123456")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should produce a DateTime property for a valid RFC 2445 datetime string with a TZID parameter" do
|
|
13
|
+
"TZID=America/New_York:20090304T123456".to_ri_cal_date_time_value.should == RiCal::PropertyValue::DateTime.new(nil, :params => {"TZID" => "America/New_York"}, :value => "20090304T123456")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should raise an InvalidPropertyValue error if the string is not a valid RFC 2445 datetime string" do
|
|
17
|
+
lambda {"20090304".to_ri_cal_date_time_value}.should raise_error(RiCal::InvalidPropertyValue)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context "#to_ri_cal_duration_value" do
|
|
22
|
+
|
|
23
|
+
it "should produce a Duration property for a valid RFC 2445 duration string" do
|
|
24
|
+
"P1H".to_ri_cal_duration_value.should == RiCal::PropertyValue::Duration.new(nil, :value => "P1H")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should raise an InvalidPropertyValue error if the string is not a valid RFC 2445 datetime string" do
|
|
28
|
+
lambda {"20090304".to_ri_cal_duration_value}.should raise_error(RiCal::InvalidPropertyValue)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "#to_ri_cal_date_or_date_time_value" do
|
|
33
|
+
|
|
34
|
+
it "should produce a DateTime property for a valid RFC 2445 datetime string" do
|
|
35
|
+
"20090304T123456".to_ri_cal_date_or_date_time_value.should == RiCal::PropertyValue::DateTime.new(nil, :value => "20090304T123456")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should produce a DateTime property for a valid RFC 2445 datetime string with a TZID parameter" do
|
|
39
|
+
"TZID=America/New_York:20090304T123456".to_ri_cal_date_or_date_time_value.should == RiCal::PropertyValue::DateTime.new(nil, :params => {"TZID" => "America/New_York"}, :value => "20090304T123456")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should produce a Date property for a valid RFC 2445 date string" do
|
|
43
|
+
"20090304".to_ri_cal_date_or_date_time_value.should == RiCal::PropertyValue::Date.new(nil, :value => "20090304")
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
it "should raise an InvalidPropertyValue error if the string is not a valid RFC 2445 date or datetime string" do
|
|
48
|
+
lambda {"2009/03/04".to_ri_cal_date_or_date_time_value}.should raise_error(RiCal::InvalidPropertyValue)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context "#to_ri_cal_occurrence_list_value" do
|
|
53
|
+
|
|
54
|
+
it "should produce a DateTime property for a valid RFC 2445 datetime string" do
|
|
55
|
+
"20090304T123456".to_ri_cal_occurrence_list_value.should == RiCal::PropertyValue::DateTime.new(nil, :value => "20090304T123456")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should produce a DateTime property for a valid RFC 2445 datetime string with a TZID parameter" do
|
|
59
|
+
"TZID=America/New_York:20090304T123456".to_ri_cal_occurrence_list_value.should == RiCal::PropertyValue::DateTime.new(nil, :params => {"TZID" => "America/New_York"}, :value => "20090304T123456")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "should produce a Date property for a valid RFC 2445 date string" do
|
|
63
|
+
"20090304".to_ri_cal_occurrence_list_value.should == RiCal::PropertyValue::Date.new(nil, :value => "20090304")
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should produce a Period property for a valid RFC 2445 period string (two time format)" do
|
|
67
|
+
"20090304T012345/20090304T023456".to_ri_cal_occurrence_list_value.should == RiCal::PropertyValue::Period.new(nil, :value => "20090304T012345/20090304T023456")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "should produce a Period property for a valid RFC 2445 period string (time and duration format)" do
|
|
71
|
+
"20090304T012345/P1H".to_ri_cal_occurrence_list_value.should == RiCal::PropertyValue::Period.new(nil, :value => "20090304T012345/P1H")
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "should raise an InvalidPropertyValue error if the string is not a valid RFC 2445 date or datetime string" do
|
|
75
|
+
lambda {"foobar".to_ri_cal_date_or_date_time_value}.should raise_error(RiCal::InvalidPropertyValue)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|