ri_cal 0.5.1 → 0.5.2
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 +3 -0
- data/lib/ri_cal.rb +1 -1
- data/lib/ri_cal/component/calendar.rb +24 -5
- data/ri_cal.gemspec +2 -2
- data/spec/ri_cal/component/calendar_spec.rb +33 -0
- data/spec/ri_cal/component/event_spec.rb +7 -0
- metadata +2 -2
data/History.txt
CHANGED
data/lib/ri_cal.rb
CHANGED
@@ -11,7 +11,7 @@ module RiCal
|
|
11
11
|
autoload :OccurrenceEnumerator, "#{my_dir}/ri_cal/occurrence_enumerator.rb"
|
12
12
|
|
13
13
|
# :stopdoc:
|
14
|
-
VERSION = '0.5.
|
14
|
+
VERSION = '0.5.2'
|
15
15
|
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
|
16
16
|
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
|
17
17
|
|
@@ -172,13 +172,32 @@ module RiCal
|
|
172
172
|
def string #:nodoc:
|
173
173
|
stream.string
|
174
174
|
end
|
175
|
+
|
176
|
+
def valid_utf8?(string)
|
177
|
+
string.unpack("U") rescue nil
|
178
|
+
end
|
179
|
+
|
180
|
+
def utf8_safe_split(string, n)
|
181
|
+
if string.length <= n
|
182
|
+
[string, nil]
|
183
|
+
else
|
184
|
+
before = string[0, n]
|
185
|
+
after = string[n..-1]
|
186
|
+
until valid_utf8?(after)
|
187
|
+
n = n - 1
|
188
|
+
before = string[0, n]
|
189
|
+
after = string[n..-1]
|
190
|
+
end
|
191
|
+
[before, after.empty? ? nil : after]
|
192
|
+
end
|
193
|
+
end
|
175
194
|
|
176
195
|
def fold(string) #:nodoc:
|
177
|
-
|
178
|
-
|
179
|
-
while
|
180
|
-
|
181
|
-
|
196
|
+
line, remainder = *utf8_safe_split(string, 73)
|
197
|
+
stream.puts(line)
|
198
|
+
while remainder
|
199
|
+
line, remainder = *utf8_safe_split(remainder, 72)
|
200
|
+
stream.puts(" #{line}")
|
182
201
|
end
|
183
202
|
end
|
184
203
|
|
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.5.
|
5
|
+
s.version = "0.5.2"
|
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-28}
|
10
10
|
s.default_executable = %q{ri_cal}
|
11
11
|
s.description = %q{A new Ruby implementation of RFC2445 iCalendar.
|
12
12
|
|
@@ -51,4 +51,37 @@ describe RiCal::Component::Calendar do
|
|
51
51
|
@it.export.should_not match(%r{X-RICAL-TZSOURCE=TZINFO:})
|
52
52
|
end
|
53
53
|
end
|
54
|
+
|
55
|
+
describe RiCal::Component::Calendar::FoldingStream do
|
56
|
+
before(:each) do
|
57
|
+
@it = RiCal::Component::Calendar::FoldingStream.new(nil)
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "#utf_safe_split" do
|
61
|
+
it "should properly split an ascii string" do
|
62
|
+
@it.utf8_safe_split("abcdef", 3).should == ["abc", "def"]
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should return a nil remainder if the string has less than n characters" do
|
66
|
+
@it.utf8_safe_split("a",2).should == ["a", nil]
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should return a nil remainder if the string has exactly n characters" do
|
70
|
+
@it.utf8_safe_split("ab",2).should == ["ab", nil]
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should not split a 2-byte utf character" do
|
74
|
+
@it.utf8_safe_split("Café", 3).should == ["Caf", "é"]
|
75
|
+
@it.utf8_safe_split("Café", 4).should == ["Caf", "é"]
|
76
|
+
@it.utf8_safe_split("Café", 5).should == ["Café", nil]
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should not split a 3-byte utf character" do
|
80
|
+
@it.utf8_safe_split("Prix €200", 5).should == ["Prix ", "€200"]
|
81
|
+
@it.utf8_safe_split("Prix €200", 6).should == ["Prix ", "€200"]
|
82
|
+
@it.utf8_safe_split("Prix €200", 7).should == ["Prix ", "€200"]
|
83
|
+
@it.utf8_safe_split("Prix €200", 8).should == ["Prix €", "200"]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
54
87
|
end
|
@@ -460,6 +460,13 @@ describe RiCal::Component::Event do
|
|
460
460
|
export_string.should match(%r(^ following Michael's suggestion\\, let's meet at the food court at Crossr$))
|
461
461
|
export_string.should match(%r(^ oads:\\nhttp://www\.shopcrossroadsplaza.c\.\.\.\\n$))
|
462
462
|
end
|
463
|
+
|
464
|
+
it "should properly fold on export when the description contains multi-byte UTF-8 Characters" do
|
465
|
+
@it.description = "Juin 2009 <<Alliance Francaise Reunion>> lieu Café périferôl"
|
466
|
+
export_string = @it.export
|
467
|
+
export_string.should match(%r(^DESCRIPTION:Juin 2009 <<Alliance Francaise Reunion>> lieu Café périfer$))
|
468
|
+
export_string.should match(%r(^ ôl$))
|
469
|
+
end
|
463
470
|
end
|
464
471
|
|
465
472
|
if RiCal::TimeWithZone
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ri_cal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- author=Rick DeNatale
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-05-
|
12
|
+
date: 2009-05-28 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|