xommelier 0.1.27 → 0.1.28

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4824745889fca5cb98ea64de92f0546e01de2099
4
+ data.tar.gz: 2d29e5097a62566157d9269629feae898eb27d3a
5
+ SHA512:
6
+ metadata.gz: f4f7e582c1b8a8f5ee0741d7c6301d1b8b82ee11739c173cfd3292ee7af0f7209ffbc8908765e4309b283308a5b7b391860f0c513f3fe2af38a766ebe2be7b69
7
+ data.tar.gz: 9a450f314e50ddde5648a5d6b17638de2d1805143850f7a54de0a81dd44c10cd1d04fd40d8f5768f74e6bf95b30304204b48a258b7bf5961232d759cc956bf07
@@ -1,5 +1,6 @@
1
1
  class String
2
2
  def self.from_xommelier(value)
3
+ return nil if value.is_a?(NilClass)
3
4
  value.to_s
4
5
  end
5
6
 
@@ -1,3 +1,3 @@
1
1
  module Xommelier
2
- VERSION = '0.1.27'
2
+ VERSION = '0.1.28'
3
3
  end
@@ -22,6 +22,7 @@ module Xommelier
22
22
  doc.from_xml(xml, options)
23
23
  end
24
24
  end
25
+
25
26
  alias_method :parse, :from_xml
26
27
  alias_method :from_xommelier, :from_xml
27
28
 
@@ -61,6 +62,7 @@ module Xommelier
61
62
  deserialize_element(element)
62
63
  end
63
64
  end
65
+
64
66
  alias_method :from_xommelier, :from_xml
65
67
 
66
68
  def to_xml(options = {})
@@ -93,17 +95,13 @@ module Xommelier
93
95
  attribute = attribute_options(name)
94
96
  attribute_name = attribute.attribute_name
95
97
  ns = attribute.ns
96
- if ns.uri != current_xmlns
97
- if ns.as == :xml
98
- attribute_name = "xml:#{attribute_name}"
99
- elsif (attr_prefix = namespaces.key(ns.uri).try(:[], 6..-1).presence)
100
- attribute_name = "#{attr_prefix}:#{attribute_name}"
101
- end
98
+ if ns.uri != current_xmlns && (attr_prefix = namespaces.key(ns.uri).try(:[], 6..-1).presence)
99
+ attribute_name = "#{attr_prefix}:#{attribute_name}"
102
100
  end
103
- serialize_attribute(attribute_name, value, attribute_values)
101
+ serialize_attribute(attribute_name, value, attribute_values) if (value != nil) || attribute.required?
104
102
  end
105
103
  @_xml_node = (prefix ? builder[prefix] : builder).
106
- send(element_name, attribute_values) do |xml|
104
+ send(element_name, attribute_values) do |xml|
107
105
  self.class.elements.each do |name, element|
108
106
  value = elements.fetch(name, options[:default])
109
107
  unless value == nil
@@ -112,10 +110,11 @@ module Xommelier
112
110
  end
113
111
  end
114
112
  end
115
- xml.text(@text) if respond_to?(:text)
113
+ xml.text(@text) if text?
116
114
  end.instance_variable_get(:@node)
117
115
  builder.to_xml(save_options)
118
116
  end
117
+
119
118
  alias_method :to_xommelier, :to_xml
120
119
 
121
120
  def to_hash
@@ -217,7 +216,7 @@ module Xommelier
217
216
  # @param [Xommelier::Xml::Element::Structure::Attribute] attribute
218
217
  def deserialize_attribute(attribute)
219
218
  ns = attribute.ns
220
- if ns.default? || ns == xmlns
219
+ if ns == xmlns || attribute.xml?
221
220
  send(attribute.writer, @_xml_node[attribute.attribute_name])
222
221
  else
223
222
  send(attribute.writer, @_xml_node.attribute_with_ns(attribute.attribute_name, ns.uri.to_s).try(:value))
@@ -259,17 +258,17 @@ module Xommelier
259
258
  end
260
259
  end
261
260
  else
262
- xmlns = element.overridden_xmlns || self.xmlns
261
+ xmlns = element.overridden_xmlns || self.xmlns
263
262
  prefix = if xmlns != xml.doc.namespaces['xmlns']
