epb_view_models 1.1.0 → 1.1.1
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/accessor/domestic_recommendations_accessor.rb +50 -0
- data/lib/epb_view_models.rb +1 -1
- data/lib/presenter/rd_sap/domestic_digest.rb +0 -2
- data/lib/presenter/sap/domestic_digest.rb +1 -1
- data/lib/view_model/rd_sap_schema_200/common_schema.rb +5 -4
- data/lib/view_model/sap_schema_1800/common_schema.rb +4 -2
- data/lib/view_model/sap_schema_1900/common_schema.rb +4 -2
- data/lib/view_model/sap_schema_1910/common_schema.rb +4 -2
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55af1696774f619abfd51d7e2dc91ad38e91544f4d5054a006e3ec40bbac0670
|
4
|
+
data.tar.gz: 7c8eb84beb1d7b9e9c7c1be32cd941fe3fdbe2733c26421e11e60535ac95f172
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4aedfe8e74dc369c073b4c7a2e3b38ca7fccd8ed8407fe3166cd83191c59975f698aab5006e2ce33d744cfa8075745fe128e3bc5807b8d51a1042b5992e64cde
|
7
|
+
data.tar.gz: e86ba1d04baf7af22307a7078ba04541bbafb3630264fb65bfab25b914a89fbba4672436b49c04d296556c2de270933167382a0a90279553b2ff907e422acb9a
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require "singleton"
|
2
|
+
|
3
|
+
module Accessor
|
4
|
+
class DomesticRecommendationsAccessor
|
5
|
+
include Singleton
|
6
|
+
|
7
|
+
RecommendationDetails = Struct.new(:summary, :description, keyword_init: true)
|
8
|
+
|
9
|
+
def fetch_details(schema_version:, improvement_number:)
|
10
|
+
unless memoized_schema?(schema_version)
|
11
|
+
assessment_type = schema_version.split("-").first
|
12
|
+
is_ni = schema_version.include? "-NI-"
|
13
|
+
definitions_document = Nokogiri::XML(File.open("api/schemas/xml/#{schema_version}/#{assessment_type}/ExternalDefinitions.xml"))
|
14
|
+
sub_object = {}
|
15
|
+
country_node = definitions_document.at_xpath("//Country[Country-Code[contains(text(), '#{is_ni ? 'NIR' : 'EAW'}')]]")
|
16
|
+
recommendations = country_node.search("Recommendation")
|
17
|
+
recommendations.each do |recommendation|
|
18
|
+
sub_object[recommendation.at_css("Improvement-Number").content] = {
|
19
|
+
summary: recommendation.at_css("Improvement-Summary[language='1']").content,
|
20
|
+
description: recommendation.at_css("Improvement-Description[language='1']").content,
|
21
|
+
}
|
22
|
+
end
|
23
|
+
memoize_schema_hash(schema_version, sub_object)
|
24
|
+
end
|
25
|
+
RecommendationDetails.new(**memoized_schema(schema_version)[improvement_number])
|
26
|
+
end
|
27
|
+
|
28
|
+
def reset!
|
29
|
+
@memo = nil
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def memo
|
35
|
+
@memo ||= {}
|
36
|
+
end
|
37
|
+
|
38
|
+
def memoized_schema?(schema_version)
|
39
|
+
memo.key?(schema_version)
|
40
|
+
end
|
41
|
+
|
42
|
+
def memoize_schema_hash(schema_version, hash)
|
43
|
+
memo[schema_version] = hash
|
44
|
+
end
|
45
|
+
|
46
|
+
def memoized_schema(schema_version)
|
47
|
+
memo[schema_version]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/epb_view_models.rb
CHANGED
@@ -35,7 +35,7 @@ module Presenter
|
|
35
35
|
total_floor_area: @view_model.total_floor_area.to_s,
|
36
36
|
has_mains_gas: @view_model.mains_gas,
|
37
37
|
current_energy_efficiency_rating: @view_model.current_energy_rating,
|
38
|
-
type_of_property:
|
38
|
+
type_of_property: Helper::XmlEnumsToOutput.property_type(@view_model.property_type),
|
39
39
|
}
|
40
40
|
end
|
41
41
|
end
|
@@ -117,15 +117,16 @@ module ViewModel
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def recommendations_for_report
|
120
|
+
accessor = Accessor::DomesticRecommendationsAccessor.instance
|
120
121
|
@xml_doc
|
121
122
|
.search("Suggested-Improvements Improvement")
|
122
123
|
.map do |node|
|
124
|
+
improvement_code = xpath(%w[Improvement-Details Improvement-Number], node)
|
123
125
|
{
|
124
126
|
sequence: xpath(%w[Sequence], node).to_i,
|
125
|
-
|
126
|
-
|
127
|
-
improvement_code:
|
128
|
-
xpath(%w[Improvement-Details Improvement-Number], node),
|
127
|
+
improvement_code: xpath(%w[Improvement-Details Improvement-Number], node),
|
128
|
+
improvement_summary: improvement_code ? accessor.fetch_details(schema_version: "RdSAP-Schema-20.0.0", improvement_number: improvement_code).summary : xpath(%w[Improvement-Summary], node),
|
129
|
+
improvement_description: improvement_code ? accessor.fetch_details(schema_version: "RdSAP-Schema-20.0.0", improvement_number: improvement_code).description : xpath(%w[Improvement-Description], node),
|
129
130
|
indicative_cost: xpath(%w[Indicative-Cost], node),
|
130
131
|
}
|
131
132
|
end
|
@@ -112,13 +112,15 @@ module ViewModel
|
|
112
112
|
end
|
113
113
|
|
114
114
|
def recommendations_for_report
|
115
|
+
accessor = Accessor::DomesticRecommendationsAccessor.instance
|
115
116
|
@xml_doc
|
116
117
|
.search("Suggested-Improvements Improvement")
|
117
118
|
.map do |node|
|
119
|
+
improvement_code = xpath(%w[Improvement-Details Improvement-Number], node)
|
118
120
|
{
|
119
121
|
sequence: xpath(%w[Sequence], node).to_i,
|
120
|
-
improvement_summary: xpath(%w[Improvement-Summary], node),
|
121
|
-
improvement_description: xpath(%w[Improvement-Description], node),
|
122
|
+
improvement_summary: improvement_code ? accessor.fetch_details(schema_version: "SAP-Schema-18.0.0", improvement_number: improvement_code).summary : xpath(%w[Improvement-Summary], node),
|
123
|
+
improvement_description: improvement_code ? accessor.fetch_details(schema_version: "SAP-Schema-18.0.0", improvement_number: improvement_code).description : xpath(%w[Improvement-Description], node),
|
122
124
|
improvement_code:
|
123
125
|
xpath(%w[Improvement-Details Improvement-Number], node),
|
124
126
|
indicative_cost: xpath(%w[Indicative-Cost], node),
|
@@ -114,13 +114,15 @@ module ViewModel
|
|
114
114
|
end
|
115
115
|
|
116
116
|
def recommendations_for_report
|
117
|
+
accessor = Accessor::DomesticRecommendationsAccessor.instance
|
117
118
|
@xml_doc
|
118
119
|
.search("Suggested-Improvements Improvement")
|
119
120
|
.map do |node|
|
121
|
+
improvement_code = xpath(%w[Improvement-Details Improvement-Number], node)
|
120
122
|
{
|
121
123
|
sequence: xpath(%w[Sequence], node).to_i,
|
122
|
-
improvement_summary: xpath(%w[Improvement-Summary], node),
|
123
|
-
improvement_description: xpath(%w[Improvement-Description], node),
|
124
|
+
improvement_summary: improvement_code ? accessor.fetch_details(schema_version: "SAP-Schema-19.0.0", improvement_number: improvement_code).summary : xpath(%w[Improvement-Summary], node),
|
125
|
+
improvement_description: improvement_code ? accessor.fetch_details(schema_version: "SAP-Schema-19.0.0", improvement_number: improvement_code).description : xpath(%w[Improvement-Description], node),
|
124
126
|
improvement_code:
|
125
127
|
xpath(%w[Improvement-Details Improvement-Number], node),
|
126
128
|
indicative_cost: xpath(%w[Indicative-Cost], node),
|
@@ -114,13 +114,15 @@ module ViewModel
|
|
114
114
|
end
|
115
115
|
|
116
116
|
def recommendations_for_report
|
117
|
+
accessor = Accessor::DomesticRecommendationsAccessor.instance
|
117
118
|
@xml_doc
|
118
119
|
.search("Suggested-Improvements Improvement")
|
119
120
|
.map do |node|
|
121
|
+
improvement_code = xpath(%w[Improvement-Details Improvement-Number], node)
|
120
122
|
{
|
121
123
|
sequence: xpath(%w[Sequence], node).to_i,
|
122
|
-
improvement_summary: xpath(%w[Improvement-Summary], node),
|
123
|
-
improvement_description: xpath(%w[Improvement-Description], node),
|
124
|
+
improvement_summary: improvement_code ? accessor.fetch_details(schema_version: "SAP-Schema-19.1.0", improvement_number: improvement_code).summary : xpath(%w[Improvement-Summary], node),
|
125
|
+
improvement_description: improvement_code ? accessor.fetch_details(schema_version: "SAP-Schema-19.1.0", improvement_number: improvement_code).description : xpath(%w[Improvement-Description], node),
|
124
126
|
improvement_code:
|
125
127
|
xpath(%w[Improvement-Details Improvement-Number], node),
|
126
128
|
indicative_cost: xpath(%w[Indicative-Cost], node),
|
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.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DLUHC Energy Performance of Buildings
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -1658,6 +1658,7 @@ files:
|
|
1658
1658
|
- api/schemas/xml/examples/SAP-18.0.0.xml
|
1659
1659
|
- api/schemas/xml/examples/SAP-NI-18.0.0.xml
|
1660
1660
|
- epb_view_models.gemspec
|
1661
|
+
- lib/accessor/domestic_recommendations_accessor.rb
|
1661
1662
|
- lib/epb_view_models.rb
|
1662
1663
|
- lib/helper/ac_report_extraction.rb
|
1663
1664
|
- lib/helper/energy_band_calculator.rb
|
@@ -1883,7 +1884,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1883
1884
|
- !ruby/object:Gem::Version
|
1884
1885
|
version: '0'
|
1885
1886
|
requirements: []
|
1886
|
-
rubygems_version: 3.3.
|
1887
|
+
rubygems_version: 3.3.26
|
1887
1888
|
signing_key:
|
1888
1889
|
specification_version: 4
|
1889
1890
|
summary: Library used to parse Energy Performance Certificates (EPC)
|