Class: RSS::Element

Inherits:
Object
  • Object
show all
Extended by:
BaseModel
Includes:
Utils
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, html_escape, new_with_value_if_need, to_class_name

Constructor Details

#initialize(do_validate = true, attrs = {}) ⇒ Element

Returns a new instance of Element.



569
570
571
572
573
# File 'lib/rss/rss.rb', line 569

def initialize(do_validate=true, attrs={})
  @converter = nil
  @do_validate = do_validate
  initialize_variables(attrs)
end

Instance Attribute Details

#do_validate ⇒ Object

Returns the value of attribute do_validate.



567
568
569
# File 'lib/rss/rss.rb', line 567

def do_validate
  @do_validate
end

Class Method Details

.get_attributes ⇒ Object



420
421
422
# File 'lib/rss/rss.rb', line 420

def get_attributes
  GET_ATTRIBUTES
end

.have_children_elements ⇒ Object



423
424
425
# File 'lib/rss/rss.rb', line 423

def have_children_elements
  HAVE_CHILDREN_ELEMENTS
end

.inherited(klass) ⇒ Object



437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
# File 'lib/rss/rss.rb', line 437

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

  klass.module_eval("  public\n  \n  @tag_name = name.split(/::/).last\n  @tag_name[0,1] = @tag_name[0,1].downcase\n  @have_content = false\n\n  def self.must_call_validators\n    super.merge(MUST_CALL_VALIDATORS)\n  end\n  def self.models\n    MODELS + super\n  end\n  def self.get_attributes\n    GET_ATTRIBUTES + super\n  end\n  def self.have_children_elements\n    HAVE_CHILDREN_ELEMENTS + super\n  end\n  def self.to_element_methods\n    TO_ELEMENT_METHODS + super\n  end\n  def self.need_initialize_variables\n    NEED_INITIALIZE_VARIABLES + super\n  end\n  def self.plural_forms\n    super.merge(PLURAL_FORMS)\n  end\n\n\n  def self.install_must_call_validator(prefix, uri)\n    MUST_CALL_VALIDATORS[uri] = prefix\n  end\n  \n  def self.install_model(tag, uri, occurs=nil, getter=nil)\n    getter ||= tag\n    if m = MODELS.find {|t, u, o, g| t == tag and u == uri}\n      m[2] = occurs\n    else\n      MODELS << [tag, uri, occurs, getter]\n    end\n  end\n\n  def self.install_get_attribute(name, uri, required=true,\n                                 type=nil, disp_name=nil,\n                                 element_name=nil)\n    disp_name ||= name\n    element_name ||= name\n    def_corresponded_attr_writer name, type, disp_name\n    convert_attr_reader name\n    if type == :boolean and /^is/ =~ name\n      alias_method \"\\\#{$POSTMATCH}?\", name\n    end\n    GET_ATTRIBUTES << [name, uri, required, element_name]\n    add_need_initialize_variable(disp_name)\n  end\n\n  def self.def_corresponded_attr_writer(name, type=nil, disp_name=name)\n    case type\n    when :integer\n      integer_writer name, disp_name\n    when :positive_integer\n      positive_integer_writer name, disp_name\n    when :boolean\n      boolean_writer name, disp_name\n    when :w3cdtf, :rfc822, :rfc2822\n      date_writer name, type, disp_name\n    else\n      attr_writer name\n    end\n  end\n\n  def self.content_setup(type=nil)\n    def_corresponded_attr_writer \"content\", type\n    convert_attr_reader :content\n    @have_content = true\n  end\n\n  def self.have_content?\n    @have_content\n  end\n\n  def self.add_have_children_element(variable_name, plural_name)\n    HAVE_CHILDREN_ELEMENTS << [variable_name, plural_name]\n  end\n  \n  def self.add_to_element_method(method_name)\n    TO_ELEMENT_METHODS << method_name\n  end\n\n  def self.add_need_initialize_variable(variable_name)\n    NEED_INITIALIZE_VARIABLES << variable_name\n  end\n  \n  def self.add_plural_form(singular, plural)\n    PLURAL_FORMS[singular] = plural\n  end\n  \n  EOC\nend\n")

.install_ns(prefix, uri) ⇒ Object



555
556
557
558
559
560
# File 'lib/rss/rss.rb', line 555

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

.models ⇒ Object



417
418
419
# File 'lib/rss/rss.rb', line 417

def models
  MODELS
end

.must_call_validators ⇒ Object



414
415
416
# File 'lib/rss/rss.rb', line 414

def must_call_validators
  MUST_CALL_VALIDATORS
end

.need_initialize_variables ⇒ Object



429
430
431
# File 'lib/rss/rss.rb', line 429

def need_initialize_variables
  NEED_INITIALIZE_VARIABLES
end

.plural_forms ⇒ Object



432
433
434
# File 'lib/rss/rss.rb', line 432

def plural_forms
  PLURAL_FORMS
end

.required_prefix ⇒ Object



547
548
549
# File 'lib/rss/rss.rb', line 547

def required_prefix
  nil
end

.required_uri ⇒ Object



551
552
553
# File 'lib/rss/rss.rb', line 551

def required_uri
  ""
end

.tag_name ⇒ Object



562
563
564
# File 'lib/rss/rss.rb', line 562

def tag_name
  @tag_name
end

.to_element_methods ⇒ Object



426
427
428
# File 'lib/rss/rss.rb', line 426

def to_element_methods
  TO_ELEMENT_METHODS
end

Instance Method Details

#convert(value) ⇒ Object



594
595
596
597
598
599
600
# File 'lib/rss/rss.rb', line 594

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

#converter=(converter) ⇒ Object



583
584
585
586
587
588
589
590
591
592
# File 'lib/rss/rss.rb', line 583

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_name ⇒ Object



579
580
581
# File 'lib/rss/rss.rb', line 579

def full_name
  tag_name
end

#setup_maker(maker) ⇒ Object



612
613
614
615
616
617
618
619
# File 'lib/rss/rss.rb', line 612

def setup_maker(maker)
  target = maker_target(maker)
  unless target.nil?
    setup_maker_attributes(target)
    setup_maker_element(target)
    setup_maker_elements(target)
  end
end

#tag_name ⇒ Object



575
576
577
# File 'lib/rss/rss.rb', line 575

def tag_name
  self.class.tag_name
end

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



621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
# File 'lib/rss/rss.rb', line 621

def to_s(need_convert=true, indent='')
  if self.class.have_content?
    return "" unless @content
    rv = tag(indent) do |next_indent|
      h(@content)
    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

#validate(ignore_unknown_element = true) ⇒ Object



602
603
604
605
# File 'lib/rss/rss.rb', line 602

def validate(ignore_unknown_element=true)
  validate_attribute
  __validate(ignore_unknown_element)
end

#validate_for_stream(tags, ignore_unknown_element = true) ⇒ Object



607
608
609
610
# File 'lib/rss/rss.rb', line 607

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