epb_view_models 1.0.9 → 1.0.13
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 +4 -4
- data/lib/epb_view_models.rb +1 -1
- data/lib/presenter/xsd.rb +32 -41
- data/lib/view_model_boundary/node_not_found.rb +3 -0
- data/lib/view_model_boundary/xsd_files_not_found.rb +3 -0
- data/lib/view_model_domain/xsd_arguments.rb +13 -0
- data/lib/view_model_gateway/xsd_files_gateway.rb +62 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d6b7baac28f53821c21ca4a9e6517bb3f3f0b8abf990aa3899bc8a61ef3c982
|
4
|
+
data.tar.gz: 9e1a9e515367fca063c6be4b06dc4a7a23ee3563f87fe5ae0d8a40a649d6d5ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43c9884e01d2242b4d89d9cb0f0274a6721aecd484944f523a7aac399d5b890472728384fe35d2892bff273f396e82bf03ca1e5a2e68fc72d430b23509109394
|
7
|
+
data.tar.gz: dbcdc6c7fac809075b206c908df02ee82affc3a4b13e8115b9e4dccc51ea673d11655a79de7374dd0d3fe54f83e43afbf91dbc3e3d8fa3625b201cb5ad927134
|
data/lib/epb_view_models.rb
CHANGED
data/lib/presenter/xsd.rb
CHANGED
@@ -1,31 +1,32 @@
|
|
1
1
|
module Presenter
|
2
2
|
class Xsd
|
3
|
-
def
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
def get_enums_by_type(domain_arguments)
|
4
|
+
xsd_files_gateway = ViewModelGateway::XsdFilesGateway.new(domain_arguments)
|
5
|
+
|
6
|
+
begin
|
7
|
+
xsd_files = xsd_files_gateway.xsd_files
|
8
|
+
rescue ViewModelBoundary::XsdFilesNotFound => e
|
9
|
+
raise ViewModelBoundary::XsdFilesNotFound, e.message.to_s
|
10
|
+
end
|
7
11
|
|
8
|
-
def get_enums_by_type(simple_type)
|
9
12
|
hash = {}
|
10
|
-
|
11
|
-
xsd_files.each do |
|
12
|
-
|
13
|
-
enums_hash = {}
|
14
|
-
REXML::XPath.each(doc, "#{xpath}/@value") do |e|
|
15
|
-
desc_path = "#{xpath}[@value='#{e.value}']//xs:annotation//xs:documentation"
|
16
|
-
enums_hash.merge!(e.value => REXML::XPath.first(doc, desc_path).children.first)
|
17
|
-
end
|
13
|
+
|
14
|
+
xsd_files.each do |file|
|
15
|
+
enums_hash = File.extname(file).downcase == ".xsd" ? read_xsd(file, domain_arguments.simple_type) : read_xml(file, domain_arguments.simple_type, domain_arguments.node_hash)
|
18
16
|
|
19
17
|
next if enums_hash.empty?
|
20
18
|
|
21
|
-
hash[schema_version(
|
19
|
+
hash[xsd_files_gateway.schema_version(file)] = enums_hash
|
22
20
|
end
|
21
|
+
|
22
|
+
raise ViewModelBoundary::NodeNotFound, "Node #{domain_arguments.simple_type} was not found in any of the files in #{domain_arguments.xsd_dir_path} directory" if hash.empty?
|
23
|
+
|
23
24
|
hash
|
24
25
|
end
|
25
26
|
|
26
|
-
def unique_enums(
|
27
|
+
def unique_enums(domain_arguments)
|
27
28
|
uniq_enums = []
|
28
|
-
enums = get_enums_by_type(
|
29
|
+
enums = get_enums_by_type(domain_arguments).values
|
29
30
|
|
30
31
|
enums.each_with_index do |_hash, i|
|
31
32
|
if i.positive? && (enums[i].to_a != enums[i + 1].to_a)
|
@@ -41,36 +42,26 @@ module Presenter
|
|
41
42
|
|
42
43
|
private
|
43
44
|
|
44
|
-
def
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
when "SAP"
|
52
|
-
sap_xsd_files
|
53
|
-
when "RdSAP"
|
54
|
-
rdsap_xsd_files
|
55
|
-
when "CEPC"
|
56
|
-
cepc_xsd_files
|
45
|
+
def read_xsd(file_name, simple_type)
|
46
|
+
xpath = "//xs:simpleType[@name='#{simple_type}']//xs:enumeration"
|
47
|
+
doc = REXML::Document.new(File.read(file_name))
|
48
|
+
enums_hash = {}
|
49
|
+
REXML::XPath.each(doc, "#{xpath}/@value") do |node|
|
50
|
+
desc_path = "#{xpath}[@value='#{node.value}']//xs:annotation//xs:documentation"
|
51
|
+
enums_hash.merge!(node.value => REXML::XPath.first(doc, desc_path).children.first)
|
57
52
|
end
|
53
|
+
enums_hash
|
58
54
|
end
|
59
55
|
|
60
|
-
def
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
def rdsap_xsd_files
|
65
|
-
Dir.glob("#{@xsd_dir_path}SAP-Domains.xsd")
|
66
|
-
end
|
56
|
+
def read_xml(file_name, node_name, node_hash)
|
57
|
+
doc = Nokogiri.XML(File.read(file_name))
|
58
|
+
enums_hash = {}
|
67
59
|
|
68
|
-
|
69
|
-
|
70
|
-
|
60
|
+
doc.xpath(node_name).each do |node|
|
61
|
+
enums_hash.merge!(node.xpath(node_hash.keys[0].to_s).children.text => node.xpath(node_hash.values[0]).children.text)
|
62
|
+
end
|
71
63
|
|
72
|
-
|
73
|
-
@assessment_type == "SAP" && file_name.end_with?("SAP-Domains.xsd")
|
64
|
+
enums_hash
|
74
65
|
end
|
75
66
|
end
|
76
67
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module ViewModelDomain
|
2
|
+
class XsdArguments
|
3
|
+
attr_reader :simple_type, :assessment_type, :xsd_dir_path, :gem_path, :node_hash
|
4
|
+
|
5
|
+
def initialize(simple_type:, assessment_type:, xsd_dir_path: "", gem_path: "", node_hash: nil)
|
6
|
+
@simple_type = simple_type
|
7
|
+
@assessment_type = assessment_type
|
8
|
+
@xsd_dir_path = xsd_dir_path
|
9
|
+
@gem_path = gem_path
|
10
|
+
@node_hash = node_hash
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module ViewModelGateway
|
2
|
+
class XsdFilesGateway
|
3
|
+
attr_reader :simple_type, :assessment_type, :xsd_dir_path, :glob_path
|
4
|
+
|
5
|
+
API_PATH = "api/schemas/xml/".freeze
|
6
|
+
XSD_DEFAULT_PATH = "/api/schemas/xml/**/".freeze
|
7
|
+
|
8
|
+
def initialize(domain_arguments)
|
9
|
+
@simple_type = domain_arguments.simple_type
|
10
|
+
@assessment_type = domain_arguments.assessment_type
|
11
|
+
@xsd_dir_path = domain_arguments.xsd_dir_path
|
12
|
+
@dir_path = Dir.pwd if domain_arguments.gem_path.nil? || domain_arguments.gem_path.empty?
|
13
|
+
end
|
14
|
+
|
15
|
+
def schema_version(file)
|
16
|
+
api_path_start = file.index(API_PATH) + API_PATH.length
|
17
|
+
schema_version = file[api_path_start..].split("/").first
|
18
|
+
sap_defined_in_rdsap_dir?(file) ? "#{schema_version}/SAP" : schema_version
|
19
|
+
end
|
20
|
+
|
21
|
+
def xsd_files
|
22
|
+
files = if @xsd_dir_path.nil? || @xsd_dir_path.empty?
|
23
|
+
case @assessment_type.downcase
|
24
|
+
when "sap"
|
25
|
+
sap_xsd_files
|
26
|
+
when "rdsap"
|
27
|
+
rdsap_xsd_files
|
28
|
+
when "cepc"
|
29
|
+
cepc_xsd_files
|
30
|
+
end
|
31
|
+
else
|
32
|
+
@glob_path = "#{@dir_path}#{@xsd_dir_path}"
|
33
|
+
Dir.glob(@glob_path)
|
34
|
+
end
|
35
|
+
|
36
|
+
raise ViewModelBoundary::XsdFilesNotFound, "No xsd files were found in #{@glob_path} directory" if files.nil? || files.empty?
|
37
|
+
|
38
|
+
files
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def sap_defined_in_rdsap_dir?(file)
|
44
|
+
assessment_type == "SAP" && file.end_with?("SAP-Domains.xsd")
|
45
|
+
end
|
46
|
+
|
47
|
+
def sap_xsd_files
|
48
|
+
@glob_path = "#{@dir_path + XSD_DEFAULT_PATH}*-Domains.xsd"
|
49
|
+
Dir.glob(@glob_path)
|
50
|
+
end
|
51
|
+
|
52
|
+
def rdsap_xsd_files
|
53
|
+
@glob_path = "#{@dir_path + XSD_DEFAULT_PATH}*-Domains.xsd"
|
54
|
+
Dir.glob(@glob_path)
|
55
|
+
end
|
56
|
+
|
57
|
+
def cepc_xsd_files
|
58
|
+
@glob_path = "#{@dir_path + XSD_DEFAULT_PATH}Reported-Data.xsd"
|
59
|
+
Dir.glob(@glob_path)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: epb_view_models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MHCLG Energy Performance of Buildings
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-10-
|
11
|
+
date: 2021-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -1821,6 +1821,10 @@ files:
|
|
1821
1821
|
- lib/view_model/sap_schema_ni_174/common_schema.rb
|
1822
1822
|
- lib/view_model/sap_schema_ni_1800/common_schema.rb
|
1823
1823
|
- lib/view_model/sap_wrapper.rb
|
1824
|
+
- lib/view_model_boundary/node_not_found.rb
|
1825
|
+
- lib/view_model_boundary/xsd_files_not_found.rb
|
1826
|
+
- lib/view_model_domain/xsd_arguments.rb
|
1827
|
+
- lib/view_model_gateway/xsd_files_gateway.rb
|
1824
1828
|
homepage: https://github.com/communitiesuk/epb-view-models
|
1825
1829
|
licenses:
|
1826
1830
|
- MIT
|