Class | RSS::Maker::Base |
In: |
lib/rss/maker/base.rb
|
Parent: | Object |
OTHER_ELEMENTS | = | [] |
NEED_INITIALIZE_VARIABLES | = | [] |
maker | [R] |
# File lib/rss/maker/base.rb, line 34 34: def add_need_initialize_variable(variable_name, init_value="nil") 35: self::NEED_INITIALIZE_VARIABLES << [variable_name, init_value] 36: end
# File lib/rss/maker/base.rb, line 30 30: def add_other_element(variable_name) 31: self::OTHER_ELEMENTS << variable_name 32: end
# File lib/rss/maker/base.rb, line 38 38: def def_array_element(name, plural=nil, klass_name=nil) 39: include Enumerable 40: extend Forwardable 41: 42: plural ||= "#{name}s" 43: klass_name ||= Utils.to_class_name(name) 44: def_delegators("@#{plural}", :<<, :[], :[]=, :first, :last) 45: def_delegators("@#{plural}", :push, :pop, :shift, :unshift) 46: def_delegators("@#{plural}", :each, :size, :empty?, :clear) 47: 48: add_need_initialize_variable(plural, "[]") 49: 50: module_eval("def new_\#{name}\n\#{name} = self.class::\#{klass_name}.new(@maker)\n@\#{plural} << \#{name}\nif block_given?\nyield \#{name}\nelse\n\#{name}\nend\nend\nalias new_child new_\#{name}\n\ndef to_feed(*args)\n@\#{plural}.each do |\#{name}|\n\#{name}.to_feed(*args)\nend\nend\n\ndef replace(elements)\n@\#{plural}.replace(elements.to_a)\nend\n", __FILE__, __LINE__ + 1) 51: end
# File lib/rss/maker/base.rb, line 92 92: def def_classed_element(name, class_name=nil, attribute_name=nil) 93: def_classed_element_without_accessor(name, class_name) 94: if attribute_name 95: module_eval("def \#{name}\nif block_given?\nyield(@\#{name})\nelse\n@\#{name}.\#{attribute_name}\nend\nend\n\ndef \#{name}=(new_value)\n@\#{name}.\#{attribute_name} = new_value\nend\n", __FILE__, __LINE__ + 1) 96: else 97: attr_reader name 98: end 99: end
# File lib/rss/maker/base.rb, line 75 75: def def_classed_element_without_accessor(name, class_name=nil) 76: class_name ||= Utils.to_class_name(name) 77: add_other_element(name) 78: add_need_initialize_variable(name, "make_#{name}") 79: module_eval("private\ndef setup_\#{name}(feed, current)\n@\#{name}.to_feed(feed, current)\nend\n\ndef make_\#{name}\nself.class::\#{class_name}.new(@maker)\nend\n", __FILE__, __LINE__ + 1) 80: end
# File lib/rss/maker/base.rb, line 114 114: def def_classed_elements(name, attribute, plural_class_name=nil, 115: plural_name=nil, new_name=nil) 116: plural_name ||= "#{name}s" 117: new_name ||= name 118: def_classed_element(plural_name, plural_class_name) 119: local_variable_name = "_#{name}" 120: new_value_variable_name = "new_value" 121: additional_setup_code = nil 122: if block_given? 123: additional_setup_code = yield(local_variable_name, 124: new_value_variable_name) 125: end 126: module_eval("def \#{name}\n\#{local_variable_name} = \#{plural_name}.first\n\#{local_variable_name} ? \#{local_variable_name}.\#{attribute} : nil\nend\n\ndef \#{name}=(\#{new_value_variable_name})\n\#{local_variable_name} =\n\#{plural_name}.first || \#{plural_name}.new_\#{new_name}\n\#{additional_setup_code}\n\#{local_variable_name}.\#{attribute} = \#{new_value_variable_name}\nend\n", __FILE__, __LINE__ + 1) 127: end
# File lib/rss/maker/base.rb, line 160 160: def def_csv_element(name, type=nil) 161: def_other_element_without_accessor(name) 162: attr_reader(name) 163: converter = "" 164: if type == :integer 165: converter = "{|v| Integer(v)}" 166: end 167: module_eval("def \#{name}=(value)\n@\#{name} = Utils::CSV.parse(value)\#{converter}\nend\n", __FILE__, __LINE__ + 1) 168: end
# File lib/rss/maker/base.rb, line 142 142: def def_other_element(name) 143: attr_accessor name 144: def_other_element_without_accessor(name) 145: end
# File lib/rss/maker/base.rb, line 147 147: def def_other_element_without_accessor(name) 148: add_need_initialize_variable(name) 149: add_other_element(name) 150: module_eval("def setup_\#{name}(feed, current)\nif !@\#{name}.nil? and current.respond_to?(:\#{name}=)\ncurrent.\#{name} = @\#{name}\nend\nend\n", __FILE__, __LINE__ + 1) 151: end
# File lib/rss/maker/base.rb, line 25 25: def inherited(subclass) 26: subclass.const_set("OTHER_ELEMENTS", []) 27: subclass.const_set("NEED_INITIALIZE_VARIABLES", []) 28: end
# File lib/rss/maker/base.rb, line 17 17: def need_initialize_variables 18: inherited_array_reader("NEED_INITIALIZE_VARIABLES") 19: end
# File lib/rss/maker/base.rb, line 177 177: def initialize(maker) 178: @maker = maker 179: @default_values_are_set = false 180: initialize_variables 181: end
# File lib/rss/maker/base.rb, line 14 14: def other_elements 15: inherited_array_reader("OTHER_ELEMENTS") 16: end
# File lib/rss/maker/base.rb, line 183 183: def have_required_values? 184: not_set_required_variables.empty? 185: end
# File lib/rss/maker/base.rb, line 187 187: def variable_is_set? 188: variables.any? {|var| not __send__(var).nil?} 189: end
# File lib/rss/maker/base.rb, line 192 192: def initialize_variables 193: self.class.need_initialize_variables.each do |variable_name, init_value| 194: instance_eval("@#{variable_name} = #{init_value}", __FILE__, __LINE__) 195: end 196: end
# File lib/rss/maker/base.rb, line 253 253: def not_set_required_variables 254: required_variable_names.find_all do |var| 255: __send__(var).nil? 256: end 257: end
# File lib/rss/maker/base.rb, line 259 259: def required_variables_are_set? 260: required_variable_names.each do |var| 261: return false if __send__(var).nil? 262: end 263: true 264: end
# File lib/rss/maker/base.rb, line 209 209: def set_default_values(&block) 210: return yield if @default_values_are_set 211: 212: begin 213: @default_values_are_set = true 214: _set_default_values(&block) 215: ensure 216: @default_values_are_set = false 217: end 218: end
# File lib/rss/maker/base.rb, line 241 241: def set_parent(target, parent) 242: target.parent = parent if target.class.need_parent? 243: end
# File lib/rss/maker/base.rb, line 198 198: def setup_other_elements(feed, current=nil) 199: current ||= current_element(feed) 200: self.class.other_elements.each do |element| 201: __send__("setup_#{element}", feed, current) 202: end 203: end
# File lib/rss/maker/base.rb, line 224 224: def setup_values(target) 225: set = false 226: if have_required_values? 227: variables.each do |var| 228: setter = "#{var}=" 229: if target.respond_to?(setter) 230: value = __send__(var) 231: if value 232: target.__send__(setter, value) 233: set = true 234: end 235: end 236: end 237: end 238: set 239: end