Class: RiCal::PropertyValue::Date

Inherits:
RiCal::PropertyValue show all
Defined in:
lib/ri_cal/property_value/date.rb

Overview

  • ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license

RiCal::PropertyValue::CalAddress represents an icalendar Date property value which is defined in RFC 2445 section 4.3.4 p 34

Instance Attribute Summary

Attributes inherited from RiCal::PropertyValue

#params, #timezone_finder

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from RiCal::PropertyValue

#==, convert, date_or_date_time, date_or_date_time_or_period, #default_tzid, #enumerator, #equality_value, #find_timezone, if_valid_string, #initialize, #parms_string, #to_options_hash, #to_ri_cal_property_value, #to_s, #tz_info_source?, #validate_value

Constructor Details

This class inherits a constructor from RiCal::PropertyValue

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(selector, *args) ⇒ Object

Delegate unknown messages to the wrappered Date instance. TODO: Is this really necessary?



145
146
147
# File 'lib/ri_cal/property_value/date.rb', line 145

def method_missing(selector, *args) #:nodoc:
  @date_time_value.send(selector, *args)
end

Class Method Details

.valid_string?(string) ⇒ Boolean

:nodoc:

Returns:

  • (Boolean)


11
12
13
# File 'lib/ri_cal/property_value/date.rb', line 11

def self.valid_string?(string) #:nodoc:
  string =~ /^\d{8}$/
end

Instance Method Details

#+(duration) ⇒ Object

Return the sum of the receiver and duration

The parameter other duration should be a RiCal::PropertyValue::Duration

The result will be an RiCal::PropertyValue::DateTime



139
140
141
# File 'lib/ri_cal/property_value/date.rb', line 139

def +(duration)
  duration.add_to_date_time_value(to_ri_cal_date_time_value)
end

#-(other) ⇒ Object

Return the difference between the receiver and other

The parameter other should be either a RiCal::PropertyValue::Duration or a RiCal::PropertyValue::DateTime

If other is a Duration, the result will be a DateTime, if it is a DateTime the result will be a Duration



126
127
128
# File 'lib/ri_cal/property_value/date.rb', line 126

def -(other)
  other.subtract_from_date_time_value(to_ri_cal_date_time_value)
end

#add_date_times_to(required_timezones) ⇒ Object

:nodoc:



117
118
119
# File 'lib/ri_cal/property_value/date.rb', line 117

def add_date_times_to(required_timezones) #:nodoc:
  # Do nothing since dates don't have a timezone
end

#advance(options) ⇒ Object

:nodoc:



109
110
111
# File 'lib/ri_cal/property_value/date.rb', line 109

def advance(options) #:nodoc:
  PropertyValue::Date.new(timezone_finder, :value => @date_time_value.advance(options), :params =>(params ? params.dup : nil) )
end

#change(options) ⇒ Object

:nodoc:



113
114
115
# File 'lib/ri_cal/property_value/date.rb', line 113

def change(options) #:nodoc:
  PropertyValue::Date.new(timezone_finder,:value => @date_time_value.change(options), :params => (params ? params.dup : nil) )
end

#dayObject

Returns the day of the month



72
73
74
# File 'lib/ri_cal/property_value/date.rb', line 72

def day
  @date_time_value.day
end

#for_occurrence(occurrence) ⇒ Object



175
176
177
178
179
180
181
# File 'lib/ri_cal/property_value/date.rb', line 175

def for_occurrence(occurrence)
  if occurrence.start_of_day?
     occurrence.to_ri_cal_date_value(timezone_finder)
  else
    occurrence.for_parent(timezone_finder)
  end
end

#for_parent(parent) ⇒ Object

:nodoc:



98
99
100
101
102
103
104
105
106
107
# File 'lib/ri_cal/property_value/date.rb', line 98

def for_parent(parent) #:nodoc:
  if timezone_finder.nil?
    @timezone_finder = parent
    self
  elsif parent == timezone_finder
    self
  else
    Date.new(parent, :value => @date_time_value)
  end
end

#monthObject

Returns the month of the year (1..12)



67
68
69
# File 'lib/ri_cal/property_value/date.rb', line 67

def month
  @date_time_value.month
end

#occurrence_period(default_duration) ⇒ Object

TODO: consider if this should be a period rather than a hash



150
151
152
153
# File 'lib/ri_cal/property_value/date.rb', line 150

def occurrence_period(default_duration) #:nodoc:
  date_time = self.to_ri_cal_date_time_value
  RiCal::OccurrencePeriod.new(date_time, date_time.advance(:hours => 24, :seconds => -1))
