epb_view_models 1.1.0 → 1.1.1

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: 55af1696774f619abfd51d7e2dc91ad38e91544f4d5054a006e3ec40bbac0670
4
+ data.tar.gz: 7c8eb84beb1d7b9e9c7c1be32cd941fe3fdbe2733c26421e11e60535ac95f172
5
5
  SHA512:
6
- metadata.gz: 7cbbf2d87318be4ad27d66f050d6d5ff8a3ef28148a6cc143242796aab3e607d3ecc435df445451ddd31a776a39021b750a948c9bd7a3f06ab6a195ee95a29ea
7
- data.tar.gz: 42174b098a15ba44281c3172b6bc6e438c30f06513372af3b591f1b06664b6d29593b6b0a8ba9cdc44397d797386b5edd1f29fb2ce919887e21beee89c774c62
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
@@ -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.1"
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,
@@ -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: Helper::XmlEnumsToOutput.property_type(@view_model.property_type),
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
- 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.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-12 00:00:00.000000000 Z
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.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)