calfilter 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +8 -0
- data/README.txt +1 -1
- data/example.rb +4 -1
- data/lib/calfilter.rb +21 -11
- data/test/test_calfilter.rb +26 -9
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
data/History.txt
CHANGED
data/README.txt
CHANGED
data/example.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
# Would be accessed like this:
|
4
|
+
# http://example.com/cgi_bin/example.rb?http://example.com/unfiltered_calendar.ics
|
5
|
+
|
3
6
|
require 'rubygems'
|
4
7
|
gem 'calfilter'
|
5
8
|
require 'calfilter'
|
6
9
|
require 'calfilter/cgi'
|
7
10
|
|
8
|
-
|
11
|
+
filter_calendars(CalFilter::CGI.query_string}) do |cal|
|
9
12
|
cal.keep(:events) # drop todos, journals, etc.
|
10
13
|
|
11
14
|
cal.filter_events do |evt|
|
data/lib/calfilter.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
%w{rubygems icalendar date open-uri}.each{|l| require l}
|
2
2
|
|
3
3
|
module CalFilter
|
4
|
-
VERSION = '1.
|
4
|
+
VERSION = '1.1.0'
|
5
5
|
|
6
6
|
def self.output_stream
|
7
7
|
@output_stream
|
@@ -140,15 +140,8 @@ module CalFilter
|
|
140
140
|
|
141
141
|
end
|
142
142
|
|
143
|
-
def
|
144
|
-
|
145
|
-
end
|
146
|
-
|
147
|
-
def filter_calendars(ics_data, &block)
|
148
|
-
filter_icalendars(Icalendar.parse(ics_data), &block)
|
149
|
-
end
|
150
|
-
|
151
|
-
def filter_icalendars(cals)
|
143
|
+
def filter_calendars(*sources, &block)
|
144
|
+
cals = convert_to_icalendars(sources)
|
152
145
|
return cals unless block_given?
|
153
146
|
actions = cals.map do |cal|
|
154
147
|
wrapper = CalFilter.wrap_calendar(cal)
|
@@ -163,4 +156,21 @@ def filter_icalendars(cals)
|
|
163
156
|
new_cals.each{|cal| os.puts cal.to_ical}
|
164
157
|
end
|
165
158
|
new_cals
|
166
|
-
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def convert_to_icalendars(sources)
|
162
|
+
sources.map{|source| convert_to_icalendar(source)}.flatten
|
163
|
+
end
|
164
|
+
|
165
|
+
def convert_to_icalendar(source)
|
166
|
+
case source
|
167
|
+
when Icalendar::Calendar
|
168
|
+
[source]
|
169
|
+
when Array
|
170
|
+
source
|
171
|
+
when /^\s*BEGIN:VCALENDAR/m
|
172
|
+
Icalendar.parse(source)
|
173
|
+
else
|
174
|
+
Icalendar.parse(open(source, 'r'))
|
175
|
+
end
|
176
|
+
end
|
data/test/test_calfilter.rb
CHANGED
@@ -5,24 +5,41 @@ require 'mocha'
|
|
5
5
|
require 'calfilter'
|
6
6
|
|
7
7
|
describe "filtering calendars" do
|
8
|
+
it "should fetch urls and parse them" do
|
9
|
+
url = 'http://example.com/'
|
10
|
+
ics = 'ics data'
|
11
|
+
self.expects(:open).with('http://example.com/', 'r').returns(ics)
|
12
|
+
Icalendar.expects(:parse).with(ics).returns([])
|
13
|
+
filter_calendars("http://example.com/")
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should parse ics data" do
|
17
|
+
ics = %{
|
18
|
+
|
19
|
+
BEGIN:VCALENDAR
|
20
|
+
}
|
21
|
+
Icalendar.expects(:parse).with(ics).returns([])
|
22
|
+
filter_calendars(ics)
|
23
|
+
end
|
24
|
+
|
8
25
|
it "should pass things straight through" do
|
9
26
|
expected_cals = [1, 2, 3]
|
10
|
-
actual_cals =
|
27
|
+
actual_cals = filter_calendars(expected_cals.dup)
|
11
28
|
assert_equal expected_cals.size, actual_cals.size
|
12
29
|
end
|
13
30
|
|
14
31
|
it "should delete a calendar when told" do
|
15
|
-
cals =
|
32
|
+
cals = filter_calendars([1, 2, 3]){|cal| cal.remove if cal.__delegate__ == 2}
|
16
33
|
assert_equal [1, 3], cals
|
17
34
|
end
|
18
35
|
|
19
36
|
it "should keep a calendar when told" do
|
20
|
-
cals =
|
37
|
+
cals = filter_calendars([1, 2, 3]){|cal| cal.keep if cal.__delegate__ == 2}
|
21
38
|
assert_equal [2], cals
|
22
39
|
end
|
23
40
|
|
24
41
|
it "should delete parts of a calendar when told" do
|
25
|
-
cals =
|
42
|
+
cals = filter_calendars(%w{1 2 3}) do |cal|
|
26
43
|
events = mock(:clear => nil)
|
27
44
|
cal.__delegate__.stubs(:events).returns(events)
|
28
45
|
cal.remove(:events)
|
@@ -30,7 +47,7 @@ describe "filtering calendars" do
|
|
30
47
|
end
|
31
48
|
|
32
49
|
it "should keep parts of a calendar when told" do
|
33
|
-
cals =
|
50
|
+
cals = filter_calendars(%w{1 2 3}) do |cal|
|
34
51
|
events = mock(:clear => nil)
|
35
52
|
cal.__delegate__.stubs(:events).returns(events)
|
36
53
|
cal.keep(:freebusys, :journals, :todos)
|
@@ -39,13 +56,13 @@ describe "filtering calendars" do
|
|
39
56
|
|
40
57
|
it "should complain if we both keep and remove a calendar" do
|
41
58
|
assert_raise(CalFilter::FilterError) do
|
42
|
-
cals =
|
59
|
+
cals = filter_calendars([1]){|cal| cal.keep; cal.remove}
|
43
60
|
end
|
44
61
|
end
|
45
62
|
|
46
63
|
it "should complain if we keep one calendar and remove another" do
|
47
64
|
assert_raises(CalFilter::FilterError) do
|
48
|
-
cals =
|
65
|
+
cals = filter_calendars([1, 2, 3]) do |cal|
|
49
66
|
case cal.__delegate__
|
50
67
|
when 1: cal.keep;
|
51
68
|
when 2: cal.remove;
|
@@ -56,7 +73,7 @@ describe "filtering calendars" do
|
|
56
73
|
|
57
74
|
it "should delegate unknown methods to the Calendar objects" do
|
58
75
|
results = []
|
59
|
-
cals =
|
76
|
+
cals = filter_calendars([0, 1]){|cal| results << cal.zero?}
|
60
77
|
assert_equal [true, false], results
|
61
78
|
end
|
62
79
|
|
@@ -82,7 +99,7 @@ describe "filtering resources" do
|
|
82
99
|
end
|
83
100
|
|
84
101
|
xit "should leave resources alone if no block specified" do
|
85
|
-
|
102
|
+
filter_calendars([@cal]) do |cal|
|
86
103
|
cal.__delegate__.expects(:events).returns(@cal.events)
|
87
104
|
cal.filter_events
|
88
105
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calfilter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Glenn Vanderburg
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
zrNa6ECLh1VS/pV78rYbAO1ZXsg3l7bY
|
31
31
|
-----END CERTIFICATE-----
|
32
32
|
|
33
|
-
date: 2008-05-
|
33
|
+
date: 2008-05-03 00:00:00 -05:00
|
34
34
|
default_executable:
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
metadata.gz.sig
CHANGED
Binary file
|