xommelier 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -182,7 +182,7 @@ will output
182
182
 
183
183
  ## TODO
184
184
 
185
- * Validating built XML against RelaxNG and XML Schema
185
+ * Validating built XML against RelaxNG
186
186
  * Converting XML Schema, RelaxNG, RelaxNG Compact and DTD into Xommelier Ruby DSL
187
187
  * ActiveRecord-like automatic loading of XML Schema, RelaxNG, RelaxNG Compact and DTD without needing to write it down into ruby code
188
188
 
@@ -0,0 +1,240 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <xs:schema targetNamespace="http://www.w3.org/2005/Atom" elementFormDefault="qualified"
3
+ attributeFormDefault="unqualified"
4
+ xmlns:atom="http://www.w3.org/2005/Atom"
5
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
6
+ xmlns:xml="http://www.w3.org/XML/1998/namespace">
7
+ <xs:annotation>
8
+ <xs:documentation>
9
+ This version of the Atom schema is based on version 1.0 of the format specifications,
10
+ found here http://www.atomenabled.org/developers/syndication/atom-format-spec.php.
11
+ </xs:documentation>
12
+ </xs:annotation>
13
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/03/xml.xsd" />
14
+ <xs:annotation>
15
+ <xs:documentation>
16
+ An Atom document may have two root elements, feed and entry, as defined in section 2.
17
+ </xs:documentation>
18
+ </xs:annotation>
19
+ <xs:element name="feed" type="atom:feedType"/>
20
+ <xs:element name="entry" type="atom:entryType"/>
21
+ <xs:complexType name="textType" mixed="true">
22
+ <xs:annotation>
23
+ <xs:documentation>
24
+ The Atom text construct is defined in section 3.1 of the format spec.
25
+ </xs:documentation>
26
+ </xs:annotation>
27
+ <xs:sequence>
28
+ <xs:any namespace="http://www.w3.org/1999/xhtml" minOccurs="0"/>
29
+ </xs:sequence>
30
+ <xs:attribute name="type" >
31
+ <xs:simpleType>
32
+ <xs:restriction base="xs:token">
33
+ <xs:enumeration value="text"/>
34
+ <xs:enumeration value="html"/>
35
+ <xs:enumeration value="xhtml"/>
36
+ </xs:restriction>
37
+ </xs:simpleType>
38
+ </xs:attribute>
39
+ <xs:attributeGroup ref="atom:commonAttributes"/>
40
+ </xs:complexType>
41
+ <xs:complexType name="personType">
42
+ <xs:annotation>
43
+ <xs:documentation>
44
+ The Atom person construct is defined in section 3.2 of the format spec.
45
+ </xs:documentation>
46
+ </xs:annotation>
47
+ <xs:choice minOccurs="1" maxOccurs="unbounded">
48
+ <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1" />
49
+ <xs:element name="uri" type="atom:uriType" minOccurs="0" maxOccurs="1" />
50
+ <xs:element name="email" type="atom:emailType" minOccurs="0" maxOccurs="1" />
51
+ <xs:any namespace="##other"/>
52
+ </xs:choice>
53
+ <xs:attributeGroup ref="atom:commonAttributes"/>
54
+ </xs:complexType>
55
+ <xs:simpleType name="emailType">
56
+ <xs:annotation>
57
+ <xs:documentation>
58
+ Schema definition for an email address.
59
+ </xs:documentation>
60
+ </xs:annotation>
61
+ <xs:restriction base="xs:normalizedString">
62
+ <xs:pattern value="\w+@(\w+\.)+\w+" />
63
+ </xs:restriction>
64
+ </xs:simpleType>
65
+ <xs:complexType name="feedType">
66
+ <xs:annotation>
67
+ <xs:documentation>
68
+ The Atom feed construct is defined in section 4.1.1 of the format spec.
69
+ </xs:documentation>
70
+ </xs:annotation>
71
+ <xs:choice minOccurs="3" maxOccurs="unbounded">
72
+ <xs:element name="author" type="atom:personType" minOccurs="0" maxOccurs="unbounded" />
73
+ <xs:element name="category" type="atom:categoryType" minOccurs="0" maxOccurs="unbounded" />
74
+ <xs:element name="contributor" type="atom:personType" minOccurs="0" maxOccurs="unbounded" />
75
+ <xs:element name="generator" type="atom:generatorType" minOccurs="0" maxOccurs="1" />
76
+ <xs:element name="icon" type="atom:iconType" minOccurs="0" maxOccurs="1" />
77
+ <xs:element name="id" type="atom:idType" minOccurs="1" maxOccurs="1" />
78
+ <xs:element name="link" type="atom:linkType" minOccurs="0" maxOccurs="unbounded" />
79
+ <xs:element name="logo" type="atom:logoType" minOccurs="0" maxOccurs="1" />
80
+ <xs:element name="rights" type="atom:textType" minOccurs="0" maxOccurs="1" />
81
+ <xs:element name="subtitle" type="atom:textType" minOccurs="0" maxOccurs="1" />
82
+ <xs:element name="title" type="atom:textType" minOccurs="1" maxOccurs="1" />
83
+ <xs:element name="updated" type="atom:dateTimeType" minOccurs="1" maxOccurs="1" />
84
+ <xs:element name="entry" type="atom:entryType" minOccurs="0" maxOccurs="unbounded" />
85
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
86
+ </xs:choice>
87
+ <xs:attributeGroup ref="atom:commonAttributes"/>
88
+ </xs:complexType>
89
+ <xs:complexType name="entryType">
90
+ <xs:annotation>
91
+ <xs:documentation>
92
+ The Atom entry construct is defined in section 4.1.2 of the format spec.
93
+ </xs:documentation>
94
+ </xs:annotation>
95
+ <xs:choice maxOccurs="unbounded">
96
+ <xs:element name="author" type="atom:personType" minOccurs="0" maxOccurs="unbounded" />
97
+ <xs:element name="category" type="atom:categoryType" minOccurs="0" maxOccurs="unbounded" />
98
+ <xs:element name="content" type="atom:contentType" minOccurs="0" maxOccurs="1" />
99
+ <xs:element name="contributor" type="atom:personType" minOccurs="0" maxOccurs="unbounded" />
100
+ <xs:element name="id" type="atom:idType" minOccurs="1" maxOccurs="1" />
101
+ <xs:element name="link" type="atom:linkType" minOccurs="0" maxOccurs="unbounded" />
102
+ <xs:element name="published" type="atom:dateTimeType" minOccurs="0" maxOccurs="1" />
103
+ <xs:element name="rights" type="atom:textType" minOccurs="0" maxOccurs="1" />
104
+ <xs:element name="source" type="atom:textType" minOccurs="0" maxOccurs="1" />
105
+ <xs:element name="summary" type="atom:textType" minOccurs="0" maxOccurs="1" />
106
+ <xs:element name="title" type="atom:textType" minOccurs="1" maxOccurs="1" />
107
+ <xs:element name="updated" type="atom:dateTimeType" minOccurs="1" maxOccurs="1" />
108
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
109
+ </xs:choice>
110
+ <xs:attributeGroup ref="atom:commonAttributes"/>
111
+ </xs:complexType>
112
+ <xs:complexType name="contentType" mixed="true">
113
+ <xs:annotation>
114
+ <xs:documentation>
115
+ The Atom content construct is defined in section 4.1.3 of the format spec.
116
+ </xs:documentation>
117
+ </xs:annotation>
118
+ <xs:sequence>
119
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" />
120
+ </xs:sequence>
121
+ <xs:attribute name="type" type="xs:string"/>
122
+ <xs:attribute name="src" type="xs:anyURI"/>
123
+ <xs:attributeGroup ref="atom:commonAttributes"/>
124
+ </xs:complexType>
125
+ <xs:complexType name="categoryType">
126
+ <xs:annotation>
127
+ <xs:documentation>
128
+ The Atom cagegory construct is defined in section 4.2.2 of the format spec.
129
+ </xs:documentation>
130
+ </xs:annotation>
131
+ <xs:attribute name="term" type="xs:string" use="required"/>
132
+ <xs:attribute name="scheme" type="xs:anyURI" use="optional"/>
133
+ <xs:attribute name="label" type="xs:string" use="optional"/>
134
+ <xs:attributeGroup ref="atom:commonAttributes" />
135
+ </xs:complexType>
136
+ <xs:complexType name="generatorType">
137
+ <xs:annotation>
138
+ <xs:documentation>
139
+ The Atom generator element is defined in section 4.2.4 of the format spec.
140
+ </xs:documentation>
141
+ </xs:annotation>
142
+ <xs:simpleContent>
143
+ <xs:extension base="xs:string">
144
+ <xs:attribute name="uri" use="optional" type="xs:anyURI" />
145
+ <xs:attribute name="version" use="optional" type="xs:string" />
146
+ <xs:attributeGroup ref="atom:commonAttributes"/>
147
+ </xs:extension>
148
+ </xs:simpleContent>
149
+ </xs:complexType>
150
+ <xs:complexType name="iconType">
151
+ <xs:annotation>
152
+ <xs:documentation>
153
+ The Atom icon construct is defined in section 4.2.5 of the format spec.
154
+ </xs:documentation>
155
+ </xs:annotation>
156
+ <xs:simpleContent>
157
+ <xs:extension base="xs:anyURI">
158
+ <xs:attributeGroup ref="atom:commonAttributes"/>
159
+ </xs:extension>
160
+ </xs:simpleContent>
161
+ </xs:complexType>
162
+ <xs:complexType name="idType">
163
+ <xs:annotation>
164
+ <xs:documentation>
165
+ The Atom id construct is defined in section 4.2.6 of the format spec.
166
+ </xs:documentation>
167
+ </xs:annotation>
168
+ <xs:simpleContent>
169
+ <xs:extension base="xs:anyURI">
170
+ <xs:attributeGroup ref="atom:commonAttributes"/>
171
+ </xs:extension>
172
+ </xs:simpleContent>
173
+ </xs:complexType>
174
+ <xs:complexType name="linkType" mixed="true">
175
+ <xs:annotation>
176
+ <xs:documentation>
177
+ The Atom link construct is defined in section 3.4 of the format spec.
178
+ </xs:documentation>
179
+ </xs:annotation>
180
+ <xs:attribute name="href" use="required" type="xs:anyURI" />
181
+ <xs:attribute name="rel" type="xs:string" use="optional"/>
182
+ <xs:attribute name="type" use="optional" type="xs:string" />
183
+ <xs:attribute name="hreflang" use="optional" type="xs:NMTOKEN" />
184
+ <xs:attribute name="title" use="optional" type="xs:string" />
185
+ <xs:attribute name="length" use="optional" type="xs:positiveInteger" />
186
+ <xs:attributeGroup ref="atom:commonAttributes"/>
187
+ </xs:complexType>
188
+ <xs:complexType name="logoType">
189
+ <xs:annotation>
190
+ <xs:documentation>
191
+ The Atom logo construct is defined in section 4.2.8 of the format spec.
192
+ </xs:documentation>
193
+ </xs:annotation>
194
+ <xs:simpleContent>
195
+ <xs:extension base="xs:anyURI">
196
+ <xs:attributeGroup ref="atom:commonAttributes"/>
197
+ </xs:extension>
198
+ </xs:simpleContent>
199
+ </xs:complexType>
200
+ <xs:complexType name="sourceType">
201
+ <xs:annotation>
202
+ <xs:documentation>
203
+ The Atom source construct is defined in section 4.2.11 of the format spec.
204
+ </xs:documentation>
205
+ </xs:annotation>
206
+ <xs:choice maxOccurs="unbounded">
207
+ <xs:element name="author" type="atom:personType" minOccurs="0" maxOccurs="unbounded"/>
208
+ <xs:element name="category" type="atom:categoryType" minOccurs="0" maxOccurs="unbounded"/>
209
+ <xs:element name="contributor" type="atom:personType" minOccurs="0" maxOccurs="unbounded"/>
210
+ <xs:element name="generator" type="atom:generatorType" minOccurs="0" maxOccurs="1"/>
211
+ <xs:element name="icon" type="atom:iconType" minOccurs="0" maxOccurs="1"/>
212
+ <xs:element name="id" type="atom:idType" minOccurs="0" maxOccurs="1"/>
213
+ <xs:element name="link" type="atom:linkType" minOccurs="0" maxOccurs="unbounded"/>
214
+ <xs:element name="logo" type="atom:logoType" minOccurs="0" maxOccurs="1"/>
215
+ <xs:element name="rights" type="atom:textType" minOccurs="0" maxOccurs="1"/>
216
+ <xs:element name="subtitle" type="atom:textType" minOccurs="0" maxOccurs="1"/>
217
+ <xs:element name="title" type="atom:textType" minOccurs="0" maxOccurs="1"/>
218
+ <xs:element name="updated" type="atom:dateTimeType" minOccurs="0" maxOccurs="1"/>
219
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
220
+ </xs:choice>
221
+ <xs:attributeGroup ref="atom:commonAttributes"/>
222
+ </xs:complexType>
223
+ <xs:complexType name="uriType">
224
+ <xs:simpleContent>
225
+ <xs:extension base="xs:anyURI">
226
+ <xs:attributeGroup ref="atom:commonAttributes"/>
227
+ </xs:extension>
228
+ </xs:simpleContent>
229
+ </xs:complexType>
230
+ <xs:complexType name="dateTimeType">
231
+ <xs:simpleContent>
232
+ <xs:extension base="xs:dateTime">
233
+ <xs:attributeGroup ref="atom:commonAttributes"/>
234
+ </xs:extension>
235
+ </xs:simpleContent>
236
+ </xs:complexType>
237
+ <xs:attributeGroup name="commonAttributes">
238
+ <xs:anyAttribute namespace="##other"/>
239
+ </xs:attributeGroup>
240
+ </xs:schema>
@@ -1,3 +1,3 @@
1
1
  module Xommelier
