ratom 0.6.9 → 0.6.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,8 @@
1
+ == 0.6.10
2
+
3
+ * Removed explicit dependency on ActiveSupport. [icambron]
4
+ * Added support for external content references using the src attribute. [lukfugl]
5
+
1
6
  == 0.6.9
2
7
 
3
8
  * SSL support [kossnocorp]
@@ -1,5 +1,5 @@
1
1
  ---
2
- :major: 0
2
+ :patch: 10
3
3
  :build:
4
+ :major: 0
4
5
  :minor: 6
5
- :patch: 9
@@ -170,13 +170,17 @@ module Atom # :nodoc:
170
170
 
171
171
  class Content # :nodoc:
172
172
  def self.parse(xml)
173
- case xml['type']
174
- when "xhtml"
175
- Xhtml.new(xml)
176
- when "html"
177
- Html.new(xml)
173
+ if xml['src'] && !xml['src'].empty?
174
+ External.new(xml)
178
175
  else
179
- Text.new(xml)
176
+ case xml['type']
177
+ when "xhtml"
178
+ Xhtml.new(xml)
179
+ when "html"
180
+ Html.new(xml)
181
+ else
182
+ Text.new(xml)
183
+ end
180
184
  end
181
185
  end
182
186
 
@@ -212,6 +216,26 @@ module Atom # :nodoc:
212
216
  end
213
217
  end
214
218
 
219
+ # External content reference within an Atom document.
220
+ class External < Base
221
+ attribute :type, :src
222
+
223
+ # this one only works with XML::Reader instances, no strings, since the
224
+ # content won't be inline.
225
+ def initialize(o)
226
+ raise ArgumentError, "Got #{o} which isn't an XML::Reader" unless o.kind_of?(XML::Reader)
227
+ super("")
228
+ parse(o, :once => true)
229
+ end
230
+
231
+ def to_xml(nodeonly = true, name = 'content', namespace = nil, namespace_map = Atom::Xml::NamespaceMap.new)
232
+ node = XML::Node.new("#{namespace_map.prefix(Atom::NAMESPACE, name)}")
233
+ node['type'] = self.type if self.type
234
+ node['src'] = self.src if self.src
235
+ node
236
+ end
237
+ end
238
+
215
239
  # Text content within an Atom document.
216
240
  class Text < Base
217
241
  attribute :type, :'xml:lang'
@@ -10,7 +10,7 @@ require 'time'
10
10
  RootCA = '/etc/ssl/certs'
11
11
 
12
12
  # Just a couple methods form transforming strings
13
- unless defined?(ActiveSupport)
13
+ unless String.instance_methods.include?(:singularize)
14
14
  class String # :nodoc:
15
15
  def singularize
16
16
  if self =~ /ies$/
@@ -19,11 +19,19 @@ unless defined?(ActiveSupport)
19
19
  self.sub(/s$/, '')
20
20
  end
21
21
  end
22
-
22
+ end
23
+ end
24
+
25
+ unless String.instance_methods.include?(:demodulize)
26
+ class String # :nodoc:
23
27
  def demodulize
24
28
  self.sub(/.*::/, '')
25
29
  end
26
-
30
+ end
31
+ end
32
+
33
+ unless String.instance_methods.include?(:constantize)
34
+ class String # :nodoc:
27
35
  def constantize
28
36
  Object.module_eval("::#{self}", __FILE__, __LINE__)
29
37
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ratom}
8
- s.version = "0.6.9"
8
+ s.version = "0.6.10"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Peerworks", "Sean Geoghegan"]
12
- s.date = %q{2011-07-13}
12
+ s.date = %q{2011-10-15}
13
13
  s.description = %q{A fast Atom Syndication and Publication API based on libxml}
