proformaxml 0.10.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 +7 -0
- data/.rspec +3 -0
- data/.rubocop/layout.yml +39 -0
- data/.rubocop/lint.yml +14 -0
- data/.rubocop/metrics.yml +31 -0
- data/.rubocop/rails.yml +4 -0
- data/.rubocop/rspec.yml +27 -0
- data/.rubocop/style.yml +74 -0
- data/.rubocop.yml +30 -0
- data/CODE_OF_CONDUCT.md +128 -0
- data/Gemfile +23 -0
- data/Gemfile.lock +168 -0
- data/Guardfile +44 -0
- data/LICENSE.txt +21 -0
- data/README.md +212 -0
- data/Rakefile +11 -0
- data/SECURITY.md +14 -0
- data/assets/schemas/proforma-2.0.xsd +1038 -0
- data/assets/schemas/proforma-2.1.xsd +1084 -0
- data/assets/schemas/proforma-java-checkstyle.xsd +11 -0
- data/assets/schemas/proforma-regexptest.xsd +50 -0
- data/assets/schemas/proforma-unittest.xsd +12 -0
- data/lib/proformaxml/errors.rb +9 -0
- data/lib/proformaxml/helpers/export_helpers.rb +79 -0
- data/lib/proformaxml/helpers/import_helpers.rb +114 -0
- data/lib/proformaxml/models/base.rb +11 -0
- data/lib/proformaxml/models/model_solution.rb +12 -0
- data/lib/proformaxml/models/task.rb +29 -0
- data/lib/proformaxml/models/task_file.rb +11 -0
- data/lib/proformaxml/models/test.rb +12 -0
- data/lib/proformaxml/services/exporter.rb +140 -0
- data/lib/proformaxml/services/importer.rb +135 -0
- data/lib/proformaxml/services/validator.rb +52 -0
- data/lib/proformaxml/version.rb +5 -0
- data/lib/proformaxml.rb +24 -0
- data/proformaxml.gemspec +37 -0
- metadata +179 -0
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ProformaXML
|
4
|
+
class Validator
|
5
|
+
def initialize(doc, expected_version = nil)
|
6
|
+
@doc = doc
|
7
|
+
@expected_version = expected_version
|
8
|
+
end
|
9
|
+
|
10
|
+
def perform
|
11
|
+
validate
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def doc_schema_version
|
17
|
+
@doc_schema_version ||= /^urn:proforma:v(.*)$/.match(@doc.namespaces['xmlns'])&.captures&.dig(0)
|
18
|
+
end
|
19
|
+
|
20
|
+
def node_as_doc_with_namespace(config_node)
|
21
|
+
doc = Nokogiri::XML::Document.new
|
22
|
+
doc.add_child(config_node.dup)
|
23
|
+
doc
|
24
|
+
end
|
25
|
+
|
26
|
+
def validate
|
27
|
+
return ['no proformaxml version found'] if doc_schema_version.nil?
|
28
|
+
|
29
|
+
version = @expected_version || doc_schema_version
|
30
|
+
return ['version not supported'] unless SCHEMA_VERSIONS.include? version
|
31
|
+
|
32
|
+
# Both validations return an array of errors, which are empty if the validation was successful.
|
33
|
+
validate_task(version) + validate_test_configuration
|
34
|
+
end
|
35
|
+
|
36
|
+
def validate_task(version)
|
37
|
+
Nokogiri::XML::Schema(File.open(SCHEMA_FORMAT_PATH % version)).validate(@doc)
|
38
|
+
end
|
39
|
+
|
40
|
+
def validate_test_configuration
|
41
|
+
@doc.xpath('/xmlns:task/xmlns:tests/xmlns:test/xmlns:test-configuration').flat_map do |test_config|
|
42
|
+
test_config.children.flat_map do |config_node|
|
43
|
+
next [] unless config_node.namespace&.href&.start_with?('urn:proforma:tests:')
|
44
|
+
next [] unless TEST_TYPE_SCHEMA_NAMES.include? config_node.name
|
45
|
+
|
46
|
+
schema = Nokogiri::XML::Schema(File.read(SCHEMA_FORMAT_PATH % config_node.name))
|
47
|
+
schema.validate(node_as_doc_with_namespace(config_node))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/proformaxml.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_model'
|
4
|
+
require 'nokogiri'
|
5
|
+
require 'zip'
|
6
|
+
require 'base64'
|
7
|
+
require 'securerandom'
|
8
|
+
require 'dachsfisch'
|
9
|
+
|
10
|
+
require 'proformaxml/version'
|
11
|
+
|
12
|
+
require 'proformaxml/services/importer'
|
13
|
+
require 'proformaxml/services/exporter'
|
14
|
+
require 'proformaxml/services/validator'
|
15
|
+
require 'proformaxml/models/task'
|
16
|
+
|
17
|
+
module ProformaXML
|
18
|
+
SCHEMA_PATH = File.join(File.dirname(File.expand_path(__FILE__)), '../assets/schemas')
|
19
|
+
SCHEMA_FORMAT_PATH = "#{SCHEMA_PATH}/proforma-%s.xsd".freeze
|
20
|
+
SCHEMA_VERSIONS = %w[2.1 2.0].freeze
|
21
|
+
|
22
|
+
TEST_TYPE_SCHEMA_NAMES = %w[java-checkstyle regexptest unittest].freeze
|
23
|
+
MAX_EMBEDDED_FILE_SIZE_KB = 50
|
24
|
+
end
|
data/proformaxml.gemspec
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'lib/proformaxml/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'proformaxml'
|
7
|
+
spec.version = ProformaXML::VERSION
|
8
|
+
spec.authors = ['Karol']
|
9
|
+
spec.email = ['git@koehn.pro']
|
10
|
+
|
11
|
+
spec.summary = 'Implements parts of ProFormA-XML specification'
|
12
|
+
spec.description = 'Offers datastructure and (de)serializer according to ProFormA-XML specification.'
|
13
|
+
spec.homepage = 'https://github.com/openHPI/proformaxml'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.required_ruby_version = '>= 3.2'
|
17
|
+
|
18
|
+
# Specify which files should be added to the gem when it is released.
|
19
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
20
|
+
spec.files = Dir.chdir(__dir__) do
|
21
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
22
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|circleci)|appveyor)})
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
spec.bindir = 'exe'
|
27
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) {|f| File.basename(f) }
|
28
|
+
spec.require_paths = ['lib']
|
29
|
+
|
30
|
+
spec.add_dependency 'activemodel', '>= 5.2.3', '< 8.0.0'
|
31
|
+
spec.add_dependency 'activesupport', '>= 5.2.3', '< 8.0.0'
|
32
|
+
spec.add_dependency 'dachsfisch', '>= 0.1.0', '< 1.0.0'
|
33
|
+
spec.add_dependency 'nokogiri', '>= 1.10.2', '< 2.0.0'
|
34
|
+
spec.add_dependency 'rubyzip', '>= 1.2.2', '< 3.0.0'
|
35
|
+
|
36
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: proformaxml
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.10.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Karol
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-08-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activemodel
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 5.2.3
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 8.0.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 5.2.3
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 8.0.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: activesupport
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 5.2.3
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 8.0.0
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 5.2.3
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 8.0.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: dachsfisch
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 0.1.0
|
60
|
+
- - "<"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 1.0.0
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.1.0
|
70
|
+
- - "<"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 1.0.0
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: nokogiri
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 1.10.2
|
80
|
+
- - "<"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.0.0
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.10.2
|
90
|
+
- - "<"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 2.0.0
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: rubyzip
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 1.2.2
|
100
|
+
- - "<"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 3.0.0
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.2.2
|
110
|
+
- - "<"
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 3.0.0
|
113
|
+
description: Offers datastructure and (de)serializer according to ProFormA-XML specification.
|
114
|
+
email:
|
115
|
+
- git@koehn.pro
|
116
|
+
executables: []
|
117
|
+
extensions: []
|
118
|
+
extra_rdoc_files: []
|
119
|
+
files:
|
120
|
+
- ".rspec"
|
121
|
+
- ".rubocop.yml"
|
122
|
+
- ".rubocop/layout.yml"
|
123
|
+
- ".rubocop/lint.yml"
|
124
|
+
- ".rubocop/metrics.yml"
|
125
|
+
- ".rubocop/rails.yml"
|
126
|
+
- ".rubocop/rspec.yml"
|
127
|
+
- ".rubocop/style.yml"
|
128
|
+
- CODE_OF_CONDUCT.md
|
129
|
+
- Gemfile
|
130
|
+
- Gemfile.lock
|
131
|
+
- Guardfile
|
132
|
+
- LICENSE.txt
|
133
|
+
- README.md
|
134
|
+
- Rakefile
|
135
|
+
- SECURITY.md
|
136
|
+
- assets/schemas/proforma-2.0.xsd
|
137
|
+
- assets/schemas/proforma-2.1.xsd
|
138
|
+
- assets/schemas/proforma-java-checkstyle.xsd
|
139
|
+
- assets/schemas/proforma-regexptest.xsd
|
140
|
+
- assets/schemas/proforma-unittest.xsd
|
141
|
+
- lib/proformaxml.rb
|
142
|
+
- lib/proformaxml/errors.rb
|
143
|
+
- lib/proformaxml/helpers/export_helpers.rb
|
144
|
+
- lib/proformaxml/helpers/import_helpers.rb
|
145
|
+
- lib/proformaxml/models/base.rb
|
146
|
+
- lib/proformaxml/models/model_solution.rb
|
147
|
+
- lib/proformaxml/models/task.rb
|
148
|
+
- lib/proformaxml/models/task_file.rb
|
149
|
+
- lib/proformaxml/models/test.rb
|
150
|
+
- lib/proformaxml/services/exporter.rb
|
151
|
+
- lib/proformaxml/services/importer.rb
|
152
|
+
- lib/proformaxml/services/validator.rb
|
153
|
+
- lib/proformaxml/version.rb
|
154
|
+
- proformaxml.gemspec
|
155
|
+
homepage: https://github.com/openHPI/proformaxml
|
156
|
+
licenses:
|
157
|
+
- MIT
|
158
|
+
metadata:
|
159
|
+
rubygems_mfa_required: 'true'
|
160
|
+
post_install_message:
|
161
|
+
rdoc_options: []
|
162
|
+
require_paths:
|
163
|
+
- lib
|
164
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '3.2'
|
169
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
requirements: []
|
175
|
+
rubygems_version: 3.4.19
|
176
|
+
signing_key:
|
177
|
+
specification_version: 4
|
178
|
+
summary: Implements parts of ProFormA-XML specification
|
179
|
+
test_files: []
|