proformaxml 0.10.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2230a680b6a36b22867d4c9749199e5ab0e601567998e343e3281a838867f6c7
4
- data.tar.gz: 9e8486a4ed110915ff0e9ce4b6e4cf87df3ad02c8c0c94c02824ddd8696a56fc
3
+ metadata.gz: c50e2e72dc70055556ef14a9be087d9f557aeac25eb4c8a53c28f1132baaf20e
4
+ data.tar.gz: 392e5f8391908e2221a423b8ae69d97e25edc6ea184ed987e59487d9acf9a715
5
5
  SHA512:
6
- metadata.gz: 20e9ee57cc1071bf2b8612f3397aeed1a98648f0fc363ddb8e3b22251c77e265208b6fbce75c9fe19cafd5a454fcf97d5f8dd90312a7758a2f86c673db9596ea
7
- data.tar.gz: 1c9d253c304209ba0026b766585d851d99e4ea3a626c402d92feb78a245b9ffc7633130ccea1bfe7916315a9118eff54b092b0252c8b88487fccf0547aa70313
6
+ metadata.gz: aff94d81a98f927cd04cd85b9c0fed428fb93e0496e968d0079152e2a50269e3b6cced82a17cec7002ee0fb0fbc3c964a7a85513f597541f4ade0e91eeb3bc7d
7
+ data.tar.gz: e54b57f55f6731036eb9659357d734e991f2f3dafd63083e56119d73be12cea07ba779ead3c7e5c921ccbaf4e258d3042054281bc2a21720c00a3f2288b70a92
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- proformaxml (0.10.0)
4
+ proformaxml (1.0.0)
5
5
  activemodel (>= 5.2.3, < 8.0.0)
6
6
  activesupport (>= 5.2.3, < 8.0.0)
7
7
  dachsfisch (>= 0.1.0, < 1.0.0)
@@ -11,9 +11,9 @@ PATH
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- activemodel (7.0.7.2)
15
- activesupport (= 7.0.7.2)
16
- activesupport (7.0.7.2)
14
+ activemodel (7.0.8)
15
+ activesupport (= 7.0.8)
16
+ activesupport (7.0.8)
17
17
  concurrent-ruby (~> 1.0, >= 1.0.2)
18
18
  i18n (>= 1.6, < 2)
19
19
  minitest (>= 5.1)
@@ -27,7 +27,7 @@ GEM
27
27
  nokogiri (>= 1.14.1, < 2.0.0)
28
28
  diff-lcs (1.5.0)
29
29
  docile (1.4.0)
30
- factory_bot (6.2.1)
30
+ factory_bot (6.3.0)
31
31
  activesupport (>= 5.0.0)
32
32
  ffi (1.15.5)
33
33
  formatador (1.1.0)
@@ -55,7 +55,7 @@ GEM
55
55
  lumberjack (1.2.9)
56
56
  method_source (1.0.0)
57
57
  mini_portile2 (2.8.4)
58
- minitest (5.19.0)
58
+ minitest (5.20.0)
59
59
  nenv (0.3.0)
60
60
  nokogiri (1.15.4)
61
61
  mini_portile2 (~> 2.8.2)
@@ -99,7 +99,7 @@ GEM
99
99
  diff-lcs (>= 1.2.0, < 2.0)
100
100
  rspec-support (~> 3.12.0)
101
101
  rspec-support (3.12.1)
102
- rubocop (1.56.1)
102
+ rubocop (1.56.2)
103
103
  base64 (~> 0.1.1)
104
104
  json (~> 2.3)
105
105
  language_server-protocol (>= 3.17.0)
@@ -26,7 +26,7 @@ module ProformaXML
26
26
  def add_test_configuration(xml, test)
27
27
  xml.send(:'test-configuration') do
28
28
  add_filerefs(xml, test) if test.files
29
- add_configuration(xml, test.configuration) unless test.configuration.nil?
29
+ add_dachsfisch_node(xml, test.configuration)
30
30
  if test.meta_data
31
31
  xml.send(:'test-meta-data') do
32
32
  meta_data(xml, test.meta_data)
@@ -55,10 +55,12 @@ module ProformaXML
55
55
  end
56
56
  end
57
57
 
58
- def add_configuration(xml, configuration)
59
- xml_snippet = Dachsfisch::JSON2XMLConverter.perform(json: configuration.to_json)
60
- configuration.flat_map {|_, val| val['@xmlns'].to_a }.uniq.each do |namespace|
61
- xml.doc.root.add_namespace(namespace[0], namespace[1])
58
+ def add_dachsfisch_node(xml, dachsfisch_node)
59
+ return if dachsfisch_node.nil?
60
+
61
+ xml_snippet = Dachsfisch::JSON2XMLConverter.perform(json: dachsfisch_node.to_json)
62
+ dachsfisch_node.flat_map {|_, val| val['@xmlns'].to_a }.uniq.each do |namespace|
63
+ xml.doc.root.add_namespace(namespace[0], namespace[1]) unless namespace[0] == '$'
62
64
  end
