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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb1400b5f7e348d8faa00a740a05fda91b63508dc54848597150190091497f94
4
- data.tar.gz: 8227ef648550ae4bb20ebae33ad5699ff8f35130e8541856343afd1b445c751a
3
+ metadata.gz: bbfe61f3dd422c63e6304d3db50ca8763c08ff397aa9beacd7bcde040b19d3b1
4
+ data.tar.gz: b3e90e80af3d5d0de7ec5946c88db890a68a4d07fce88329147d2f52fbe85314
5
5
  SHA512:
6
- metadata.gz: 7cbbf2d87318be4ad27d66f050d6d5ff8a3ef28148a6cc143242796aab3e607d3ecc435df445451ddd31a776a39021b750a948c9bd7a3f06ab6a195ee95a29ea
7
- data.tar.gz: 42174b098a15ba44281c3172b6bc6e438c30f06513372af3b591f1b06664b6d29593b6b0a8ba9cdc44397d797386b5edd1f29fb2ce919887e21beee89c774c62
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
@@ -5,7 +5,7 @@ loader = Zeitwerk::Loader.for_gem(warn_on_extra_files: false)
5
5
  loader.setup
6
6
 
7
7
  module EpbViewModels
8
- VERSION = "1.1.0"
8
+ VERSION = "1.1.2"
9
9
  end
10
10
 
11
11
  # Monkey patching to avoid using ActiveRecord::Type::Boolean.new.cast
@@ -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
- type_of_property: Helper::XmlEnumsToOutput.property_type(@view_model.property_type),
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
- improvement_summary: xpath(%w[Improvement-Summary], node),
126
- improvement_description: xpath(%w[Improvement-Description], node),
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.0
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-04-12 00:00:00.000000000 Z
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.7
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)