264
263
  xml.doc.namespaces.key(element.ns.uri).try(:[], 6..-1).presence
265
264
  end
266
265
  case value
267
266
  when Xommelier::Xml::Element
268
267
  value.to_xommelier(
269
- builder: xml,
268
+ builder: xml,
270
269
  element_name: element.element_name,
271
- prefix: prefix,
272
- ns: element.ns
270
+ prefix: prefix,
271
+ ns: element.ns
273
272
  )
274
273
  else
275
274
  (prefix ? xml[prefix] : xml).send(element.serializable_element_name) do
@@ -105,7 +105,9 @@ module Xommelier
105
105
  class Attribute < Property
106
106
  DEFAULTS = {
107
107
  type: String,
108
- required: false
108
+ required: false,
109
+ optional: true,
110
+ xml: false
109
111
  }
110
112
 
111
113
  def node_type
@@ -116,8 +118,16 @@ module Xommelier
116
118
  options[:required]
117
119
  end
118
120
 
121
+ def xml?
122
+ options[:xml]
123
+ end
124
+
119
125
  def attribute_name
120
- @attribute_name ||= options.delete(:as) { name }.to_s
126
+ @attribute_name ||= if xml?
127
+ "xml:#{name}"
128
+ else
129
+ options.delete(:as) { name }.to_s
130
+ end
121
131
  end
122
132
  end
123
133
 
data/lib/xommelier/xml.rb CHANGED
@@ -35,8 +35,8 @@ module Xommelier
35
35
  # Inject common XML attributes to every XML element
36
36
  require 'xommelier/xml/element'
37
37
  class Element
38
- attribute :lang, ns: Xml.xmlns, as: 'xml:lang'
39
- attribute :base, type: Uri, ns: Xml.xmlns, as: 'xml:base'
38
+ attribute :lang, optional: true, xml: true
39
+ attribute :base, type: Uri, optional: true, xml: true
40
40
  end
41
41
  end
42
42
  end
@@ -1,3 +1,4 @@
1
+ require 'rspec'
1
2
  shared_examples 'Valid XML Document' do
2
3
  it { subject.class.schema.should be_present }
3
4
  specify do
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xommelier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.27
5
- prerelease:
4
+ version: 0.1.28
6
5
  platform: ruby
7
6
  authors:
8
7
  - Alexander Semyonov
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-07-08 00:00:00.000000000 Z
11
+ date: 2013-07-18 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: nokogiri
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: activesupport
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: activemodel
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: bundler
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rake
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: rspec
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ~>
108
95
  - !ruby/object:Gem::Version
@@ -211,33 +198,26 @@ files:
211
198
  - xommelier.gemspec
212
199
  homepage: http://github.com/alsemyonov/xommelier
213
200
  licenses: []
201
+ metadata: {}
214
202
  post_install_message:
215
203
  rdoc_options: []
216
204
  require_paths:
217
205
  - lib
218
206
  required_ruby_version: !ruby/object:Gem::Requirement
219
- none: false
220
207
  requirements:
221
- - - ! '>='
208
+ - - '>='
222
209
  - !ruby/object:Gem::Version
223
210
  version: '0'
224
- segments:
225
- - 0
226
- hash: 1200176832615114872
227
211
  required_rubygems_version: !ruby/object:Gem::Requirement
228
- none: false
229
212
  requirements:
230
- - - ! '>='
213
+ - - '>='
231
214
  - !ruby/object:Gem::Version
232
215
  version: '0'
233
- segments:
234
- - 0
235
- hash: 1200176832615114872
236
216
  requirements: []
237
217
  rubyforge_project: xommelier
238
- rubygems_version: 1.8.23
218
+ rubygems_version: 2.0.3
239
219
  signing_key:
240
- specification_version: 3
220
+ specification_version: 4
241
221
  summary: Xommelier is an XML Sommelier
242
222
  test_files:
243
223
  - spec/fixtures/atom.rng.xml
@@ -268,3 +248,4 @@ test_files:
268
248
  - spec/spec_helper.rb
269
249
  - spec/support/fixtures.rb
270
250
  - spec/support/schema_validatable.rb
251
+ has_rdoc: