Class: RSS::Element

Inherits:
Object
  • Object
show all
Extended by:
BaseModel, Utils::InheritedReader
Includes:
SetupMaker
Defined in:
lib/rss/rss.rb

Constant Summary collapse

INDENT =
"  "
MUST_CALL_VALIDATORS =
{}
MODELS =
[]
GET_ATTRIBUTES =
[]
HAVE_CHILDREN_ELEMENTS =
[]
TO_ELEMENT_METHODS =
[]
NEED_INITIALIZE_VARIABLES =
[]
PLURAL_FORMS =
{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from BaseModel

install_date_element, install_have_child_element, install_have_children_element, install_text_element

Methods included from Utils

element_initialize_arguments?, get_file_and_line_from_caller, new_with_value_if_need, to_class_name

Methods included from Utils::InheritedReader

inherited_array_reader, inherited_hash_reader, inherited_reader

Methods included from SetupMaker

#setup_maker

Constructor Details

#initialize(do_validate = true, attrs = nil) ⇒ Element

Returns a new instance of Element.



874
875
876
877
878
879
880
881
882
# File 'lib/rss/rss.rb', line 874

def initialize(do_validate=true, attrs=nil)
  @parent = nil
  @converter = nil
  if attrs.nil? and (do_validate.is_a?(Hash) or do_validate.is_a?(Array))
    do_validate, attrs = true, do_validate
  end
  @do_validate = do_validate
  initialize_variables(attrs || {})
end

Instance Attribute Details

#do_validateObject

Returns the value of attribute do_validate.



872
873
874
# File 'lib/rss/rss.rb', line 872

def do_validate
  @do_validate
end

#parentObject

Returns the value of attribute parent.



872
873
874
# File 'lib/rss/rss.rb', line 872

def parent
  @parent
end

Class Method Details

.add_have_children_element(variable_name, plural_name) ⇒ Object



832
833
834
# File 'lib/rss/rss.rb', line 832

def add_have_children_element(variable_name, plural_name)
  self::HAVE_CHILDREN_ELEMENTS << [variable_name, plural_name]
end

.add_need_initialize_variable(variable_name) ⇒ Object



840
841
842
# File 'lib/rss/rss.rb', line 840

def add_need_initialize_variable(variable_name)
  self::NEED_INITIALIZE_VARIABLES << variable_name
end

.add_plural_form(singular, plural) ⇒ Object



844
845
846
# File 'lib/rss/rss.rb', line 844

def add_plural_form(singular, plural)
  self::PLURAL_FORMS[singular] = plural
end

.add_to_element_method(method_name) ⇒ Object



836
837
838
# File 'lib/rss/rss.rb', line 836

def add_to_element_method(method_name)
  self::TO_ELEMENT_METHODS << method_name
end

.content_setup(type = nil, disp_name = nil) ⇒ Object



821
822
823
824
825
826
# File 'lib/rss/rss.rb', line 821

def content_setup(type=nil, disp_name=nil)
  writer_type, reader_type = type
  def_corresponded_attr_writer :content, writer_type, disp_name
  def_corresponded_attr_reader :content, reader_type
  @have_content = true
end

.def_corresponded_attr_reader(name, type = nil) ⇒ Object



802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
# File 'lib/rss/rss.rb', line 802

def def_corresponded_attr_reader(name, type=nil)
  case type
  when :inherit
    inherit_convert_attr_reader name
  when :uri
    uri_convert_attr_reader name
  when :explicit_clean_other
    explicit_clean_other_attr_reader name
  when :yes_other
    yes_other_attr_reader name
  when :csv
    csv_attr_reader name
  when :csv_integer
    csv_attr_reader name, :separator => ","
  else
    convert_attr_reader name
  end
end

.def_corresponded_attr_writer(name, type = nil, disp_name = nil) ⇒ Object



770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
# File 'lib/rss/rss.rb', line 770

def def_corresponded_attr_writer(name, type=nil, disp_name=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
  when :text_type
    text_type_writer name, disp_name
  when :content
    content_writer name, disp_name
  when :explicit_clean_other
    explicit_clean_other_writer name, disp_name
  when :yes_other
    yes_other_writer name, disp_name
  when :csv
    csv_writer name, disp_name
  when :csv_integer
    csv_integer_writer name, disp_name
  when :itunes_episode
    itunes_episode_writer name, disp_name
  when :itunes_episode_type
    itunes_episode_type_writer name, disp_name
  else
    attr_writer name
  end
end

.get_attributesObject



707
708
709
# File 'lib/rss/rss.rb', line 707

def get_attributes
  inherited_array_reader("GET_ATTRIBUTES")
end

.have_children_elementsObject



710
711
712
# File 'lib/rss/rss.rb', line 710

def have_children_elements
  inherited_array_reader("HAVE_CHILDREN_ELEMENTS")
end

.have_content?Boolean

Returns:

  • (Boolean)


828
829
830
# File 'lib/rss/rss.rb', line 828

def have_content?
  @have_content
end

.inherited(klass) ⇒ Object



727
728
729
730
731
732
733
734
735
736
737
738
739
740
# File 'lib/rss/rss.rb', line 727

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, {})

  tag_name = klass.name.split(/::/).last
  tag_name[0, 1] = tag_name[0, 1].downcase
  klass.instance_variable_set(:@tag_name, tag_name)
  klass.instance_variable_set(:@have_content, false)
end

.inherited_baseObject



723
724
725
# File 'lib/rss/rss.rb', line 723

def inherited_base
  ::RSS::Element
end

.install_get_attribute(name, uri, required = true, type = nil, disp_name = nil, element_name = nil) ⇒ Object



755
756
757
758
759
760
761
762
763
764
765
766
767
768
# File 'lib/rss/rss.rb', line 755

def install_get_attribute(name, uri, required=true,
                          type=nil, disp_name=nil,
                          element_name=nil)
  disp_name ||= name
  element_name ||= name
  writer_type, reader_type = type
  def_corresponded_attr_writer name, writer_type, disp_name
  def_corresponded_attr_reader name, reader_type
  if type == :boolean and /\Ais/ =~ name
    alias_method "#{$POSTMATCH}?", name
  end
  self::GET_ATTRIBUTES << [name, uri, required, element_name]
  add_need_initialize_variable(disp_name)
end

.install_model(tag, uri, occurs = nil, getter = nil, plural = false) ⇒ Object



746
747
748
749
750
751
752
753
# File 'lib/rss/rss.rb', line 746

def install_model(tag, uri, occurs=nil, getter=nil, plural=false)
  getter ||= tag
  if m = self::MODELS.find {|t, u, o, g, p| t == tag and u == uri}
    m[2] = occurs
  else
    self::MODELS << [tag, uri, occurs, getter, plural]
  end
end

.install_must_call_validator(prefix, uri) ⇒ Object



742
743
744
# File 'lib/rss/rss.rb', line 742

def install_must_call_validator(prefix, uri)
  self::MUST_CALL_VALIDATORS[uri] = prefix
end

.install_ns(prefix, uri) ⇒ Object



860
861
862
863
864
865
# File 'lib/rss/rss.rb', line 860

def install_ns(prefix, uri)
  if self::NSPOOL.has_key?(prefix)
    raise OverlappedPrefixError.new(prefix)
  end
  self::NSPOOL[prefix] = uri
end

.modelsObject



704
705
706
# File 'lib/rss/rss.rb', line 704

def models
  inherited_array_reader("MODELS")
end

.must_call_validatorsObject



701
702
703
# File 'lib/rss/rss.rb', line 701

def must_call_validators
  inherited_hash_reader("MUST_CALL_VALIDATORS")
end

.need_initialize_variablesObject



716
717
718
# File 'lib/rss/rss.rb', line 716

def need_initialize_variables
  inherited_array_reader("NEED_INITIALIZE_VARIABLES")
end

.need_parent?Boolean

Returns:

  • (Boolean)


856
857
858
# File 'lib/rss/rss.rb', line 856

def need_parent?
  false
end

.plural_formsObject



719
720
721
# File 'lib/rss/rss.rb', line 719

def plural_forms
  inherited_hash_reader("PLURAL_FORMS")
end

.required_prefixObject



848
849
850
# File 'lib/rss/rss.rb', line 848

def required_prefix
  nil
end

.required_uriObject



852
853
854
# File 'lib/rss/rss.rb', line 852

def required_uri
  ""
end

.tag_nameObject



867
868
869
# File 'lib/rss/rss.rb', line 867

def tag_name
  @tag_name
end

.to_element_methodsObject



713
714
715
# File 'lib/rss/rss.rb', line 713

def to_element_methods
  inherited_array_reader("TO_ELEMENT_METHODS")
end

Instance Method Details

#convert(value) ⇒ Object



903
904
905
906
907
908
909
# File 'lib/rss/rss.rb', line 903

def convert(value)
  if @converter
    @converter.convert(value)
  else
    value
  end
end

#converter=(converter) ⇒ Object



892
893
894
895
896
897
898
899
900
901
# File 'lib/rss/rss.rb', line 892

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

#full_nameObject



888
889
890
# File 'lib/rss/rss.rb', line 888

def full_name
  tag_name
end

#have_xml_content?Boolean

Returns:

  • (Boolean)


953
954
955
# File 'lib/rss/rss.rb', line 953

def have_xml_content?
  false
end

#need_base64_encode?Boolean

Returns:

  • (Boolean)


957
958
959
# File 'lib/rss/rss.rb', line 957

def need_base64_encode?
  false
end

#set_next_element(tag_name, next_element) ⇒ Object



961
962
963
964
965
966
967
968
969
970
971
972
# File 'lib/rss/rss.rb', line 961

def set_next_element(tag_name, next_element)
  klass = next_element.class
  prefix = ""
  prefix << "#{klass.required_prefix}_" if klass.required_prefix
  key = "#{prefix}#{tag_name.gsub(/-/, '_')}"
  if self.class.plural_forms.has_key?(key)
    ary = __send__("#{self.class.plural_forms[key]}")
    ary << next_element
  else
    __send__("#{key}=", next_element)
  end
end

#tag_nameObject



884
885
886
# File 'lib/rss/rss.rb', line 884

def tag_name
  self.class.tag_name
end

#to_s(need_convert = true, indent = '') ⇒ Object



932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
# File 'lib/rss/rss.rb', line 932

def to_s(need_convert=true, indent='')
  if self.class.have_content?
    return "" if !empty_content? and !content_is_set?
    rv = tag(indent) do |next_indent|
      if empty_content?
        ""
      else
        xmled_content
      end
    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

#valid?(ignore_unknown_element = true) ⇒ Boolean

Returns:

  • (Boolean)


911
912
913
914
915
916
# File 'lib/rss/rss.rb', line 911

def valid?(ignore_unknown_element=true)
  validate(ignore_unknown_element)
  true
rescue RSS::Error
  false
end

#validate(ignore_unknown_element = true) ⇒ Object



918
919
920
921
922
923
924
925
# File 'lib/rss/rss.rb', line 918

def validate(ignore_unknown_element=true)
  do_validate = @do_validate
  @do_validate = true
  validate_attribute
  __validate(ignore_unknown_element)
ensure
  @do_validate = do_validate
end

#validate_for_stream(tags, ignore_unknown_element = true) ⇒ Object



927
928
929
930
# File 'lib/rss/rss.rb', line 927

def validate_for_stream(tags, ignore_unknown_element=true)
  validate_attribute
  __validate(ignore_unknown_element, tags, false)
end