module RSS::BaseDublinCoreModel - rss: Ruby Standard Library Documentation

# module RSS::BaseDublinCoreModel

### Public Instance Methods

append_features(klass) click to toggle source
Calls superclass method

    # File rss-0.3.1/lib/rss/dublincore.rb, line 11
        def append_features(klass)
          super

          return if klass.instance_of?(Module)
          DublinCoreModel::ELEMENT_NAME_INFOS.each do |name, plural_name|
            plural = plural_name || "#{name}s"
            full_name = "#{DC_PREFIX}_#{name}"
            full_plural_name = "#{DC_PREFIX}_#{plural}"
            klass_name = "DublinCore#{Utils.to_class_name(name)}"
            klass.install_must_call_validator(DC_PREFIX, DC_URI)
            klass.install_have_children_element(name, DC_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

              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}=
            EOC
          end
          klass.module_eval(<<-EOC, *get_file_and_line_from_caller(0))
            if method_defined?(:date)
              alias date_without_#{DC_PREFIX}_date= date=

              def date=(value)
                self.date_without_#{DC_PREFIX}_date = value
                self.#{DC_PREFIX}_date = value
              end
            else
              alias date #{DC_PREFIX}_date
              alias date= #{DC_PREFIX}_date=
            end

            # For backward compatibility
            alias #{DC_PREFIX}_rightses #{DC_PREFIX}_rights_list
          EOC
        end