calfilter 1.1.3 → 1.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/README.txt +10 -4
- data/Rakefile +3 -0
- data/ToDo.txt +3 -2
- data/lib/calfilter/cgi.rb +11 -2
- data/lib/calfilter/datetime_extensions.rb +1 -1
- data/lib/calfilter/icalendar_extensions.rb +17 -15
- data/lib/calfilter/time_extensions.rb +1 -1
- data/lib/calfilter/tripit.rb +38 -5
- data/lib/calfilter.rb +161 -23
- data.tar.gz.sig +0 -0
- metadata +15 -4
- metadata.gz.sig +0 -0
data/History.txt
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
=== 1.1.4 / 2008-05-05
|
2
|
+
|
3
|
+
* Documentation!
|
4
|
+
|
1
5
|
=== 1.1.3 / 2008-05-04
|
2
6
|
|
3
7
|
* Bug fixes:
|
@@ -5,6 +9,8 @@
|
|
5
9
|
* Monkey-patched Icalendar to deal with Dates (as opposed to
|
6
10
|
DateTimes) correctly.
|
7
11
|
|
12
|
+
* Monkey-patched Icalendar to preserve UTC on times.
|
13
|
+
|
8
14
|
=== 1.1.2 / 2008-05-04
|
9
15
|
|
10
16
|
* Bug fix in calfilter.rb
|
data/README.txt
CHANGED
@@ -12,13 +12,15 @@ various purposes, including:
|
|
12
12
|
* removing private information from your own calendar before publishing it to others
|
13
13
|
* reformatting a provided calendar to highlight particular information
|
14
14
|
|
15
|
-
|
15
|
+
A calfilter script does most of its work using the filter_calendars[link:files/lib/calfilter_rb.html] method.
|
16
16
|
|
17
|
-
|
17
|
+
== FEATURES:
|
18
|
+
|
19
|
+
* require '{calfilter/tripit}[link:files/lib/calfilter/tripit_rb.html]' to add some methods specific to
|
18
20
|
tripit.com calendar feeds.
|
19
21
|
|
20
|
-
* require 'calfilter/cgi' to automatically turn your filter into
|
21
|
-
a CGI script. The CGI object is available as
|
22
|
+
* require '{calfilter/cgi}[link:files/lib/calfilter/cgi_rb.html]' to automatically turn your filter into
|
23
|
+
a CGI script. The CGI object is available as <tt>CalFilter::CGI</tt>.
|
22
24
|
|
23
25
|
== SYNOPSIS:
|
24
26
|
|
@@ -43,6 +45,10 @@ calfilter depends on the icalendar gem.
|
|
43
45
|
|
44
46
|
sudo gem install calfilter
|
45
47
|
|
48
|
+
== AUTHOR
|
49
|
+
|
50
|
+
Glenn Vanderburg <glenn@thinkrelevance.com>
|
51
|
+
|
46
52
|
== LICENSE:
|
47
53
|
|
48
54
|
(The MIT License)
|
data/Rakefile
CHANGED
@@ -12,6 +12,9 @@ class Hoe
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
# Class structure isn't complex enough to make diagrams worthwhile.
|
16
|
+
ENV['NODOT'] = "true"
|
17
|
+
|
15
18
|
Hoe.new('calfilter', CalFilter::VERSION) do |p|
|
16
19
|
p.rubyforge_name = 'thinkrelevance'
|
17
20
|
p.developer('Glenn Vanderburg', 'glenn@thinkrelevance.com')
|
data/ToDo.txt
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
* Greatly improve (i.e., existing) RDocs
|
2
|
-
|
3
1
|
* Ensure timezone information is retained
|
4
2
|
|
5
3
|
* Improved set of TripIt methods
|
@@ -15,3 +13,6 @@
|
|
15
13
|
|
16
14
|
* Similar to the cgi module, it should be easy to require modules
|
17
15
|
to turn a filter into a camping app, a webrick service, etc.
|
16
|
+
|
17
|
+
* Perhaps have real methods for filter_{events,freebusys,journals,todos}
|
18
|
+
to improve the rdocs.
|
data/lib/calfilter/cgi.rb
CHANGED
@@ -1,10 +1,19 @@
|
|
1
|
+
# Turns a calfilter script into a CGI script.
|
2
|
+
#
|
3
|
+
# Simply require this file at the top of a calfilter script
|
4
|
+
# to turn it into a CGI script. The CGI object will be accessible
|
5
|
+
# as <tt>CalFilter::CGI</tt>.
|
6
|
+
#
|
7
|
+
# (This file makes use of CalFilter.output_stream, so please don't
|
8
|
+
# set that yourself if using calfilter/cgi.)
|
9
|
+
|
1
10
|
require 'calfilter'
|
2
11
|
require 'cgi'
|
3
12
|
require 'stringio'
|
4
13
|
|
5
14
|
module CalFilter
|
6
15
|
|
7
|
-
class CGIWrapper
|
16
|
+
class CGIWrapper # :nodoc: all
|
8
17
|
attr_reader :output_stream
|
9
18
|
|
10
19
|
def initialize(output_stream)
|
@@ -25,7 +34,7 @@ module CalFilter
|
|
25
34
|
end
|
26
35
|
end
|
27
36
|
|
28
|
-
def self.make_cgi_wrapper
|
37
|
+
def self.make_cgi_wrapper # :nodoc:
|
29
38
|
CGIWrapper.new(StringIO.new)
|
30
39
|
end
|
31
40
|
|
@@ -1,18 +1,20 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
1
|
+
module Icalendar # :nodoc: all
|
2
|
+
class Parser
|
3
|
+
def parse_datetime_with_date_check(name, params, value)
|
4
|
+
if /\d{8}T/ =~ value
|
5
|
+
dt = parse_datetime_without_date_check(name, params, value)
|
6
|
+
dt.utc = true if /Z/ =~ value
|
7
|
+
dt
|
8
|
+
else
|
9
|
+
begin
|
10
|
+
Date.parse(value)
|
11
|
+
rescue Exception
|
12
|
+
value
|
13
|
+
end
|
12
14
|
end
|
13
15
|
end
|
14
|
-
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
end
|
17
|
+
alias :parse_datetime_without_date_check :parse_datetime
|
18
|
+
alias :parse_datetime :parse_datetime_with_date_check
|
19
|
+
end
|
20
|
+
end
|
data/lib/calfilter/tripit.rb
CHANGED
@@ -1,23 +1,56 @@
|
|
1
|
+
# Mixes methods into CalFilter::ResourceWrapper that help when
|
2
|
+
# dealing with calendars from TripIt[http://tripit.com/]. Just
|
3
|
+
# require this file at the top of a calfilter script to gain the
|
4
|
+
# extra functionality.
|
5
|
+
|
1
6
|
require 'calfilter'
|
2
7
|
|
3
8
|
module CalFilter
|
4
9
|
module TripIt
|
10
|
+
# The keys are the $1 strings from description =~ /^\[(.*?)\]/m
|
5
11
|
EVENT_TYPES = {
|
6
|
-
# The keys are the $1 strings from description =~ /^\[(.*?)\]/m
|
7
12
|
nil => :trip,
|
8
|
-
'
|
13
|
+
'Activity' => :activity,
|
14
|
+
'Article' => :article,
|
9
15
|
'Car Rental' => :car,
|
10
|
-
'
|
16
|
+
'Cruise' => :cruise,
|
11
17
|
'Directions' => :directions,
|
12
|
-
'
|
18
|
+
'Flight' => :flight,
|
19
|
+
'Hotel' => :hotel,
|
20
|
+
'Map' => :map,
|
21
|
+
'Meeting' => :meeting,
|
22
|
+
'Note' => :note,
|
23
|
+
'Rail' => :rail,
|
24
|
+
'Restaurant' => :restaurant
|
13
25
|
}
|
14
26
|
|
27
|
+
# :call-seq:
|
28
|
+
# tripit_type => tripit_type_symbol
|
29
|
+
# tripit_type(tripit_type_symbol, ...) => true or false
|
30
|
+
#
|
31
|
+
# Investigates the type of an event, based on <tt>[<em>Type</em>]</tt> strings in the descriptions used by Trip<b></b>It.
|
32
|
+
#
|
33
|
+
# TripIt[http://tripit.com/] uses <tt>[<em>Event Type</em>]</tt> strings in its
|
34
|
+
# event descriptions to signal what kind of event it is. The known types are the
|
35
|
+
# keys used in EVENT_TYPES.
|
36
|
+
#
|
37
|
+
# This method facilitates querying an event to learn its Trip<b></b>It event type.
|
38
|
+
#
|
39
|
+
# When called with no arguments, the method will return an event type
|
40
|
+
# symbol (one of the values from EVENT_TYPES) to indicate the type of
|
41
|
+
# event, or :unknown if an unknown type is encountered (or if the target is
|
42
|
+
# some other kind of Icalendar resource, such as a todo).
|
43
|
+
#
|
44
|
+
# When called with argumetns, those arguments must be event type symbols,
|
45
|
+
# and the method will return true if the event is one of those types, and
|
46
|
+
# false otherwise (or if the target is not an event).
|
15
47
|
def tripit_type(*args)
|
16
|
-
return :unknown unless __kind__ == 'event'
|
17
48
|
if args.empty?
|
49
|
+
return :unknown unless __kind__ == 'event'
|
18
50
|
description =~ /^\[(.+?)\]/m
|
19
51
|
TripIt::EVENT_TYPES[$1] || :unknown
|
20
52
|
else
|
53
|
+
return false unless __kind__ == 'event'
|
21
54
|
args.include?(tripit_type)
|
22
55
|
end
|
23
56
|
end
|
data/lib/calfilter.rb
CHANGED
@@ -4,12 +4,17 @@ $:.unshift(File.dirname(__FILE__))
|
|
4
4
|
%w{datetime icalendar time}.each{|l| require "calfilter/#{l}_extensions"}
|
5
5
|
|
6
6
|
module CalFilter
|
7
|
-
VERSION = '1.1.
|
7
|
+
VERSION = '1.1.4'
|
8
8
|
|
9
|
+
# The output stream for filtered icalendar output.
|
10
|
+
# If this is not nil, filter_calendars will automatically
|
11
|
+
# write the filtered calendars to this stream in
|
12
|
+
# icalendar format.
|
9
13
|
def self.output_stream
|
10
14
|
@output_stream
|
11
15
|
end
|
12
16
|
|
17
|
+
# Sets output_stream.
|
13
18
|
def self.output_stream=(stream)
|
14
19
|
@output_stream = stream
|
15
20
|
end
|
@@ -17,46 +22,77 @@ module CalFilter
|
|
17
22
|
class FilterError < RuntimeError
|
18
23
|
end
|
19
24
|
|
25
|
+
# A filtering wrapper for an
|
26
|
+
# Icalendar[http://icalendar.rubyforge.org/]
|
27
|
+
# resource object. The wrapped object will be one of:
|
28
|
+
#
|
29
|
+
# * {Icalendar::Event}[http://icalendar.rubyforge.org/classes/Icalendar/Event.html]
|
30
|
+
# * {Icalendar::Freebusy}[http://icalendar.rubyforge.org/classes/Icalendar/Freebusy.html]
|
31
|
+
# * {Icalendar::Journal}[http://icalendar.rubyforge.org/classes/Icalendar/Journal.html]
|
32
|
+
# * {Icalendar::Todo}[http://icalendar.rubyforge.org/classes/Icalendar/Todo.html]
|
33
|
+
#
|
34
|
+
# All unrecognized methods are delegated to the underlying
|
35
|
+
# resource object, so methods such as #description and #summary
|
36
|
+
# work as expected. (The resource object can be accessed directly
|
37
|
+
# using the #\__delegate__ method.)
|
38
|
+
#
|
39
|
+
# In addition to delegating to the resource, ResourceWrapper objects
|
40
|
+
# provide a few additional methods:
|
41
|
+
#
|
42
|
+
# * #\_\_delegate__
|
43
|
+
# * #keep
|
44
|
+
# * #remove
|
20
45
|
class ResourceWrapper
|
21
|
-
def initialize(delegate, kind)
|
46
|
+
def initialize(delegate, kind) # :nodoc:
|
22
47
|
@delegate = delegate
|
23
48
|
@kind = kind
|
24
49
|
end
|
25
50
|
|
51
|
+
# Provides access to the underlying resource being wrapped.
|
26
52
|
def __delegate__
|
27
53
|
@delegate
|
28
54
|
end
|
29
55
|
|
30
|
-
def __action__
|
56
|
+
def __action__ # :nodoc:
|
31
57
|
@keep_or_remove || :default
|
32
58
|
end
|
33
59
|
|
34
|
-
def __kind__
|
60
|
+
def __kind__ # :nodoc:
|
35
61
|
@kind
|
36
62
|
end
|
37
63
|
|
64
|
+
# Marks this resource for removal from the calendar.
|
65
|
+
# For a particular kind of resource (e.g., events, todos,
|
66
|
+
# journals) in a given calendar, you can call either #remove
|
67
|
+
# or #keep on some of the resources, but not both.
|
38
68
|
def remove
|
39
69
|
__flag__ :remove
|
40
70
|
end
|
41
71
|
|
72
|
+
# Marks this resource to be kept in the calendar.
|
73
|
+
# If this is called on some resources, all others in the
|
74
|
+
# collection will be removed.
|
75
|
+
# For a particular kind of resource (e.g., events, todos,
|
76
|
+
# journals) in a given calendar, you can call either #remove
|
77
|
+
# or #keep on some of the resources, but not both.
|
42
78
|
def keep
|
43
79
|
__flag__ :keep
|
44
80
|
end
|
45
81
|
|
46
|
-
def method_missing(symbol, *args, &block)
|
82
|
+
def method_missing(symbol, *args, &block) # :nodoc:
|
47
83
|
__delegate__.send(symbol, *args, &block)
|
48
84
|
end
|
49
85
|
|
50
86
|
protected
|
51
87
|
|
52
|
-
def __flag__(sym)
|
88
|
+
def __flag__(sym) # :nodoc:
|
53
89
|
other_sym = (sym == :keep ? :remove : :keep)
|
54
90
|
raise FilterError, "Cannot both keep and remove the same #{@kind}", __caller__ if @keep_or_remove == other_sym
|
55
91
|
@keep_or_remove = sym
|
56
92
|
throw :bailout if sym == :remove
|
57
93
|
end
|
58
94
|
|
59
|
-
def __caller__
|
95
|
+
def __caller__ # :nodoc:
|
60
96
|
f = __FILE__
|
61
97
|
stack = caller
|
62
98
|
stack.each_with_index do |s, i|
|
@@ -66,13 +102,62 @@ module CalFilter
|
|
66
102
|
|
67
103
|
end
|
68
104
|
|
105
|
+
# A filtering wrapper for an
|
106
|
+
# {Icalendar::Calendar}[http://icalendar.rubyforge.org/classes/Icalendar/Calendar.html]
|
107
|
+
# object.
|
108
|
+
#
|
109
|
+
# All unrecognized methods are delegated to the underlying
|
110
|
+
# Calendar object, so methods such as #events and find_event
|
111
|
+
# work as expected. (The Calendar object can be accessed directly
|
112
|
+
# using the #\_\_delegate__ method.)
|
113
|
+
#
|
114
|
+
# In addition to delegating to the Calendar, CalendarWrapper objects
|
115
|
+
# provide a few additional methods:
|
116
|
+
#
|
117
|
+
# * #\_\_delegate__
|
118
|
+
# * #keep
|
119
|
+
# * #remove
|
120
|
+
# * #filter_events
|
121
|
+
# * #filter_freebusys
|
122
|
+
# * #filter_journals
|
123
|
+
# * #filter_todos
|
124
|
+
#
|
125
|
+
# === Filtering Resource Collections
|
126
|
+
#
|
127
|
+
# If you want to remove one or more of a calendar's resource collections
|
128
|
+
# in their entirety, use #remove (or #keep).
|
129
|
+
# But you can also filter the collections themselves:
|
130
|
+
#
|
131
|
+
# * <b>filter_events</b> <em>{|event| ... }</em>
|
132
|
+
# * <b>filter_freebusys</b> <em>{|freebusy| ... }</em>
|
133
|
+
# * <b>filter_journals</b> <em>{|journal| ... }</em>
|
134
|
+
# * <b>filter_todos</b> <em>{|todo| ... }</em>
|
135
|
+
#
|
136
|
+
# Each of these methods iterates over all of the elements of
|
137
|
+
# the named resource collection, allowing the individual resources
|
138
|
+
# to be modified or removed. See ResourceWrapper for the methods
|
139
|
+
# available for working with individual resource instances.
|
69
140
|
class CalendarWrapper < ResourceWrapper
|
70
141
|
RESOURCE_TYPES = %w{events freebusys journals todos}
|
71
142
|
|
72
|
-
def initialize(calendar)
|
143
|
+
def initialize(calendar) # :nodoc:
|
73
144
|
super(calendar, 'calendar')
|
74
145
|
end
|
75
146
|
|
147
|
+
# :call-seq:
|
148
|
+
# remove
|
149
|
+
# remove(collection_symbol, [collection_symbol, ...])
|
150
|
+
#
|
151
|
+
# Marks this calendar (or collection of resources in the calendar) for removal.
|
152
|
+
#
|
153
|
+
# If called with no arguments, removes the entire calendar.
|
154
|
+
#
|
155
|
+
# Any arguments must be one of <tt>:events</tt>, <tt>:freebusys</tt>,
|
156
|
+
# <tt>:journals</tt>, or <tt>:todos</tt>, and
|
157
|
+
# the named resource collections will be removed from this calendar.
|
158
|
+
#
|
159
|
+
# For a given calendar or resource collection, you can call either #remove
|
160
|
+
# or #keep, but not both.
|
76
161
|
def remove(*args)
|
77
162
|
if args.empty?
|
78
163
|
super
|
@@ -81,6 +166,22 @@ module CalFilter
|
|
81
166
|
end
|
82
167
|
end
|
83
168
|
|
169
|
+
# :call-seq:
|
170
|
+
# keep
|
171
|
+
# keep(collection_symbol, [collection_symbol, ...])
|
172
|
+
#
|
173
|
+
# Marks this calendar (or collection of resources in the calendar) to be kept.
|
174
|
+
#
|
175
|
+
# If called with no arguments, keeps the entire calendar; any calendars
|
176
|
+
# not kept will be removed.
|
177
|
+
#
|
178
|
+
# Any arguments must be one of <tt>:events</tt>, <tt>:freebusys</tt>,
|
179
|
+
# <tt>:journals</tt>, or <tt>:todos</tt>, and
|
180
|
+
# the named resource collections will be kept in this calendar, and
|
181
|
+
# all resource collections not kept will be removed.
|
182
|
+
#
|
183
|
+
# For a given calendar or resource collection, you can call either #remove
|
184
|
+
# or #keep, but not both.
|
84
185
|
def keep(*args)
|
85
186
|
if args.empty?
|
86
187
|
super
|
@@ -89,7 +190,7 @@ module CalFilter
|
|
89
190
|
end
|
90
191
|
end
|
91
192
|
|
92
|
-
def method_missing(symbol, *args, &block)
|
193
|
+
def method_missing(symbol, *args, &block) # :nodoc:
|
93
194
|
if symbol.to_s =~ /^filter_(.*)$/ && RESOURCE_TYPES.include?($1)
|
94
195
|
__filter_resource__($1, *args, &block)
|
95
196
|
else
|
@@ -121,17 +222,17 @@ module CalFilter
|
|
121
222
|
|
122
223
|
end
|
123
224
|
|
124
|
-
def self.wrap_calendar(cal)
|
225
|
+
def self.wrap_calendar(cal) # :nodoc:
|
125
226
|
CalendarWrapper.new(cal)
|
126
227
|
end
|
127
228
|
|
128
|
-
def self.wrap_resource(res, plural_resource_type)
|
229
|
+
def self.wrap_resource(res, plural_resource_type) # :nodoc:
|
129
230
|
# This works with the particular resource names in Icalendar:
|
130
231
|
singular_resource_type = plural_resource_type.sub(/s$/, '')
|
131
232
|
ResourceWrapper.new(res, singular_resource_type)
|
132
233
|
end
|
133
234
|
|
134
|
-
def self.keep_or_delete_items(items, type, actions)
|
235
|
+
def self.keep_or_delete_items(items, type, actions) # :nodoc:
|
135
236
|
if actions.include?(:keep) && actions.include?(:remove)
|
136
237
|
raise CalFilter::FilterError, "Cannot both keep and remove #{type} in the same group.", caller(2)
|
137
238
|
end
|
@@ -143,6 +244,30 @@ module CalFilter
|
|
143
244
|
|
144
245
|
end
|
145
246
|
|
247
|
+
# Filters the calendars found at sources.
|
248
|
+
#
|
249
|
+
# The sources can be
|
250
|
+
#
|
251
|
+
# * {Icalendar::Calendar}[http://icalendar.rubyforge.org/classes/Icalendar/Calendar.html]
|
252
|
+
# objects,
|
253
|
+
# * arrays of those objects (because Icalendar.parse returns arrays
|
254
|
+
# of calendars),
|
255
|
+
# * URLs pointing to iCalendar[http://en.wikipedia.org/wiki/ICalendar] streams, or
|
256
|
+
# * strings containing iCalendar[http://en.wikipedia.org/wiki/ICalendar] streams.
|
257
|
+
#
|
258
|
+
# The sources are resolved/fetched/parsed into Icalendar::Calendar
|
259
|
+
# objects, and passed into the supplied block one by one (as
|
260
|
+
# CalendarWrapper objects). The block can filter the calendars,
|
261
|
+
# choosing to remove entire calendars or classes of calendar resources,
|
262
|
+
# and/or simply modifying those resources as desired. Each calendar object
|
263
|
+
# has a #source method that contains associated source parameter from the
|
264
|
+
# #filter_calendars call (so that you can recognize different calendars and
|
265
|
+
# handle them in distinct ways).
|
266
|
+
#
|
267
|
+
# The method returns an array of Calendar objects representing the filtered
|
268
|
+
# result. If CalFilter::output_stream is not nil, the method will also write
|
269
|
+
# the filtered result (as an iCalendar stream) to that output stream before
|
270
|
+
# returning.
|
146
271
|
def filter_calendars(*sources, &block)
|
147
272
|
cals = convert_to_icalendars(sources)
|
148
273
|
return cals unless block_given?
|
@@ -161,19 +286,32 @@ def filter_calendars(*sources, &block)
|
|
161
286
|
new_cals
|
162
287
|
end
|
163
288
|
|
164
|
-
def convert_to_icalendars(sources)
|
289
|
+
def convert_to_icalendars(sources) # :nodoc:
|
165
290
|
sources.inject([]){|accum, source| accum += convert_to_icalendar(source)}
|
166
291
|
end
|
167
292
|
|
168
|
-
def convert_to_icalendar(source)
|
169
|
-
case source
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
293
|
+
def convert_to_icalendar(source) # :nodoc:
|
294
|
+
icalendars = case source
|
295
|
+
when Icalendar::Calendar
|
296
|
+
[source]
|
297
|
+
when Array
|
298
|
+
source
|
299
|
+
when /^\s*BEGIN:VCALENDAR/m
|
300
|
+
Icalendar.parse(source)
|
301
|
+
else
|
302
|
+
Icalendar.parse(open(source, 'r'))
|
303
|
+
end
|
304
|
+
attach_source_to_icalendars(source, icalendars)
|
305
|
+
icalendars
|
306
|
+
end
|
307
|
+
|
308
|
+
def attach_source_to_icalendars(source, icalendars)
|
309
|
+
icalendars.each do |icalendar|
|
310
|
+
class <<icalendar
|
311
|
+
attr_reader :source
|
312
|
+
end
|
313
|
+
icalendar.instance_variable_set("@source", source)
|
178
314
|
end
|
315
|
+
|
316
|
+
icalendars
|
179
317
|
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.1.
|
4
|
+
version: 1.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Glenn Vanderburg
|
@@ -30,11 +30,12 @@ cert_chain:
|
|
30
30
|
zrNa6ECLh1VS/pV78rYbAO1ZXsg3l7bY
|
31
31
|
-----END CERTIFICATE-----
|
32
32
|
|
33
|
-
date: 2008-
|
33
|
+
date: 2008-08-06 00:00:00 -05:00
|
34
34
|
default_executable:
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: icalendar
|
38
|
+
type: :runtime
|
38
39
|
version_requirement:
|
39
40
|
version_requirements: !ruby/object:Gem::Requirement
|
40
41
|
requirements:
|
@@ -42,7 +43,17 @@ dependencies:
|
|
42
43
|
- !ruby/object:Gem::Version
|
43
44
|
version: "0"
|
44
45
|
version:
|
45
|
-
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: hoe
|
48
|
+
type: :development
|
49
|
+
version_requirement:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.7.0
|
55
|
+
version:
|
56
|
+
description: "calfilter is a small library to assist in writing filtering programs for icalendar files or streams. It can be used for various purposes, including: * removing items from icalendar feeds that are not interesting to you * removing private information from your own calendar before publishing it to others * reformatting a provided calendar to highlight particular information A calfilter script does most of its work using the filter_calendars[link:files/lib/calfilter_rb.html] method."
|
46
57
|
email:
|
47
58
|
- glenn@thinkrelevance.com
|
48
59
|
executables: []
|
@@ -92,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
103
|
requirements: []
|
93
104
|
|
94
105
|
rubyforge_project: thinkrelevance
|
95
|
-
rubygems_version: 1.0
|
106
|
+
rubygems_version: 1.2.0
|
96
107
|
signing_key:
|
97
108
|
specification_version: 2
|
98
109
|
summary: calfilter is a small library to assist in writing filtering programs for icalendar files or streams
|
metadata.gz.sig
CHANGED
Binary file
|