end

#ruby_valueObject Also known as: to_ri_cal_ruby_value

Returns the ruby representation a ::Date



77
78
79
# File 'lib/ri_cal/property_value/date.rb', line 77

def ruby_value
  @date_time_value.date
end

#start_of_day?Boolean

Returns:

  • (Boolean)


155
156
157
# File 'lib/ri_cal/property_value/date.rb', line 155

def start_of_day?
  true
end

#subtract_from_date_time_value(date_time) ⇒ Object



130
131
132
# File 'lib/ri_cal/property_value/date.rb', line 130

def subtract_from_date_time_value(date_time)
  to_ri_cal_date_time_value.subtract_from_date_time_value(date_time)
end

#to_finish_timeObject



171
172
173
# File 'lib/ri_cal/property_value/date.rb', line 171

def to_finish_time
  to_ri_cal_date_time_value.end_of_day.to_datetime
end

#to_floating_date_time_propertyObject



159
160
161
# File 'lib/ri_cal/property_value/date.rb', line 159

def to_floating_date_time_property
  PropertyValue::DateTime.new(timezone_finder, :value => @date_time_value.ical_str)
end

#to_ri_cal_date_or_date_time_valueObject

Return the “Natural’ property value for the date_property, in this case the date property itself.”



94
95
96
# File 'lib/ri_cal/property_value/date.rb', line 94

def to_ri_cal_date_or_date_time_value
  self
end

#to_ri_cal_date_time_valueObject

Return an instance of RiCal::PropertyValue::DateTime representing the start of this date



84
85
86
# File 'lib/ri_cal/property_value/date.rb', line 84

def to_ri_cal_date_time_value
  PropertyValue::DateTime.new(timezone_finder, :value => @date_time_value)
end

#to_ri_cal_date_value(timezone_finder = nil) ⇒ Object

Return this date property



89
90
91
# File 'lib/ri_cal/property_value/date.rb', line 89

def to_ri_cal_date_value(timezone_finder = nil)
  self
end

#to_ri_cal_zulu_date_timeObject



24
25
26
# File 'lib/ri_cal/property_value/date.rb', line 24

def to_ri_cal_zulu_date_time
  self.to_ri_cal_date_time_value.to_ri_cal_zulu_date_time
end

#to_zulu_occurrence_range_finish_timeObject



167
168
169
# File 'lib/ri_cal/property_value/date.rb', line 167

def to_zulu_occurrence_range_finish_time
  to_ri_cal_date_time_value.end_of_day.to_zulu_occurrence_range_finish_time
end

#to_zulu_occurrence_range_start_timeObject



163
164
165
# File 'lib/ri_cal/property_value/date.rb', line 163

def to_zulu_occurrence_range_start_time
  to_floating_date_time_property.to_zulu_occurrence_range_start_time
end

#tzidObject

:nodoc:



53
54
55
# File 'lib/ri_cal/property_value/date.rb', line 53

def tzid #:nodoc:
  nil
end

#tzid=(val) ⇒ Object

Nop to allow occurrence list to try to set it



50
51
# File 'lib/ri_cal/property_value/date.rb', line 50

def tzid=(val)#:nodoc:
end

#valueObject

Returns the value of the reciever as an RFC 2445 iCalendar string



16
17
18
19
20
21
22
# File 'lib/ri_cal/property_value/date.rb', line 16

def value
  if @date_time_value
    @date_time_value.ical_date_str
  else
    nil
  end
end

#value=(val) ⇒ Object

Set the value of the property to val

val may be either:

  • A string which can be parsed as a DateTime

  • A Time instance

  • A Date instance

  • A DateTime instance



36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/ri_cal/property_value/date.rb', line 36

def value=(val)
  case val
  when nil
    @date_time_value = nil
  when String
    @date_time_value = FastDateTime.from_date_time(::DateTime.parse(::DateTime.parse(val).strftime("%Y%m%d")))
  when ::Time, ::Date, ::DateTime
    @date_time_value = FastDateTime.from_date_time(::DateTime.parse(val.strftime("%Y%m%d")))
  when FastDateTime
    @date_time_value = val
  end
end

#visible_paramsObject

:nodoc:



57
58
59
# File 'lib/ri_cal/property_value/date.rb', line 57

def visible_params #:nodoc:
  {"VALUE" => "DATE"}.merge(params)
end

#yearObject

Returns the year (including the century)



62
63
64
# File 'lib/ri_cal/property_value/date.rb', line 62

def year
  @date_time_value.year
end