Class: RiCal::PropertyValue::Date

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

Overview

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?



143
144
145
# File 'lib/ri_cal/property_value/date.rb', line 143

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

Class Method Details

.valid_string?(string) ⇒ Boolean

:nodoc:

Returns:

  • (Boolean)


9
10
11
# File 'lib/ri_cal/property_value/date.rb', line 9

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



137
138
139
# File 'lib/ri_cal/property_value/date.rb', line 137

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



124
125
126
# File 'lib/ri_cal/property_value/date.rb', line 124

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

#add_date_times_to(required_timezones) ⇒ Object

:nodoc:



115
116
117
# File 'lib/ri_cal/property_value/date.rb', line 115

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

#advance(options) ⇒ Object

:nodoc:



107
108
109
# File 'lib/ri_cal/property_value/date.rb', line 107

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:



111
112
113
# File 'lib/ri_cal/property_value/date.rb', line 111

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



70
71
72
# File 'lib/ri_cal/property_value/date.rb', line 70

def day
  @date_time_value.day
end

#for_occurrence(occurrence) ⇒ Object



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

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:



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

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)



65
66
67
# File 'lib/ri_cal/property_value/date.rb', line 65

def month
  @date_time_value.month
end

#occurrence_period(default_duration) ⇒ Object

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



148
149
150
151
# File 'lib/ri_cal/property_value/date.rb', line 148

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



75
76
77
# File 'lib/ri_cal/property_value/date.rb', line 75

def ruby_value
  @date_time_value.date
end

#start_of_day?Boolean

Returns:

  • (Boolean)


153
154
155
# File 'lib/ri_cal/property_value/date.rb', line 153

def start_of_day?
  true
end

#subtract_from_date_time_value(date_time) ⇒ Object



128
129
130
# File 'lib/ri_cal/property_value/date.rb', line 128

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



169
170
171
# File 'lib/ri_cal/property_value/date.rb', line 169

def to_finish_time
  to_ri_cal_date_time_value.end_of_day.to_datetime
end

#to_floating_date_time_propertyObject



157
158
159
# File 'lib/ri_cal/property_value/date.rb', line 157

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.”



92
93
94
# File 'lib/ri_cal/property_value/date.rb', line 92

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



82
83
84
# File 'lib/ri_cal/property_value/date.rb', line 82

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



87
88
89
# File 'lib/ri_cal/property_value/date.rb', line 87

def to_ri_cal_date_value(timezone_finder = nil)
  self
end

#to_ri_cal_zulu_date_timeObject



22
23
24
# File 'lib/ri_cal/property_value/date.rb', line 22

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



165
166
167
# File 'lib/ri_cal/property_value/date.rb', line 165

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



161
162
163
# File 'lib/ri_cal/property_value/date.rb', line 161

def to_zulu_occurrence_range_start_time
  to_floating_date_time_property.to_zulu_occurrence_range_start_time
end

#tzidObject

:nodoc:



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

def tzid #:nodoc:
  nil
end

#tzid=(val) ⇒ Object

Nop to allow occurrence list to try to set it



48
49
# File 'lib/ri_cal/property_value/date.rb', line 48

def tzid=(val)#:nodoc:
end

#valueObject

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



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

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



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

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

#visible_paramsObject

:nodoc:



55
56
57
# File 'lib/ri_cal/property_value/date.rb', line 55

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

#yearObject

Returns the year (including the century)



60
61
62
# File 'lib/ri_cal/property_value/date.rb', line 60

def year
  @date_time_value.year
end