xspf 0.3 → 0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +1 -1
- data/ChangeLog +15 -0
- data/README +6 -9
- data/USAGE +350 -0
- data/coverage/index.html +17 -17
- data/coverage/lib-xspf_rb.html +466 -305
- data/doc/created.rid +1 -1
- data/doc/fr_file_index.html +4 -0
- data/doc/fr_method_index.html +88 -44
- data/doc/index.html +1 -1
- data/examples/parse_and_generate_right.rb +25 -0
- data/examples/parse_and_generate_right_too.rb +27 -0
- data/examples/parse_and_generate_wrong.rb +25 -0
- data/examples/{example.rb → parse_from_file.rb} +15 -16
- data/examples/parse_from_string.rb +70 -0
- data/examples/playlist-tiersen.xspf +100 -0
- data/lib/xspf.rb +335 -174
- data/test/tc_dogfood.rb +106 -0
- data/test/tc_generate_output_formats.rb +352 -0
- data/test/tc_generate_playlist.rb +196 -0
- data/test/tc_generate_track.rb +38 -0
- data/test/tc_generate_tracklist.rb +72 -0
- data/test/tc_generate_xspf.rb +90 -0
- data/test/{tc_output_formats.rb → tc_parse_output_formats.rb} +124 -9
- data/test/{tc_playlist.rb → tc_parse_playlist.rb} +9 -1
- data/test/{tc_track.rb → tc_parse_track.rb} +1 -1
- data/test/{tc_tracklist.rb → tc_parse_tracklist.rb} +1 -1
- data/test/{tc_xspf.rb → tc_parse_xspf.rb} +4 -3
- data/test/ts_xspf.rb +12 -5
- data/xspf-expanded.rb +644 -76
- metadata +30 -16
data/coverage/lib-xspf_rb.html
CHANGED
@@ -554,7 +554,7 @@ span.run100 {
|
|
554
554
|
</head>
|
555
555
|
<body>
|
556
556
|
<h3>C0 code coverage information</h3>
|
557
|
-
<p>Generated on
|
557
|
+
<p>Generated on Mon Oct 30 22:55:21 CET 2006 with <a href='http://eigenclass.org/hiki.rb?rcov'>rcov 0.7.0</a>
|
558
558
|
</p>
|
559
559
|
<hr /><pre><span class='marked0'>Code reported as executed by Ruby looks like this...
|
560
560
|
</span><span class='marked1'>and this: this line is also marked as covered.
|
@@ -578,21 +578,21 @@ span.run100 {
|
|
578
578
|
<a href='lib-xspf_rb.html'>lib/xspf.rb</a>
|
579
579
|
</td>
|
580
580
|
<td class='value'>
|
581
|
-
<tt>
|
581
|
+
<tt>480</tt>
|
582
582
|
</td>
|
583
583
|
<td class='value'>
|
584
|
-
<tt>
|
584
|
+
<tt>321</tt>
|
585
585
|
</td>
|
586
586
|
<td>
|
587
587
|
<table cellspacing='0' cellpadding='0' align='right'>
|
588
588
|
<tr>
|
589
589
|
<td>
|
590
|
-
<tt>
|
590
|
+
<tt>100.0%</tt> </td>
|
591
591
|
<td>
|
592
592
|
<table cellspacing='0' class='percent_graph' cellpadding='0' width='100'>
|
593
593
|
<tr>
|
594
|
-
<td class='covered' width='
|
595
|
-
<td class='uncovered' width='
|
594
|
+
<td class='covered' width='100' />
|
595
|
+
<td class='uncovered' width='0' />
|
596
596
|
</tr>
|
597
597
|
</table>
|
598
598
|
</td>
|
@@ -603,12 +603,12 @@ span.run100 {
|
|
603
603
|
<table cellspacing='0' cellpadding='0' align='right'>
|
604
604
|
<tr>
|
605
605
|
<td>
|
606
|
-
<tt>
|
606
|
+
<tt>100.0%</tt> </td>
|
607
607
|
<td>
|
608
608
|
<table cellspacing='0' class='percent_graph' cellpadding='0' width='100'>
|
609
609
|
<tr>
|
610
|
-
<td class='covered' width='
|
611
|
-
<td class='uncovered' width='
|
610
|
+
<td class='covered' width='100' />
|
611
|
+
<td class='uncovered' width='0' />
|
612
612
|
</tr>
|
613
613
|
</table>
|
614
614
|
</td>
|
@@ -626,316 +626,477 @@ span.run100 {
|
|
626
626
|
</span><span class="inferred1"><a name="line7" /> 7 # association with the Ruby license, the GPL). See the "doc" subdirectory of
|
627
627
|
</span><span class="inferred0"><a name="line8" /> 8 # the XSPF distribution for the texts of these licenses.
|
628
628
|
</span><span class="inferred1"><a name="line9" /> 9 # -----------------------------------------------------------------------------
|
629
|
-
</span><span class="inferred0"><a name="line10" /> 10 # XSPF for Ruby website : http://
|
629
|
+
</span><span class="inferred0"><a name="line10" /> 10 # XSPF for Ruby website : http://xspf.rubyforge.org
|
630
630
|
</span><span class="inferred1"><a name="line11" /> 11 # =============================================================================
|
631
631
|
</span><span class="inferred0"><a name="line12" /> 12 #++
|
632
632
|
</span><span class="inferred1"><a name="line13" /> 13
|
633
633
|
</span><span class="marked0"><a name="line14" /> 14 require 'rexml/document'
|
634
634
|
</span><span class="marked1"><a name="line15" /> 15 require 'xml/xslt'
|
635
635
|
</span><span class="inferred0"><a name="line16" /> 16
|
636
|
-
</span><span class="inferred1"><a name="line17" /> 17 # :
|
637
|
-
</span><span class="inferred0"><a name="line18" /> 18
|
638
|
-
</span><span class="
|
639
|
-
</span><span class="
|
640
|
-
</span><span class="inferred1"><a name="line21" /> 21
|
641
|
-
</span><span class="
|
642
|
-
</span><span class="marked1"><a name="line23" /> 23
|
643
|
-
</span><span class="
|
644
|
-
</span><span class="
|
645
|
-
</span><span class="inferred0"><a name="line26" /> 26
|
646
|
-
</span><span class="inferred1"><a name="line27" /> 27
|
647
|
-
</span><span class="
|
648
|
-
</span><span class="
|
649
|
-
</span><span class="
|
650
|
-
</span><span class="
|
651
|
-
</span><span class="
|
652
|
-
</span><span class="
|
653
|
-
</span><span class="
|
654
|
-
</span><span class="inferred1"><a name="line35" /> 35
|
655
|
-
</span><span class="inferred0"><a name="line36" /> 36
|
656
|
-
</span><span class="
|
657
|
-
</span><span class="
|
658
|
-
</span><span class="
|
659
|
-
</span><span class="inferred0"><a name="line40" /> 40
|
660
|
-
</span><span class="
|
661
|
-
</span><span class="inferred0"><a name="line42" /> 42
|
662
|
-
</span><span class="
|
663
|
-
</span><span class="
|
664
|
-
</span><span class="
|
665
|
-
</span><span class="
|
666
|
-
</span><span class="
|
667
|
-
</span><span class="
|
668
|
-
</span><span class="
|
669
|
-
</span><span class="
|
670
|
-
</span><span class="
|
671
|
-
</span><span class="inferred0"><a name="line52" /> 52
|
672
|
-
</span><span class="inferred1"><a name="line53" /> 53
|
673
|
-
</span><span class="inferred0"><a name="line54" /> 54
|
674
|
-
</span><span class="inferred1"><a name="line55" /> 55
|
675
|
-
</span><span class="inferred0"><a name="line56" /> 56
|
676
|
-
</span><span class="
|
677
|
-
</span><span class="
|
678
|
-
</span><span class="
|
679
|
-
</span><span class="inferred0"><a name="line60" /> 60 #
|
680
|
-
</span><span class="inferred1"><a name="line61" /> 61 #
|
681
|
-
</span><span class="inferred0"><a name="line62" /> 62
|
682
|
-
</span><span class="inferred1"><a name="line63" /> 63
|
683
|
-
</span><span class="inferred0"><a name="line64" /> 64
|
684
|
-
</span><span class="inferred1"><a name="line65" /> 65
|
685
|
-
</span><span class="inferred0"><a name="line66" /> 66
|
686
|
-
</span><span class="inferred1"><a name="line67" /> 67
|
687
|
-
</span><span class="inferred0"><a name="line68" /> 68
|
688
|
-
</span><span class="
|
689
|
-
</span><span class="inferred0"><a name="line70" /> 70
|
690
|
-
</span><span class="
|
691
|
-
</span><span class="
|
692
|
-
</span><span class="
|
693
|
-
</span><span class="inferred0"><a name="line74" /> 74
|
694
|
-
</span><span class="inferred1"><a name="line75" /> 75
|
695
|
-
</span><span class="inferred0"><a name="line76" /> 76
|
696
|
-
</span><span class="inferred1"><a name="line77" /> 77
|
697
|
-
</span><span class="inferred0"><a name="line78" /> 78
|
698
|
-
</span><span class="inferred1"><a name="line79" /> 79
|
699
|
-
</span><span class="inferred0"><a name="line80" /> 80
|
700
|
-
</span><span class="
|
701
|
-
</span><span class="inferred0"><a name="line82" /> 82
|
702
|
-
</span><span class="
|
703
|
-
</span><span class="inferred0"><a name="line84" /> 84
|
704
|
-
</span><span class="inferred1"><a name="line85" /> 85
|
705
|
-
</span><span class="
|
706
|
-
</span><span class="
|
707
|
-
</span><span class="
|
708
|
-
</span><span class="inferred1"><a name="line89" /> 89
|
709
|
-
</span><span class="
|
710
|
-
</span><span class="
|
711
|
-
</span><span class="
|
712
|
-
</span><span class="
|
713
|
-
</span><span class="
|
714
|
-
</span><span class="inferred1"><a name="line95" /> 95
|
715
|
-
</span><span class="
|
716
|
-
</span><span class="
|
717
|
-
</span><span class="inferred0"><a name="line98" /> 98
|
718
|
-
</span><span class="inferred1"><a name="line99" /> 99
|
719
|
-
</span><span class="
|
720
|
-
</span><span class="
|
721
|
-
</span><span class="inferred0"><a name="line102" />102
|
722
|
-
</span><span class="inferred1"><a name="line103" />103
|
723
|
-
</span><span class="inferred0"><a name="line104" />104
|
724
|
-
</span><span class="inferred1"><a name="line105" />105
|
725
|
-
</span><span class="inferred0"><a name="line106" />106
|
726
|
-
</span><span class="inferred1"><a name="line107" />107
|
727
|
-
</span><span class="inferred0"><a name="line108" />108
|
728
|
-
</span><span class="
|
729
|
-
</span><span class="
|
730
|
-
</span><span class="
|
731
|
-
</span><span class="
|
732
|
-
</span><span class="inferred1"><a name="line113" />113
|
733
|
-
</span><span class="
|
734
|
-
</span><span class="inferred1"><a name="line115" />115
|
735
|
-
</span><span class="
|
736
|
-
</span><span class="
|
737
|
-
</span><span class="inferred0"><a name="line118" />118
|
738
|
-
</span><span class="
|
739
|
-
</span><span class="inferred0"><a name="line120" />120
|
740
|
-
</span><span class="
|
741
|
-
</span><span class="
|
742
|
-
</span><span class="
|
743
|
-
</span><span class="
|
744
|
-
</span><span class="inferred1"><a name="line125" />125
|
745
|
-
</span><span class="
|
746
|
-
</span><span class="inferred1"><a name="line127" />127
|
747
|
-
</span><span class="inferred0"><a name="line128" />128
|
748
|
-
</span><span class="inferred1"><a name="line129" />129
|
749
|
-
</span><span class="
|
750
|
-
</span><span class="
|
751
|
-
</span><span class="
|
752
|
-
</span><span class="
|
753
|
-
</span><span class="inferred0"><a name="line134" />134
|
754
|
-
</span><span class="inferred1"><a name="line135" />135
|
755
|
-
</span><span class="
|
756
|
-
</span><span class="inferred1"><a name="line137" />137
|
757
|
-
</span><span class="inferred0"><a name="line138" />138
|
758
|
-
</span><span class="
|
759
|
-
</span><span class="inferred0"><a name="line140" />140
|
760
|
-
</span><span class="
|
761
|
-
</span><span class="inferred0"><a name="line142" />142
|
762
|
-
</span><span class="inferred1"><a name="line143" />143
|
763
|
-
</span><span class="
|
764
|
-
</span><span class="
|
765
|
-
</span><span class="
|
766
|
-
</span><span class="inferred1"><a name="line147" />147
|
767
|
-
</span><span class="
|
768
|
-
</span><span class="
|
769
|
-
</span><span class="
|
770
|
-
</span><span class="inferred1"><a name="line151" />151
|
771
|
-
</span><span class="inferred0"><a name="line152" />152
|
772
|
-
</span><span class="inferred1"><a name="line153" />153
|
773
|
-
</span><span class="
|
774
|
-
</span><span class="
|
775
|
-
</span><span class="
|
776
|
-
</span><span class="
|
777
|
-
</span><span class="
|
778
|
-
</span><span class="inferred1"><a name="line159" />159
|
779
|
-
</span><span class="inferred0"><a name="line160" />160
|
780
|
-
</span><span class="inferred1"><a name="line161" />161
|
781
|
-
</span><span class="
|
782
|
-
</span><span class="
|
783
|
-
</span><span class="
|
784
|
-
</span><span class="marked1"><a name="line165" />165
|
636
|
+
</span><span class="inferred1"><a name="line17" /> 17 # :include: USAGE
|
637
|
+
</span><span class="inferred0"><a name="line18" /> 18 # :main: USAGE
|
638
|
+
</span><span class="inferred1"><a name="line19" /> 19
|
639
|
+
</span><span class="marked0"><a name="line20" /> 20 module MetaGen #:nodoc:
|
640
|
+
</span><span class="inferred1"><a name="line21" /> 21
|
641
|
+
</span><span class="inferred0"><a name="line22" /> 22 # define the method
|
642
|
+
</span><span class="marked1"><a name="line23" /> 23 def self.add_method(klass, meth_name, body, meth_rdoc)
|
643
|
+
</span><span class="marked0"><a name="line24" /> 24 code = <<-CODE
|
644
|
+
</span><span class="inferred1"><a name="line25" /> 25 # #{meth_rdoc}
|
645
|
+
</span><span class="inferred0"><a name="line26" /> 26 def #{meth_name.downcase}
|
646
|
+
</span><span class="inferred1"><a name="line27" /> 27 @#{meth_name}
|
647
|
+
</span><span class="inferred0"><a name="line28" /> 28 end
|
648
|
+
</span><span class="inferred1"><a name="line29" /> 29
|
649
|
+
</span><span class="inferred0"><a name="line30" /> 30 def #{meth_name.downcase}=(value)
|
650
|
+
</span><span class="inferred1"><a name="line31" /> 31 @#{meth_name.downcase} = value
|
651
|
+
</span><span class="inferred0"><a name="line32" /> 32 end
|
652
|
+
</span><span class="inferred1"><a name="line33" /> 33
|
653
|
+
</span><span class="inferred0"><a name="line34" /> 34 private
|
654
|
+
</span><span class="inferred1"><a name="line35" /> 35 def parse_#{meth_name.downcase}
|
655
|
+
</span><span class="inferred0"><a name="line36" /> 36 begin
|
656
|
+
</span><span class="inferred1"><a name="line37" /> 37 #{body}
|
657
|
+
</span><span class="inferred0"><a name="line38" /> 38 rescue NoMethodError
|
658
|
+
</span><span class="inferred1"><a name="line39" /> 39 return nil
|
659
|
+
</span><span class="inferred0"><a name="line40" /> 40 end
|
660
|
+
</span><span class="inferred1"><a name="line41" /> 41 end
|
661
|
+
</span><span class="inferred0"><a name="line42" /> 42 CODE
|
662
|
+
</span><span class="inferred1"><a name="line43" /> 43
|
663
|
+
</span><span class="marked0"><a name="line44" /> 44 klass.module_eval(code)
|
664
|
+
</span><span class="inferred1"><a name="line45" /> 45
|
665
|
+
</span><span class="inferred0"><a name="line46" /> 46 # hook to write klass + name attrib to a file
|
666
|
+
</span><span class="marked1"><a name="line47" /> 47 if $META_RDOC
|
667
|
+
</span><span class="marked0"><a name="line48" /> 48 open($META_RDOC, 'a+') do |f|
|
668
|
+
</span><span class="marked1"><a name="line49" /> 49 f.puts("class #{klass}\n #{code}\n end")
|
669
|
+
</span><span class="inferred0"><a name="line50" /> 50 end
|
670
|
+
</span><span class="inferred1"><a name="line51" /> 51 end
|
671
|
+
</span><span class="inferred0"><a name="line52" /> 52
|
672
|
+
</span><span class="inferred1"><a name="line53" /> 53 end
|
673
|
+
</span><span class="inferred0"><a name="line54" /> 54
|
674
|
+
</span><span class="inferred1"><a name="line55" /> 55 # output in different formats
|
675
|
+
</span><span class="inferred0"><a name="line56" /> 56 # FIXME Only works in parse mode, not in generation mode.
|
676
|
+
</span><span class="marked1"><a name="line57" /> 57 def self.add_output_format(klass, format, meth_rdoc)
|
677
|
+
</span><span class="marked0"><a name="line58" /> 58 xslt_path = "'#{File.join( File.dirname(__FILE__), %Q{xspf2#{format}.xsl} )}'"
|
678
|
+
</span><span class="marked1"><a name="line59" /> 59 code = <<-CODE
|
679
|
+
</span><span class="inferred0"><a name="line60" /> 60 # #{meth_rdoc}
|
680
|
+
</span><span class="inferred1"><a name="line61" /> 61 def to_#{format}
|
681
|
+
</span><span class="inferred0"><a name="line62" /> 62 xslt = XML::XSLT.new
|
682
|
+
</span><span class="inferred1"><a name="line63" /> 63 xslt.xml = self.to_xml
|
683
|
+
</span><span class="inferred0"><a name="line64" /> 64 xslt.xsl = REXML::Document.new( File.new( #{xslt_path} ) )
|
684
|
+
</span><span class="inferred1"><a name="line65" /> 65 xslt.serve
|
685
|
+
</span><span class="inferred0"><a name="line66" /> 66 end
|
686
|
+
</span><span class="inferred1"><a name="line67" /> 67 CODE
|
687
|
+
</span><span class="inferred0"><a name="line68" /> 68
|
688
|
+
</span><span class="marked1"><a name="line69" /> 69 klass.module_eval(code)
|
689
|
+
</span><span class="inferred0"><a name="line70" /> 70
|
690
|
+
</span><span class="marked1"><a name="line71" /> 71 if $META_RDOC
|
691
|
+
</span><span class="marked0"><a name="line72" /> 72 open($META_RDOC, 'a+') do |f|
|
692
|
+
</span><span class="marked1"><a name="line73" /> 73 f.puts("class #{klass}\n #{code}\n end")
|
693
|
+
</span><span class="inferred0"><a name="line74" /> 74 end
|
694
|
+
</span><span class="inferred1"><a name="line75" /> 75 end
|
695
|
+
</span><span class="inferred0"><a name="line76" /> 76
|
696
|
+
</span><span class="inferred1"><a name="line77" /> 77 end
|
697
|
+
</span><span class="inferred0"><a name="line78" /> 78
|
698
|
+
</span><span class="inferred1"><a name="line79" /> 79 end
|
699
|
+
</span><span class="inferred0"><a name="line80" /> 80
|
700
|
+
</span><span class="marked1"><a name="line81" /> 81 class XSPF
|
701
|
+
</span><span class="inferred0"><a name="line82" /> 82
|
702
|
+
</span><span class="marked1"><a name="line83" /> 83 attr_reader :xspf
|
703
|
+
</span><span class="inferred0"><a name="line84" /> 84
|
704
|
+
</span><span class="inferred1"><a name="line85" /> 85 #:stopdoc:
|
705
|
+
</span><span class="marked0"><a name="line86" /> 86 ATTRIBUTES = %w{ version encoding }
|
706
|
+
</span><span class="marked1"><a name="line87" /> 87 VERSION_RDOC = 'Version for the XML document or _nil_ if not defined'
|
707
|
+
</span><span class="marked0"><a name="line88" /> 88 ENCODING_RDOC = 'Encoding of the XML document or _nil_ if not defined'
|
708
|
+
</span><span class="inferred1"><a name="line89" /> 89
|
709
|
+
</span><span class="marked0"><a name="line90" /> 90 OUTPUT_FORMATS = %w{ m3u html smil soundblox }
|
710
|
+
</span><span class="marked1"><a name="line91" /> 91 M3U_RDOC = 'Creates a .m3u playlist from the XSPF document. This method makes use of the official XSPF to M3U XSLT transformation by Lucas Gonze.'
|
711
|
+
</span><span class="marked0"><a name="line92" /> 92 HTML_RDOC = 'Outputs the playlist as an HTML page. This method makes use of the official XSPF to HTML XSLT transformation by Lucas Gonze.'
|
712
|
+
</span><span class="marked1"><a name="line93" /> 93 SMIL_RDOC = 'Creates a .smil playlist from the XSPF document. This method makes use of the official XSPF to SMIL XSLT transformation by Lucas Gonze.'
|
713
|
+
</span><span class="marked0"><a name="line94" /> 94 SOUNDBLOX_RDOC = 'Creates a SoundBlox playlist from the XSPF document. This method makes use of the official XSPF to SoundBlox XSLT tranformation by Lucas Gonze.'
|
714
|
+
</span><span class="inferred1"><a name="line95" /> 95
|
715
|
+
</span><span class="marked0"><a name="line96" /> 96 ATTRIBUTES.each do |attrib|
|
716
|
+
</span><span class="marked1"><a name="line97" /> 97 MetaGen.add_method(self, attrib, "@xspf.#{attrib}", eval(attrib.upcase + '_RDOC').to_s )
|
717
|
+
</span><span class="inferred0"><a name="line98" /> 98 end
|
718
|
+
</span><span class="inferred1"><a name="line99" /> 99
|
719
|
+
</span><span class="marked0"><a name="line100" />100 OUTPUT_FORMATS.each do |format|
|
720
|
+
</span><span class="marked1"><a name="line101" />101 MetaGen.add_output_format(self, format, eval(format.upcase + '_RDOC').to_s )
|
721
|
+
</span><span class="inferred0"><a name="line102" />102 end
|
722
|
+
</span><span class="inferred1"><a name="line103" />103
|
723
|
+
</span><span class="inferred0"><a name="line104" />104 #:startdoc:
|
724
|
+
</span><span class="inferred1"><a name="line105" />105
|
725
|
+
</span><span class="inferred0"><a name="line106" />106 # Creates a XSPF object from a file or string (parse mode) or from a hash or nil (generation mode).
|
726
|
+
</span><span class="inferred1"><a name="line107" />107 #
|
727
|
+
</span><span class="inferred0"><a name="line108" />108 # Possible keys in the hash: :version, :encoding
|
728
|
+
</span><span class="marked1"><a name="line109" />109 def initialize(source = nil)
|
729
|
+
</span><span class="marked0"><a name="line110" />110 if ( source.nil? || source.instance_of?(Hash) ) then
|
730
|
+
</span><span class="marked1"><a name="line111" />111 @version = if source.nil? || !source.has_key?(:version)
|
731
|
+
</span><span class="marked0"><a name="line112" />112 '1.0'
|
732
|
+
</span><span class="inferred1"><a name="line113" />113 else
|
733
|
+
</span><span class="marked0"><a name="line114" />114 source[:version]
|
734
|
+
</span><span class="inferred1"><a name="line115" />115 end
|
735
|
+
</span><span class="marked0"><a name="line116" />116 @encoding = if source.nil? || !source.has_key?(:encoding)
|
736
|
+
</span><span class="marked1"><a name="line117" />117 'UTF-8'
|
737
|
+
</span><span class="inferred0"><a name="line118" />118 else
|
738
|
+
</span><span class="marked1"><a name="line119" />119 source[:encoding]
|
739
|
+
</span><span class="inferred0"><a name="line120" />120 end
|
740
|
+
</span><span class="marked1"><a name="line121" />121 @playlist = nil
|
741
|
+
</span><span class="marked0"><a name="line122" />122 @playlist = if !source.nil? && source.has_key?(:playlist) then
|
742
|
+
</span><span class="marked1"><a name="line123" />123 if source[:playlist].instance_of?(XSPF::Playlist)
|
743
|
+
</span><span class="marked0"><a name="line124" />124 source[:playlist]
|
744
|
+
</span><span class="inferred1"><a name="line125" />125 else
|
745
|
+
</span><span class="marked0"><a name="line126" />126 raise(TypeError, 'You must pass a file/string (parsing mode) or a hash/nothing (generator mode) as argument to XSPF#new')
|
746
|
+
</span><span class="inferred1"><a name="line127" />127 end
|
747
|
+
</span><span class="inferred0"><a name="line128" />128 end
|
748
|
+
</span><span class="inferred1"><a name="line129" />129
|
749
|
+
</span><span class="marked0"><a name="line130" />130 elsif ( source.instance_of?(File) || source.instance_of?(String) ) then
|
750
|
+
</span><span class="marked1"><a name="line131" />131 @xspf = REXML::Document.new(source)
|
751
|
+
</span><span class="marked0"><a name="line132" />132 ATTRIBUTES.each do |attrib|
|
752
|
+
</span><span class="marked1"><a name="line133" />133 eval('@' + attrib + '= parse_' + attrib)
|
753
|
+
</span><span class="inferred0"><a name="line134" />134 end
|
754
|
+
</span><span class="inferred1"><a name="line135" />135
|
755
|
+
</span><span class="marked0"><a name="line136" />136 @playlist = XSPF::Playlist.new(self)
|
756
|
+
</span><span class="inferred1"><a name="line137" />137
|
757
|
+
</span><span class="inferred0"><a name="line138" />138 else
|
758
|
+
</span><span class="marked1"><a name="line139" />139 raise(TypeError, 'You must pass a file/string (parsing mode) or a hash/nothing (generator mode) as argument to XSPF#new')
|
759
|
+
</span><span class="inferred0"><a name="line140" />140 end
|
760
|
+
</span><span class="marked1"><a name="line141" />141 end
|
761
|
+
</span><span class="inferred0"><a name="line142" />142
|
762
|
+
</span><span class="inferred1"><a name="line143" />143 # A XSPF::Playlist object
|
763
|
+
</span><span class="marked0"><a name="line144" />144 def playlist
|
764
|
+
</span><span class="marked1"><a name="line145" />145 @playlist
|
765
|
+
</span><span class="marked0"><a name="line146" />146 end
|
766
|
+
</span><span class="inferred1"><a name="line147" />147
|
767
|
+
</span><span class="marked0"><a name="line148" />148 def playlist=(value)
|
768
|
+
</span><span class="marked1"><a name="line149" />149 raise(TypeError, 'The playlist must be an instance of XSPF::Playlist') unless value.instance_of?(XSPF::Playlist)
|
769
|
+
</span><span class="marked0"><a name="line150" />150 @playlist = value
|
770
|
+
</span><span class="inferred1"><a name="line151" />151 end
|
771
|
+
</span><span class="inferred0"><a name="line152" />152
|
772
|
+
</span><span class="inferred1"><a name="line153" />153 # Exports the XSPF object to XML
|
773
|
+
</span><span class="marked0"><a name="line154" />154 def to_xml
|
774
|
+
</span><span class="marked1"><a name="line155" />155 xml = REXML::Document.new
|
775
|
+
</span><span class="marked0"><a name="line156" />156 xml << REXML::XMLDecl.new(@version, @encoding)
|
776
|
+
</span><span class="marked1"><a name="line157" />157 xml << REXML::Document.new(@playlist.to_xml) unless @playlist.nil?
|
777
|
+
</span><span class="marked0"><a name="line158" />158 xml.to_s
|
778
|
+
</span><span class="inferred1"><a name="line159" />159 end
|
779
|
+
</span><span class="inferred0"><a name="line160" />160
|
780
|
+
</span><span class="inferred1"><a name="line161" />161 # The <playlist> section of the XSPF document (outputs XML code). This method is only used while parsing.
|
781
|
+
</span><span class="marked0"><a name="line162" />162 protected
|
782
|
+
</span><span class="marked1"><a name="line163" />163 def playlist_xml
|
783
|
+
</span><span class="marked0"><a name="line164" />164 @xspf.root
|
784
|
+
</span><span class="marked1"><a name="line165" />165 end
|
785
785
|
</span><span class="inferred0"><a name="line166" />166
|
786
|
-
</span><span class="
|
786
|
+
</span><span class="inferred1"><a name="line167" />167 end
|
787
787
|
</span><span class="inferred0"><a name="line168" />168
|
788
|
-
</span><span class="
|
789
|
-
</span><span class="
|
790
|
-
</span><span class="marked1"><a name="line171" />171
|
791
|
-
</span><span class="
|
792
|
-
</span><span class="inferred1"><a name="line173" />173
|
793
|
-
</span><span class="marked0"><a name="line174" />174
|
794
|
-
</span><span class="marked1"><a name="line175" />175
|
795
|
-
</span><span class="marked0"><a name="line176" />176
|
796
|
-
</span><span class="marked1"><a name="line177" />177
|
797
|
-
</span><span class="marked0"><a name="line178" />178
|
798
|
-
</span><span class="inferred1"><a name="line179" />179
|
799
|
-
</span><span class="marked0"><a name="line180" />180
|
800
|
-
</span><span class="marked1"><a name="line181" />181
|
801
|
-
</span><span class="
|
802
|
-
</span><span class="
|
803
|
-
</span><span class="marked0"><a name="line184" />184
|
804
|
-
</span><span class="marked1"><a name="line185" />185
|
805
|
-
</span><span class="
|
806
|
-
</span><span class="
|
807
|
-
</span><span class="
|
808
|
-
</span><span class="
|
809
|
-
</span><span class="
|
810
|
-
</span><span class="marked1"><a name="line191" />191
|
811
|
-
</span><span class="marked0"><a name="line192" />192
|
812
|
-
</span><span class="marked1"><a name="line193" />193
|
813
|
-
</span><span class="
|
814
|
-
</span><span class="
|
815
|
-
</span><span class="marked0"><a name="line196" />196
|
816
|
-
</span><span class="marked1"><a name="line197" />197
|
817
|
-
</span><span class="marked0"><a name="line198" />198
|
818
|
-
</span><span class="inferred1"><a name="line199" />199
|
819
|
-
</span><span class="inferred0"><a name="line200" />200
|
820
|
-
</span><span class="inferred1"><a name="line201" />201
|
821
|
-
</span><span class="
|
822
|
-
</span><span class="inferred1"><a name="line203" />203
|
823
|
-
</span><span class="
|
788
|
+
</span><span class="marked1"><a name="line169" />169 class XSPF::Playlist < XSPF
|
789
|
+
</span><span class="inferred0"><a name="line170" />170
|
790
|
+
</span><span class="marked1"><a name="line171" />171 attr_reader :playlist
|
791
|
+
</span><span class="inferred0"><a name="line172" />172
|
792
|
+
</span><span class="inferred1"><a name="line173" />173 #:stopdoc:
|
793
|
+
</span><span class="marked0"><a name="line174" />174 ATTRIBUTES = %w{ xmlns version }
|
794
|
+
</span><span class="marked1"><a name="line175" />175 ELEMENTS = %w{ title creator annotation info location identifier image date license attribution extension }
|
795
|
+
</span><span class="marked0"><a name="line176" />176 ATTRIBUTE_AND_ELEMENT = %w{ link meta }
|
796
|
+
</span><span class="marked1"><a name="line177" />177 ATTRIBUTION_CHILD_ELEMENTS = %w{ location identifier }
|
797
|
+
</span><span class="marked0"><a name="line178" />178 EXTENSION_CHILD_ELEMENTS = %w{ application content }
|
798
|
+
</span><span class="inferred1"><a name="line179" />179
|
799
|
+
</span><span class="marked0"><a name="line180" />180 XMLNS_RDOC = 'The XML namespace. It must be http://xspf.org/ns/0/ for a valid XSPF document.'
|
800
|
+
</span><span class="marked1"><a name="line181" />181 XMLNS_DEFAULT = 'http://xspf.org/ns/0/'
|
801
|
+
</span><span class="marked0"><a name="line182" />182 VERSION_RDOC = 'The XSPF version. It may be 0 or 1, although 1 is strongly advised.'
|
802
|
+
</span><span class="marked1"><a name="line183" />183 VERSION_DEFAULT = '1'
|
803
|
+
</span><span class="marked0"><a name="line184" />184 TITLE_RDOC = 'A human-readable title for the playlist. xspf:playlist elements MAY contain exactly one.'
|
804
|
+
</span><span class="marked1"><a name="line185" />185 CREATOR_RDOC = 'Human-readable name of the entity (author, authors, group, company, etc) that authored the playlist. XSPF::Playlist objects MAY contain exactly one.'
|
805
|
+
</span><span class="marked0"><a name="line186" />186 ANNOTATION_RDOC = 'A human-readable comment on the playlist. This is character data, not HTML, and it may not contain markup. XSPF::Playlist objects elements MAY contain exactly one.'
|
806
|
+
</span><span class="marked1"><a name="line187" />187 INFO_RDOC = 'URL of a web page to find out more about this playlist. Likely to be homepage of the author, and would be used to find out more about the author and to find more playlists by the author. XSPF::Playlist objects MAY contain exactly one.'
|
807
|
+
</span><span class="marked0"><a name="line188" />188 LOCATION_RDOC = 'Source URL for this playlist. XSPF::Playlist objects MAY contain exactly one.'
|
808
|
+
</span><span class="marked1"><a name="line189" />189 IDENTIFIER_RDOC = 'Canonical ID for this playlist. Likely to be a hash or other location-independent name. MUST be a legal URN. XSPF::Playlist objects MAY contain exactly one.'
|
809
|
+
</span><span class="marked0"><a name="line190" />190 IMAGE_RDOC = 'URL of an image to display if XSPF::Playlist#image return nil. XSPF::Playlist objects MAY contain exactly one.'
|
810
|
+
</span><span class="marked1"><a name="line191" />191 DATE_RDOC = 'Creation date (not last-modified date) of the playlist, formatted as a XML schema dateTime. XSPF::Playlist objects MAY contain exactly one.'
|
811
|
+
</span><span class="marked0"><a name="line192" />192 LICENSE_RDOC = 'URL of a resource that describes the license under which this playlist was released. XSPF::Playlist objects MAY contain zero or one license element.'
|
812
|
+
</span><span class="marked1"><a name="line193" />193 ATTRIBUTION_RDOC = 'An ordered list of URIs. The purpose is to satisfy licenses allowing modification but requiring attribution. If you modify such a playlist, move its XSPF::Playlist#location or XSPF::Playlist#identifier element to the top of the items in the XSPF::Playlist#attribution element. XSPF::Playlist objects MAY contain exactly one attribution element. Please note that currently XSPF for Ruby does not parse the contents of XSPF::Playlist#attribution.'
|
813
|
+
</span><span class="marked0"><a name="line194" />194 EXTENSION_RDOC = 'The extension element allows non-XSPF XML to be included in XSPF documents without breaking XSPF validation. The purpose is to allow nested XML, which the meta and link elements do not. XSPF::Playlist objects MAY contain zero or more extension elements but currently XSPF for Ruby returns only the first one.'
|
814
|
+
</span><span class="marked1"><a name="line195" />195 LINK_REL_RDOC = 'The link element allows non-XSPF web resources to be included in XSPF documents without breaking XSPF validation. A valid _link_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Playlist#link_rel and XSPF::Playlist#link_content respectively. XSPF::Playlist objects MAY contain zero or more link elements, but currently XSPF for Ruby returns only the first one.'
|
815
|
+
</span><span class="marked0"><a name="line196" />196 LINK_CONTENT_RDOC = 'The link element allows non-XSPF web resources to be included in XSPF documents without breaking XSPF validation. A valid _link_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Playlist#link_rel and XSPF::Playlist#link_content respectively. XSPF::Playlist objects MAY contain zero or more meta elements, but currently XSPF for Ruby returns only the first one.'
|
816
|
+
</span><span class="marked1"><a name="line197" />197 META_REL_RDOC = 'The meta element allows non-XSPF metadata to be included in XSPF documents without breaking XSPF validation. A valid _meta_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Playlist#meta_rel and XSPF::Playlist#meta_content respectively. XSPF::Playlist objects MAY contain zero or more meta elements, but currently XSPF for Ruby returns only the first one.'
|
817
|
+
</span><span class="marked0"><a name="line198" />198 META_CONTENT_RDOC = 'The meta element allows non-XSPF metadata to be included in XSPF documents without breaking XSPF validation. A valid _meta_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Playlist#meta_rel and XSPF::Playlist#meta_content respectively. XSPF::Playlist objects MAY contain zero or more meta elements, but currently XSPF for Ruby returns only the first one.'
|
818
|
+
</span><span class="inferred1"><a name="line199" />199
|
819
|
+
</span><span class="inferred0"><a name="line200" />200 # FIXME Currently we only return the first "link"
|
820
|
+
</span><span class="inferred1"><a name="line201" />201 # FIXME Currently we only return the first "meta"
|
821
|
+
</span><span class="inferred0"><a name="line202" />202 # FIXME Currently we only return the first "extension"
|
822
|
+
</span><span class="inferred1"><a name="line203" />203 # TODO Parse "attribution"
|
823
|
+
</span><span class="inferred0"><a name="line204" />204 # TODO Parse "extension"
|
824
824
|
</span><span class="inferred1"><a name="line205" />205
|
825
|
-
</span><span class="inferred0"><a name="line206" />206
|
826
|
-
</span><span class="marked1"><a name="line207" />207 ATTRIBUTES
|
827
|
-
</span><span class="marked0"><a name="line208" />208
|
828
|
-
</span><span class="
|
829
|
-
</span><span class="
|
830
|
-
</span><span class="marked1"><a name="line211" />211
|
831
|
-
</span><span class="marked0"><a name="line212" />212
|
832
|
-
</span><span class="
|
833
|
-
</span><span class="
|
834
|
-
</span><span class="marked1"><a name="line215" />215
|
835
|
-
</span><span class="marked0"><a name="line216" />216
|
836
|
-
</span><span class="marked1"><a name="line217" />217
|
837
|
-
</span><span class="
|
838
|
-
</span><span class="
|
839
|
-
</span><span class="
|
840
|
-
</span><span class="
|
841
|
-
</span><span class="
|
842
|
-
</span><span class="
|
843
|
-
</span><span class="
|
844
|
-
</span><span class="marked1"><a name="line225" />225
|
845
|
-
</span><span class="
|
846
|
-
</span><span class="marked1"><a name="line227" />227
|
847
|
-
</span><span class="
|
848
|
-
</span><span class="
|
849
|
-
</span><span class="
|
850
|
-
</span><span class="inferred1"><a name="line231" />231
|
851
|
-
</span><span class="inferred0"><a name="line232" />232
|
852
|
-
</span><span class="
|
853
|
-
</span><span class="
|
854
|
-
</span><span class="inferred1"><a name="line235" />235
|
855
|
-
</span><span class="inferred0"><a name="line236" />236
|
856
|
-
</span><span class="marked1"><a name="line237" />237
|
857
|
-
</span><span class="marked0"><a name="line238" />238
|
858
|
-
</span><span class="
|
859
|
-
</span><span class="inferred0"><a name="line240" />240
|
860
|
-
</span><span class="
|
861
|
-
</span><span class="marked0"><a name="line242" />242
|
862
|
-
</span><span class="
|
863
|
-
</span><span class="inferred0"><a name="line244" />244
|
864
|
-
</span><span class="marked1"><a name="line245" />245
|
865
|
-
</span><span class="
|
866
|
-
</span><span class="
|
867
|
-
</span><span class="
|
825
|
+
</span><span class="inferred0"><a name="line206" />206 # Returns the value of the attribute or nil if the attribute is not present
|
826
|
+
</span><span class="marked1"><a name="line207" />207 ATTRIBUTES.each do |attrib|
|
827
|
+
</span><span class="marked0"><a name="line208" />208 MetaGen.add_method( self, attrib, "@playlist.root.attributes['#{attrib}']", eval(attrib.upcase + '_RDOC').to_s )
|
828
|
+
</span><span class="inferred1"><a name="line209" />209 end
|
829
|
+
</span><span class="inferred0"><a name="line210" />210
|
830
|
+
</span><span class="marked1"><a name="line211" />211 ELEMENTS.each do |element|
|
831
|
+
</span><span class="marked0"><a name="line212" />212 MetaGen.add_method( self, element, "@playlist.elements['#{element}'].text", eval(element.upcase + '_RDOC').to_s )
|
832
|
+
</span><span class="inferred1"><a name="line213" />213 end
|
833
|
+
</span><span class="inferred0"><a name="line214" />214
|
834
|
+
</span><span class="marked1"><a name="line215" />215 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
835
|
+
</span><span class="marked0"><a name="line216" />216 MetaGen.add_method( self, "#{ae}_content", "@playlist.elements['#{ae}'].text", eval(ae.upcase + '_CONTENT_RDOC').to_s )
|
836
|
+
</span><span class="marked1"><a name="line217" />217 MetaGen.add_method( self, "#{ae}_rel", "@playlist.elements['#{ae}'].attributes['rel']", eval(ae.upcase + '_REL_RDOC').to_s )
|
837
|
+
</span><span class="inferred0"><a name="line218" />218 end
|
838
|
+
</span><span class="inferred1"><a name="line219" />219
|
839
|
+
</span><span class="inferred0"><a name="line220" />220 #:startdoc:
|
840
|
+
</span><span class="inferred1"><a name="line221" />221
|
841
|
+
</span><span class="inferred0"><a name="line222" />222 # Creates a XSPF::Playlist from a XSPF document (parse mode) or from a hash of values (generation mode)
|
842
|
+
</span><span class="inferred1"><a name="line223" />223 #
|
843
|
+
</span><span class="inferred0"><a name="line224" />224 # Possible keys in the hash: :xmlns, :version, :title, :creator, :annotation, :info, :location, :identifier, :image, :date, :license, :attribution, :extension, :link_rel, :link_content, :meta_rel, :meta_content
|
844
|
+
</span><span class="marked1"><a name="line225" />225 def initialize(source = nil)
|
845
|
+
</span><span class="inferred0"><a name="line226" />226
|
846
|
+
</span><span class="marked1"><a name="line227" />227 if ( source.instance_of?(Hash) || source.nil? ) then
|
847
|
+
</span><span class="inferred0"><a name="line228" />228
|
848
|
+
</span><span class="marked1"><a name="line229" />229 ATTRIBUTES.each do |attrib|
|
849
|
+
</span><span class="marked0"><a name="line230" />230 add_instance_variable(source, attrib)
|
850
|
+
</span><span class="inferred1"><a name="line231" />231 end
|
851
|
+
</span><span class="inferred0"><a name="line232" />232
|
852
|
+
</span><span class="marked1"><a name="line233" />233 ELEMENTS.each do |element|
|
853
|
+
</span><span class="marked0"><a name="line234" />234 add_instance_variable(source, element)
|
854
|
+
</span><span class="inferred1"><a name="line235" />235 end
|
855
|
+
</span><span class="inferred0"><a name="line236" />236
|
856
|
+
</span><span class="marked1"><a name="line237" />237 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
857
|
+
</span><span class="marked0"><a name="line238" />238 add_instance_variable(source, "#{ae}_content" )
|
858
|
+
</span><span class="marked1"><a name="line239" />239 add_instance_variable(source, "#{ae}_rel" )
|
859
|
+
</span><span class="inferred0"><a name="line240" />240 end
|
860
|
+
</span><span class="inferred1"><a name="line241" />241
|
861
|
+
</span><span class="marked0"><a name="line242" />242 @tracklist = if ( !source.nil? && source.has_key?(:tracklist) && source[:tracklist].instance_of?(XSPF::Tracklist) )
|
862
|
+
</span><span class="marked1"><a name="line243" />243 source[:tracklist]
|
863
|
+
</span><span class="inferred0"><a name="line244" />244 else
|
864
|
+
</span><span class="marked1"><a name="line245" />245 nil
|
865
|
+
</span><span class="inferred0"><a name="line246" />246 end
|
866
|
+
</span><span class="inferred1"><a name="line247" />247
|
867
|
+
</span><span class="marked0"><a name="line248" />248 elsif source.instance_of?(XSPF) then
|
868
868
|
</span><span class="inferred1"><a name="line249" />249
|
869
|
-
</span><span class="
|
870
|
-
</span><span class="inferred1"><a name="line251" />251
|
871
|
-
</span><span class="
|
872
|
-
</span><span class="marked1"><a name="line253" />253
|
873
|
-
</span><span class="
|
874
|
-
</span><span class="
|
875
|
-
</span><span class="
|
876
|
-
</span><span class="
|
877
|
-
</span><span class="
|
878
|
-
</span><span class="
|
879
|
-
</span><span class="marked0"><a name="line260" />260
|
880
|
-
</span><span class="
|
881
|
-
</span><span class="
|
882
|
-
</span><span class="inferred1"><a name="line263" />263
|
883
|
-
</span><span class="
|
884
|
-
</span><span class="
|
885
|
-
</span><span class="
|
886
|
-
</span><span class="inferred1"><a name="line267" />267
|
887
|
-
</span><span class="
|
888
|
-
</span><span class="
|
889
|
-
</span><span class="
|
869
|
+
</span><span class="marked0"><a name="line250" />250 @playlist = source.playlist_xml
|
870
|
+
</span><span class="inferred1"><a name="line251" />251
|
871
|
+
</span><span class="marked0"><a name="line252" />252 ATTRIBUTES.each do |attrib|
|
872
|
+
</span><span class="marked1"><a name="line253" />253 eval('@' + attrib.downcase + '= parse_' + attrib.downcase)
|
873
|
+
</span><span class="inferred0"><a name="line254" />254 end
|
874
|
+
</span><span class="inferred1"><a name="line255" />255
|
875
|
+
</span><span class="marked0"><a name="line256" />256 ELEMENTS.each do |element|
|
876
|
+
</span><span class="marked1"><a name="line257" />257 eval('@' + element.downcase + '= parse_' + element.downcase)
|
877
|
+
</span><span class="inferred0"><a name="line258" />258 end
|
878
|
+
</span><span class="inferred1"><a name="line259" />259
|
879
|
+
</span><span class="marked0"><a name="line260" />260 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
880
|
+
</span><span class="marked1"><a name="line261" />261 eval('@' + ae.downcase + '_content = parse_' + ae.downcase + '_content')
|
881
|
+
</span><span class="marked0"><a name="line262" />262 eval('@' + ae.downcase + '_rel = parse_' + ae.downcase + '_rel')
|
882
|
+
</span><span class="inferred1"><a name="line263" />263 end
|
883
|
+
</span><span class="inferred0"><a name="line264" />264
|
884
|
+
</span><span class="marked1"><a name="line265" />265 @tracklist = XSPF::Tracklist.new(self)
|
885
|
+
</span><span class="inferred0"><a name="line266" />266
|
886
|
+
</span><span class="inferred1"><a name="line267" />267 else
|
887
|
+
</span><span class="marked0"><a name="line268" />268 raise(TypeError, 'You must pass a XSPF object (parsing mode) or a hash (generator mode) as argument to XSPF::Playlist#new')
|
888
|
+
</span><span class="inferred1"><a name="line269" />269 end
|
889
|
+
</span><span class="inferred0"><a name="line270" />270
|
890
890
|
</span><span class="marked1"><a name="line271" />271 end
|
891
891
|
</span><span class="inferred0"><a name="line272" />272
|
892
|
-
</span><span class="inferred1"><a name="line273" />273 #
|
893
|
-
</span><span class="marked0"><a name="line274" />274 def
|
894
|
-
</span><span class="marked1"><a name="line275" />275 @tracklist
|
892
|
+
</span><span class="inferred1"><a name="line273" />273 # A XSPF::Tracklist object
|
893
|
+
</span><span class="marked0"><a name="line274" />274 def tracklist
|
894
|
+
</span><span class="marked1"><a name="line275" />275 @tracklist
|
895
895
|
</span><span class="marked0"><a name="line276" />276 end
|
896
896
|
</span><span class="inferred1"><a name="line277" />277
|
897
|
-
</span><span class="
|
898
|
-
</span><span class="
|
899
|
-
</span><span class="marked0"><a name="line280" />280
|
900
|
-
</span><span class="inferred1"><a name="line281" />281
|
901
|
-
</span><span class="
|
902
|
-
</span><span class="
|
903
|
-
</span><span class="inferred0"><a name="line284" />284
|
904
|
-
</span><span class="
|
905
|
-
</span><span class="marked0"><a name="line286" />286
|
906
|
-
</span><span class="
|
907
|
-
</span><span class="marked0"><a name="line288" />288
|
908
|
-
</span><span class="
|
909
|
-
</span><span class="marked0"><a name="line290" />290
|
910
|
-
</span><span class="
|
911
|
-
</span><span class="marked0"><a name="line292" />292
|
912
|
-
</span><span class="marked1"><a name="line293" />293
|
913
|
-
</span><span class="
|
914
|
-
</span><span class="
|
915
|
-
</span><span class="
|
916
|
-
</span><span class="marked1"><a name="line297" />297
|
917
|
-
</span><span class="
|
918
|
-
</span><span class="marked1"><a name="line299" />299
|
919
|
-
</span><span class="marked0"><a name="line300" />300
|
920
|
-
</span><span class="marked1"><a name="line301" />301
|
921
|
-
</span><span class="
|
922
|
-
</span><span class="
|
923
|
-
</span><span class="
|
924
|
-
</span><span class="inferred1"><a name="line305" />305
|
925
|
-
</span><span class="
|
926
|
-
</span><span class="
|
927
|
-
</span><span class="marked0"><a name="line308" />308
|
928
|
-
</span><span class="marked1"><a name="line309" />309
|
929
|
-
</span><span class="
|
930
|
-
</span><span class="
|
931
|
-
</span><span class="
|
932
|
-
</span><span class="inferred1"><a name="line313" />313
|
933
|
-
</span><span class="inferred0"><a name="line314" />314
|
934
|
-
</span><span class="
|
935
|
-
</span><span class="marked0"><a name="line316" />316
|
936
|
-
</span><span class="
|
937
|
-
</span><span class="
|
938
|
-
</span><span class="inferred1"><a name="line319" />319
|
897
|
+
</span><span class="marked0"><a name="line278" />278 def tracklist=(value)
|
898
|
+
</span><span class="marked1"><a name="line279" />279 raise(TypeError, 'The tracklist must be an instance of XSPF::Tracklist') unless value.instance_of?(XSPF::Tracklist)
|
899
|
+
</span><span class="marked0"><a name="line280" />280 @tracklist = value
|
900
|
+
</span><span class="inferred1"><a name="line281" />281 end
|
901
|
+
</span><span class="inferred0"><a name="line282" />282
|
902
|
+
</span><span class="marked1"><a name="line283" />283 alias :<< :tracklist=
|
903
|
+
</span><span class="inferred0"><a name="line284" />284
|
904
|
+
</span><span class="inferred1"><a name="line285" />285 # Exports the XSPF::Playlist to XML (only the <playlist> section)
|
905
|
+
</span><span class="marked0"><a name="line286" />286 def to_xml
|
906
|
+
</span><span class="inferred1"><a name="line287" />287
|
907
|
+
</span><span class="marked0"><a name="line288" />288 xml = REXML::Element.new('playlist')
|
908
|
+
</span><span class="inferred1"><a name="line289" />289
|
909
|
+
</span><span class="marked0"><a name="line290" />290 ATTRIBUTES.each do |attrib|
|
910
|
+
</span><span class="inferred1"><a name="line291" />291 # TODO Sure there is a nicer way to do evaluate this condition...
|
911
|
+
</span><span class="marked0"><a name="line292" />292 unless eval('@' + attrib.downcase + '.nil?')
|
912
|
+
</span><span class="marked1"><a name="line293" />293 xml.attributes[attrib] = eval('@' + attrib.downcase)
|
913
|
+
</span><span class="inferred0"><a name="line294" />294 end
|
914
|
+
</span><span class="inferred1"><a name="line295" />295 end
|
915
|
+
</span><span class="inferred0"><a name="line296" />296
|
916
|
+
</span><span class="marked1"><a name="line297" />297 ELEMENTS.each do |element|
|
917
|
+
</span><span class="inferred0"><a name="line298" />298 # TODO Sure there is a nicer way to do evaluate this condition...
|
918
|
+
</span><span class="marked1"><a name="line299" />299 unless eval('@' + element.downcase + '.nil?')
|
919
|
+
</span><span class="marked0"><a name="line300" />300 el = REXML::Element.new(element)
|
920
|
+
</span><span class="marked1"><a name="line301" />301 el.add_text( eval('@' + element.downcase) )
|
921
|
+
</span><span class="marked0"><a name="line302" />302 xml.add_element(el)
|
922
|
+
</span><span class="inferred1"><a name="line303" />303 end
|
923
|
+
</span><span class="inferred0"><a name="line304" />304 end
|
924
|
+
</span><span class="inferred1"><a name="line305" />305
|
925
|
+
</span><span class="marked0"><a name="line306" />306 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
926
|
+
</span><span class="inferred1"><a name="line307" />307 # TODO Sure there is a nicer way to do evaluate this condition...
|
927
|
+
</span><span class="marked0"><a name="line308" />308 unless eval('@' + ae.downcase + '_rel.nil? && @'+ ae.downcase + '_content.nil?')
|
928
|
+
</span><span class="marked1"><a name="line309" />309 el = REXML::Element.new(ae.downcase)
|
929
|
+
</span><span class="marked0"><a name="line310" />310 el.add_attribute('rel', eval('@' + ae.downcase + '_rel') )
|
930
|
+
</span><span class="marked1"><a name="line311" />311 el.add_text( eval('@' + ae.downcase + '_content') )
|
931
|
+
</span><span class="marked0"><a name="line312" />312 xml.add_element(el)
|
932
|
+
</span><span class="inferred1"><a name="line313" />313 end
|
933
|
+
</span><span class="inferred0"><a name="line314" />314 end
|
934
|
+
</span><span class="inferred1"><a name="line315" />315
|
935
|
+
</span><span class="marked0"><a name="line316" />316 xml << REXML::Document.new(@tracklist.to_xml)
|
936
|
+
</span><span class="inferred1"><a name="line317" />317
|
937
|
+
</span><span class="marked0"><a name="line318" />318 xml.to_s
|
938
|
+
</span><span class="inferred1"><a name="line319" />319
|
939
|
+
</span><span class="inferred0"><a name="line320" />320 end
|
940
|
+
</span><span class="inferred1"><a name="line321" />321
|
941
|
+
</span><span class="inferred0"><a name="line322" />322 # The <trackList> section of the XSPF document (outputs XML code). This method is only used while parsing.
|
942
|
+
</span><span class="marked1"><a name="line323" />323 protected
|
943
|
+
</span><span class="marked0"><a name="line324" />324 def tracklist_xml
|
944
|
+
</span><span class="marked1"><a name="line325" />325 @playlist.elements['trackList']
|
945
|
+
</span><span class="marked0"><a name="line326" />326 end
|
946
|
+
</span><span class="inferred1"><a name="line327" />327
|
947
|
+
</span><span class="marked0"><a name="line328" />328 private
|
948
|
+
</span><span class="marked1"><a name="line329" />329 def add_instance_variable(hash, var)
|
949
|
+
</span><span class="inferred0"><a name="line330" />330
|
950
|
+
</span><span class="marked1"><a name="line331" />331 if !hash.nil? && hash.has_key?(var.downcase.to_sym)
|
951
|
+
</span><span class="marked0"><a name="line332" />332 eval('@' + var.downcase + ' = \'' + hash[var.downcase.to_sym] + '\'')
|
952
|
+
</span><span class="inferred1"><a name="line333" />333 else
|
953
|
+
</span><span class="marked0"><a name="line334" />334 eval('@' + var.downcase + ' = defined?(' + var.upcase + '_DEFAULT) ? ' + var.upcase + '_DEFAULT : nil')
|
954
|
+
</span><span class="inferred1"><a name="line335" />335 end
|
955
|
+
</span><span class="inferred0"><a name="line336" />336
|
956
|
+
</span><span class="marked1"><a name="line337" />337 end
|
957
|
+
</span><span class="inferred0"><a name="line338" />338
|
958
|
+
</span><span class="inferred1"><a name="line339" />339 end
|
959
|
+
</span><span class="inferred0"><a name="line340" />340
|
960
|
+
</span><span class="marked1"><a name="line341" />341 class XSPF::Tracklist < XSPF::Playlist
|
961
|
+
</span><span class="inferred0"><a name="line342" />342
|
962
|
+
</span><span class="marked1"><a name="line343" />343 attr_reader :tracklist
|
963
|
+
</span><span class="inferred0"><a name="line344" />344
|
964
|
+
</span><span class="inferred1"><a name="line345" />345 # Creates a XSPF::Tracklist from a XSPF::Playlist (parse mode) or without parameters (generation mode)
|
965
|
+
</span><span class="marked0"><a name="line346" />346 def initialize(playlist=nil)
|
966
|
+
</span><span class="marked1"><a name="line347" />347 if (playlist.instance_of?(Hash) || playlist.nil?) then
|
967
|
+
</span><span class="marked0"><a name="line348" />348 @tracklist = ''
|
968
|
+
</span><span class="marked1"><a name="line349" />349 @tracks = []
|
969
|
+
</span><span class="inferred0"><a name="line350" />350 else
|
970
|
+
</span><span class="marked1"><a name="line351" />351 @tracklist = playlist.tracklist_xml
|
971
|
+
</span><span class="marked0"><a name="line352" />352 @tracks = @tracklist.elements.collect { |track| XSPF::Track.new(track) }
|
972
|
+
</span><span class="inferred1"><a name="line353" />353 end
|
973
|
+
</span><span class="marked0"><a name="line354" />354 end
|
974
|
+
</span><span class="inferred1"><a name="line355" />355
|
975
|
+
</span><span class="inferred0"><a name="line356" />356 # Returns an array XSPF::Track objects
|
976
|
+
</span><span class="marked1"><a name="line357" />357 def tracks
|
977
|
+
</span><span class="marked0"><a name="line358" />358 @tracks
|
978
|
+
</span><span class="marked1"><a name="line359" />359 end
|
979
|
+
</span><span class="inferred0"><a name="line360" />360
|
980
|
+
</span><span class="inferred1"><a name="line361" />361 # Adds a new XSPF::Track to the XSPF::Tracklist
|
981
|
+
</span><span class="marked0"><a name="line362" />362 def <<(track)
|
982
|
+
</span><span class="marked1"><a name="line363" />363 @tracks << track
|
983
|
+
</span><span class="marked0"><a name="line364" />364 end
|
984
|
+
</span><span class="inferred1"><a name="line365" />365
|
985
|
+
</span><span class="inferred0"><a name="line366" />366 # Exports the XSPF::Tracklist to XML (only the <trackList> section)
|
986
|
+
</span><span class="marked1"><a name="line367" />367 def to_xml
|
987
|
+
</span><span class="marked0"><a name="line368" />368 xml = REXML::Element.new('trackList')
|
988
|
+
</span><span class="marked1"><a name="line369" />369 @tracks.each { |t| xml << REXML::Document.new(t.to_xml) }
|
989
|
+
</span><span class="marked0"><a name="line370" />370 xml.to_s
|
990
|
+
</span><span class="inferred1"><a name="line371" />371 end
|
991
|
+
</span><span class="inferred0"><a name="line372" />372
|
992
|
+
</span><span class="inferred1"><a name="line373" />373 end
|
993
|
+
</span><span class="inferred0"><a name="line374" />374
|
994
|
+
</span><span class="marked1"><a name="line375" />375 class XSPF::Track
|
995
|
+
</span><span class="inferred0"><a name="line376" />376
|
996
|
+
</span><span class="marked1"><a name="line377" />377 attr_reader :track
|
997
|
+
</span><span class="inferred0"><a name="line378" />378
|
998
|
+
</span><span class="inferred1"><a name="line379" />379 #:stopdoc:
|
999
|
+
</span><span class="marked0"><a name="line380" />380 ELEMENTS = %w{ location identifier title creator annotation info image album trackNum duration extension }
|
1000
|
+
</span><span class="marked1"><a name="line381" />381 ATTRIBUTE_AND_ELEMENT = %w{ link meta }
|
1001
|
+
</span><span class="inferred0"><a name="line382" />382
|
1002
|
+
</span><span class="marked1"><a name="line383" />383 LOCATION_RDOC = 'URL of resource to be rendered. Probably an audio resource, but MAY be any type of resource with a well-known duration, such as video, a SMIL document, or an XSPF document. The duration of the resource defined in this element defines the duration of rendering. XSPF::Track objects MAY contain zero or more location elements, but a user-agent MUST NOT render more than one of the named resources. Currently, XSPF for Ruby returns only the first location.'
|
1003
|
+
</span><span class="marked0"><a name="line384" />384 IDENTIFIER_RDOC = 'Canonical ID for this resource. Likely to be a hash or other location-independent name, such as a MusicBrainz identifier or isbn URN (if there existed isbn numbers for audio). MUST be a legal URN. XSPF::Track objects elements MAY contain zero or more identifier elements, but currently XSPF for Ruby returns only the first one.'
|
1004
|
+
</span><span class="marked1"><a name="line385" />385 TITLE_RDOC = 'Human-readable name of the track that authored the resource which defines the duration of track rendering. This value is primarily for fuzzy lookups, though a user-agent may display it. XSPF::Track objects MAY contain exactly one.'
|
1005
|
+
</span><span class="marked0"><a name="line386" />386 CREATOR_RDOC = 'Human-readable name of the entity (author, authors, group, company, etc) that authored the resource which defines the duration of track rendering. This value is primarily for fuzzy lookups, though a user-agent may display it. XSPF::Track objects MAY contain exactly one.'
|
1006
|
+
</span><span class="marked1"><a name="line387" />387 ANNOTATION_RDOC = 'A human-readable comment on the track. This is character data, not HTML, and it may not contain markup. XSPF::Track objects MAY contain exactly one.'
|
1007
|
+
</span><span class="marked0"><a name="line388" />388 INFO_RDOC = 'URL of a place where this resource can be bought or more info can be found.'
|
1008
|
+
</span><span class="marked1"><a name="line389" />389 IMAGE_RDOC = 'URL of an image to display for the duration of the track. XSPF::Track objects MAY contain exactly one.'
|
1009
|
+
</span><span class="marked0"><a name="line390" />390 ALBUM_RDOC = 'Human-readable name of the collection from which the resource which defines the duration of track rendering comes. For a song originally published as a part of a CD or LP, this would be the title of the original release. This value is primarily for fuzzy lookups, though a user-agent may display it. XSPF::Track objects MAY contain exactly one.'
|
1010
|
+
</span><span class="marked1"><a name="line391" />391 TRACKNUM_RDOC = 'Integer with value greater than zero giving the ordinal position of the media on the XSPF::Track#album. This value is primarily for fuzzy lookups, though a user-agent may display it. XSPF::Track objects MAY contain exactly one. It MUST be a valid XML Schema nonNegativeInteger.'
|
1011
|
+
</span><span class="marked0"><a name="line392" />392 DURATION_RDOC = 'The time to render a resource, in milliseconds. It MUST be a valid XML Schema nonNegativeInteger. This value is only a hint -- different XSPF generators will generate slightly different values. A user-agent MUST NOT use this value to determine the rendering duration, since the data will likely be low quality. XSPF::Track objects MAY contain exactly one duration element.'
|
1012
|
+
</span><span class="marked1"><a name="line393" />393 EXTENSION_RDOC = 'The extension element allows non-XSPF XML to be included in XSPF documents without breaking XSPF validation. The purpose is to allow nested XML, which the meta and link elements do not. XSPF::Track objects MAY contain zero or more extension elements, but currently XSPF for Ruby returns only the first one.'
|
1013
|
+
</span><span class="marked0"><a name="line394" />394 LINK_REL_RDOC = 'The link element allows non-XSPF web resources to be included in XSPF documents without breaking XSPF validation. A valid _link_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Track#link_rel and XSPF::Track#link_content respectively. XSPF::Track objects MAY contain zero or more link elements, but currently XSPF for Ruby returns only the first one.'
|
1014
|
+
</span><span class="marked1"><a name="line395" />395 LINK_CONTENT_RDOC = 'The link element allows non-XSPF web resources to be included in XSPF documents without breaking XSPF validation. A valid _link_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Track#link_rel and XSPF::Track#link_content respectively. XSPF::Track objects MAY contain zero or more meta elements, but currently XSPF for Ruby returns only the first one.'
|
1015
|
+
</span><span class="marked0"><a name="line396" />396 META_REL_RDOC = 'The meta element allows non-XSPF metadata to be included in XSPF documents without breaking XSPF validation. A valid _meta_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Track#meta_rel and XSPF::Track#meta_content respectively. XSPF::Track objects MAY contain zero or more meta elements, but currently XSPF for Ruby returns only the first one.'
|
1016
|
+
</span><span class="marked1"><a name="line397" />397 META_CONTENT_RDOC = 'The meta element allows non-XSPF metadata to be included in XSPF documents without breaking XSPF validation. A valid _meta_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Track#meta_rel and XSPF::Track#meta_content respectively. XSPF::Track objects MAY contain zero or more meta elements, but currently XSPF for Ruby returns only the first one.'
|
1017
|
+
</span><span class="inferred0"><a name="line398" />398
|
1018
|
+
</span><span class="marked1"><a name="line399" />399 ELEMENTS.each do |element|
|
1019
|
+
</span><span class="marked0"><a name="line400" />400 MetaGen.add_method( self, element, "@track.elements['#{element}'].text", eval(element.upcase + '_RDOC').to_s )
|
1020
|
+
</span><span class="inferred1"><a name="line401" />401 end
|
1021
|
+
</span><span class="inferred0"><a name="line402" />402
|
1022
|
+
</span><span class="marked1"><a name="line403" />403 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
1023
|
+
</span><span class="marked0"><a name="line404" />404 MetaGen.add_method( self, "#{ae}_content", "@track.elements['#{ae}'].text", eval(ae.upcase + '_CONTENT_RDOC').to_s )
|
1024
|
+
</span><span class="marked1"><a name="line405" />405 MetaGen.add_method( self, "#{ae}_rel", "@track.elements['#{ae}'].attributes['rel']", eval(ae.upcase + '_REL_RDOC').to_s )
|
1025
|
+
</span><span class="inferred0"><a name="line406" />406 end
|
1026
|
+
</span><span class="inferred1"><a name="line407" />407
|
1027
|
+
</span><span class="inferred0"><a name="line408" />408 # :startdoc:
|
1028
|
+
</span><span class="inferred1"><a name="line409" />409
|
1029
|
+
</span><span class="inferred0"><a name="line410" />410 # Creates a XSPF::Track object from a <track> section of the XSPF document or from a hash of values
|
1030
|
+
</span><span class="inferred1"><a name="line411" />411 #
|
1031
|
+
</span><span class="inferred0"><a name="line412" />412 # Possible keys in the hash in generation mode: :location, :identifier, :title, :creator, :annotation, :info, :image, :album, :tracknum, :duration, :extension, :link_rel, :link_content, :meta_rel, :meta_content)
|
1032
|
+
</span><span class="marked1"><a name="line413" />413 def initialize(tr)
|
1033
|
+
</span><span class="inferred0"><a name="line414" />414
|
1034
|
+
</span><span class="marked1"><a name="line415" />415 if tr.instance_of?(Hash)
|
1035
|
+
</span><span class="inferred0"><a name="line416" />416
|
1036
|
+
</span><span class="marked1"><a name="line417" />417 ELEMENTS.each do |element|
|
1037
|
+
</span><span class="marked0"><a name="line418" />418 add_instance_variable(tr, element.downcase)
|
1038
|
+
</span><span class="inferred1"><a name="line419" />419 end
|
1039
|
+
</span><span class="inferred0"><a name="line420" />420
|
1040
|
+
</span><span class="marked1"><a name="line421" />421 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
1041
|
+
</span><span class="marked0"><a name="line422" />422 add_instance_variable(tr, "#{ae.downcase}_content" )
|
1042
|
+
</span><span class="marked1"><a name="line423" />423 add_instance_variable(tr, "#{ae.downcase}_rel" )
|
1043
|
+
</span><span class="inferred0"><a name="line424" />424 end
|
1044
|
+
</span><span class="inferred1"><a name="line425" />425
|
1045
|
+
</span><span class="inferred0"><a name="line426" />426 else
|
1046
|
+
</span><span class="marked1"><a name="line427" />427 @track = tr
|
1047
|
+
</span><span class="inferred0"><a name="line428" />428
|
1048
|
+
</span><span class="marked1"><a name="line429" />429 ELEMENTS.each do |element|
|
1049
|
+
</span><span class="marked0"><a name="line430" />430 eval('@' + element.downcase + '= parse_' + element.downcase)
|
1050
|
+
</span><span class="inferred1"><a name="line431" />431 end
|
1051
|
+
</span><span class="inferred0"><a name="line432" />432
|
1052
|
+
</span><span class="marked1"><a name="line433" />433 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
1053
|
+
</span><span class="marked0"><a name="line434" />434 eval('@' + ae.downcase + '_content = parse_' + ae.downcase + '_content')
|
1054
|
+
</span><span class="marked1"><a name="line435" />435 eval('@' + ae.downcase + '_rel = parse_' + ae.downcase + '_rel')
|
1055
|
+
</span><span class="inferred0"><a name="line436" />436 end
|
1056
|
+
</span><span class="inferred1"><a name="line437" />437 end
|
1057
|
+
</span><span class="inferred0"><a name="line438" />438
|
1058
|
+
</span><span class="marked1"><a name="line439" />439 end
|
1059
|
+
</span><span class="inferred0"><a name="line440" />440
|
1060
|
+
</span><span class="inferred1"><a name="line441" />441 # Exports the XSPF::Track to XML (only the <track> section)
|
1061
|
+
</span><span class="marked0"><a name="line442" />442 def to_xml
|
1062
|
+
</span><span class="inferred1"><a name="line443" />443
|
1063
|
+
</span><span class="marked0"><a name="line444" />444 xml = REXML::Element.new('track')
|
1064
|
+
</span><span class="inferred1"><a name="line445" />445
|
1065
|
+
</span><span class="marked0"><a name="line446" />446 ELEMENTS.each do |element|
|
1066
|
+
</span><span class="inferred1"><a name="line447" />447 # TODO Sure there is a nicer way to do evaluate this condition...
|
1067
|
+
</span><span class="marked0"><a name="line448" />448 unless eval('@' + element.downcase + '.nil?')
|
1068
|
+
</span><span class="marked1"><a name="line449" />449 el = REXML::Element.new(element)
|
1069
|
+
</span><span class="marked0"><a name="line450" />450 el.add_text( eval('@' + element.downcase) )
|
1070
|
+
</span><span class="marked1"><a name="line451" />451 xml.add_element(el)
|
1071
|
+
</span><span class="inferred0"><a name="line452" />452 end
|
1072
|
+
</span><span class="inferred1"><a name="line453" />453 end
|
1073
|
+
</span><span class="inferred0"><a name="line454" />454
|
1074
|
+
</span><span class="marked1"><a name="line455" />455 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
1075
|
+
</span><span class="inferred0"><a name="line456" />456 # TODO Sure there is a nicer way to do evaluate this condition...
|
1076
|
+
</span><span class="marked1"><a name="line457" />457 unless eval('@' + ae.downcase + '_rel.nil? && @'+ ae.downcase + '_content.nil?')
|
1077
|
+
</span><span class="marked0"><a name="line458" />458 el = REXML::Element.new(ae.downcase)
|
1078
|
+
</span><span class="marked1"><a name="line459" />459 el.add_attribute('rel', eval('@' + ae.downcase + '_rel') )
|
1079
|
+
</span><span class="marked0"><a name="line460" />460 el.add_text( eval('@' + ae.downcase + '_content') )
|
1080
|
+
</span><span class="marked1"><a name="line461" />461 xml.add_element(el)
|
1081
|
+
</span><span class="inferred0"><a name="line462" />462 end
|
1082
|
+
</span><span class="inferred1"><a name="line463" />463 end
|
1083
|
+
</span><span class="inferred0"><a name="line464" />464
|
1084
|
+
</span><span class="marked1"><a name="line465" />465 xml.to_s
|
1085
|
+
</span><span class="inferred0"><a name="line466" />466
|
1086
|
+
</span><span class="inferred1"><a name="line467" />467 end
|
1087
|
+
</span><span class="inferred0"><a name="line468" />468
|
1088
|
+
</span><span class="marked1"><a name="line469" />469 private
|
1089
|
+
</span><span class="marked0"><a name="line470" />470 def add_instance_variable(hash, var)
|
1090
|
+
</span><span class="inferred1"><a name="line471" />471
|
1091
|
+
</span><span class="marked0"><a name="line472" />472 if hash.has_key?(var.downcase.to_sym)
|
1092
|
+
</span><span class="marked1"><a name="line473" />473 eval('@' + var.downcase + ' = \'' + hash[var.downcase.to_sym] + '\'')
|
1093
|
+
</span><span class="inferred0"><a name="line474" />474 else
|
1094
|
+
</span><span class="marked1"><a name="line475" />475 eval('@' + var.downcase + ' = defined?(' + var.upcase + '_DEFAULT) ? ' + var.upcase + '_DEFAULT : nil')
|
1095
|
+
</span><span class="inferred0"><a name="line476" />476 end
|
1096
|
+
</span><span class="inferred1"><a name="line477" />477
|
1097
|
+
</span><span class="marked0"><a name="line478" />478 end
|
1098
|
+
</span><span class="inferred1"><a name="line479" />479
|
1099
|
+
</span><span class="inferred0"><a name="line480" />480 end
|
939
1100
|
</span></pre><hr /> <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a> version 0.7.0.</p><p>
|
940
1101
|
<a href='http://validator.w3.org/check/referer'>
|
941
1102
|
<img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88' />
|