xsd-reader 0.0.1
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 +7 -0
- data/.gitignore +35 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +40 -0
- data/LICENSE +22 -0
- data/README.md +60 -0
- data/Rakefile +20 -0
- data/lib/xsd_reader/attribute.rb +9 -0
- data/lib/xsd_reader/choice.rb +8 -0
- data/lib/xsd_reader/complex_type.rb +26 -0
- data/lib/xsd_reader/element.rb +65 -0
- data/lib/xsd_reader/extension.rb +5 -0
- data/lib/xsd_reader/schema.rb +5 -0
- data/lib/xsd_reader/sequence.rb +8 -0
- data/lib/xsd_reader/shared.rb +214 -0
- data/lib/xsd_reader/simple_content.rb +9 -0
- data/lib/xsd_reader/xml.rb +38 -0
- data/lib/xsd_reader.rb +11 -0
- data/spec/attribute_spec.rb +35 -0
- data/spec/element_spec.rb +169 -0
- data/spec/examples/ddex-ern-v36.xsd +8815 -0
- data/spec/schema_spec.rb +17 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/xml_spec.rb +24 -0
- data/spec/xsd_reader_spec.rb +62 -0
- data/xsd-reader.gemspec +20 -0
- metadata +96 -0
data/spec/schema_spec.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe XsdReader do
|
4
|
+
before :all do
|
5
|
+
@reader ||= XsdReader::XML.new(:xsd_file => File.expand_path(File.join(File.dirname(__FILE__), 'examples', 'ddex-ern-v36.xsd')))
|
6
|
+
end
|
7
|
+
|
8
|
+
describe XsdReader::Schema do
|
9
|
+
before :each do
|
10
|
+
@schema = @reader.schema
|
11
|
+
end
|
12
|
+
|
13
|
+
it "gives a element readers" do
|
14
|
+
expect(@schema.elements.map(&:class)).to eq [XsdReader::Element]*2
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end # describe XsdReader
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# loads and runs all tests for the rxsd project
|
2
|
+
#
|
3
|
+
# Copyright (C) 2010 Mohammed Morsi <movitto@yahoo.com>
|
4
|
+
# Licensed under the AGPLv3+ http://www.gnu.org/licenses/agpl.txt
|
5
|
+
|
6
|
+
require 'rspec'
|
7
|
+
|
8
|
+
CURRENT_DIR=File.dirname(__FILE__)
|
9
|
+
$: << File.expand_path(CURRENT_DIR + "/../lib")
|
10
|
+
|
11
|
+
require 'xsd_reader'
|
12
|
+
require 'byebug'
|
data/spec/xml_spec.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe XsdReader do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@reader ||= XsdReader::XML.new(:xsd_file => File.expand_path(File.join(File.dirname(__FILE__), 'examples', 'ddex-ern-v36.xsd')))
|
7
|
+
end
|
8
|
+
|
9
|
+
describe XsdReader::XML do
|
10
|
+
it "gives a schema_node" do
|
11
|
+
expect(@reader.schema_node.name).to eq 'schema'
|
12
|
+
expect(@reader.schema_node.namespaces).to eq({"xmlns:xs"=>"http://www.w3.org/2001/XMLSchema", "xmlns:ern"=>"http://ddex.net/xml/ern/36", "xmlns:avs"=>"http://ddex.net/xml/avs/avs"})
|
13
|
+
end
|
14
|
+
|
15
|
+
it "gives a schema reader" do
|
16
|
+
expect(@reader.schema.class).to eq XsdReader::Schema
|
17
|
+
end
|
18
|
+
|
19
|
+
it "gives an elements shortcut to its schema's shortcuts" do
|
20
|
+
expect(@reader.elements.map(&:name)).to eq @reader.schema.elements.map(&:name)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end # describe XsdReader
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe XsdReader do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@reader ||= XsdReader::XML.new(:xsd_file => File.expand_path(File.join(File.dirname(__FILE__), 'examples', 'ddex-ern-v36.xsd')))
|
7
|
+
end
|
8
|
+
|
9
|
+
it "gives all child element definitions for a certain node through the `elements` method" do
|
10
|
+
expect(@reader.elements.map(&:name)).to eq ['NewReleaseMessage', 'CatalogListMessage']
|
11
|
+
expect(@reader.elements[0].elements[0].name).to eq 'MessageHeader'
|
12
|
+
end
|
13
|
+
|
14
|
+
it "gives a child element object through the square brackets ([]) operator (matching by name)" do
|
15
|
+
expect(@reader['NewReleaseMessage'].name).to eq 'NewReleaseMessage'
|
16
|
+
# this supports linking:
|
17
|
+
expect(@reader['NewReleaseMessage']['ReleaseList']['Release'].attributes.map(&:name)).to eq ["LanguageAndScriptCode", "IsMainRelease"]
|
18
|
+
end
|
19
|
+
|
20
|
+
it "gives a specific element in the hierarchy when passing an array argument to the square brackets ([]) operator" do
|
21
|
+
# this supports linking:
|
22
|
+
expect(@reader[['NewReleaseMessage', 'ResourceList', 'SoundRecording']].name).to eq 'SoundRecording'
|
23
|
+
expect(@reader[['NewReleaseMessage', 'ResourceList', 'SoundRecording']].multiple_allowed?).to eq true
|
24
|
+
end
|
25
|
+
|
26
|
+
it "provides a `child_elements?` convenience method" do
|
27
|
+
expect(@reader['NewReleaseMessage'].child_elements?).to be true
|
28
|
+
expect(@reader['NewReleaseMessage']['MessageHeader']['MessageThreadId'].child_elements?).to be false
|
29
|
+
end
|
30
|
+
|
31
|
+
it "provides `min_occurs` and `max_occurs` reader methods" do
|
32
|
+
expect(@reader['NewReleaseMessage']['ResourceList'].min_occurs).to eq nil
|
33
|
+
expect(@reader['NewReleaseMessage']['ResourceList']['SoundRecording'].min_occurs).to eq 0
|
34
|
+
expect(@reader['NewReleaseMessage']['ResourceList']['SoundRecording'].max_occurs).to eq :unbounded
|
35
|
+
end
|
36
|
+
|
37
|
+
it "provides a boolean `multiple_allowed?` method, indicating if multiple instances of this element are allowed" do
|
38
|
+
# byebug
|
39
|
+
expect(@reader['NewReleaseMessage']['ResourceList'].multiple_allowed?).to be false
|
40
|
+
expect(@reader['NewReleaseMessage']['ResourceList']['SoundRecording'].multiple_allowed?).to be true
|
41
|
+
end
|
42
|
+
|
43
|
+
it "provides a `required?` method, indicating if an element is required to be there" do
|
44
|
+
expect(@reader['NewReleaseMessage'].required?).to be true
|
45
|
+
expect(@reader['NewReleaseMessage']['ResourceList'].required?).to be true
|
46
|
+
expect(@reader['NewReleaseMessage']['CollectionList'].required?).to be false
|
47
|
+
end
|
48
|
+
|
49
|
+
it "provides an `optional?` convenience method, as an opposite of `required?`" do
|
50
|
+
expect(@reader['NewReleaseMessage'].optional?).to be false
|
51
|
+
expect(@reader['NewReleaseMessage']['ResourceList'].optional?).to be false
|
52
|
+
expect(@reader['NewReleaseMessage']['CollectionList'].optional?).to be true
|
53
|
+
end
|
54
|
+
|
55
|
+
# it "gives an array recursive parent names `ancestors` method" do
|
56
|
+
# skip 'Not yet (properly) imlemented'
|
57
|
+
# # byebug
|
58
|
+
# expect(@reader.ancestors).to eq []
|
59
|
+
# expect(@reader['NewReleaseMessage'].ancestors).to eq []
|
60
|
+
# expect(@reader['NewReleaseMessage']['DealList']['ReleaseDeal'].ancestors.map(&:name)).to eq ['NewReleasMessage', 'DealList']
|
61
|
+
# end
|
62
|
+
end
|
data/xsd-reader.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
GEM_NAME="xsd-reader"
|
2
|
+
PKG_VERSION='0.0.1'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = GEM_NAME
|
6
|
+
s.version = PKG_VERSION
|
7
|
+
s.files = `git ls-files`.split($/)
|
8
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
9
|
+
|
10
|
+
s.add_dependency 'nokogiri'
|
11
|
+
s.add_development_dependency 'rspec'
|
12
|
+
|
13
|
+
s.author = "Mark van de Korput"
|
14
|
+
s.email = "dr.theman@gmail.com"
|
15
|
+
s.date = '2015-07-05'
|
16
|
+
s.description = %q{A library of Ruby classes for quick and convenient usage of xsd schemas}
|
17
|
+
s.summary = %q{A library of Ruby classes for flexible access of xsd schemas}
|
18
|
+
s.homepage = %q{https://github.com/markkorput/xsd-reader}
|
19
|
+
s.license = "MIT"
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xsd-reader
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mark van de Korput
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: A library of Ruby classes for quick and convenient usage of xsd schemas
|
42
|
+
email: dr.theman@gmail.com
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- ".gitignore"
|
48
|
+
- Gemfile
|
49
|
+
- Gemfile.lock
|
50
|
+
- LICENSE
|
51
|
+
- README.md
|
52
|
+
- Rakefile
|
53
|
+
- lib/xsd_reader.rb
|
54
|
+
- lib/xsd_reader/attribute.rb
|
55
|
+
- lib/xsd_reader/choice.rb
|
56
|
+
- lib/xsd_reader/complex_type.rb
|
57
|
+
- lib/xsd_reader/element.rb
|
58
|
+
- lib/xsd_reader/extension.rb
|
59
|
+
- lib/xsd_reader/schema.rb
|
60
|
+
- lib/xsd_reader/sequence.rb
|
61
|
+
- lib/xsd_reader/shared.rb
|
62
|
+
- lib/xsd_reader/simple_content.rb
|
63
|
+
- lib/xsd_reader/xml.rb
|
64
|
+
- spec/attribute_spec.rb
|
65
|
+
- spec/element_spec.rb
|
66
|
+
- spec/examples/ddex-ern-v36.xsd
|
67
|
+
- spec/schema_spec.rb
|
68
|
+
- spec/spec_helper.rb
|
69
|
+
- spec/xml_spec.rb
|
70
|
+
- spec/xsd_reader_spec.rb
|
71
|
+
- xsd-reader.gemspec
|
72
|
+
homepage: https://github.com/markkorput/xsd-reader
|
73
|
+
licenses:
|
74
|
+
- MIT
|
75
|
+
metadata: {}
|
76
|
+
post_install_message:
|
77
|
+
rdoc_options: []
|
78
|
+
require_paths:
|
79
|
+
- lib
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
requirements: []
|
91
|
+
rubyforge_project:
|
92
|
+
rubygems_version: 2.2.2
|
93
|
+
signing_key:
|
94
|
+
specification_version: 4
|
95
|
+
summary: A library of Ruby classes for flexible access of xsd schemas
|
96
|
+
test_files: []
|