Object
# File rss/rss.rb, line 420
def get_attributes
GET_ATTRIBUTES
end
# File rss/rss.rb, line 423
def have_children_elements
HAVE_CHILDREN_ELEMENTS
end
# File rss/rss.rb, line 437
def inherited(klass)
klass.const_set("MUST_CALL_VALIDATORS", {})
klass.const_set("MODELS", [])
klass.const_set("GET_ATTRIBUTES", [])
klass.const_set("HAVE_CHILDREN_ELEMENTS", [])
klass.const_set("TO_ELEMENT_METHODS", [])
klass.const_set("NEED_INITIALIZE_VARIABLES", [])
klass.const_set("PLURAL_FORMS", {})
klass.module_eval(<<-EOC)
public
@tag_name = name.split(/::/).last
@tag_name[0,1] = @tag_name[0,1].downcase
@have_content = false
def self.must_call_validators
super.merge(MUST_CALL_VALIDATORS)
end
def self.models
MODELS + super
end
def self.get_attributes
GET_ATTRIBUTES + super
end
def self.have_children_elements
HAVE_CHILDREN_ELEMENTS + super
end
def self.to_element_methods
TO_ELEMENT_METHODS + super
end
def self.need_initialize_variables
NEED_INITIALIZE_VARIABLES + super
end
def self.plural_forms
super.merge(PLURAL_FORMS)
end
def self.install_must_call_validator(prefix, uri)
MUST_CALL_VALIDATORS[uri] = prefix
end
def self.install_model(tag, uri, occurs=nil, getter=nil)
getter ||= tag
if m = MODELS.find {|t, u, o, g| t == tag and u == uri}
m[2] = occurs
else
MODELS << [tag, uri, occurs, getter]
end
end
def self.install_get_attribute(name, uri, required=true,
type=nil, disp_name=nil,
element_name=nil)
disp_name ||= name
element_name ||= name
def_corresponded_attr_writer name, type, disp_name
convert_attr_reader name
if type == :boolean and /^is/ =~ name
alias_method "\#{$POSTMATCH}?", name
end
GET_ATTRIBUTES << [name, uri, required, element_name]
add_need_initialize_variable(disp_name)
end
def self.def_corresponded_attr_writer(name, type=nil, disp_name=name)
case type
when :integer
integer_writer name, disp_name
when :positive_integer
positive_integer_writer name, disp_name
when :boolean
boolean_writer name, disp_name
when :w3cdtf, :rfc822, :rfc2822
date_writer name, type, disp_name
else
attr_writer name
end
end
def self.content_setup(type=nil)
def_corresponded_attr_writer "content", type
convert_attr_reader :content
@have_content = true
end
def self.have_content?
@have_content
end
def self.add_have_children_element(variable_name, plural_name)
HAVE_CHILDREN_ELEMENTS << [variable_name, plural_name]
end
def self.add_to_element_method(method_name)
TO_ELEMENT_METHODS << method_name
end
def self.add_need_initialize_variable(variable_name)
NEED_INITIALIZE_VARIABLES << variable_name
end
def self.add_plural_form(singular, plural)
PLURAL_FORMS[singular] = plural
end
EOC
end
# File rss/rss.rb, line 555
def install_ns(prefix, uri)
if self::NSPOOL.has_key?(prefix)
raise OverlappedPrefixError.new(prefix)
end
self::NSPOOL[prefix] = uri
end
# File rss/rss.rb, line 414
def must_call_validators
MUST_CALL_VALIDATORS
end
# File rss/rss.rb, line 429
def need_initialize_variables
NEED_INITIALIZE_VARIABLES
end
# File rss/rss.rb, line 594
def convert(value)
if @converter
@converter.convert(value)
else
value
end
end
# File rss/rss.rb, line 583
def converter=(converter)
@converter = converter
targets = children.dup
self.class.have_children_elements.each do |variable_name, plural_name|
targets.concat(__send__(plural_name))
end
targets.each do |target|
target.converter = converter unless target.nil?
end
end
# File rss/rss.rb, line 612
def setup_maker(maker)
target = maker_target(maker)
unless target.nil?
setup_maker_attributes(target)
setup_maker_element(target)
setup_maker_elements(target)
end
end
# File rss/rss.rb, line 621
def to_s(need_convert=true, indent='')
if self.class.have_content?
return "" unless @content
rv = tag(indent) do |next_indent|
h(@content)
end
else
rv = tag(indent) do |next_indent|
self.class.to_element_methods.collect do |method_name|
__send__(method_name, false, next_indent)
end
end
end
rv = convert(rv) if need_convert
rv
end