epb_view_models 1.0.8 → 1.0.9

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: 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