epb_view_models 1.1.0 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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 +8 -2
- data/lib/presenter/sap/domestic_digest.rb +9 -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: bbfe61f3dd422c63e6304d3db50ca8763c08ff397aa9beacd7bcde040b19d3b1
|
4
|
+
data.tar.gz: b3e90e80af3d5d0de7ec5946c88db890a68a4d07fce88329147d2f52fbe85314
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4ab329d35fd03b1ef595b453c68fb85c34401000eef9bb9d2ad58af7a6fa68d9b4eb850102370e524190321e54cf0b127cb611c8f0a107e9e758bdaa1a1bbd3
|
7
|
+
data.tar.gz: 6205e6087b08acaeb89f181282af4f735d0cb6a0d42d0b769d9d08984fc8c6222b636606860fb76a0bdf9b356dff26b67baa1511201e9c9fa306af20ba61e0b6
|
@@ -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
@@ -10,8 +10,6 @@ module Presenter
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def to_domestic_digest
|
13
|
-
|
14
|
-
|
15
13
|
{
|
16
14
|
type_of_assessment: TYPE_OF_ASSESSMENT,
|
17
15
|
assessment_id: @view_model.assessment_id,
|
@@ -40,7 +38,15 @@ module Presenter
|
|
40
38
|
total_floor_area: @view_model.total_floor_area.to_s,
|
41
39
|
has_mains_gas: @view_model.mains_gas,
|
42
40
|
current_energy_efficiency_rating: @view_model.current_energy_rating,
|
41
|
+
potential_energy_efficiency_rating: @view_model.potential_energy_rating,
|
43
42
|
type_of_property: Helper::XmlEnumsToOutput.property_type(@view_model.property_type),
|
43
|
+
recommended_improvements: @view_model.improvements.map do |improvement|
|
44
|
+
improvement[:energy_performance_band_improvement] =
|
45
|
+
Helper::EnergyBandCalculator.domestic(
|
46
|
+
improvement[:energy_performance_rating_improvement],
|
47
|
+
)
|
48
|
+
improvement
|
49
|
+
end,
|
44
50
|
}
|
45
51
|
end
|
46
52
|
end
|
@@ -35,7 +35,15 @@ 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
|
-
|
38
|
+
potential_energy_efficiency_rating: @view_model.potential_energy_rating,
|
39
|
+
type_of_property: Helper::XmlEnumsToOutput.property_type(@view_model.property_type),
|
40
|
+
recommended_improvements: @view_model.improvements.map do |improvement|
|
41
|
+
improvement[:energy_performance_band_improvement] =
|
42
|
+
Helper::EnergyBandCalculator.domestic(
|
43
|
+
improvement[:energy_performance_rating_improvement],
|
44
|
+
)
|
45
|
+
improvement
|
46
|
+
end,
|
39
47
|
}
|
40
48
|
end
|
41
49
|
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.2
|
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-
|
11
|
+
date: 2023-07-18 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)
|