2
- VERSION = '0.1.8'
2
+ VERSION = '0.1.9'
3
3
  end
@@ -15,8 +15,7 @@ module Xommelier
15
15
 
16
16
  module ClassMethods
17
17
  def from_xml(xml, options = {})
18
- new.tap do |doc|
19
- doc.options = options
18
+ new({}, options).tap do |doc|
20
19
  doc.from_xml(xml, options)
21
20
  end
22
21
  end
@@ -43,6 +42,7 @@ module Xommelier
43
42
  xml = Nokogiri::XML(xml)
44
43
  end
45
44
  @_xml_node = options.delete(:node) { xml.at_xpath(element_xpath(xml.document, element_name)) }
45
+ validate if options[:validate]
46
46
 
47
47
  if text? && @_xml_node.text?
48
48
  self.text = @_xml_node.text
@@ -72,7 +72,7 @@ module Xommelier
72
72
  hash["xmlns:#{ns.as}"] = ns.uri
73
73
  hash
74
74
  end
75
- attribute_values.delete("xmlns:#{xmlns.as.to_s}")
75
+ attribute_values.delete("xmlns:#{xmlns.as}")
76
76
  attribute_values.delete('xmlns:xml')
77
77
  namespaces = attribute_values
78
78
  prefix = nil
@@ -90,15 +90,18 @@ module Xommelier
90
90
  end
