Class: Vpim::Icalendar::Vtodo

Inherits:
Object
  • Object
show all
Includes:
Property::Base, Property::Common, Property::Location, Property::Priority, Property::Recurrence, Property::Resources
Defined in:
lib/vpim/vtodo.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Property::Recurrence

#occurrences, #occurs_in?, #rdates, #rrule

Methods included from Property::Resources

#resources

Methods included from Property::Location

#geo, #location

Methods included from Property::Priority

#priority

Methods included from Property::Common

#access_class, #attachments, #attendee?, #attendees, #categories, #comments, #contacts, #created, #description, #dtstamp, #dtstart, #lastmod, #organizer, #sequence, #status, #summary, #uid, #url

Methods included from Property::Base

#propduration, #propend, #propinteger, #proptext, #proptextarray, #proptextlistarray, #proptime, #proptoken, #propvalue, #propvaluearray

Constructor Details

#initialize(fields) ⇒ Vtodo

:nodoc:



32
33
34
35
36
37
38
# File 'lib/vpim/vtodo.rb', line 32

def initialize(fields) #:nodoc:
  outer, inner = Vpim.outer_inner(fields)

  @properties = Vpim::DirectoryInfo.create(outer)

  @elements = inner
end

Class Method Details

.create(fields = []) ⇒ Object

Create a new Vtodo object.

If specified, fields must be either an array of Field objects to add, or a Hash of String names to values that will be used to build Field objects. The latter is a convenient short-cut allowing the Field objects to be created for you when called like:

Vtodo.create('SUMMARY' => "buy mangos")

TODO - maybe todos are usually created in a particular way? I can make it easier. Ideally, I would like to make it hard to encode an invalid Event.



64
65
66
67
68
69
70
# File 'lib/vpim/vtodo.rb', line 64

def Vtodo.create(fields=[])
  di = DirectoryInfo.create([], 'VTODO')

  Vpim::DirectoryInfo::Field.create_array(fields).each { |f| di.push_unique f }

  new(di.to_a)
end

Instance Method Details

#completedObject

The date and time that a to-do was actually completed, a Time.



87
88
89
# File 'lib/vpim/vtodo.rb', line 87

def completed
  proptime 'COMPLETED'
end

#dueObject

The time at which this Todo is due to be completed. If the DUE field is not present, but the DURATION field is, due will be calculated from DTSTART and DURATION.



82
83
84
# File 'lib/vpim/vtodo.rb', line 82

def due
  propend 'DUE'
end

#durationObject

The duration in seconds of a Todo, or nil if unspecified. If the DURATION field is not present, but the DUE field is, the duration is calculated from DTSTART and DUE. Durations of zero seconds are possible.



76
77
78
# File 'lib/vpim/vtodo.rb', line 76

def duration
  propduration 'DUE'
end

#fieldsObject

TODO - derive everything from Icalendar::Component to get this kind of stuff?



41
42
43
44
45
46
# File 'lib/vpim/vtodo.rb', line 41

def fields #:nodoc:
  f = @properties.to_a
  last = f.pop
  f.push @elements
  f.push last
end

#percent_completeObject

The percentage completetion of the to-do, between 0 and 100. 0 means it hasn’t started, 100 that it has been completed.

TODO - the handling of this property isn’t tied to either COMPLETED: or STATUS:, but perhaps it should be?



96
97
98
# File 'lib/vpim/vtodo.rb', line 96

def percent_complete
  propinteger 'PERCENT-COMPLETE'
end

#propertiesObject

:nodoc:



48
49
50
# File 'lib/vpim/vtodo.rb', line 48

def properties #:nodoc:
  @properties
end