ratom 0.6.5 → 0.6.6
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.
- data/VERSION.yml +1 -1
- data/lib/atom/pub.rb +3 -2
- data/lib/atom/xml/parser.rb +27 -4
- data/lib/atom.rb +2 -1
- data/spec/app/service.xml +1 -1
- data/spec/app/service_xml_base.xml +37 -0
- data/spec/atom/pub_spec.rb +14 -1
- data/spec/atom_spec.rb +22 -1
- metadata +4 -3
data/VERSION.yml
CHANGED
data/lib/atom/pub.rb
CHANGED
@@ -60,7 +60,8 @@ module Atom
|
|
60
60
|
class Categories < DelegateClass(Array)
|
61
61
|
include Atom::Xml::Parseable
|
62
62
|
elements :categories, :class => Atom::Category
|
63
|
-
attribute :
|
63
|
+
attribute :fixed
|
64
|
+
uri_attribute :href
|
64
65
|
|
65
66
|
def initialize(o)
|
66
67
|
super([])
|
@@ -102,7 +103,7 @@ module Atom
|
|
102
103
|
|
103
104
|
class Collection
|
104
105
|
include Atom::Xml::Parseable
|
105
|
-
|
106
|
+
uri_attribute :href
|
106
107
|
element :title, :class => Content, :namespace => Atom::NAMESPACE
|
107
108
|
element :categories, :class => Categories
|
108
109
|
elements :accepts, :content_only => true
|
data/lib/atom/xml/parser.rb
CHANGED
@@ -79,11 +79,20 @@ module Atom
|
|
79
79
|
when XML::Reader::TYPE_ELEMENT
|
80
80
|
if element_specs.include?(xml.local_name) && (self.class.known_namespaces + [Atom::NAMESPACE, Atom::Pub::NAMESPACE]).include?(xml.namespace_uri)
|
81
81
|
element_specs[xml.local_name].parse(self, xml)
|
82
|
-
elsif attributes.any?
|
82
|
+
elsif attributes.any? || uri_attributes.any?
|
83
83
|
while (xml.move_to_next_attribute == 1)
|
84
84
|
if attributes.include?(xml.name)
|
85
85
|
# Support attribute names with namespace prefixes
|
86
|
-
self.send("#{xml.name
|
86
|
+
self.send("#{accessor_name(xml.name)}=", xml.value)
|
87
|
+
elsif uri_attributes.include?(xml.name)
|
88
|
+
value = if xml.base_uri
|
89
|
+
@base_uri = xml.base_uri
|
90
|
+
raw_uri = URI.parse(xml.value)
|
91
|
+
(raw_uri.relative? ? URI.parse(xml.base_uri) + raw_uri : raw_uri).to_s
|
92
|
+
else
|
93
|
+
xml.value
|
94
|
+
end
|
95
|
+
self.send("#{accessor_name(xml.name)}=", value)
|
87
96
|
elsif self.respond_to?(:simple_extensions)
|
88
97
|
self[xml.namespace_uri, xml.local_name].as_attribute = true
|
89
98
|
self[xml.namespace_uri, xml.local_name] << xml.value
|
@@ -106,15 +115,21 @@ module Atom
|
|
106
115
|
def current_node_is?(xml, element, ns = nil)
|
107
116
|
xml.node_type == XML::Reader::TYPE_ELEMENT && xml.local_name == element && (ns.nil? || ns == xml.namespace_uri)
|
108
117
|
end
|
118
|
+
|
119
|
+
def accessor_name(name)
|
120
|
+
name.to_s.sub(/:/, '_').to_sym
|
121
|
+
end
|
109
122
|
|
110
123
|
def Parseable.included(o)
|
111
124
|
o.class_eval do
|
112
125
|
def o.ordered_element_specs; @ordered_element_specs ||= []; end
|
113
126
|
def o.element_specs; @element_specs ||= {}; end
|
114
127
|
def o.attributes; @attributes ||= []; end
|
128
|
+
def o.uri_attributes; @uri_attributes ||= []; end
|
115
129
|
def element_specs; self.class.element_specs; end
|
116
130
|
def ordered_element_specs; self.class.ordered_element_specs; end
|
117
131
|
def attributes; self.class.attributes; end
|
132
|
+
def uri_attributes; self.class.uri_attributes; end
|
118
133
|
def o.namespace(ns = @namespace); @namespace = ns; end
|
119
134
|
def o.add_extension_namespace(ns, url); self.extensions_namespaces[ns.to_s] = url; end
|
120
135
|
def o.extensions_namespaces; @extensions_namespaces ||= {} end
|
@@ -173,8 +188,8 @@ module Atom
|
|
173
188
|
end
|
174
189
|
end
|
175
190
|
|
176
|
-
self.class.attributes.each do |attribute|
|
177
|
-
if value = self.send(
|
191
|
+
(self.class.attributes + self.class.uri_attributes).each do |attribute|
|
192
|
+
if value = self.send(accessor_name(attribute))
|
178
193
|
if value != 0
|
179
194
|
node[attribute] = value.to_s
|
180
195
|
end
|
@@ -249,6 +264,14 @@ module Atom
|
|
249
264
|
self.attributes << name.to_s
|
250
265
|
end
|
251
266
|
end
|
267
|
+
|
268
|
+
def uri_attribute(*names)
|
269
|
+
attr_accessor :base_uri
|
270
|
+
names.each do |name|
|
271
|
+
attr_accessor name.to_s.sub(/:/, '_').to_sym
|
272
|
+
self.uri_attributes << name.to_s
|
273
|
+
end
|
274
|
+
end
|
252
275
|
|
253
276
|
def loadable!(&error_handler)
|
254
277
|
class_name = self.name
|
data/lib/atom.rb
CHANGED
data/spec/app/service.xml
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
href="http://example.org/blog/main" >
|
8
8
|
<atom:title>My Blog Entries</atom:title>
|
9
9
|
<categories
|
10
|
-
href="http://example.
|
10
|
+
href="http://example.org/cats/forMain.cats" />
|
11
11
|
</collection>
|
12
12
|
<collection
|
13
13
|
href="http://example.org/blog/pic" >
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<?xml version="1.0" encoding='utf-8'?>
|
2
|
+
<service xmlns="http://www.w3.org/2007/app"
|
3
|
+
xmlns:atom="http://www.w3.org/2005/Atom"
|
4
|
+
xml:base="http://example.org/">
|
5
|
+
<workspace>
|
6
|
+
<atom:title>Main Site</atom:title>
|
7
|
+
<collection
|
8
|
+
href="/blog/main" >
|
9
|
+
<atom:title>My Blog Entries</atom:title>
|
10
|
+
<categories
|
11
|
+
href="/cats/forMain.cats" />
|
12
|
+
</collection>
|
13
|
+
<collection
|
14
|
+
href="http://example.org/blog/pic" >
|
15
|
+
<atom:title>Pictures</atom:title>
|
16
|
+
<accept>image/png</accept>
|
17
|
+
<accept>image/jpeg</accept>
|
18
|
+
<accept>image/gif</accept>
|
19
|
+
</collection>
|
20
|
+
</workspace>
|
21
|
+
<workspace>
|
22
|
+
<atom:title>Sidebar Blog</atom:title>
|
23
|
+
<collection
|
24
|
+
href="http://example.org/sidebar/list" >
|
25
|
+
<atom:title>Remaindered Links</atom:title>
|
26
|
+
<accept>application/atom+xml;type=entry</accept>
|
27
|
+
<categories fixed="yes">
|
28
|
+
<atom:category
|
29
|
+
scheme="http://example.org/extra-cats/"
|
30
|
+
term="joke" />
|
31
|
+
<atom:category
|
32
|
+
scheme="http://example.org/extra-cats/"
|
33
|
+
term="serious" />
|
34
|
+
</categories>
|
35
|
+
</collection>
|
36
|
+
</workspace>
|
37
|
+
</service>
|
data/spec/atom/pub_spec.rb
CHANGED
@@ -34,7 +34,7 @@ shared_examples_for 'parser of spec/app/service.xml' do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
it "should have a href on categories" do
|
37
|
-
@collection1.categories.href.should == "http://example.
|
37
|
+
@collection1.categories.href.should == "http://example.org/cats/forMain.cats"
|
38
38
|
@collection1.categories.fixed?.should be_false
|
39
39
|
end
|
40
40
|
|
@@ -152,6 +152,19 @@ describe Atom::Pub do
|
|
152
152
|
|
153
153
|
it_should_behave_like 'parser of spec/app/service.xml'
|
154
154
|
end
|
155
|
+
|
156
|
+
describe "load service with xml:base" do
|
157
|
+
before(:all) do
|
158
|
+
@service = Atom::Pub::Service.load_service(File.open('spec/app/service_xml_base.xml'))
|
159
|
+
@workspace = @service.workspaces.first
|
160
|
+
@workspace2 = @service.workspaces[1]
|
161
|
+
@collection1 = @workspace.collections.first
|
162
|
+
@collection2 = @workspace.collections[1]
|
163
|
+
@collection3 = @workspace2.collections.first
|
164
|
+
end
|
165
|
+
|
166
|
+
it_should_behave_like 'parser of spec/app/service.xml'
|
167
|
+
end
|
155
168
|
|
156
169
|
describe "load_service with authentication" do
|
157
170
|
it "should pass credentials to the server" do
|
data/spec/atom_spec.rb
CHANGED
@@ -265,7 +265,28 @@ describe Atom do
|
|
265
265
|
@feed.should have(1).categories
|
266
266
|
end
|
267
267
|
end
|
268
|
-
|
268
|
+
|
269
|
+
describe "FeedWithXmlBase" do
|
270
|
+
before(:all) do
|
271
|
+
@feed = Atom::Feed.load_feed(File.open('spec/conformance/xmlbase.atom'))
|
272
|
+
end
|
273
|
+
|
274
|
+
subject { @feed }
|
275
|
+
|
276
|
+
its(:title) { should == "xml:base support tests" }
|
277
|
+
it { should have(16).entries }
|
278
|
+
|
279
|
+
it "should resolve all alternate links to the same location" do
|
280
|
+
@feed.entries.each do |entry|
|
281
|
+
entry.links.first.href.should == "http://example.org/tests/base/result.html"
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
it "should resolve all links in content to what their label says" do
|
286
|
+
pending "support xml:base in content XHTML"
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
269
290
|
describe Atom::Entry do
|
270
291
|
before(:each) do
|
271
292
|
@entry = @feed.entries.first
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 0.6.
|
8
|
+
- 6
|
9
|
+
version: 0.6.6
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Peerworks
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-04-
|
18
|
+
date: 2010-04-22 00:00:00 +09:30
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -67,6 +67,7 @@ files:
|
|
67
67
|
- lib/atom/xml/parser.rb
|
68
68
|
- spec/app/member_entry.atom
|
69
69
|
- spec/app/service.xml
|
70
|
+
- spec/app/service_xml_base.xml
|
70
71
|
- spec/atom/pub_spec.rb
|
71
72
|
- spec/atom_spec.rb
|
72
73
|
- spec/conformance/baseuri.atom
|