xsd-reader 0.0.1

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