91
91
  serialize_attribute(attribute_name, value, attribute_values)
92
92
  end
93
- (prefix ? builder[prefix] : builder).
94
- send(element_name, attribute_values) do |xml|
95
- elements.each do |name, value|
96
- serialize_element(name, value, xml, element_options(name).merge(parent_ns_prefix: prefix))
97
- end
98
- if respond_to?(:text)
99
- xml.text @text
100
- end
93
+ @_xml_node = (prefix ? builder[prefix] : builder).
94
+ send(element_name, attribute_values) do |xml|
95
+ elements.each do |name, value|
96
+ serialize_element(
97
+ name,
98
+ value,
99
+ xml,
100
+ element_options(name).merge(parent_ns_prefix: prefix)
101
+ )
101
102
  end
103
+ xml.text(@text) if respond_to?(:text)
104
+ end.instance_variable_get(:@node)
102
105
  builder.to_xml
103
106
  end
104
107
  alias_method :to_xommelier, :to_xml
@@ -143,7 +146,7 @@ module Xommelier
143
146
  end
144
147
 
145
148
  def xml_document
146
- @_xml_node.document
149
+ @_xml_node.try(:document)
147
150
  end
148
151
 
149
152
  def xmlns_xpath(xml_document = self.xml_document)
@@ -176,6 +176,13 @@ module Xommelier
176
176
 
