29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/rss/trackback.rb', line 29
def append_features(klass)
super
unless klass.class == Module
klass.module_eval {include TrackBackUtils}
klass.install_must_call_validator(TRACKBACK_PREFIX, TRACKBACK_URI)
%w(ping).each do |name|
var_name = "#{TRACKBACK_PREFIX}_#{name}"
klass_name = "TrackBack#{Utils.to_class_name(name)}"
klass.install_have_child_element(name, TRACKBACK_URI, "?", var_name)
klass.module_eval(" remove_method :\#{var_name}\n def \#{var_name}\n @\#{var_name} and @\#{var_name}.value\n end\n\n remove_method :\#{var_name}=\n def \#{var_name}=(value)\n @\#{var_name} = Utils.new_with_value_if_need(\#{klass_name}, value)\n end\n EOC\n end\n\n [%w(about s)].each do |name, postfix|\n var_name = \"\#{TRACKBACK_PREFIX}_\#{name}\"\n klass_name = \"TrackBack\#{Utils.to_class_name(name)}\"\n klass.install_have_children_element(name, TRACKBACK_URI, \"*\",\n var_name)\n klass.module_eval(<<-EOC, __FILE__, __LINE__)\n remove_method :\#{var_name}\n def \#{var_name}(*args)\n if args.empty?\n @\#{var_name}.first and @\#{var_name}.first.value\n else\n ret = @\#{var_name}.__send__(\"[]\", *args)\n if ret.is_a?(Array)\n ret.collect {|x| x.value}\n else\n ret.value\n end\n end\n end\n\n remove_method :\#{var_name}=\n remove_method :set_\#{var_name}\n def \#{var_name}=(*args)\n if args.size == 1\n item = Utils.new_with_value_if_need(\#{klass_name}, args[0])\n @\#{var_name}.push(item)\n else\n new_val = args.last\n if new_val.is_a?(Array)\n new_val = new_value.collect do |val|\n Utils.new_with_value_if_need(\#{klass_name}, val)\n end\n else\n new_val = Utils.new_with_value_if_need(\#{klass_name}, new_val)\n end\n @\#{var_name}.__send__(\"[]=\", *(args[0..-2] + [new_val]))\n end\n end\n alias set_\#{var_name} \#{var_name}=\n EOC\n end\n end\nend\n", __FILE__, __LINE__)
|