14
14
  s.email = %q{seangeo@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -56,6 +56,7 @@ Gem::Specification.new do |s|
56
56
  "spec/fixtures/entry_with_custom_extensions.atom",
57
57
  "spec/fixtures/entry_with_simple_extensions.atom",
58
58
  "spec/fixtures/entry_with_single_custom_extension.atom",
59
+ "spec/fixtures/external_content_single_entry.atom",
59
60
  "spec/fixtures/multiple_entry.atom",
60
61
  "spec/fixtures/simple_single_entry.atom",
61
62
  "spec/fixtures/with_stylesheet.atom",
@@ -69,7 +70,7 @@ Gem::Specification.new do |s|
69
70
  s.homepage = %q{http://github.com/seangeo/ratom}
70
71
  s.require_paths = ["lib"]
71
72
  s.rubyforge_project = %q{ratom}
72
- s.rubygems_version = %q{1.6.2}
73
+ s.rubygems_version = %q{1.3.6}
73
74
  s.summary = %q{Atom Syndication and Publication API}
74
75
  s.test_files = [
75
76
  "spec/atom/pub_spec.rb",
@@ -79,9 +80,10 @@ Gem::Specification.new do |s|
79
80
  ]
80
81
 
81
82
  if s.respond_to? :specification_version then
83
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
82
84
  s.specification_version = 3
83
85
 
84
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
86
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
85
87
  s.add_development_dependency(%q<rspec>, [">= 0"])
86
88
  s.add_runtime_dependency(%q<libxml-ruby>, [">= 1.1.2"])
87
89
  else
@@ -1293,6 +1293,28 @@ describe Atom do
1293
1293
  end
1294
1294
  end
1295
1295
 
1296
+ describe Atom::Content::External do
1297
+ before(:each) do
1298
+ feed = nil
1299
+ lambda { feed = Atom::Feed.load_feed(File.open('spec/fixtures/external_content_single_entry.atom')) }.should_not raise_error
1300
+ entry = feed.entries.first
1301
+ entry.content.should_not be_nil
1302
+ @content = entry.content
1303
+ @content.class.should == Atom::Content::External
1304
+ end
1305
+
1306
+ it "should capture the src" do
1307
+ @content.type.should == 'application/pdf'
1308
+ @content.src.should == 'http://example.org/pdfs/robots-run-amok.pdf'
1309
+ end
1310
+
1311
+ it "should include type and src in the serialized xml" do
1312
+ xml = @content.to_xml
1313
+ xml['type'].should == 'application/pdf'
1314
+ xml['src'].should == 'http://example.org/pdfs/robots-run-amok.pdf'
1315
+ end
1316
+ end
1317
+
1296
1318
  describe 'Atom::Category initializer' do
1297
1319
  it "should create a empty category" do
1298
1320
  lambda { Atom::Category.new }.should_not raise_error
@@ -0,0 +1,21 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <feed xmlns="http://www.w3.org/2005/Atom">
3
+
4
+ <title>Example Feed</title>
5
+ <link href="http://example.org/"/>
6
+ <updated>2003-12-13T18:30:02Z</updated>
7
+ <author>
8
+ <name>John Doe</name>
9
+ </author>
10
+ <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
11
+
12
+ <entry>
13
+ <title>Atom-Powered Robots Run Amok</title>
14
+ <link href="http://example.org/2003/12/13/atom03"/>
15
+ <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
16
+ <content type="application/pdf" src="http://example.org/pdfs/robots-run-amok.pdf"/>
17
+ <updated>2003-12-13T18:30:02Z</updated>
18
+ <summary>Some text.</summary>
19
+ </entry>
20
+
21
+ </feed>
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ratom
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease:
4
+ prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 6
9
- - 9
10
- version: 0.6.9
8
+ - 10
9
+ version: 0.6.10
11
10
  platform: ruby
12
11
  authors:
13
12
  - Peerworks
@@ -16,18 +15,16 @@ autorequire:
16
15
  bindir: bin
17
16
  cert_chain: []
18
17
 
19
- date: 2011-07-13 00:00:00 +09:30
18
+ date: 2011-10-15 00:00:00 +10:30
20
19
  default_executable:
21
20
  dependencies:
22
21
  - !ruby/object:Gem::Dependency
23
22
  name: rspec
24
23
  prerelease: false
25
24
  requirement: &id001 !ruby/object:Gem::Requirement
26
- none: false
27
25
  requirements:
28
26
  - - ">="
29
27
  - !ruby/object:Gem::Version
30
- hash: 3
31
28
  segments:
32
29
  - 0
33
30
  version: "0"
@@ -37,11 +34,9 @@ dependencies:
37
34
  name: libxml-ruby
38
35
  prerelease: false
39
36
  requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
37
  requirements:
42
38
  - - ">="
43
39
  - !ruby/object:Gem::Version
44
- hash: 23
45
40
  segments:
46
41
  - 1
47
42
  - 1
@@ -98,6 +93,7 @@ files:
98
93
  - spec/fixtures/entry_with_custom_extensions.atom
99
94
  - spec/fixtures/entry_with_simple_extensions.atom
100
95
  - spec/fixtures/entry_with_single_custom_extension.atom
96
+ - spec/fixtures/external_content_single_entry.atom
101
97
  - spec/fixtures/multiple_entry.atom
102
98
  - spec/fixtures/simple_single_entry.atom
103
99
  - spec/fixtures/with_stylesheet.atom
@@ -117,27 +113,23 @@ rdoc_options: []
117
113
  require_paths:
118
114
  - lib
119
115
  required_ruby_version: !ruby/object:Gem::Requirement
120
- none: false
121
116
  requirements:
122
117
  - - ">="
123
118
  - !ruby/object:Gem::Version
124
- hash: 3
125
119
  segments:
126
120
  - 0
127
121
  version: "0"
128
122
  required_rubygems_version: !ruby/object:Gem::Requirement
129
- none: false
130
123
  requirements:
131
124
  - - ">="
132
125
  - !ruby/object:Gem::Version
133
- hash: 3
134
126
  segments:
135
127
  - 0
136
128
  version: "0"
137
129
  requirements: []
138
130
 
139
131
  rubyforge_project: ratom
140
- rubygems_version: 1.6.2
132
+ rubygems_version: 1.3.6
141
133
  signing_key:
142
134
  specification_version: 3
143
135
  summary: Atom Syndication and Publication API