rss 0.2.8 → 0.2.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +16 -0
  3. data/Rakefile +8 -1
  4. data/lib/rss/itunes.rb +49 -1
  5. data/lib/rss/maker/itunes.rb +13 -0
  6. data/lib/rss/parser.rb +1 -1
  7. data/lib/rss/version.rb +1 -1
  8. data/rss.gemspec +6 -56
  9. data/test/dot.png +0 -0
  10. data/test/rss-assertions.rb +2116 -0
  11. data/test/rss-testcase.rb +479 -0
  12. data/test/run-test.rb +15 -0
  13. data/test/test_1.0.rb +308 -0
  14. data/test/test_2.0.rb +412 -0
  15. data/test/test_accessor.rb +104 -0
  16. data/test/test_atom.rb +684 -0
  17. data/test/test_content.rb +105 -0
  18. data/test/test_dublincore.rb +270 -0
  19. data/test/test_image.rb +215 -0
  20. data/test/test_inherit.rb +41 -0
  21. data/test/test_itunes.rb +360 -0
  22. data/test/test_maker_0.9.rb +477 -0
  23. data/test/test_maker_1.0.rb +519 -0
  24. data/test/test_maker_2.0.rb +758 -0
  25. data/test/test_maker_atom_entry.rb +394 -0
  26. data/test/test_maker_atom_feed.rb +455 -0
  27. data/test/test_maker_content.rb +48 -0
  28. data/test/test_maker_dc.rb +150 -0
  29. data/test/test_maker_image.rb +63 -0
  30. data/test/test_maker_itunes.rb +488 -0
  31. data/test/test_maker_slash.rb +38 -0
  32. data/test/test_maker_sy.rb +45 -0
  33. data/test/test_maker_taxo.rb +82 -0
  34. data/test/test_maker_trackback.rb +42 -0
  35. data/test/test_maker_xml-stylesheet.rb +84 -0
  36. data/test/test_parser.rb +122 -0
  37. data/test/test_parser_1.0.rb +529 -0
  38. data/test/test_parser_2.0.rb +123 -0
  39. data/test/test_parser_atom_entry.rb +164 -0
  40. data/test/test_parser_atom_feed.rb +277 -0
  41. data/test/test_setup_maker_0.9.rb +247 -0
  42. data/test/test_setup_maker_1.0.rb +551 -0
  43. data/test/test_setup_maker_2.0.rb +309 -0
  44. data/test/test_setup_maker_atom_entry.rb +410 -0
  45. data/test/test_setup_maker_atom_feed.rb +446 -0
  46. data/test/test_setup_maker_itunes.rb +146 -0
  47. data/test/test_setup_maker_slash.rb +39 -0
  48. data/test/test_slash.rb +65 -0
  49. data/test/test_syndication.rb +126 -0
  50. data/test/test_taxonomy.rb +173 -0
  51. data/test/test_to_s.rb +701 -0
  52. data/test/test_trackback.rb +136 -0
  53. data/test/test_xml-stylesheet.rb +109 -0
  54. metadata +109 -7
  55. data/.gitignore +0 -9
  56. data/.travis.yml +0 -26
