xsd-reader 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|