cxml-ruby 0.2.1 → 0.3.0
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 +4 -4
- data/.rubocop.yml +4 -0
- data/CHANGELOG.md +20 -0
- data/README.md +7 -3
- data/cxml-ruby.gemspec +2 -3
- data/lib/cxml/browser_form_post.rb +0 -4
- data/lib/cxml/document.rb +29 -21
- data/lib/cxml/document_node.rb +32 -12
- data/lib/cxml/parser.rb +30 -14
- data/lib/cxml/start_page.rb +0 -4
- data/lib/cxml/supplier_setup.rb +0 -4
- data/lib/cxml/version.rb +1 -1
- data/lib/cxml-ruby.rb +2 -6
- data/spec/credential_spec.rb +3 -5
- data/spec/document_spec.rb +11 -14
- data/spec/header_spec.rb +4 -6
- data/spec/invoice_detail_request_spec.rb +16 -16
- data/spec/item_detail_spec.rb +5 -7
- data/spec/item_id_spec.rb +5 -7
- data/spec/item_in_spec.rb +5 -7
- data/spec/money_spec.rb +5 -7
- data/spec/punch_out_order_message_header_spec.rb +3 -6
- data/spec/punch_out_order_message_spec.rb +5 -8
- data/spec/punch_out_setup_request_spec.rb +6 -9
- data/spec/purchase_order_request_spec.rb +4 -7
- data/spec/request_spec.rb +3 -6
- data/spec/response_spec.rb +5 -7
- data/spec/sender_spec.rb +3 -5
- data/spec/spec_helper.rb +1 -1
- data/spec/support/helpers.rb +2 -2
- metadata +17 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce8099da5b031d246dc2a1b8d30573135a3c35c233a003f337093d427cefbf1c
|
4
|
+
data.tar.gz: f5c612fcfbd98677ee6c1997a9d99f8b696434cef5a8b9df10cc02019b609451
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83392422960e9a04d9a1d1a0becf00de7d424e7f79167a204fbfd3a582be98280c9f063658537a4c7a07d4d0931f0167b6265cb5c662cc5b1b0f63f96836a057
|
7
|
+
data.tar.gz: b55b5c92d354643dcd877016a6ef0ca8f0599d21cd5a3ab419eeddafa9864ef888a8c7c396caf634eb93944c61919f5900eb0ed2097a2b7b6903353046d513f9
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Changelog
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
|
4
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
|
+
|
7
|
+
## [Unreleased]
|
8
|
+
### Added
|
9
|
+
### Changed
|
10
|
+
### Deprecated
|
11
|
+
### Removed
|
12
|
+
### Fixed
|
13
|
+
### Security
|
14
|
+
|
15
|
+
---
|
16
|
+
|
17
|
+
## [0.3.0] - 2020-04-19
|
18
|
+
### Changed
|
19
|
+
- Drop Nokogiri and XMLSimple in favor of Ox.
|
20
|
+
- Change Parser class interface to be OO.
|
data/README.md
CHANGED
@@ -22,7 +22,11 @@ Currently supports these top-level documents in v1.2.037:
|
|
22
22
|
|
23
23
|
```rb
|
24
24
|
some_xml = '....'
|
25
|
+
parsed_hash = CXML::Parser.new(data: some_xml).parse
|
26
|
+
# or
|
25
27
|
doc = CXML::Document.new.from_xml(some_xml)
|
28
|
+
# or
|
29
|
+
doc = CXML::Document.new(parsed_hash)
|
26
30
|
# raises CXML::UnknownAttributeError if unknown fields are present
|
27
31
|
|
28
32
|
doc.response.status.code
|
@@ -31,17 +35,17 @@ doc.response.status.success?
|
|
31
35
|
# => true
|
32
36
|
|
33
37
|
# initialize docs with a hash
|
34
|
-
CXML::Document.new(response: { status: { code: '200' } }).
|
38
|
+
CXML::Document.new(response: { status: { code: '200' } }).to_xml
|
35
39
|
# => '<?xml.....'
|
36
40
|
|
37
41
|
# initialize docs with instances
|
38
42
|
status = CXML::Status.new(code: '200')
|
39
43
|
response = CXML::Response.new(status: status)
|
40
|
-
CXML::Document.new(response: response).
|
44
|
+
CXML::Document.new(response: response).to_xml
|
41
45
|
# => '<?xml.....'
|
42
46
|
|
43
47
|
# Set a different version
|
44
|
-
CXML::Document.new(version: '1.1.0', response: { status: { code: '200' } }).
|
48
|
+
CXML::Document.new(version: '1.1.0', response: { status: { code: '200' } }).to_xml
|
45
49
|
# => '<?xml.....'
|
46
50
|
```
|
47
51
|
|
data/cxml-ruby.gemspec
CHANGED
@@ -12,14 +12,13 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.authors = ['Josh Beckman', 'Eleni Chappen']
|
13
13
|
s.email = ['josh@officeluv.com', 'eleni@officeluv.com']
|
14
14
|
|
15
|
+
s.add_dependency('ox', '~> 2.13')
|
16
|
+
|
15
17
|
s.add_development_dependency('pry', '~> 0.12')
|
16
18
|
s.add_development_dependency('rake', '~> 13.0')
|
17
19
|
s.add_development_dependency('rspec', '~> 3.9')
|
18
20
|
s.add_development_dependency('rubocop', '~> 0.81')
|
19
21
|
|
20
|
-
s.add_dependency('nokogiri', '~> 1.10')
|
21
|
-
s.add_dependency('xml-simple', '~> 1.1')
|
22
|
-
|
23
22
|
s.files = `git ls-files`.split("\n")
|
24
23
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
25
24
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
data/lib/cxml/document.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require('time')
|
4
|
-
|
5
3
|
module CXML
|
6
4
|
class Document < DocumentNode
|
7
5
|
accessible_attributes %i[
|
@@ -29,11 +27,6 @@ module CXML
|
|
29
27
|
@version ||= '1.2.037'
|
30
28
|
end
|
31
29
|
|
32
|
-
def from_xml(xml_string)
|
33
|
-
initialize(Parser.new.parse(xml_string))
|
34
|
-
self
|
35
|
-
end
|
36
|
-
|
37
30
|
# Check if document is request
|
38
31
|
# @return [Boolean]
|
39
32
|
def request?
|
@@ -52,20 +45,35 @@ module CXML
|
|
52
45
|
!message.nil?
|
53
46
|
end
|
54
47
|
|
55
|
-
def
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
48
|
+
def from_xml(xml_string)
|
49
|
+
initialize(Parser.new(data: xml_string).parse)
|
50
|
+
self
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_xml(doc = ox_doc)
|
54
|
+
doc << to_element
|
55
|
+
Ox.dump doc
|
56
|
+
end
|
57
|
+
|
58
|
+
def node_name
|
59
|
+
'cXML'
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def dtd_url
|
65
|
+
"http://xml.cxml.org/schemas/cXML/#{version}/cXML.dtd"
|
66
|
+
end
|
67
|
+
|
68
|
+
def ox_doc
|
69
|
+
doc = Ox::Document.new
|
70
|
+
instruct = Ox::Instruct.new(:xml)
|
71
|
+
instruct[:version] = '1.0'
|
72
|
+
instruct[:encoding] = 'UTF-8'
|
73
|
+
instruct[:standalone] = 'yes'
|
74
|
+
doc << instruct
|
75
|
+
doc << Ox::DocType.new("cXML SYSTEM \"#{dtd_url}\"")
|
76
|
+
doc
|
69
77
|
end
|
70
78
|
end
|
71
79
|
end
|
data/lib/cxml/document_node.rb
CHANGED
@@ -48,37 +48,55 @@ module CXML
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
def
|
52
|
-
|
53
|
-
n.text(content) if content
|
54
|
-
render_nodes(n)
|
55
|
-
end
|
56
|
-
node
|
51
|
+
def node_name
|
52
|
+
self.class.name.split('::').last
|
57
53
|
end
|
58
54
|
|
59
|
-
def
|
55
|
+
def to_element
|
56
|
+
element = ox_element
|
57
|
+
element << content if content
|
60
58
|
self.class.nodes.each do |child_node_name|
|
61
59
|
child_value = send(child_node_name)
|
62
60
|
if child_value.is_a?(Array)
|
63
61
|
child_value.each do |child_value_n|
|
64
|
-
render_child_node(
|
62
|
+
render_child_node(element, child_node_name, child_value_n)
|
65
63
|
end
|
66
64
|
else
|
67
|
-
render_child_node(
|
65
|
+
render_child_node(element, child_node_name, child_value)
|
68
66
|
end
|
69
67
|
end
|
68
|
+
element
|
70
69
|
end
|
71
70
|
|
72
71
|
private
|
73
72
|
|
74
|
-
def
|
73
|
+
def ox_element
|
74
|
+
element = Ox::Element.new node_name
|
75
|
+
node_attributes.each do |key, val|
|
76
|
+
element[key] = val
|
77
|
+
end
|
78
|
+
element
|
79
|
+
end
|
80
|
+
|
81
|
+
def render_child_node(element, name, value)
|
75
82
|
return if value.respond_to?(:empty?) ? value.empty? : !value
|
76
83
|
|
77
84
|
if value.is_a?(DocumentNode)
|
78
|
-
value.
|
85
|
+
element << value.to_element
|
86
|
+
return element
|
87
|
+
end
|
88
|
+
value_element = Ox::Element.new(camelize(name))
|
89
|
+
if value.is_a? Hash
|
90
|
+
value.each do |value_key, value_val|
|
91
|
+
next value_element << value_val if value_key == :content
|
92
|
+
|
93
|
+
value_element[value_key] = value_val
|
94
|
+
end
|
79
95
|
else
|
80
|
-
|
96
|
+
value_element << value
|
81
97
|
end
|
98
|
+
element << value_element
|
99
|
+
element
|
82
100
|
end
|
83
101
|
|
84
102
|
def node_attributes
|
@@ -118,6 +136,8 @@ module CXML
|
|
118
136
|
else
|
119
137
|
string.to_s.sub(/^(?:(?=\b|[A-Z_])|\w)/, &:downcase)
|
120
138
|
end
|
139
|
+
return 'URL' if string.match?(/^url$/i)
|
140
|
+
|
121
141
|
string.gsub(/_id(_)?$/, '_ID\1').gsub(%r{(?:_|(/))([a-z\d]*)}) do
|
122
142
|
"#{Regexp.last_match(1)}#{Regexp.last_match(2).capitalize}"
|
123
143
|
end.gsub('/', '::')
|
data/lib/cxml/parser.rb
CHANGED
@@ -1,26 +1,42 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require('nokogiri')
|
4
|
-
require('xmlsimple')
|
5
|
-
|
6
3
|
module CXML
|
7
4
|
class Parser
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
5
|
+
attr_accessor :data,
|
6
|
+
:parsed_data
|
7
|
+
|
8
|
+
def initialize(data:)
|
9
|
+
@data = data
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse
|
13
|
+
@parsed_data = node_to_hash document
|
14
|
+
end
|
15
|
+
|
16
|
+
def document
|
17
|
+
doc = Ox.load(data)
|
18
|
+
doc.nodes.detect do |node|
|
19
|
+
node.value&.match?(/^cxml$/i)
|
20
|
+
end || doc
|
13
21
|
end
|
14
22
|
|
15
23
|
private
|
16
24
|
|
17
|
-
def
|
18
|
-
return
|
19
|
-
|
25
|
+
def node_to_hash(node)
|
26
|
+
return node if node.is_a? String
|
27
|
+
|
28
|
+
hash = node.attributes || {}
|
29
|
+
hash.transform_keys!(&method(:underscore_key))
|
30
|
+
node.nodes.reduce(hash) do |acc, child_node|
|
31
|
+
next acc if child_node.is_a?(Ox::Comment)
|
20
32
|
|
21
|
-
|
22
|
-
|
23
|
-
|
33
|
+
node_hash = {}
|
34
|
+
name = child_node.is_a?(String) ? :content : child_node.value
|
35
|
+
node_hash[underscore_key(name)] = node_to_hash(child_node)
|
36
|
+
acc.merge(node_hash) do |_key, val1, val2|
|
37
|
+
[val1, val2].flatten
|
38
|
+
end
|
39
|
+
end
|
24
40
|
end
|
25
41
|
|
26
42
|
def underscore_key(key)
|
data/lib/cxml/start_page.rb
CHANGED
data/lib/cxml/supplier_setup.rb
CHANGED
data/lib/cxml/version.rb
CHANGED
data/lib/cxml-ruby.rb
CHANGED
@@ -1,18 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require('time')
|
4
|
-
require('nokogiri')
|
5
4
|
require('logger')
|
5
|
+
require('ox')
|
6
6
|
require('cxml/document_node')
|
7
7
|
Dir[File.join(__dir__, 'cxml', '*.rb')].sort.each { |file| require file }
|
8
8
|
|
9
9
|
module CXML
|
10
10
|
def self.parse(str)
|
11
|
-
CXML::Parser.new
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.builder
|
15
|
-
Nokogiri::XML::Builder.new(encoding: 'UTF-8')
|
11
|
+
CXML::Parser.new(data: str).parse
|
16
12
|
end
|
17
13
|
|
18
14
|
def self.configure
|
data/spec/credential_spec.rb
CHANGED
@@ -9,12 +9,10 @@ describe CXML::Credential do
|
|
9
9
|
it { should respond_to :credential_mac }
|
10
10
|
it { should respond_to :identity }
|
11
11
|
|
12
|
-
let(:
|
13
|
-
let(:data) { parser.parse(fixture('punch_out_order_message_doc.xml')) }
|
12
|
+
let(:data) { CXML::Parser.new(data: fixture('punch_out_order_message_doc.xml')).parse }
|
14
13
|
let(:doc) { CXML::Document.new(data) }
|
15
14
|
let(:sender) { doc.header.sender }
|
16
15
|
let(:credential) { sender.credential }
|
17
|
-
let(:builder) { doc.render }
|
18
16
|
|
19
17
|
describe '#initialize' do
|
20
18
|
it 'sets the attributes that are passed' do
|
@@ -24,8 +22,8 @@ describe CXML::Credential do
|
|
24
22
|
end
|
25
23
|
|
26
24
|
describe '#render' do
|
27
|
-
let(:output_xml) {
|
28
|
-
let(:output_data) {
|
25
|
+
let(:output_xml) { doc.to_xml }
|
26
|
+
let(:output_data) { CXML::Parser.new(data: output_xml).parse }
|
29
27
|
let(:sender_output_data) { output_data[:header][:sender] }
|
30
28
|
let(:credential_output_data) { sender_output_data[:credential] }
|
31
29
|
|
data/spec/document_spec.rb
CHANGED
@@ -33,8 +33,6 @@ describe CXML::Document do
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
let(:parser) { CXML::Parser.new }
|
37
|
-
|
38
36
|
it { should respond_to :version }
|
39
37
|
it { should respond_to :payload_id }
|
40
38
|
it { should respond_to :timestamp }
|
@@ -56,7 +54,7 @@ describe CXML::Document do
|
|
56
54
|
end
|
57
55
|
|
58
56
|
context 'when a request document is passed' do
|
59
|
-
let(:data) {
|
57
|
+
let(:data) { CXML::Parser.new(data: fixture('request_doc.xml')).parse }
|
60
58
|
include_examples :document_has_mandatory_values
|
61
59
|
include_examples :document_has_a_header
|
62
60
|
include_examples :document_has_a_timestamp
|
@@ -71,7 +69,7 @@ describe CXML::Document do
|
|
71
69
|
end
|
72
70
|
|
73
71
|
context 'when a response document is passed' do
|
74
|
-
let(:data) {
|
72
|
+
let(:data) { CXML::Parser.new(data: fixture('response_status_200.xml')).parse }
|
75
73
|
include_examples :document_has_mandatory_values
|
76
74
|
include_examples :document_has_a_timestamp
|
77
75
|
|
@@ -85,7 +83,7 @@ describe CXML::Document do
|
|
85
83
|
end
|
86
84
|
|
87
85
|
context 'when a punch out order message is passed' do
|
88
|
-
let(:data) {
|
86
|
+
let(:data) { CXML::Parser.new(data: fixture('punch_out_order_message_doc.xml')).parse }
|
89
87
|
include_examples :document_has_mandatory_values
|
90
88
|
include_examples :document_has_a_header
|
91
89
|
include_examples :document_has_a_timestamp
|
@@ -100,21 +98,20 @@ describe CXML::Document do
|
|
100
98
|
end
|
101
99
|
end
|
102
100
|
|
103
|
-
describe '#
|
101
|
+
describe '#to_xml' do
|
104
102
|
let(:doc) { CXML::Document.new(data) }
|
105
|
-
let(:
|
106
|
-
let(:
|
107
|
-
let(:output_data) { parser.parse(output_xml) }
|
103
|
+
let(:output_xml) { doc.to_xml }
|
104
|
+
let(:output_data) { CXML::Parser.new(data: output_xml).parse }
|
108
105
|
|
109
|
-
it { should respond_to :
|
106
|
+
it { should respond_to :to_xml }
|
110
107
|
|
111
108
|
context 'when a request document is rendered' do
|
112
|
-
let(:data) {
|
109
|
+
let(:data) { CXML::Parser.new(data: fixture('request_doc.xml')).parse }
|
113
110
|
include_examples :document_render_defaults
|
114
111
|
end
|
115
112
|
|
116
113
|
context 'when a valid response is rendered' do
|
117
|
-
let(:data) {
|
114
|
+
let(:data) { CXML::Parser.new(data: fixture('response_status_200.xml')).parse }
|
118
115
|
it 'returns xml content' do
|
119
116
|
output_xml.should_not be_nil
|
120
117
|
end
|
@@ -131,7 +128,7 @@ describe CXML::Document do
|
|
131
128
|
end
|
132
129
|
|
133
130
|
context 'when a invalid response is rendered' do
|
134
|
-
let(:data) {
|
131
|
+
let(:data) { CXML::Parser.new(data: fixture('response_status_400.xml')).parse }
|
135
132
|
it 'returns xml content' do
|
136
133
|
output_xml.should_not be_nil
|
137
134
|
end
|
@@ -143,7 +140,7 @@ describe CXML::Document do
|
|
143
140
|
end
|
144
141
|
|
145
142
|
context 'when a punch out order message document is rendered' do
|
146
|
-
let(:data) {
|
143
|
+
let(:data) { CXML::Parser.new(data: fixture('punch_out_order_message_doc.xml')).parse }
|
147
144
|
include_examples :document_render_defaults
|
148
145
|
|
149
146
|
it 'outputs the punch out order message xml' do
|
data/spec/header_spec.rb
CHANGED
@@ -18,13 +18,11 @@ describe CXML::Header do
|
|
18
18
|
it { should respond_to :from }
|
19
19
|
it { should respond_to :to }
|
20
20
|
it { should respond_to :sender }
|
21
|
-
it { should respond_to :render }
|
22
21
|
|
23
22
|
let(:parser) { CXML::Parser.new }
|
24
23
|
let(:doc) { CXML::Document.new(data) }
|
25
|
-
let(:builder) { doc.render }
|
26
24
|
let(:header) { doc.header }
|
27
|
-
let(:data) {
|
25
|
+
let(:data) { CXML::Parser.new(data: fixture('request_doc.xml')).parse }
|
28
26
|
|
29
27
|
describe '#initialize' do
|
30
28
|
it 'sets the mandatory attributes' do
|
@@ -35,8 +33,8 @@ describe CXML::Header do
|
|
35
33
|
end
|
36
34
|
|
37
35
|
describe '#render' do
|
38
|
-
let(:output_xml) {
|
39
|
-
let(:output_data) {
|
36
|
+
let(:output_xml) { doc.to_xml }
|
37
|
+
let(:output_data) { CXML::Parser.new(data: output_xml).parse }
|
40
38
|
let(:header_output_data) { output_data[:header] }
|
41
39
|
let(:from_identity) { header_output_data[:from][:credential][:identity] }
|
42
40
|
let(:to_identity) { header_output_data[:to][:credential][:identity] }
|
@@ -44,7 +42,7 @@ describe CXML::Header do
|
|
44
42
|
include_examples :render_defaults
|
45
43
|
|
46
44
|
context 'when the header is rendered as not a response' do
|
47
|
-
let(:data) {
|
45
|
+
let(:data) { CXML::Parser.new(data: fixture('request_doc.xml')).parse }
|
48
46
|
it 'will NOT swap the to and from attributes' do
|
49
47
|
from_identity.should eq(header.from.credential.identity)
|
50
48
|
to_identity.should eq(header.to.credential.identity)
|
@@ -10,35 +10,35 @@ describe CXML::InvoiceDetailRequest do
|
|
10
10
|
|
11
11
|
describe '#initialize' do
|
12
12
|
it 'sets invoice_detail_request_header' do
|
13
|
-
data = CXML::Parser.new
|
13
|
+
data = CXML::Parser.new(data: fixture('invoice_taxes_at_line.xml')).parse
|
14
14
|
doc = CXML::Document.new(data)
|
15
15
|
instance = doc.request.invoice_detail_request
|
16
16
|
instance.invoice_detail_request_header
|
17
17
|
.should be_an_instance_of CXML::InvoiceDetailRequestHeader
|
18
18
|
end
|
19
19
|
it 'sets invoice_detail_request_header' do
|
20
|
-
data = CXML::Parser.new
|
20
|
+
data = CXML::Parser.new(data: fixture('invoice_taxes_at_total.xml')).parse
|
21
21
|
doc = CXML::Document.new(data)
|
22
22
|
instance = doc.request.invoice_detail_request
|
23
23
|
instance.invoice_detail_request_header
|
24
24
|
.should be_an_instance_of CXML::InvoiceDetailRequestHeader
|
25
25
|
end
|
26
26
|
it 'sets invoice_detail_request_header' do
|
27
|
-
data = CXML::Parser.new
|
27
|
+
data = CXML::Parser.new(data: fixture('invoice_taxes_at_line_multiple_taxes.xml')).parse
|
28
28
|
doc = CXML::Document.new(data)
|
29
29
|
instance = doc.request.invoice_detail_request
|
30
30
|
instance.invoice_detail_request_header
|
31
31
|
.should be_an_instance_of CXML::InvoiceDetailRequestHeader
|
32
32
|
end
|
33
33
|
it 'sets invoice_detail_request_header' do
|
34
|
-
data = CXML::Parser.new
|
34
|
+
data = CXML::Parser.new(data: fixture('invoice_backed_and_unbacked_by_pos.xml')).parse
|
35
35
|
doc = CXML::Document.new(data)
|
36
36
|
instance = doc.request.invoice_detail_request
|
37
37
|
instance.invoice_detail_request_header
|
38
38
|
.should be_an_instance_of CXML::InvoiceDetailRequestHeader
|
39
39
|
end
|
40
40
|
it 'sets invoice_detail_request_header' do
|
41
|
-
data = CXML::Parser.new
|
41
|
+
data = CXML::Parser.new(data: fixture('invoice_backed_by_multiple_pos.xml')).parse
|
42
42
|
doc = CXML::Document.new(data)
|
43
43
|
instance = doc.request.invoice_detail_request
|
44
44
|
instance.invoice_detail_request_header
|
@@ -47,30 +47,30 @@ describe CXML::InvoiceDetailRequest do
|
|
47
47
|
end
|
48
48
|
describe '#to_xml' do
|
49
49
|
it 'serializes the same output' do
|
50
|
-
data = CXML::Parser.new
|
50
|
+
data = CXML::Parser.new(data: fixture('invoice_taxes_at_line.xml')).parse
|
51
51
|
doc = CXML::Document.new(data)
|
52
|
-
CXML::Parser.new
|
52
|
+
CXML::Parser.new(data: doc.to_xml).parse.should eq(data)
|
53
53
|
end
|
54
54
|
it 'serializes the same output' do
|
55
|
-
data = CXML::Parser.new
|
55
|
+
data = CXML::Parser.new(data: fixture('invoice_backed_and_unbacked_by_pos.xml')).parse
|
56
56
|
doc = CXML::Document.new(data)
|
57
|
-
CXML::Parser.new
|
57
|
+
CXML::Parser.new(data: doc.to_xml).parse.should eq(data)
|
58
58
|
end
|
59
59
|
it 'serializes the same output' do
|
60
|
-
data = CXML::Parser.new
|
60
|
+
data = CXML::Parser.new(data: fixture('invoice_backed_by_multiple_pos.xml')).parse
|
61
61
|
doc = CXML::Document.new(data)
|
62
|
-
CXML::Parser.new
|
62
|
+
CXML::Parser.new(data: doc.to_xml).parse.should eq(data)
|
63
63
|
end
|
64
64
|
it 'serializes the same output' do
|
65
|
-
data = CXML::Parser.new
|
65
|
+
data = CXML::Parser.new(data: fixture('invoice_taxes_at_line_multiple_taxes.xml')).parse
|
66
66
|
doc = CXML::Document.new(data)
|
67
|
-
CXML::Parser.new
|
67
|
+
CXML::Parser.new(data: doc.to_xml).parse.should eq(data)
|
68
68
|
end
|
69
69
|
it 'serializes the same output' do
|
70
70
|
fixture_xml = fixture('invoice_taxes_at_total.xml')
|
71
|
-
data = CXML::Parser.new
|
71
|
+
data = CXML::Parser.new(data: fixture_xml).parse
|
72
72
|
doc = CXML::Document.new(data)
|
73
|
-
CXML::Parser.new
|
73
|
+
CXML::Parser.new(data: doc.to_xml).parse.should eq(data)
|
74
74
|
end
|
75
75
|
it 'serializes from an instance' do
|
76
76
|
money = CXML::Money.new(amount: '5', currency: 'USD')
|
@@ -78,7 +78,7 @@ describe CXML::InvoiceDetailRequest do
|
|
78
78
|
instance = described_class.new(invoice_detail_summary: summary)
|
79
79
|
data = CXML::Request.new(invoice_detail_request: instance)
|
80
80
|
doc = CXML::Document.new(request: data)
|
81
|
-
parsed = CXML::Parser.new
|
81
|
+
parsed = CXML::Parser.new(data: doc.to_xml).parse
|
82
82
|
parsed[:request][:invoice_detail_request]
|
83
83
|
.should eq(instance.serializable_hash)
|
84
84
|
parsed[:request][:invoice_detail_request][:invoice_detail_summary][:gross_amount][:money]
|
data/spec/item_detail_spec.rb
CHANGED
@@ -7,14 +7,12 @@ describe CXML::ItemDetail do
|
|
7
7
|
it { should respond_to :unit_of_measure }
|
8
8
|
it { should respond_to :unit_price }
|
9
9
|
|
10
|
-
let(:
|
11
|
-
let(:data) { parser.parse(fixture('punch_out_order_message_doc.xml')) }
|
10
|
+
let(:data) { CXML::Parser.new(data: fixture('punch_out_order_message_doc.xml')).parse }
|
12
11
|
let(:doc) { CXML::Document.new(data) }
|
13
12
|
let(:punch_out_order_message) { doc.message.punch_out_order_message }
|
14
|
-
let(:builder) { doc.render }
|
15
13
|
|
16
14
|
describe '#initialize' do
|
17
|
-
let(:item_in) { CXML::ItemIn.new(build_item_in
|
15
|
+
let(:item_in) { CXML::ItemIn.new(build_item_in) }
|
18
16
|
let(:item_detail) { item_in.item_detail }
|
19
17
|
|
20
18
|
it 'sets the mandatory attributes' do
|
@@ -26,11 +24,11 @@ describe CXML::ItemDetail do
|
|
26
24
|
|
27
25
|
describe '#render' do
|
28
26
|
before(:each) do
|
29
|
-
punch_out_order_message.add_item(build_item_in
|
27
|
+
punch_out_order_message.add_item(build_item_in)
|
30
28
|
end
|
31
29
|
|
32
|
-
let(:output_xml) {
|
33
|
-
let(:output_data) {
|
30
|
+
let(:output_xml) { doc.to_xml }
|
31
|
+
let(:output_data) { CXML::Parser.new(data: output_xml).parse }
|
34
32
|
let(:punch_out_order_message_output_data) { output_data[:message][:punch_out_order_message] }
|
35
33
|
let(:item_in_output_data) { punch_out_order_message_output_data[:item_in] }
|
36
34
|
let(:item_detail_output_data) { item_in_output_data[:item_detail] }
|
data/spec/item_id_spec.rb
CHANGED
@@ -6,14 +6,12 @@ describe CXML::ItemID do
|
|
6
6
|
it { should respond_to :supplier_part_id }
|
7
7
|
it { should respond_to :supplier_part_auxiliary_id }
|
8
8
|
|
9
|
-
let(:
|
10
|
-
let(:data) { parser.parse(fixture('punch_out_order_message_doc.xml')) }
|
9
|
+
let(:data) { CXML::Parser.new(data: fixture('punch_out_order_message_doc.xml')).parse }
|
11
10
|
let(:doc) { CXML::Document.new(data) }
|
12
11
|
let(:punch_out_order_message) { doc.message.punch_out_order_message }
|
13
|
-
let(:builder) { doc.render }
|
14
12
|
|
15
13
|
describe '#initialize' do
|
16
|
-
let(:item_in) { CXML::ItemIn.new(build_item_in
|
14
|
+
let(:item_in) { CXML::ItemIn.new(build_item_in) }
|
17
15
|
let(:item_id) { item_in.item_id }
|
18
16
|
|
19
17
|
it 'sets the attributes that are passed' do
|
@@ -23,11 +21,11 @@ describe CXML::ItemID do
|
|
23
21
|
|
24
22
|
describe '#render' do
|
25
23
|
before(:each) do
|
26
|
-
punch_out_order_message.add_item(build_item_in
|
24
|
+
punch_out_order_message.add_item(build_item_in)
|
27
25
|
end
|
28
26
|
|
29
|
-
let(:output_xml) {
|
30
|
-
let(:output_data) {
|
27
|
+
let(:output_xml) { doc.to_xml }
|
28
|
+
let(:output_data) { CXML::Parser.new(data: output_xml).parse }
|
31
29
|
let(:punch_out_order_message_output_data) { output_data[:message][:punch_out_order_message] }
|
32
30
|
let(:item_in_output_data) { punch_out_order_message_output_data[:item_in] }
|
33
31
|
let(:item_id_output_data) { item_in_output_data[:item_id] }
|
data/spec/item_in_spec.rb
CHANGED
@@ -8,14 +8,12 @@ describe CXML::ItemIn do
|
|
8
8
|
it { should respond_to :line_number }
|
9
9
|
it { should respond_to :quantity }
|
10
10
|
|
11
|
-
let(:
|
12
|
-
let(:data) { parser.parse(fixture('punch_out_order_message_doc.xml')) }
|
11
|
+
let(:data) { CXML::Parser.new(data: fixture('punch_out_order_message_doc.xml')).parse }
|
13
12
|
let(:doc) { CXML::Document.new(data) }
|
14
13
|
let(:punch_out_order_message) { doc.message.punch_out_order_message }
|
15
|
-
let(:builder) { doc.render }
|
16
14
|
|
17
15
|
describe '#initialize' do
|
18
|
-
let(:item_in) { CXML::ItemIn.new(build_item_in
|
16
|
+
let(:item_in) { CXML::ItemIn.new(build_item_in) }
|
19
17
|
|
20
18
|
it 'sets the mandatory attributes' do
|
21
19
|
item_in.quantity.should_not be_nil
|
@@ -24,11 +22,11 @@ describe CXML::ItemIn do
|
|
24
22
|
|
25
23
|
describe '#render' do
|
26
24
|
before(:each) do
|
27
|
-
punch_out_order_message.add_item(build_item_in
|
25
|
+
punch_out_order_message.add_item(build_item_in)
|
28
26
|
end
|
29
27
|
|
30
|
-
let(:output_xml) {
|
31
|
-
let(:output_data) {
|
28
|
+
let(:output_xml) { doc.to_xml }
|
29
|
+
let(:output_data) { CXML::Parser.new(data: output_xml).parse }
|
32
30
|
let(:punch_out_order_message_output_data) { output_data[:message][:punch_out_order_message] }
|
33
31
|
let(:item_in_output_data) { punch_out_order_message_output_data[:item_in] }
|
34
32
|
|
data/spec/money_spec.rb
CHANGED
@@ -8,12 +8,10 @@ describe CXML::Money do
|
|
8
8
|
it { should respond_to :alternate_amount }
|
9
9
|
it { should respond_to :amount }
|
10
10
|
|
11
|
-
let(:
|
12
|
-
let(:data) { parser.parse(fixture('punch_out_order_message_doc.xml')) }
|
11
|
+
let(:data) { CXML::Parser.new(data: fixture('punch_out_order_message_doc.xml')).parse }
|
13
12
|
let(:doc) { CXML::Document.new(data) }
|
14
13
|
let(:punch_out_order_message) { doc.message.punch_out_order_message }
|
15
|
-
let(:
|
16
|
-
let(:item_in) { CXML::ItemIn.new(build_item_in(parser)) }
|
14
|
+
let(:item_in) { CXML::ItemIn.new(build_item_in) }
|
17
15
|
let(:item_detail) { item_in.item_detail }
|
18
16
|
let(:money) { item_detail.unit_price.money }
|
19
17
|
|
@@ -26,11 +24,11 @@ describe CXML::Money do
|
|
26
24
|
|
27
25
|
describe '#render' do
|
28
26
|
before(:each) do
|
29
|
-
punch_out_order_message.add_item(build_item_in
|
27
|
+
punch_out_order_message.add_item(build_item_in)
|
30
28
|
end
|
31
29
|
|
32
|
-
let(:output_xml) {
|
33
|
-
let(:output_data) {
|
30
|
+
let(:output_xml) { doc.to_xml }
|
31
|
+
let(:output_data) { CXML::Parser.new(data: output_xml).parse }
|
34
32
|
let(:punch_out_order_message_output_data) { output_data[:message][:punch_out_order_message] }
|
35
33
|
let(:item_in_output_data) { punch_out_order_message_output_data[:item_in] }
|
36
34
|
let(:item_detail_output_data) { item_in_output_data[:item_detail] }
|
@@ -5,13 +5,10 @@ require 'spec_helper'
|
|
5
5
|
describe CXML::PunchOutOrderMessageHeader do
|
6
6
|
it { should respond_to :total }
|
7
7
|
it { should respond_to :operation_allowed }
|
8
|
-
it { should respond_to :render }
|
9
8
|
|
10
|
-
let(:
|
11
|
-
let(:data) { parser.parse(fixture('punch_out_order_message_doc.xml')) }
|
9
|
+
let(:data) { CXML::Parser.new(data: fixture('punch_out_order_message_doc.xml')).parse }
|
12
10
|
let(:doc) { CXML::Document.new(data) }
|
13
11
|
let(:punch_out_order_message_header) { doc.message.punch_out_order_message.punch_out_order_message_header }
|
14
|
-
let(:builder) { doc.render }
|
15
12
|
|
16
13
|
describe '#initialize' do
|
17
14
|
it 'sets the mandatory attributes' do
|
@@ -20,8 +17,8 @@ describe CXML::PunchOutOrderMessageHeader do
|
|
20
17
|
end
|
21
18
|
|
22
19
|
describe '#render' do
|
23
|
-
let(:output_xml) {
|
24
|
-
let(:output_data) {
|
20
|
+
let(:output_xml) { doc.to_xml }
|
21
|
+
let(:output_data) { CXML::Parser.new(data: output_xml).parse }
|
25
22
|
let(:punch_out_order_message_output_data) { output_data[:message][:punch_out_order_message] }
|
26
23
|
let(:punch_out_order_message_header_output_data) do
|
27
24
|
punch_out_order_message_output_data[:punch_out_order_message_header]
|
@@ -6,13 +6,10 @@ describe CXML::PunchOutOrderMessage do
|
|
6
6
|
it { should respond_to :add_item }
|
7
7
|
it { should respond_to :buyer_cookie }
|
8
8
|
it { should respond_to :items_in }
|
9
|
-
it { should respond_to :render }
|
10
9
|
|
11
|
-
let(:
|
12
|
-
let(:data) { parser.parse(fixture('punch_out_order_message_doc.xml')) }
|
10
|
+
let(:data) { CXML::Parser.new(data: fixture('punch_out_order_message_doc.xml')).parse }
|
13
11
|
let(:doc) { CXML::Document.new(data) }
|
14
12
|
let(:punch_out_order_message) { doc.message.punch_out_order_message }
|
15
|
-
let(:builder) { doc.render }
|
16
13
|
|
17
14
|
describe '#initialize' do
|
18
15
|
it 'sets the mandatory attributes' do
|
@@ -23,18 +20,18 @@ describe CXML::PunchOutOrderMessage do
|
|
23
20
|
|
24
21
|
describe '#add_item' do
|
25
22
|
it 'adds items to the order' do
|
26
|
-
punch_out_order_message.add_item(build_item_in
|
23
|
+
punch_out_order_message.add_item(build_item_in)
|
27
24
|
punch_out_order_message.items_in.count.should == 1
|
28
25
|
end
|
29
26
|
end
|
30
27
|
|
31
28
|
describe '#render' do
|
32
|
-
let(:output_xml) {
|
33
|
-
let(:output_data) {
|
29
|
+
let(:output_xml) { doc.to_xml }
|
30
|
+
let(:output_data) { CXML::Parser.new(data: output_xml).parse }
|
34
31
|
let(:punch_out_order_message_output_data) { output_data[:message][:punch_out_order_message] }
|
35
32
|
|
36
33
|
it 'contains the required nodes' do
|
37
|
-
punch_out_order_message.add_item(build_item_in
|
34
|
+
punch_out_order_message.add_item(build_item_in)
|
38
35
|
punch_out_order_message_output_data[:punch_out_order_message_header].should_not be_empty
|
39
36
|
punch_out_order_message_output_data[:buyer_cookie].should_not be_empty
|
40
37
|
punch_out_order_message_output_data.should include(:item_in)
|
@@ -10,9 +10,8 @@ describe CXML::PunchOutSetupRequest do
|
|
10
10
|
it { should respond_to :extrinsics }
|
11
11
|
it { should respond_to :contact }
|
12
12
|
|
13
|
-
let(:
|
14
|
-
let(:
|
15
|
-
let(:data_coupa) { parser.parse(fixture('punch_out_setup_request_doc_coupa.xml')) }
|
13
|
+
let(:data) { CXML::Parser.new(data: fixture('punch_out_setup_request_doc.xml')).parse }
|
14
|
+
let(:data_coupa) { CXML::Parser.new(data: fixture('punch_out_setup_request_doc_coupa.xml')).parse }
|
16
15
|
let(:doc) { CXML::Document.new(data) }
|
17
16
|
let(:doc_coupa) { CXML::Document.new(data_coupa) }
|
18
17
|
let(:request) { doc.request }
|
@@ -34,7 +33,7 @@ describe CXML::PunchOutSetupRequest do
|
|
34
33
|
punch_out_setup_request_coupa.extrinsics.first.name.should_not be_nil
|
35
34
|
end
|
36
35
|
it 'sets the shipping attributes when present' do
|
37
|
-
data =
|
36
|
+
data = CXML::Parser.new(data: fixture('punch_out_setup_request_doc_with_ship_to.xml')).parse
|
38
37
|
doc = CXML::Document.new(data)
|
39
38
|
doc.request.punch_out_setup_request.ship_to.should_not be_nil
|
40
39
|
doc.request.punch_out_setup_request.ship_to.address.name.should_not be_nil
|
@@ -43,12 +42,10 @@ describe CXML::PunchOutSetupRequest do
|
|
43
42
|
|
44
43
|
describe '#render' do
|
45
44
|
it 'contains the required nodes' do
|
46
|
-
|
47
|
-
data = parser.parse(fixture('punch_out_setup_request_doc_with_ship_to.xml'))
|
45
|
+
data = CXML::Parser.new(data: fixture('punch_out_setup_request_doc_with_ship_to.xml')).parse
|
48
46
|
doc = CXML::Document.new(data)
|
49
|
-
|
50
|
-
|
51
|
-
output_data = parser.parse(output_xml)
|
47
|
+
output_xml = doc.to_xml
|
48
|
+
output_data = CXML::Parser.new(data: output_xml).parse
|
52
49
|
output_data[:request][:punch_out_setup_request][:buyer_cookie]
|
53
50
|
.should eq data[:request][:punch_out_setup_request][:buyer_cookie]
|
54
51
|
output_data[:request][:punch_out_setup_request][:browser_form_post]
|
@@ -3,20 +3,17 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe CXML::OrderRequest do
|
6
|
-
it { should respond_to :render }
|
7
6
|
it { should respond_to :order_request_header }
|
8
7
|
it { should respond_to :items_out }
|
9
8
|
|
10
|
-
let(:
|
11
|
-
let(:data) { parser.parse(fixture('purchase_order_request_200.xml')) }
|
9
|
+
let(:data) { CXML::Parser.new(data: fixture('purchase_order_request_200.xml')).parse }
|
12
10
|
let(:doc) { CXML::Document.new(data) }
|
13
11
|
let(:order_request) { doc.request.order_request }
|
14
|
-
let(:
|
15
|
-
let(:
|
16
|
-
let(:output_data) { parser.parse(output_xml) }
|
12
|
+
let(:output_xml) { doc.to_xml }
|
13
|
+
let(:output_data) { CXML::Parser.new(data: output_xml).parse }
|
17
14
|
let(:order_request_output_data) { output_data[:request][:order_request] }
|
18
15
|
|
19
|
-
describe '#
|
16
|
+
describe '#to_xml' do
|
20
17
|
it 'contains the required nodes' do
|
21
18
|
order_request_output_data[:order_request_header].should_not be_empty
|
22
19
|
order_request_output_data[:item_out].should be_a Array
|
data/spec/request_spec.rb
CHANGED
@@ -9,24 +9,21 @@ describe CXML::Request do
|
|
9
9
|
|
10
10
|
describe '#initialize' do
|
11
11
|
it 'sets punch_out_setup_request attributes' do
|
12
|
-
|
13
|
-
data = parser.parse(fixture('punch_out_setup_request_doc.xml'))
|
12
|
+
data = CXML::Parser.new(data: fixture('punch_out_setup_request_doc.xml')).parse
|
14
13
|
doc = CXML::Document.new(data)
|
15
14
|
doc.request.deployment_mode.should_not be_nil
|
16
15
|
doc.request.punch_out_setup_request
|
17
16
|
.should be_an_instance_of CXML::PunchOutSetupRequest
|
18
17
|
end
|
19
18
|
it 'sets purchase_order_request attributes' do
|
20
|
-
|
21
|
-
data = parser.parse(fixture('purchase_order_request_200.xml'))
|
19
|
+
data = CXML::Parser.new(data: fixture('purchase_order_request_200.xml')).parse
|
22
20
|
doc = CXML::Document.new(data)
|
23
21
|
doc.request.deployment_mode.should_not be_nil
|
24
22
|
doc.request.order_request
|
25
23
|
.should be_an_instance_of CXML::OrderRequest
|
26
24
|
end
|
27
25
|
it 'sets invoice_detail_request attributes' do
|
28
|
-
|
29
|
-
data = parser.parse(fixture('invoice_taxes_at_line.xml'))
|
26
|
+
data = CXML::Parser.new(data: fixture('invoice_taxes_at_line.xml')).parse
|
30
27
|
doc = CXML::Document.new(data)
|
31
28
|
doc.request.deployment_mode.should_not be_nil
|
32
29
|
doc.request.invoice_detail_request
|
data/spec/response_spec.rb
CHANGED
@@ -7,11 +7,9 @@ describe CXML::Response do
|
|
7
7
|
it { should respond_to :status }
|
8
8
|
it { should respond_to :punch_out_setup_response }
|
9
9
|
|
10
|
-
let(:
|
11
|
-
let(:data) { parser.parse(fixture('response_status_200.xml')) }
|
10
|
+
let(:data) { CXML::Parser.new(data: fixture('response_status_200.xml')).parse }
|
12
11
|
let(:doc) { CXML::Document.new(data) }
|
13
12
|
let(:response) { doc.response }
|
14
|
-
let(:builder) { doc.render }
|
15
13
|
|
16
14
|
describe '#initialize' do
|
17
15
|
it 'sets the mandatory attributes' do
|
@@ -21,11 +19,11 @@ describe CXML::Response do
|
|
21
19
|
end
|
22
20
|
|
23
21
|
describe '#render' do
|
24
|
-
let(:output_xml) {
|
25
|
-
let(:output_data) {
|
22
|
+
let(:output_xml) { doc.to_xml }
|
23
|
+
let(:output_data) { CXML::Parser.new(data: output_xml).parse }
|
26
24
|
|
27
25
|
context 'when a valid response is rendered' do
|
28
|
-
let(:data) {
|
26
|
+
let(:data) { CXML::Parser.new(data: fixture('response_status_200.xml')).parse }
|
29
27
|
|
30
28
|
it 'returns xml content' do
|
31
29
|
output_xml.should_not be_nil
|
@@ -43,7 +41,7 @@ describe CXML::Response do
|
|
43
41
|
end
|
44
42
|
|
45
43
|
context 'when a invalid response is rendered' do
|
46
|
-
let(:data) {
|
44
|
+
let(:data) { CXML::Parser.new(data: fixture('response_status_400.xml')).parse }
|
47
45
|
|
48
46
|
it 'returns xml content' do
|
49
47
|
output_xml.should_not be_nil
|
data/spec/sender_spec.rb
CHANGED
@@ -6,11 +6,9 @@ describe CXML::Sender do
|
|
6
6
|
it { should respond_to :credential }
|
7
7
|
it { should respond_to :user_agent }
|
8
8
|
|
9
|
-
let(:
|
10
|
-
let(:data) { parser.parse(fixture('punch_out_order_message_doc.xml')) }
|
9
|
+
let(:data) { CXML::Parser.new(data: fixture('punch_out_order_message_doc.xml')).parse }
|
11
10
|
let(:doc) { CXML::Document.new(data) }
|
12
11
|
let(:sender) { doc.header.sender }
|
13
|
-
let(:builder) { doc.render }
|
14
12
|
|
15
13
|
describe '#initialize' do
|
16
14
|
it 'sets the mandatory attributes' do
|
@@ -20,8 +18,8 @@ describe CXML::Sender do
|
|
20
18
|
end
|
21
19
|
|
22
20
|
describe '#render' do
|
23
|
-
let(:output_xml) {
|
24
|
-
let(:output_data) {
|
21
|
+
let(:output_xml) { doc.to_xml }
|
22
|
+
let(:output_data) { CXML::Parser.new(data: output_xml).parse }
|
25
23
|
let(:sender_output_data) { output_data[:header][:sender] }
|
26
24
|
|
27
25
|
it 'contains the required nodes' do
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/helpers.rb
CHANGED
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.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Beckman
|
@@ -9,8 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-04-
|
12
|
+
date: 2020-04-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: ox
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '2.13'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '2.13'
|
14
28
|
- !ruby/object:Gem::Dependency
|
15
29
|
name: pry
|
16
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,34 +81,6 @@ dependencies:
|
|
67
81
|
- - "~>"
|
68
82
|
- !ruby/object:Gem::Version
|
69
83
|
version: '0.81'
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: nokogiri
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
-
requirements:
|
74
|
-
- - "~>"
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '1.10'
|
77
|
-
type: :runtime
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - "~>"
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: '1.10'
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: xml-simple
|
86
|
-
requirement: !ruby/object:Gem::Requirement
|
87
|
-
requirements:
|
88
|
-
- - "~>"
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: '1.1'
|
91
|
-
type: :runtime
|
92
|
-
prerelease: false
|
93
|
-
version_requirements: !ruby/object:Gem::Requirement
|
94
|
-
requirements:
|
95
|
-
- - "~>"
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: '1.1'
|
98
84
|
description: Ruby library to parse/generate documents with the cXML protocol
|
99
85
|
email:
|
100
86
|
- josh@officeluv.com
|
@@ -107,6 +93,7 @@ files:
|
|
107
93
|
- ".gitignore"
|
108
94
|
- ".rspec"
|
109
95
|
- ".rubocop.yml"
|
96
|
+
- CHANGELOG.md
|
110
97
|
- Gemfile
|
111
98
|
- LICENSE
|
112
99
|
- README.md
|