4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/rss/dcterms/property.rb', line 4
def append_features(klass)
super
return if klass.instance_of?(Module)
PropertyModel::ELEMENT_NAME_INFOS.each do |name, plural_name|
plural = plural_name || "#{name}s"
full_name = "#{PREFIX}_#{name}"
full_plural_name = "#{PREFIX}_#{plural}"
klass_name = "DCTerms#{Utils.to_class_name(name)}"
klass.install_must_call_validator(PREFIX, URI)
klass.install_have_children_element(name, URI, "*",
full_name, full_plural_name)
klass.module_eval(<<-EOC, *get_file_and_line_from_caller(0))
remove_method :#{full_name}
remove_method :#{full_name}=
remove_method :set_#{full_name}
def #{full_name}
@#{full_name}.first and @#{full_name}.first.value
end
alias #{to_attr_name(full_name)} #{full_name}
def #{full_name}=(new_value)
@#{full_name}[0] = Utils.new_with_value_if_need(#{klass_name}, new_value)
end
alias set_#{full_name} #{full_name}=
alias #{to_attr_name(full_name)}= #{full_name}=
alias set_#{to_attr_name(full_name)} #{full_name}=
alias #{to_attr_name(full_plural_name)} #{full_plural_name}
EOC
end
klass.module_eval(<<-EOC, *get_file_and_line_from_caller(0))
if method_defined?(:date)
alias date_without_#{PREFIX}_date= date=
def date=(value)
self.date_without_#{PREFIX}_date = value
self.#{PREFIX}_date = value
end
else
alias date #{PREFIX}_date
alias date= #{PREFIX}_date=
end
EOC
end
|