cxml-ruby 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1f43fac9295a9de5ac9f0c327a73b26260569c239c70bad553e8cb0721c5fb7b
4
- data.tar.gz: 41e42f9b4a188923bf7c42105571c0f81da954fc82d4825d0c1c0dbd49ec7f93
3
+ metadata.gz: 125ea774cb74155d9512b222d1d47a06945558d87d441dd1491d53caf8e9ca9a
4
+ data.tar.gz: 986ef57d03cf1706eedf08618dc5b52931171f42b147e1d81dfabaf6a6c32df8
5
5
  SHA512:
6
- metadata.gz: 90361cf48f65bc79bde60722efe16be0f61f60e455998aa7c73bdbbcba7984b2c9b7b322b70579572d2d44988ed554db0f4ecd046038de6d0fc43086fe64fd77
7
- data.tar.gz: 23892b7370c13805e5ad69c0c1bed7b2181c872abc8cb9abed99c074e7423f28d764d8cfa3889593cd0a528ec3674b5384b4f5d5a97bcf59c576adebbf06cd61
6
+ metadata.gz: ebfe04583c735c1635a14d89cc49d4f1494b1d49b79efa7d072d261b1d91d0831a5f5d644fcfde75c54c572528fcca499288b4393dfdf86b33958d065b167d3b
7
+ data.tar.gz: 3a97f6bcc16715eae27f2ef9a8f4ade47281f092116458fc784224bd46d97cdae1f29e65234d07946ef7027accdce0e91dd9635003f8064c8b4af7730d0c1857
data/CHANGELOG.md CHANGED
@@ -14,6 +14,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
14
14
 
15
15
  ---
16
16
 
17
+ ## [0.8.0] - 2021-04-25
18
+ ### Changed
19
+ - Support continued parsing of child nodes if unknown attribute is encountered with `raise_unknown_elements` set to `false`.
20
+
17
21
  ## [0.7.0] - 2021-01-12
18
22
  ### Added
19
23
  - Support parsing Phone tags.
@@ -121,9 +121,7 @@ module CXML
121
121
  klass = "CXML::#{camelize(key)}"
122
122
  send("#{key}=", Object.const_get(klass).new(val))
123
123
  rescue NoMethodError => e
124
- raise(UnknownAttributeError, e) if CXML.raise_unknown_elements
125
-
126
- CXML.logger.warn(e)
124
+ handle_unknown_elements_error(e)
127
125
  rescue NameError => e
128
126
  raise(e) unless e.to_s.match?(klass)
129
127
 
@@ -136,6 +134,8 @@ module CXML
136
134
  else
137
135
  send("#{key}=", val)
138
136
  end
137
+ rescue NoMethodError => e
138
+ handle_unknown_elements_error(e)
139
139
  end
140
140
 
141
141
  def camelize(string, uppercase_first_letter: true)
@@ -150,5 +150,11 @@ module CXML
150
150
  "#{Regexp.last_match(1)}#{Regexp.last_match(2).capitalize}"
151
151
  end.gsub('/', '::')
152
152
  end
153
+
154
+ def handle_unknown_elements_error(error)
155
+ raise(UnknownAttributeError, error) if CXML.raise_unknown_elements
156
+
157
+ CXML.logger.warn(error)
158
+ end
153
159
  end
154
160
  end
data/lib/cxml/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CXML
4
- VERSION = '0.7.0'
4
+ VERSION = '0.8.0'
5
5
  end
@@ -82,6 +82,26 @@ describe CXML::Document do
82
82
  end
83
83
  end
84
84
 
85
+ context 'when unknown attribute is present' do
86
+ let(:data) { CXML::Parser.new(data: fixture('document_node_with_unknown_attribute.xml')).parse }
87
+ let(:doc) { CXML::Document.new(data) }
88
+
89
+ it 'does not raise and parses child nodes if CXML.raise_unknown_elements is false' do
90
+ CXML.raise_unknown_elements = false
91
+ -> { doc }.should_not raise_error
92
+
93
+ doc.response.status.code.should eq(200)
94
+ doc.response.status.content.should eq('123456')
95
+
96
+ # Reset `raise_unknown_elements` for future tests
97
+ CXML.raise_unknown_elements = true
98
+ end
99
+
100
+ it 'raises UnknownAttributeError' do
101
+ -> { doc }.should raise_error(CXML::UnknownAttributeError)
102
+ end
103
+ end
104
+
85
105
  context 'when a response document is passed' do
86
106
  let(:data) { CXML::Parser.new(data: fixture('response_status_200.xml')).parse }
87
107
  include_examples :document_has_mandatory_values
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE cXML SYSTEM "http://xml.cXML.org/schemas/cXML/1.2.020/cXML.dtd">
3
+ <cXML xml:lang="en-US" payloadID="test-id" timestamp="2020-09-10T20:32:26+00:00">
4
+ <Response invalid="invalid">
5
+ <Status code="200" text="Ok">123456</Status>
6
+ </Response>
7
+ </cXML>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cxml-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Beckman
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-01-12 00:00:00.000000000 Z
12
+ date: 2021-04-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ox
@@ -213,6 +213,7 @@ files:
213
213
  - spec/fixtures/1.2.020-InvoiceDetail.dtd
214
214
  - spec/fixtures/1.2.020-cXML.dtd
215
215
  - spec/fixtures/1.2.037-InvoiceDetail.dtd
216
+ - spec/fixtures/document_node_with_unknown_attribute.xml
216
217
  - spec/fixtures/envelope.xml
217
218
  - spec/fixtures/envelope2.xml
218
219
  - spec/fixtures/invoice_backed_and_unbacked_by_pos.xml
@@ -281,6 +282,7 @@ test_files:
281
282
  - spec/fixtures/1.2.020-InvoiceDetail.dtd
282
283
  - spec/fixtures/1.2.020-cXML.dtd
283
284
  - spec/fixtures/1.2.037-InvoiceDetail.dtd
285
+ - spec/fixtures/document_node_with_unknown_attribute.xml
284
286
  - spec/fixtures/envelope.xml
285
287
  - spec/fixtures/envelope2.xml
286
288
  - spec/fixtures/invoice_backed_and_unbacked_by_pos.xml