vpim 0.323 → 0.357
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/lib/vpim.rb +1 -2
- data/lib/vpim/address.rb +181 -0
- data/lib/vpim/attachment.rb +102 -0
- data/lib/vpim/dirinfo.rb +12 -2
- data/lib/vpim/field.rb +26 -14
- data/lib/vpim/icalendar.rb +54 -200
- data/lib/vpim/maker/vcard.rb +2 -404
- data/lib/vpim/property/base.rb +22 -0
- data/lib/vpim/property/common.rb +26 -5
- data/lib/vpim/property/location.rb +10 -1
- data/lib/vpim/property/priority.rb +8 -0
- data/lib/vpim/property/recurrence.rb +47 -0
- data/lib/vpim/property/resources.rb +8 -0
- data/lib/vpim/rfc2425.rb +44 -7
- data/lib/vpim/rrule.rb +1 -1
- data/lib/vpim/vcard.rb +1230 -106
- data/lib/vpim/version.rb +3 -1
- data/lib/vpim/vevent.rb +2 -90
- data/lib/vpim/vjournal.rb +46 -0
- data/lib/vpim/vpim.rb +15 -73
- data/lib/vpim/vtodo.rb +82 -0
- metadata +7 -2
data/lib/vpim/version.rb
CHANGED
data/lib/vpim/vevent.rb
CHANGED
|
@@ -15,74 +15,7 @@ require 'vpim/property/common'
|
|
|
15
15
|
require 'vpim/property/priority'
|
|
16
16
|
require 'vpim/property/location'
|
|
17
17
|
require 'vpim/property/resources'
|
|
18
|
-
|
|
19
|
-
module Vpim
|
|
20
|
-
class Icalendar
|
|
21
|
-
class Vjournal
|
|
22
|
-
include Vpim::Icalendar::Property::Base
|
|
23
|
-
include Vpim::Icalendar::Property::Common
|
|
24
|
-
|
|
25
|
-
def initialize(fields) #:nodoc:
|
|
26
|
-
outer, inner = Vpim.outer_inner(fields)
|
|
27
|
-
|
|
28
|
-
@properties = Vpim::DirectoryInfo.create(outer)
|
|
29
|
-
|
|
30
|
-
@elements = inner
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# Create a Vjournal component.
|
|
34
|
-
def self.create(fields=[])
|
|
35
|
-
di = DirectoryInfo.create([], 'VJOURNAL')
|
|
36
|
-
|
|
37
|
-
Vpim::DirectoryInfo::Field.create_array(fields).each { |f| di.push_unique f }
|
|
38
|
-
|
|
39
|
-
new(di.to_a)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
module Vpim
|
|
47
|
-
class Icalendar
|
|
48
|
-
class Vtodo
|
|
49
|
-
include Vpim::Icalendar::Property::Base
|
|
50
|
-
include Vpim::Icalendar::Property::Common
|
|
51
|
-
include Vpim::Icalendar::Property::Priority
|
|
52
|
-
include Vpim::Icalendar::Property::Location
|
|
53
|
-
include Vpim::Icalendar::Property::Resources
|
|
54
|
-
|
|
55
|
-
def initialize(fields) #:nodoc:
|
|
56
|
-
outer, inner = Vpim.outer_inner(fields)
|
|
57
|
-
|
|
58
|
-
@properties = Vpim::DirectoryInfo.create(outer)
|
|
59
|
-
|
|
60
|
-
@elements = inner
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# Create a new Vtodo object.
|
|
64
|
-
#
|
|
65
|
-
# If specified, +fields+ must be either an array of Field objects to
|
|
66
|
-
# add, or a Hash of String names to values that will be used to build
|
|
67
|
-
# Field objects. The latter is a convenient short-cut allowing the Field
|
|
68
|
-
# objects to be created for you when called like:
|
|
69
|
-
#
|
|
70
|
-
# Vtodo.create('SUMMARY' => "buy mangos")
|
|
71
|
-
#
|
|
72
|
-
# TODO - maybe todos are usually created in a particular way? I can
|
|
73
|
-
# make it easier. Ideally, I would like to make it hard to encode an invalid
|
|
74
|
-
# Event.
|
|
75
|
-
def Vtodo.create(fields=[])
|
|
76
|
-
di = DirectoryInfo.create([], 'VTODO')
|
|
77
|
-
|
|
78
|
-
Vpim::DirectoryInfo::Field.create_array(fields).each { |f| di.push_unique f }
|
|
79
|
-
|
|
80
|
-
new(di.to_a)
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
18
|
+
require 'vpim/property/recurrence'
|
|
86
19
|
|
|
87
20
|
module Vpim
|
|
88
21
|
class Icalendar
|
|
@@ -92,6 +25,7 @@ module Vpim
|
|
|
92
25
|
include Vpim::Icalendar::Property::Priority
|
|
93
26
|
include Vpim::Icalendar::Property::Location
|
|
94
27
|
include Vpim::Icalendar::Property::Resources
|
|
28
|
+
include Vpim::Icalendar::Property::Recurrence
|
|
95
29
|
|
|
96
30
|
def initialize(fields) #:nodoc:
|
|
97
31
|
outer, inner = Vpim.outer_inner(fields)
|
|
@@ -201,28 +135,6 @@ module Vpim
|
|
|
201
135
|
end
|
|
202
136
|
end
|
|
203
137
|
|
|
204
|
-
# The recurrence rule, if any, for this event. Recurrence starts at the
|
|
205
|
-
# DTSTART time.
|
|
206
|
-
def rrule
|
|
207
|
-
propvalue 'RRULE'
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
# The times this event occurs, as a Vpim::Rrule.
|
|
211
|
-
#
|
|
212
|
-
# Note: the event may occur only once.
|
|
213
|
-
#
|
|
214
|
-
# Note: occurences are currently calculated only from DTSTART and RRULE,
|
|
215
|
-
# no allowance for EXDATE or other fields is made.
|
|
216
|
-
def occurences
|
|
217
|
-
Vpim::Rrule.new(dtstart, rrule)
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
# Check if this event overlaps with the time period later than or equal to +t0+, but
|
|
221
|
-
# earlier than +t1+.
|
|
222
|
-
def occurs_in?(t0, t1)
|
|
223
|
-
occurences.each_until(t1).detect { |t| tend = t + (duration || 0); tend > t0 }
|
|
224
|
-
end
|
|
225
|
-
|
|
226
138
|
end
|
|
227
139
|
end
|
|
228
140
|
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
Copyright (C) 2006 Sam Roberts
|
|
3
|
+
|
|
4
|
+
This library is free software; you can redistribute it and/or modify it
|
|
5
|
+
under the same terms as the ruby language itself, see the file COPYING for
|
|
6
|
+
details.
|
|
7
|
+
=end
|
|
8
|
+
|
|
9
|
+
require 'vpim/dirinfo'
|
|
10
|
+
require 'vpim/field'
|
|
11
|
+
require 'vpim/rfc2425'
|
|
12
|
+
require 'vpim/vpim'
|
|
13
|
+
require 'vpim/property/base'
|
|
14
|
+
require 'vpim/property/common'
|
|
15
|
+
require 'vpim/property/recurrence'
|
|
16
|
+
|
|
17
|
+
module Vpim
|
|
18
|
+
class Icalendar
|
|
19
|
+
|
|
20
|
+
class Vjournal
|
|
21
|
+
include Vpim::Icalendar::Property::Base
|
|
22
|
+
include Vpim::Icalendar::Property::Common
|
|
23
|
+
include Vpim::Icalendar::Property::Recurrence
|
|
24
|
+
|
|
25
|
+
def initialize(fields) #:nodoc:
|
|
26
|
+
outer, inner = Vpim.outer_inner(fields)
|
|
27
|
+
|
|
28
|
+
@properties = Vpim::DirectoryInfo.create(outer)
|
|
29
|
+
|
|
30
|
+
@elements = inner
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Create a Vjournal component.
|
|
34
|
+
def self.create(fields=[])
|
|
35
|
+
di = DirectoryInfo.create([], 'VJOURNAL')
|
|
36
|
+
|
|
37
|
+
Vpim::DirectoryInfo::Field.create_array(fields).each { |f| di.push_unique f }
|
|
38
|
+
|
|
39
|
+
new(di.to_a)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
data/lib/vpim/vpim.rb
CHANGED
|
@@ -6,84 +6,26 @@
|
|
|
6
6
|
details.
|
|
7
7
|
=end
|
|
8
8
|
|
|
9
|
-
#:main:Vpim
|
|
10
|
-
#:title:vpim - a library to manipulate vCards and iCalendars
|
|
11
|
-
#
|
|
12
|
-
# Author:: Sam Roberts <sroberts@uniserve.com>
|
|
13
|
-
# Copyright:: Copyright (C) 2006 Sam Roberts
|
|
14
|
-
# License:: May be distributed under the same terms as Ruby
|
|
15
|
-
# Homepage:: http://vpim.rubyforge.org
|
|
16
|
-
#
|
|
17
|
-
# vCard (RFC 2426) is a format for personal information, see Vpim::Vcard and
|
|
18
|
-
# Vpim::Maker::Vcard.
|
|
19
|
-
#
|
|
20
|
-
# iCalendar (RFC 2445) is a format for calendar related information, see
|
|
21
|
-
# Vpim::Icalendar.
|
|
22
|
-
#
|
|
23
|
-
# iCalendar was called vCalendar pre-IETF standardization, and since both of
|
|
24
|
-
# these "v-formats" are commonly used for personal information management, the
|
|
25
|
-
# library is called "vpim".
|
|
26
|
-
#
|
|
27
|
-
# vCard and iCalendar support is built on top of an implementation of the MIME
|
|
28
|
-
# Content-Type for Directory Information (RFC 2425). The basic RFC 2425 format
|
|
29
|
-
# is implemented by Vpim::DirectoryInfo and Vpim::DirectoryInfo::Field.
|
|
30
|
-
#
|
|
31
|
-
# The libary is quite useable, but there is always more that could be done.
|
|
32
|
-
# Since I have a more on my todo list than I have time, if you think something
|
|
33
|
-
# is missing or have API suggestions, please contact me. I can't promise
|
|
34
|
-
# instantaneous turnaround, but I might be able to suggest another approach,
|
|
35
|
-
# and features requested by users of vPim are high priority for me.
|
|
36
|
-
#
|
|
37
|
-
# = Project Information
|
|
38
|
-
#
|
|
39
|
-
# The latest release can be downloaded from the Ruby Forge project page:
|
|
40
|
-
#
|
|
41
|
-
# - http://rubyforge.org/projects/vpim
|
|
42
|
-
#
|
|
43
|
-
# For notifications about new releases, or asking questions about vPim, please
|
|
44
|
-
# subscribe to "vpim-talk":
|
|
45
|
-
#
|
|
46
|
-
# - http://rubyforge.org/mailman/listinfo/vpim-talk
|
|
47
|
-
#
|
|
48
|
-
# = Examples
|
|
49
|
-
#
|
|
50
|
-
# Sample utilities are provided as examples of using vPim in samples/.
|
|
51
|
-
#
|
|
52
|
-
# vCard examples are:
|
|
53
|
-
# - link:ex_mkvcard.txt: example of creating a vCard
|
|
54
|
-
# - link:ex_cpvcard.txt: example of copying and them modifying a vCard
|
|
55
|
-
# - link:ex_mkv21vcard.txt: example of creating version 2.1 vCard
|
|
56
|
-
# - link:mutt-aliases-to-vcf.txt: convert a mutt aliases file to vCards
|
|
57
|
-
# - link:ex_get_vcard_photo.txt: pull photo data from a vCard
|
|
58
|
-
# - link:ab-query.txt: query the OS X Address Book to find vCards
|
|
59
|
-
# - link:vcf-to-mutt.txt: query vCards for matches, output in formats useful
|
|
60
|
-
# with Mutt (see link:README.mutt for details)
|
|
61
|
-
# - link:tabbed-file-to-vcf.txt: convert a tab-delimited file to vCards, a
|
|
62
|
-
# (small but) complete application contributed by Dane G. Avilla, thanks!
|
|
63
|
-
# - link:vcf-to-ics.txt: example of how to create calendars of birthdays from vCards
|
|
64
|
-
# - link:vcf-dump.txt: utility for dumping contents of .vcf files
|
|
65
|
-
#
|
|
66
|
-
# iCalendar examples are:
|
|
67
|
-
# - link:ics-to-rss.txt: prints todos as RSS, or starts a WEBrick servlet
|
|
68
|
-
# that publishes todos as a RSS feed. Thanks to Dave Thomas for this idea,
|
|
69
|
-
# from http://pragprog.com/pragdave/Tech/Blog/ToDos.rdoc.
|
|
70
|
-
# - link:cmd-itip.txt: prints emailed iCalendar invitations in human-readable
|
|
71
|
-
# form, and see link:README.mutt for instruction on mutt integration. I get
|
|
72
|
-
# a lot of meeting invitations from Lotus Notes/Domino users at work, and
|
|
73
|
-
# this is pretty useful in figuring out where and when I am supposed to be.
|
|
74
|
-
# - link:reminder.txt: prints upcoming events and todos, by default from
|
|
75
|
-
# Apple's iCal calendars
|
|
76
|
-
# - link:rrule.txt: utility for printing recurrence rules
|
|
77
|
-
# - link:ics-dump.txt: utility for dumping contents of .ics files
|
|
78
|
-
module Vpim
|
|
79
|
-
end
|
|
80
|
-
|
|
81
9
|
require 'vpim/version'
|
|
82
10
|
|
|
11
|
+
#:main:README
|
|
12
|
+
#:title:vpim - a library to manipulate vCards and iCalendars
|
|
83
13
|
module Vpim
|
|
84
14
|
# Exception used to indicate that data being decoded is invalid, the message
|
|
85
|
-
#
|
|
15
|
+
# should describe what is invalid.
|
|
86
16
|
class InvalidEncodingError < StandardError; end
|
|
17
|
+
|
|
18
|
+
# Exception used to indicate that data being decoded is unsupported, the message
|
|
19
|
+
# should describe what is unsupported.
|
|
20
|
+
#
|
|
21
|
+
# If its unsupported, its likely because I didn't anticipate it being useful
|
|
22
|
+
# to support this, and it likely it could be supported on request.
|
|
23
|
+
class UnsupportedError < StandardError; end
|
|
24
|
+
|
|
25
|
+
# Exception used to indicate that encoding failed, probably because the
|
|
26
|
+
# object would not result in validly encoded data. The message should
|
|
27
|
+
# describe what is unsupported.
|
|
28
|
+
class Unencodeable < StandardError; end
|
|
87
29
|
end
|
|
88
30
|
|
|
89
31
|
module Vpim::Methods #:nodoc:
|
data/lib/vpim/vtodo.rb
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
Copyright (C) 2006 Sam Roberts
|
|
3
|
+
|
|
4
|
+
This library is free software; you can redistribute it and/or modify it
|
|
5
|
+
under the same terms as the ruby language itself, see the file COPYING for
|
|
6
|
+
details.
|
|
7
|
+
=end
|
|
8
|
+
|
|
9
|
+
require 'vpim/dirinfo'
|
|
10
|
+
require 'vpim/field'
|
|
11
|
+
require 'vpim/rfc2425'
|
|
12
|
+
require 'vpim/vpim'
|
|
13
|
+
require 'vpim/property/base'
|
|
14
|
+
require 'vpim/property/common'
|
|
15
|
+
require 'vpim/property/priority'
|
|
16
|
+
require 'vpim/property/location'
|
|
17
|
+
require 'vpim/property/resources'
|
|
18
|
+
require 'vpim/property/recurrence'
|
|
19
|
+
|
|
20
|
+
module Vpim
|
|
21
|
+
class Icalendar
|
|
22
|
+
|
|
23
|
+
class Vtodo
|
|
24
|
+
include Vpim::Icalendar::Property::Base
|
|
25
|
+
include Vpim::Icalendar::Property::Common
|
|
26
|
+
include Vpim::Icalendar::Property::Priority
|
|
27
|
+
include Vpim::Icalendar::Property::Location
|
|
28
|
+
include Vpim::Icalendar::Property::Resources
|
|
29
|
+
include Vpim::Icalendar::Property::Recurrence
|
|
30
|
+
|
|
31
|
+
def initialize(fields) #:nodoc:
|
|
32
|
+
outer, inner = Vpim.outer_inner(fields)
|
|
33
|
+
|
|
34
|
+
@properties = Vpim::DirectoryInfo.create(outer)
|
|
35
|
+
|
|
36
|
+
@elements = inner
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Create a new Vtodo object.
|
|
40
|
+
#
|
|
41
|
+
# If specified, +fields+ must be either an array of Field objects to
|
|
42
|
+
# add, or a Hash of String names to values that will be used to build
|
|
43
|
+
# Field objects. The latter is a convenient short-cut allowing the Field
|
|
44
|
+
# objects to be created for you when called like:
|
|
45
|
+
#
|
|
46
|
+
# Vtodo.create('SUMMARY' => "buy mangos")
|
|
47
|
+
#
|
|
48
|
+
# TODO - maybe todos are usually created in a particular way? I can
|
|
49
|
+
# make it easier. Ideally, I would like to make it hard to encode an invalid
|
|
50
|
+
# Event.
|
|
51
|
+
def Vtodo.create(fields=[])
|
|
52
|
+
di = DirectoryInfo.create([], 'VTODO')
|
|
53
|
+
|
|
54
|
+
Vpim::DirectoryInfo::Field.create_array(fields).each { |f| di.push_unique f }
|
|
55
|
+
|
|
56
|
+
new(di.to_a)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# The date and time that a to-do is expected to be completed, a Time.
|
|
60
|
+
def due
|
|
61
|
+
proptime 'DUE'
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# The date and time that a to-do was actually completed, a Time.
|
|
65
|
+
def completed
|
|
66
|
+
proptime 'COMPLETED'
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# The percentage completetion of the to-do, between 0 and 100. 0 means it hasn't
|
|
70
|
+
# started, 100 that it has been completed.
|
|
71
|
+
#
|
|
72
|
+
# TODO - the handling of this property isn't tied to either COMPLETED: or
|
|
73
|
+
# STATUS:, but perhaps it should be?
|
|
74
|
+
def percent_complete
|
|
75
|
+
propinteger 'PERCENT-COMPLETE'
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
metadata
CHANGED
|
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
|
3
3
|
specification_version: 1
|
|
4
4
|
name: vpim
|
|
5
5
|
version: !ruby/object:Gem::Version
|
|
6
|
-
version: "0.
|
|
7
|
-
date: 2006-03-
|
|
6
|
+
version: "0.357"
|
|
7
|
+
date: 2006-03-31 00:00:00 -08:00
|
|
8
8
|
summary: a library to manipulate vCards and iCalendars
|
|
9
9
|
require_paths:
|
|
10
10
|
- lib
|
|
@@ -29,6 +29,8 @@ authors:
|
|
|
29
29
|
- Sam Roberts
|
|
30
30
|
files:
|
|
31
31
|
- lib/vpim.rb
|
|
32
|
+
- lib/vpim/address.rb
|
|
33
|
+
- lib/vpim/attachment.rb
|
|
32
34
|
- lib/vpim/date.rb
|
|
33
35
|
- lib/vpim/dirinfo.rb
|
|
34
36
|
- lib/vpim/duration.rb
|
|
@@ -41,12 +43,15 @@ files:
|
|
|
41
43
|
- lib/vpim/vcard.rb
|
|
42
44
|
- lib/vpim/version.rb
|
|
43
45
|
- lib/vpim/vevent.rb
|
|
46
|
+
- lib/vpim/vjournal.rb
|
|
44
47
|
- lib/vpim/vpim.rb
|
|
48
|
+
- lib/vpim/vtodo.rb
|
|
45
49
|
- lib/vpim/maker/vcard.rb
|
|
46
50
|
- lib/vpim/property/base.rb
|
|
47
51
|
- lib/vpim/property/common.rb
|
|
48
52
|
- lib/vpim/property/location.rb
|
|
49
53
|
- lib/vpim/property/priority.rb
|
|
54
|
+
- lib/vpim/property/recurrence.rb
|
|
50
55
|
- lib/vpim/property/resources.rb
|
|
51
56
|
test_files: []
|
|
52
57
|
|