You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

110 lines
2.9 KiB

=begin
Copyright (C) 2005 Jeff Rose
Copyright (C) 2005 Sam Roberts
This library is free software; you can redistribute it and/or modify it
under the same terms as the ruby language itself, see the file COPYING for
details.
=end
module Icalendar
module DateProp
# date = date-fullyear date-month date-mday
# date-fullyear = 4 DIGIT
# date-month = 2 DIGIT
# date-mday = 2 DIGIT
DATE = '(\d\d\d\d)(\d\d)(\d\d)'
# time = time-hour [":"] time-minute [":"] time-second [time-secfrac] [time-zone]
# time-hour = 2 DIGIT
# time-minute = 2 DIGIT
# time-second = 2 DIGIT
# time-secfrac = "," 1*DIGIT
# time-zone = "Z" / time-numzone
# time-numzome = sign time-hour [":"] time-minute
# TIME = '(\d\d)(\d\d)(\d\d)(Z)?'
TIME = '(\d\d)(\d\d)(\d\d)'
# This method is called automatically when the module is mixed in.
# I guess you have to do this to mixin class methods rather than instance methods.
def self.append_features(base)
super
klass.extend(ClassMethods)
end
# This is made a sub-module just so it can be added as class
# methods rather than instance methods.
module ClassMethods
def date_property(dp, alias_name = nil)
dp = "#{dp}".strip.downcase
getter = dp
setter = "#{dp}="
query = "#{dp}?"
unless instance_methods.include? getter
code = <<-code
def #{getter}(*a)
if a.empty?
@properties[#{dp.upcase}]
else
self.#{dp} = a.first
end
end
code
module_eval code
end
unless instance_methods.include? setter
code = <<-code
def #{setter} a
@properties[#{dp.upcase}] = a
end
code
module_eval code
end
unless instance_methods.include? query
code = <<-code
def #{query}
@properties.has_key?(#{dp.upcase})
end
code
module_eval code
end
# Define the getter
getter = "get#{property.to_s.capitalize}"
define_method(getter.to_sym) do
puts "inside getting..."
getDateProperty(property.to_s.upcase)
end
# Define the setter
setter = "set#{property.to_s.capitalize}"
define_method(setter.to_sym) do |*params|
date = params[0]
utc = params[1]
puts "inside setting..."
setDateProperty(property.to_s.upcase, date, utc)
end
# Create aliases if a name was specified
# if not aliasName.nil?
# gasym = "get#{aliasName.to_s.capitalize}".to_sym
# gsym = getter.to_sym
# alias gasym gsym
# sasym = "set#{aliasName.to_s.capitalize}".to_sym
# ssym = setter.to_sym
# alias sasym ssym
# end
end
end
end
end