@@ -0,0 +1,136 @@
1
+ # frozen_string_literal: false
2
+ require "cgi"
3
+ require "rexml/document"
4
+
5
+ require_relative "rss-testcase"
6
+
7
+ require "rss/1.0"
8
+ require "rss/2.0"
9
+ require "rss/trackback"
10
+
11
+ module RSS
12
+ class TestTrackBack < TestCase
13
+
14
+ def setup
15
+ @prefix = "trackback"
16
+ @uri = "http://madskills.com/public/xml/rss/module/trackback/"
17
+
18
+ @parents = %w(item)
19
+
20
+ @elems = {
21
+ :ping => "http://bar.com/tb.cgi?tb_id=rssplustrackback",
22
+ :about => "http://foo.com/trackback/tb.cgi?tb_id=20020923",
23
+ }
24
+
25
+ @content_nodes = @elems.collect do |name, value|
26
+ "<#{@prefix}:#{name} rdf:resource=\"#{CGI.escapeHTML(value.to_s)}\"/>"
27
+ end.join("\n")
28
+
29
+ @content_nodes2 = @elems.collect do |name, value|
30
+ "<#{@prefix}:#{name}>#{CGI.escapeHTML(value.to_s)}</#{@prefix}:#{name}>"
31
+ end.join("\n")
32
+
33
+ @rss_source = make_RDF(<<-EOR, {@prefix => @uri})
34
+ #{make_channel()}
35
+ #{make_image()}
36
+ #{make_item(@content_nodes)}
37
+ #{make_textinput()}
38
+ EOR
39
+
40
+ @rss = Parser.parse(@rss_source)
41
+
42
+ @rss20_source = make_rss20(nil, {@prefix => @uri}) do
43
+ make_channel20(nil) do
44
+ make_item20(@content_nodes2)
45
+ end
46
+ end
47
+
48
+ @rss20 = Parser.parse(@rss20_source, false)
49
+ end
50
+
51
+ def test_parser
52
+
53
+ assert_nothing_raised do
54
+ Parser.parse(@rss_source)
55
+ end
56
+
57
+ @elems.find_all{|k, v| k == :ping}.each do |tag, value|
58
+ assert_too_much_tag(tag.to_s, "item") do
59
+ Parser.parse(make_RDF(<<-EOR, {@prefix => @uri}))
60
+ #{make_channel()}
61
+ #{make_item(("<" + @prefix + ":" + tag.to_s + " rdf:resource=\"" +
62
+ CGI.escapeHTML(value.to_s) +
63
+ "\"/>") * 2)}
64
+ EOR
65
+ end
66
+ end
67
+
68
+ @elems.find_all{|k, v| k == :about}.each do |tag, value|
69
+ assert_missing_tag("trackback:ping", "item") do
70
+ Parser.parse(make_RDF(<<-EOR, {@prefix => @uri}))
71
+ #{make_channel()}
72
+ #{make_item(("<" + @prefix + ":" + tag.to_s + " rdf:resource=\"" +
73
+ CGI.escapeHTML(value.to_s) +
74
+ "\"/>") * 2)}
75
+ EOR
76
+ end
77
+
78
+ end
79
+
80
+ end
81
+
82
+ def test_accessor
83
+
84
+ new_value = {
85
+ :ping => "http://baz.com/trackback/tb.cgi?tb_id=20030808",
86
+ :about => "http://hoge.com/trackback/tb.cgi?tb_id=90030808",
87
+ }
88
+
89
+ @elems.each do |name, value|
90
+ @parents.each do |parent|
91
+ accessor = "#{RSS::TRACKBACK_PREFIX}_#{name}"
92
+ target = @rss.__send__(parent)
93
+ target20 = @rss20.channel.__send__(parent, -1)
94
+ assert_equal(value, target.__send__(accessor))
95
+ assert_equal(value, target20.__send__(accessor))
96
+ if name == :about
97
+ # abount is zero or more
98
+ target.__send__("#{accessor}=", 0, new_value[name].to_s)
99
+ target20.__send__("#{accessor}=", 0, new_value[name].to_s)
100
+ else
101
+ target.__send__("#{accessor}=", new_value[name].to_s)
102
+ target20.__send__("#{accessor}=", new_value[name].to_s)
103
+ end
104
+ assert_equal(new_value[name], target.__send__(accessor))
105
+ assert_equal(new_value[name], target20.__send__(accessor))
106
+ end
107
+ end
108
+
109
+ end
110
+
111
+ def test_to_s
112
+
113
+ @elems.each do |name, value|
114
+ excepted = %Q!<#{@prefix}:#{name} rdf:resource="#{CGI.escapeHTML(value)}"/>!
115
+ @parents.each do |parent|
116
+ meth = "#{RSS::TRACKBACK_PREFIX}_#{name}_element"
117
+ meth << "s" if name == :about
118
+ assert_equal(excepted, @rss.__send__(parent).__send__(meth))
119
+ end
120
+ end
121
+
122
+ REXML::Document.new(@rss_source).root.each_element do |parent|
123
+ if @parents.include?(parent.name)
124
+ parent.each_element do |elem|
125
+ if elem.namespace == @uri
126
+ assert_equal(elem.attributes["resource"], @elems[elem.name.intern])
127
+ end
128
+ end
129
+ end
130
+ end
131
+
132
+ end
133
+
134
+ end
135
+ end
136
+
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: false
2
+ require "rexml/document"
3
+
4
+ require_relative "rss-testcase"
5
+
6
+ require "rss/1.0"
7
+ require "rss/xml-stylesheet"
8
+
9
+ module RSS
10
+ class TestXMLStyleSheet < TestCase
11
+
12
+ def test_accessor
13
+ [
14
+ {:href => "a.xsl", :type => "text/xsl"},
15
+ {:media => "print", :title => "FOO"},
16
+ {:charset => "UTF-8", :alternate => "yes"},
17
+ ].each do |attrs|
18
+ assert_xml_stylesheet_attrs(attrs, XMLStyleSheet.new(attrs))
19
+ end
20
+ end
21
+
22
+ def test_to_s
23
+ [
24
+ {:href => "a.xsl", :type => "text/xsl"},
25
+ {:type => "text/xsl"},
26
+ {:href => "a.xsl", :guess_type => "text/xsl"},
27
+ {:href => "a.css", :type => "text/css"},
28
+ {:href => "a.css", :type => "text/xsl",
29
+ :guess_type => "text/css"},
30
+ {:href => "a.xsl", :type => "text/xsl",
31
+ :title => "sample", :media => "printer",
32
+ :charset => "UTF-8", :alternate => "yes"},
33
+ {:href => "a.css", :guess_type => "text/css",
34
+ :alternate => "no"},
35
+ {:type => "text/xsl", :title => "sample",
36
+ :media => "printer", :charset => "UTF-8",
37
+ :alternate => "yes"},
38
+ ].each do |attrs|
39
+ target, contents = parse_pi(XMLStyleSheet.new(attrs).to_s)
40
+ assert_xml_stylesheet(target, attrs, XMLStyleSheet.new(contents))
41
+ end
42
+ end
43
+
44
+ def test_bad_alternate
45
+ %w(a ___ ??? BAD_ALTERNATE).each do |value|
46
+ xss = XMLStyleSheet.new
47
+ assert_raise(NotAvailableValueError) do
48
+ xss.alternate = value
49
+ end
50
+ xss.do_validate = false
51
+ assert_nothing_raised do
52
+ xss.alternate = value
53
+ end
54
+ assert_nil(xss.alternate)
55
+ end
56
+ end
57
+
58
+ def test_parse
59
+ [
60
+ [{:href => "a.xsl", :type => "text/xsl"},],
61
+ [{:media => "print", :title => "FOO"},],
62
+ [{:charset => "UTF-8", :alternate => "yes"},],
63
+ [{:href => "a.xsl", :type => "text/xsl"},
64
+ {:type => "text/xsl"},
65
+ {:href => "a.xsl", :guess_type => "text/xsl"},
66
+ {:href => "a.css", :type => "text/css"},
67
+ {:href => "a.css", :type => "text/xsl",
68
+ :guess_type => "text/css"},
69
+ {:href => "a.xsl", :type => "text/xsl",
70
+ :title => "sample", :media => "printer",
71
+ :charset => "UTF-8", :alternate => "yes"},
72
+ {:href => "a.css", :guess_type => "text/css",
73
+ :alternate => "no"},
74
+ {:type => "text/xsl", :title => "sample",
75
+ :media => "printer", :charset => "UTF-8",
76
+ :alternate => "yes"},],
77
+ ].each do |xsss|
78
+ doc = REXML::Document.new(make_sample_RDF)
79
+ root = doc.root
80
+ xsss.each do |xss|
81
+ content = xss.collect do |key, name|
82
+ %Q[#{key}="#{name}"]
83
+ end.join(" ")
84
+ pi = REXML::Instruction.new("xml-stylesheet", content)
85
+ root.previous_sibling = pi
86
+ end
87
+ rss = Parser.parse(doc.to_s)
88
+ have_href_xsss = xsss.find_all {|xss| xss.has_key?(:href)}
89
+ assert_equal(have_href_xsss.size, rss.xml_stylesheets.size)
90
+ rss.xml_stylesheets.each_with_index do |stylesheet, i|
91
+ target, = parse_pi(stylesheet.to_s)
92
+ assert_xml_stylesheet(target, have_href_xsss[i], stylesheet)
93
+ end
94
+ end
95
+ end
96
+
97
+ def parse_pi(pi)
98
+ /\A\s*<\?(\S+)([^?]*\?+(?:[^?>][^?]*\?+)*)>\s*\z/ =~ pi
99
+ target = $1
100
+ dummy = REXML::Document.new("<dummy #{$2.to_s.chop}/>").root
101
+ contents = {}
102
+ dummy.attributes.each do |name, value|
103
+ contents[name] = value
104
+ end
105
+ [target, contents]
106
+ end
107
+
108
+ end
109
+ end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-25 00:00:00.000000000 Z
11
+ date: 2020-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rexml
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -59,8 +73,6 @@ executables: []
59
73
  extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
62
- - ".gitignore"
63
- - ".travis.yml"
64
76
  - Gemfile
65
77
  - LICENSE.txt
66
78
  - NEWS.md
@@ -111,6 +123,51 @@ files:
111
123
  - lib/rss/xmlparser.rb
112
124
  - lib/rss/xmlscanner.rb
113
125
  - rss.gemspec
126
+ - test/dot.png
127
+ - test/rss-assertions.rb
128
+ - test/rss-testcase.rb
129
+ - test/run-test.rb
130
+ - test/test_1.0.rb
131
+ - test/test_2.0.rb
132
+ - test/test_accessor.rb
133
+ - test/test_atom.rb
134
+ - test/test_content.rb
135
+ - test/test_dublincore.rb
136
+ - test/test_image.rb
137
+ - test/test_inherit.rb
138
+ - test/test_itunes.rb
139
+ - test/test_maker_0.9.rb
140
+ - test/test_maker_1.0.rb
141
+ - test/test_maker_2.0.rb
142
+ - test/test_maker_atom_entry.rb
143
+ - test/test_maker_atom_feed.rb
144
+ - test/test_maker_content.rb
145
+ - test/test_maker_dc.rb
146
+ - test/test_maker_image.rb
147
+ - test/test_maker_itunes.rb
148
+ - test/test_maker_slash.rb
149
+ - test/test_maker_sy.rb
150
+ - test/test_maker_taxo.rb
151
+ - test/test_maker_trackback.rb
152
+ - test/test_maker_xml-stylesheet.rb
153
+ - test/test_parser.rb
154
+ - test/test_parser_1.0.rb
155
+ - test/test_parser_2.0.rb
156
+ - test/test_parser_atom_entry.rb
157
+ - test/test_parser_atom_feed.rb
158
+ - test/test_setup_maker_0.9.rb
159
+ - test/test_setup_maker_1.0.rb
160
+ - test/test_setup_maker_2.0.rb
161
+ - test/test_setup_maker_atom_entry.rb
162
+ - test/test_setup_maker_atom_feed.rb
163
+ - test/test_setup_maker_itunes.rb
164
+ - test/test_setup_maker_slash.rb
165
+ - test/test_slash.rb
166
+ - test/test_syndication.rb
167
+ - test/test_taxonomy.rb
168
+ - test/test_to_s.rb
169
+ - test/test_trackback.rb
170
+ - test/test_xml-stylesheet.rb
114
171
  homepage: https://github.com/ruby/rss
115
172
  licenses:
116
173
  - BSD-2-Clause
@@ -131,8 +188,53 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
188
  version: '0'
132
189
  requirements: []
133
190
  rubyforge_project:
134
- rubygems_version: 2.7.6
191
+ rubygems_version: 2.7.6.2
135
192
  signing_key:
136
193
  specification_version: 4
137
194
  summary: Family of libraries that support various formats of XML "feeds".
138
- test_files: []
195
+ test_files:
196
+ - test/test_maker_2.0.rb
197
+ - test/test_dublincore.rb
198
+ - test/test_setup_maker_slash.rb
199
+ - test/test_parser.rb
200
+ - test/test_maker_xml-stylesheet.rb
201
+ - test/test_maker_0.9.rb
202
+ - test/test_setup_maker_atom_feed.rb
203
+ - test/test_maker_image.rb
204
+ - test/test_parser_atom_entry.rb
205
+ - test/test_maker_taxo.rb
206
+ - test/run-test.rb
207
+ - test/test_itunes.rb
208
+ - test/test_maker_content.rb
209
+ - test/test_maker_dc.rb
210
+ - test/test_inherit.rb
211
+ - test/dot.png
212
+ - test/test_maker_atom_entry.rb
213
+ - test/test_setup_maker_2.0.rb
214
+ - test/test_to_s.rb
215
+ - test/test_setup_maker_itunes.rb
216
+ - test/rss-assertions.rb
217
+ - test/test_xml-stylesheet.rb
218
+ - test/test_1.0.rb
219
+ - test/test_accessor.rb
220
+ - test/test_taxonomy.rb
221
+ - test/test_maker_trackback.rb
222
+ - test/rss-testcase.rb
223
+ - test/test_slash.rb
224
+ - test/test_setup_maker_atom_entry.rb
225
+ - test/test_syndication.rb
226
+ - test/test_maker_1.0.rb
227
+ - test/test_parser_atom_feed.rb
228
+ - test/test_maker_itunes.rb
229
+ - test/test_image.rb
230
+ - test/test_setup_maker_1.0.rb
231
+ - test/test_atom.rb
232
+ - test/test_maker_slash.rb
233
+ - test/test_parser_1.0.rb
234
+ - test/test_setup_maker_0.9.rb
235
+ - test/test_2.0.rb
236
+ - test/test_trackback.rb
237
+ - test/test_content.rb
238
+ - test/test_maker_sy.rb
239
+ - test/test_parser_2.0.rb
240
+ - test/test_maker_atom_feed.rb
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
- Gemfile.lock
@@ -1,26 +0,0 @@
1
- notifications:
2
- webhooks:
3
- - https://webhook.commit-email.info/
4
-
5
- language: ruby
6
- matrix:
7
- include:
8
- - name: "2.3"
9
- rvm: 2.3
10
- - name: "2.4"
11
- rvm: 2.4.5
12
- - name: "2.5"
13
- rvm: 2.5.3
14
- - name: "2.6"
15
- rvm: 2.6
16
- - name: "trunk"
17
- rvm: ruby-head
18
- - name: "gem"
19
- rvm: 2.6
20
- install:
21
- - rake install
22
- script:
23
- - mkdir -p tmp
24
- - cd tmp
25
- - cp -a ../test/ ./
26
- - ../run-test.rb