calfilter 1.0.0 → 1.1.0
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 +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
|