content_block_tools 0.5.4 → 0.6.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 317a33abd963522a97d5421d905b916f8c178935645081bba320b984ed0108b4
4
- data.tar.gz: 9503e913fb0c5826cfbafae81e7263351e149b44009e0bb836ac1d1dc00c8ca4
3
+ metadata.gz: c89dc222cfb30a2a3ab8263c0203fc06fb59f5c19140b49104fa76e3a55ebf76
4
+ data.tar.gz: 750d97c98bea404136dd7ab33416409cd9cb352ae587268c405c8e22236d984c
5
5
  SHA512:
6
- metadata.gz: 716b6950c8633ccc8f80eba30d685e117ce638471f9eadc5c7353e8189a2e2d0eb263e86dd4f6e340cc68d3c54b234e758fc3211ff0078e5ab0dba12c298695e
7
- data.tar.gz: '078faf1ebb791e906f33744cf8dd0f3a6a8c5355c5b2296926bc68eaccff13c931df39786ac59b5af9958fbe61b7162a9868cb50edf5afb94e4b7f33a06f39d5'
6
+ metadata.gz: ed10a2a905af5a7747f8222d2ed9c815140371651ed2e0d9082d68c4b3ac333b1f6dc7d7c20cf6f2f4bfb376ab5896143d549760cb43eb0f01a8e2dc5520f4d4
7
+ data.tar.gz: 1eb7eb43cfbcf21cddd296d4cc1dd7985cd6b3d3ceba02bf7bab78bcbc7ce4c2aee976eabd685b2f16b39b38632c224c03c2b8909c7d70e2178550aabbce7632
data/CHANGELOG.md CHANGED
@@ -7,6 +7,10 @@
7
7
  useful summary for people upgrading their application, not a replication
8
8
  of the commit log.
9
9
 
10
+ ## 0.6.0
11
+
12
+ - Support rendering nested blocks ([45](https://github.com/alphagov/govuk_content_block_tools/pull/45))
13
+
10
14
  ## 0.5.4
11
15
 
12
16
  - Remove old email_address and postal_address types ([38](https://github.com/alphagov/govuk_content_block_tools/pull/38))
@@ -10,6 +10,9 @@ module ContentBlockTools
10
10
  # A lookup of presenters for particular fields - can be overridden in a subclass
11
11
  FIELD_PRESENTERS = {}.freeze
12
12
 
13
+ # A lookup of presenters for particular blocks - can be overridden in a subclass
14
+ BLOCK_PRESENTERS = {}.freeze
15
+
13
16
  def self.has_embedded_objects(*object_types)
14
17
  @embedded_objects = object_types
15
18
 
@@ -59,26 +62,28 @@ module ContentBlockTools
59
62
  # {#content}
60
63
  def content
61
64
  ContentBlockTools.logger.info("Getting content for content block #{content_block.content_id}")
62
- if field_names.present?
63
- content_for_fields
64
- else
65
- default_content
66
- end
65
+ field_names.present? ? content_for_field_names : default_content
67
66
  end
68
67
 
69
68
  def default_content
70
69
  content_block.title
71
70
  end
72
71
 
73
- def content_for_fields
72
+ def content_for_field_names
74
73
  content = content_block.details.deep_symbolize_keys.dig(*field_names)
74
+
75
75
  if content.blank?
76
76
  ContentBlockTools.logger.warn("Content not found for content block #{content_block.content_id} and fields #{field_names}")
77
- content_block.embed_code
78
- else
79
- presenter = field_presenter || ContentBlockTools::Presenters::FieldPresenters::BasePresenter
80
- presenter.new(content).render
77
+ return content_block.embed_code
81
78
  end
79
+
80
+ presenter = if content.is_a?(Hash)
81
+ block_presenter || ContentBlockTools::Presenters::BlockPresenters::BasePresenter
82
+ else
83
+ field_presenter || ContentBlockTools::Presenters::FieldPresenters::BasePresenter
84
+ end
85
+
86
+ presenter.new(content).render
82
87
  end
83
88
 
84
89
  def field_names
@@ -95,6 +100,10 @@ module ContentBlockTools
95
100
  @field_presenter ||= field_names ? self.class::FIELD_PRESENTERS[field_names.last] : nil
96
101
  end
97
102
 
103
+ def block_presenter
104
+ @block_presenter ||= field_names ? self.class::BLOCK_PRESENTERS[field_names.first] : nil
105
+ end
106
+
98
107
  def base_tag
99
108
  field_names ? :span : self.class::BASE_TAG_TYPE
100
109
  end
@@ -9,6 +9,10 @@ module ContentBlockTools
9
9
  email_address: ContentBlockTools::Presenters::FieldPresenters::Contact::EmailAddressPresenter,
10
10
  }.freeze
11
11
 
12
+ BLOCK_PRESENTERS = {
13
+ addresses: ContentBlockTools::Presenters::BlockPresenters::Contact::AddressPresenter,
14
+ }.freeze
15
+
12
16
  has_embedded_objects :addresses, :email_addresses, :telephones, :contact_forms
13
17
 
14
18
  private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ContentBlockTools
4
- VERSION = "0.5.4"
4
+ VERSION = "0.6.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: content_block_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev