epb_view_models 1.0.8 → 1.0.9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 59d79d9f281a39f02dbee9c2951c691175b3dfc89f0bf3e3f907aa3210e07e8a
4
- data.tar.gz: 648c87f4d9ad0b4f23eaf859969665ec413b4a62fd7fc621d764cd2211231eb2
3
+ metadata.gz: 94ef952761872299d77aff99b1c9ac3d82d1df98a63cd74d0520c1628475f319
4
+ data.tar.gz: 4466ab181f638cd85fc7ef943f6b78709b770a742dcd07529e708f49c3e9669f
5
5
  SHA512:
6
- metadata.gz: 40c679fd072c9fea3087edcfc7e04d289f1bf4c653c60cb2f1c25fb114aa3cbf9d4ef1d4a3ac9c17220bd6b3f876d133b29e8d58bda62acf642e6fa16eef9977
7
- data.tar.gz: a754bf7fe7e9a8fb144ae351fa1e7af1591ee572370d384a23fb857f254133c5087a313951dd77757dea1b38baaffb45c973de651a971a0f2bb941f1027ac4c3
6
+ metadata.gz: 69ceeb585c7014f6b47c4a71241d8a5120cf9dee08e41bd53f90ea3b9bf1a7b4e5b29c8dabf643060b471acee26778295c04c83a4fb6bd1000be0deff6ccb959
7
+ data.tar.gz: 3fe39ccc50a2ddff5fa2040d214b95c56554e45b8332fd5ba9aa29ed57648c7c68bdf9a1210143babd0518d777033fd0db9e8778487d4d0e477a34a4d6c0dd75
data/Gemfile CHANGED
@@ -10,5 +10,6 @@ source "https://rubygems.org" do
10
10
  end
11
11
 
12
12
  gem "nokogiri", "~> 1.11"
13
+ gem "rexml", "~> 3.2", ">= 3.2.5"
13
14
  gem "zeitwerk", "~> 2.4.2"
14
15
  end
data/Gemfile.lock CHANGED
@@ -83,6 +83,7 @@ PLATFORMS
83
83
  DEPENDENCIES
84
84
  nokogiri (~> 1.11)!
85
85
  rake (~> 13.0.6)!
86
+ rexml (~> 3.2, >= 3.2.5)!
86
87
  rspec (~> 3.0)!
87
88
  rubocop-govuk (~> 4.0.0)!
88
89
  zeitwerk (~> 2.4.2)!
@@ -5,7 +5,7 @@ loader = Zeitwerk::Loader.for_gem
5
5
  loader.setup
6
6
 
7
7
  module EpbViewModels
8
- VERSION = "1.0.8"
8
+ VERSION = "1.0.9"
9
9
  end
10
10
 
11
11
  # Monkey patching to avoid using ActiveRecord::Type::Boolean.new.cast
@@ -0,0 +1,76 @@
1
+ module Presenter
2
+ class Xsd
3
+ def initialize(assessment_type:, xsd_dir_path: "api/schemas/xml/*/")
4
+ @assessment_type = assessment_type
5
+ @xsd_dir_path = xsd_dir_path
6
+ end
7
+
8
+ def get_enums_by_type(simple_type)
9
+ hash = {}
10
+ xpath = "//xs:simpleType[@name='#{simple_type}']//xs:enumeration"
11
+ xsd_files.each do |file_name|
12
+ doc = REXML::Document.new(File.read(file_name))
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
18
+
19
+ next if enums_hash.empty?
20
+
21
+ hash[schema_version(file_name)] = enums_hash
22
+ end
23
+ hash
24
+ end
25
+
26
+ def unique_enums(simple_type)
27
+ uniq_enums = []
28
+ enums = get_enums_by_type(simple_type).values
29
+
30
+ enums.each_with_index do |_hash, i|
31
+ if i.positive? && (enums[i].to_a != enums[i + 1].to_a)
32
+ uniq_enums << enums[i]
33
+ end
34
+ end
35
+ uniq_enums
36
+ end
37
+
38
+ def variation_between_schema_versions?(enums_hash)
39
+ enums_hash.values.flatten.uniq.count != 1
40
+ end
41
+
42
+ private
43
+
44
+ def schema_version(file_name)
45
+ schema_version = file_name.delete_prefix("api/schemas/xml/").split("/").first
46
+ sap_defnied_in_rdsap_dir?(file_name) ? "#{schema_version}/SAP" : schema_version
47
+ end
48
+
49
+ def xsd_files
50
+ case @assessment_type
51
+ when "SAP"
52
+ sap_xsd_files
53
+ when "RdSAP"
54
+ rdsap_xsd_files
55
+ when "CEPC"
56
+ cepc_xsd_files
57
+ end
58
+ end
59
+
60
+ def sap_xsd_files
61
+ Dir.glob("#{@xsd_dir_path}*-Domains.xsd")
62
+ end
63
+
64
+ def rdsap_xsd_files
65
+ Dir.glob("#{@xsd_dir_path}SAP-Domains.xsd")
66
+ end
67
+
68
+ def cepc_xsd_files
69
+ Dir.glob("#{@xsd_dir_path}Reported-Data.xsd")
70
+ end
71
+
72
+ def sap_defnied_in_rdsap_dir?(file_name)
73
+ @assessment_type == "SAP" && file_name.end_with?("SAP-Domains.xsd")
74
+ end
75
+ end
76
+ 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.8
4
+ version: 1.0.9
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-09-27 00:00:00.000000000 Z
11
+ date: 2021-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -1661,6 +1661,7 @@ files:
1661
1661
  - lib/presenter/sap/recommendation_report.rb
1662
1662
  - lib/presenter/sap/report.rb
1663
1663
  - lib/presenter/sap/summary.rb
1664
+ - lib/presenter/xsd.rb
1664
1665
  - lib/view_model/ac_cert_wrapper.rb
1665
1666
  - lib/view_model/ac_report_wrapper.rb
1666
1667
  - lib/view_model/base_view_model.rb