module Icalendar::HasComponents::ClassMethods
def component(singular_name, find_by = :uid, klass = nil)
def component(singular_name, find_by = :uid, klass = nil) components = "#{singular_name}s" self.components << components component_var = "@#{components}" define_method components do if instance_variable_defined? component_var instance_variable_get component_var else instance_variable_set component_var, [] end end define_method singular_name do |c = nil, &block| if c.nil? c = begin klass ||= Icalendar.const_get singular_name.capitalize klass.new rescue NameError => ne Icalendar.logger.warn ne.message Component.new singular_name end end add_component c, &block end define_method "find_#{singular_name}" do |id| send(components).find { |c| c.send(find_by) == id } end if find_by define_method "add_#{singular_name}" do |c| send singular_name, c end define_method "has_#{singular_name}?" do !send(components).empty? end end
def components
def components @components ||= [] end