63
65
 
64
66
  xml << xml_snippet
@@ -97,7 +97,10 @@ module ProformaXML
97
97
 
98
98
  def convert_xml_node_to_json(any_node)
99
99
  xml_snippet = Nokogiri::XML::DocumentFragment.new(Nokogiri::XML::Document.new, any_node)
100
- xml_snippet.children.first.add_namespace_definition(any_node.namespace.prefix, any_node.namespace.href)
100
+ unless any_node.namespace.prefix.nil?
101
+ xml_snippet.children.first.add_namespace_definition(any_node.namespace.prefix,
102
+ any_node.namespace.href)
103
+ end
101
104
  JSON.parse(Dachsfisch::XML2JSONConverter.perform(xml: xml_snippet.to_xml))
102
105
  end
103
106
 
@@ -8,8 +8,8 @@ require 'proformaxml/errors'
8
8
 
9
9
  module ProformaXML
10
10
  class Task < Base
11
- attr_accessor :title, :description, :internal_description, :proglang, :uuid, :parent_uuid,
12
- :language, :model_solutions, :files, :tests, :meta_data
11
+ attr_accessor :title, :description, :internal_description, :proglang, :uuid, :parent_uuid, :language,
12
+ :model_solutions, :files, :tests, :meta_data, :submission_restrictions, :external_resources, :grading_hints
13
13
 
14
14
  def initialize(attributes = {})
15
15
  super
@@ -24,7 +24,7 @@ module ProformaXML
24
24
 
25
25
  raise PostGenerateValidationError.new(errors) if errors.any?
26
26
 
27
- # File.open('../testfile.zip', 'wb') { |file| file.write(write_to_zip(xmldoc).string) }
27
+ # File.binwrite('../testfile.zip', write_to_zip(xmldoc).string)
28
28
  write_to_zip(xmldoc)
29
29
  end
30
30
 
@@ -51,9 +51,12 @@ module ProformaXML
51
51
  end
52
52
 
53
53
  def add_objects_to_xml(xml)
54
+ add_dachsfisch_node(xml, @task.submission_restrictions)
54
55
  xml.files { files(xml) }
56
+ add_dachsfisch_node(xml, @task.external_resources)
55
57
  xml.send(:'model-solutions') { model_solutions(xml) } if @task.model_solutions.any? || @version == '2.0'
56
58
  xml.tests { tests(xml) }
59
+ add_dachsfisch_node(xml, @task.grading_hints)
57
60
  end
58
61
 
59
62
  def files(xml)
@@ -44,6 +44,7 @@ module ProformaXML
44
44
  set_model_solutions
45
45
  set_tests
46
46
  set_meta_data
47
+ set_extra_data
47
48
  end
48
49
 
49
50
  def set_namespaces
@@ -86,6 +87,15 @@ module ProformaXML
86
87
  @task.meta_data = meta_data(meta_data_node, use_namespace: true) if meta_data_node.text.present?
87
88
  end
88
89
 
90
+ def set_extra_data
91
+ submission_restrictions_node = @task_node.xpath('xmlns:submission-restrictions').first
92
+ @task.submission_restrictions = convert_xml_node_to_json(submission_restrictions_node) unless submission_restrictions_node.nil?
93
+ external_resources_node = @task_node.xpath('xmlns:external-resources').first
94
+ @task.external_resources = convert_xml_node_to_json(external_resources_node) unless external_resources_node.nil?
95
+ grading_hints_node = @task_node.xpath('xmlns:grading-hints').first
96
+ @task.grading_hints = convert_xml_node_to_json(grading_hints_node) unless grading_hints_node.nil?
97
+ end
98
+
89
99
  def add_model_solution(model_solution_node)
90
100
  model_solution = ModelSolution.new
91
101
  model_solution.id = model_solution_node.attributes['id'].value
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ProformaXML
4
- VERSION = '0.10.0'
4
+ VERSION = '1.0.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proformaxml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karol
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-22 00:00:00.000000000 Z
11
+ date: 2023-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -172,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0'
174
174
  requirements: []
175
- rubygems_version: 3.4.19
175
+ rubygems_version: 3.4.6
176
176
  signing_key:
177
177
  specification_version: 4
178
178
  summary: Implements parts of ProFormA-XML specification