177
177
  protected
178
178
 
179
+ def options=(options = {})
180
+ if @options.key?(:element_name)
181
+ element_name(@options.delete(:element_name))
182
+ end
183
+ super(options)
184
+ end
185
+
179
186
  def element_name(value = nil)
180
187
  if value
181
188
  @element_name = value
@@ -26,6 +26,7 @@ module Xommelier
26
26
  @elements = {}
27
27
  @attributes = {}
28
28
  @text = nil
29
+ @errors = []
29
30
 
30
31
  self.class.attributes.each do |name, options|
31
32
  send("#{name}=", options[:default]) if options[:default]
@@ -47,11 +48,15 @@ module Xommelier
47
48
 
48
49
  def options=(options = {})
49
50
  @options = options
51
+ unless @options[:validate]
52
+ @options[:validate] = !!xmlns.schema
53
+ end
50
54
  @options.delete(:type)
55
+ end
51
56
 
52
- if @options.key?(:element_name)
53
- element_name(@options.delete(:element_name))
54
- end
57
+ def valid?
58
+ validate
59
+ @errors.empty? || @errors
55
60
  end
56
61
 
57
62
  def inspect
@@ -60,6 +65,16 @@ module Xommelier
60
65
 
61
66
  private
62
67
 
68
+ def validate
69
+ @errors = []
70
+ to_xml unless xml_document
71
+ if xmlns.schema
72
+ xmlns.schema.validate(xml_document).each do |error|
73
+ @errors << error
74
+ end
75
+ end
76
+ end
77
+
63
78
  def inspect_contents
