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.
@@ -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
@@ -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
@@ -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: []