64
79
  [inspect_attributes, inspect_elements, inspect_text].compact.join(' ')
65
80
  end
@@ -41,6 +41,14 @@ module Xommelier
41
41
  @options.merge!(options)
42
42
  end
43
43
 
44
+ def module
45
+ options[:module]
46
+ end
47
+
48
+ def schema
49
+ self.module.schema
50
+ end
51
+
44
52
  def scoped(&block)
45
53
  instance_exec(&block)
46
54
  end
data/lib/xommelier/xml.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'xommelier'
2
- require 'xommelier/xml/class_methods'
2
+ require 'nokogiri'
3
+ require 'xommelier/xml/namespace'
3
4
  require 'active_support/concern'
4
5
 
5
6
  module Xommelier
@@ -8,6 +9,44 @@ module Xommelier
8
9
 
9
10
  DEFAULT_NS = 'http://www.w3.org/XML/1998/namespace'
10
11
 
12
+ module ClassMethods
13
+ def ns
14
+ Xommelier::Xml::Namespace.registry
15
+ end
16
+
17
+ # Defines namespace used in formats
18
+ def xmlns(uri = nil, options = {}, &block)
19
+ if uri
20
+ options[:module] ||= self
21
+ instance_variable_set(:@_xmlns, Xommelier::Xml::Namespace.new(uri, options, &block))
22
+ end
23
+ instance_variable_get(:@_xmlns)
24
+ end
25
+
26
+ def schema(schema = nil)
27
+ if schema
28
+ # If schema or schema path provided, set schema
29
+ schema = Nokogiri::XML::Schema(open(schema).read) unless schema.is_a?(Nokogiri::XML::Node)
30
+ instance_variable_set(:@_schema, schema)
31
+ elsif !instance_variable_defined?(:@_schema)
32
+ # Unless schema exists, try to autoload schema
33
+ available_schema = available_schemas.find { |path| path =~ /#{xmlns.as}\.xsd/ }
34
+ self.schema(available_schema) if available_schema
35
+ else
36
+ instance_variable_set(:@schema, nil)
37
+ end
38
+ instance_variable_get(:@_schema)
39
+ end
40
+
41
+ protected
42
+
43
+ def available_schemas
44
+ @_available_schemas ||= $:.map do |path|
45
+ Dir[File.join(path, 'xommelier/schemas', '*.xsd')]
46
+ end.flatten.uniq
47
+ end
48
+ end
49
+
11
50
  included do
12
51
  instance_variable_set :@_xmlns, nil
13
52
  end
@@ -26,6 +26,8 @@ describe 'Atom feed building' do
26
26
 
27
27
  subject { built_xml }
28
28
 
29
+ it { feed.should be_valid }
30
+
29
31
  it { should == load_xml_file('simple_feed.atom').read }
30
32
  it('should conform to RelaxNG schema') { rng.valid?(parsed_xml).should == true }
31
33
  it('should conform to XML Schema') { xsd.valid?(parsed_xml).should == true }
@@ -6,4 +6,5 @@ end
6
6
  describe Xommelier::Atom do
7
7
  it { should respond_to(:xmlns) }
8
8
  it { subject.xmlns.to_s.should == ATOM_XMLNS }
9
+ its(:schema) { should_not be_nil }
9
10
  end
@@ -1,5 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Xommelier do
4
- it { Xommelier::VERSION.should == '0.1.8' }
4
+ it { Xommelier::VERSION.should == '0.1.9' }
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xommelier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-14 00:00:00.000000000 Z
12
+ date: 2012-03-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
16
- requirement: &70191338259060 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 1.5.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70191338259060
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.5.0
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: activesupport
27
- requirement: &70191338258000 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 3.2.0
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70191338258000
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 3.2.0
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: activemodel
38
- requirement: &70191338257020 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,7 +53,12 @@ dependencies:
43
53
  version: 3.2.0
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *70191338257020
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 3.2.0
47
62
  description: XML-Object Mapper with many built-in XML formats supported
48
63
  email:
49
64
  - al@semyonov.us
@@ -87,9 +102,9 @@ files:
87
102
  - lib/xommelier/core_ext/time.rb
88
103
  - lib/xommelier/core_ext/uri.rb
89
104
  - lib/xommelier/open_search.rb
105
+ - lib/xommelier/schemas/atom.xsd
90
106
  - lib/xommelier/version.rb
91
107
  - lib/xommelier/xml.rb
92
- - lib/xommelier/xml/class_methods.rb
93
108
  - lib/xommelier/xml/element.rb
94
109
  - lib/xommelier/xml/element/serialization.rb
95
110
  - lib/xommelier/xml/element/structure.rb
@@ -134,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
149
  version: '0'
135
150
  requirements: []
136
151
  rubyforge_project: xommelier
137
- rubygems_version: 1.8.17
152
+ rubygems_version: 1.8.20
138
153
  signing_key:
139
154
  specification_version: 3
140
155
  summary: Xommelier is an XML Sommelier
@@ -1,21 +0,0 @@
1
- require 'xommelier/xml'
2
- require 'xommelier/xml/namespace'
3
-
4
- module Xommelier
5
- module Xml
6
- module ClassMethods
7
- def ns
8
- Xommelier::Xml::Namespace.registry
9
- end
10
-
11
- # Defines namespace used in formats
12
- def xmlns(uri = nil, options = {}, &block)
13
- if uri
14
- options[:module] ||= self
15
- instance_variable_set :@_xmlns, Xommelier::Xml::Namespace.new(uri, options, &block)
16
- end
17
- instance_variable_get :@_xmlns
18
- end
19
- end
20
- end
21
- end