content_block_tools 0.5.0 → 0.5.2
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/CHANGELOG.md +9 -0
- data/content_block_tools.gemspec +2 -1
- data/lib/content_block_tools/content_block.rb +2 -1
- data/lib/content_block_tools/content_block_reference.rb +1 -1
- data/lib/content_block_tools/presenters/base_presenter.rb +21 -6
- data/lib/content_block_tools/presenters/contact_presenter.rb +51 -0
- data/lib/content_block_tools/presenters/email_address_presenter.rb +4 -1
- data/lib/content_block_tools/presenters/field_presenters/base_presenter.rb +20 -0
- data/lib/content_block_tools/presenters/field_presenters/contact/email_address_presenter.rb +13 -0
- data/lib/content_block_tools/version.rb +1 -1
- data/lib/content_block_tools.rb +4 -0
- metadata +20 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe6e7c2a4c34c9af7eeee0764b6021b65b0cbaf6db769b27a16119faf9775b2e
|
4
|
+
data.tar.gz: 0d5664a937d3891d536c79915861d91be62b070015bddfaab625299be7f36423
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea555fd3c90f65675e1d81925cc78a1e96643cdd69104a32628a155fef2e262596dc7263c2bbe885510f4f5467b4e64e93ff9e1c86d3fe0ba39c5e0d5bdef5e6
|
7
|
+
data.tar.gz: bc3208ed4bab8c233385f1fbf5d4f6c5170e69cd3f051c5c85b42975297053e2f222fe24446da59d9c700f00270862da2ad31639a99e512a4abff98345e456b9
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,15 @@
|
|
7
7
|
useful summary for people upgrading their application, not a replication
|
8
8
|
of the commit log.
|
9
9
|
|
10
|
+
## 0.5.2
|
11
|
+
|
12
|
+
- Use `deep_symbolize_keys` when initializing a block's details ([31](https://github.com/alphagov/govuk_content_block_tools/pull/31))
|
13
|
+
|
14
|
+
## 0.5.1
|
15
|
+
|
16
|
+
- Update dependencies
|
17
|
+
- Create a presenter for Contact Blocks ([30](https://github.com/alphagov/govuk_content_block_tools/pull/30))
|
18
|
+
|
10
19
|
## 0.5.0
|
11
20
|
|
12
21
|
- Support Content ID aliases ([27](https://github.com/alphagov/govuk_content_block_tools/pull/27))
|
data/content_block_tools.gemspec
CHANGED
@@ -27,7 +27,8 @@ Gem::Specification.new do |spec|
|
|
27
27
|
|
28
28
|
spec.add_development_dependency "rake", "13.2.1"
|
29
29
|
spec.add_development_dependency "rspec", "3.13.0"
|
30
|
-
spec.add_development_dependency "
|
30
|
+
spec.add_development_dependency "rspec-html-matchers", "0.10.0"
|
31
|
+
spec.add_development_dependency "rubocop-govuk", "5.1.6"
|
31
32
|
|
32
33
|
spec.add_dependency "actionview", ">= 6"
|
33
34
|
end
|
@@ -43,6 +43,7 @@ module ContentBlockTools
|
|
43
43
|
class ContentBlock < Data
|
44
44
|
# A lookup of presenters for particular content block types
|
45
45
|
CONTENT_PRESENTERS = {
|
46
|
+
"content_block_contact" => ContentBlockTools::Presenters::ContactPresenter,
|
46
47
|
"content_block_email_address" => ContentBlockTools::Presenters::EmailAddressPresenter,
|
47
48
|
"content_block_postal_address" => ContentBlockTools::Presenters::PostalAddressPresenter,
|
48
49
|
"content_block_pension" => ContentBlockTools::Presenters::PensionPresenter,
|
@@ -59,7 +60,7 @@ module ContentBlockTools
|
|
59
60
|
end
|
60
61
|
|
61
62
|
def details
|
62
|
-
to_h[:details].
|
63
|
+
to_h[:details].deep_symbolize_keys
|
63
64
|
end
|
64
65
|
end
|
65
66
|
end
|
@@ -28,7 +28,7 @@ module ContentBlockTools
|
|
28
28
|
# @return [String]
|
29
29
|
class ContentBlockReference < Data
|
30
30
|
# An array of the supported document types
|
31
|
-
SUPPORTED_DOCUMENT_TYPES = %w[contact content_block_email_address content_block_postal_address content_block_pension].freeze
|
31
|
+
SUPPORTED_DOCUMENT_TYPES = %w[contact content_block_email_address content_block_postal_address content_block_pension content_block_contact].freeze
|
32
32
|
# The regex used to find UUIDs
|
33
33
|
UUID_REGEX = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/
|
34
34
|
# The regex used to find content ID aliases
|
@@ -1,11 +1,15 @@
|
|
1
1
|
module ContentBlockTools
|
2
2
|
module Presenters
|
3
3
|
class BasePresenter
|
4
|
+
include ActionView::Context
|
4
5
|
include ActionView::Helpers::TagHelper
|
5
6
|
|
6
7
|
# The default HTML tag to wrap the presented response in - can be overridden in a subclass
|
7
8
|
BASE_TAG_TYPE = :span
|
8
9
|
|
10
|
+
# A lookup of presenters for particular fields - can be overridden in a subclass
|
11
|
+
FIELD_PRESENTERS = {}.freeze
|
12
|
+
|
9
13
|
# Returns a new presenter object
|
10
14
|
#
|
11
15
|
# @param [{ContentBlockTools::ContentBlock}] content_block A content block object
|
@@ -22,7 +26,7 @@ module ContentBlockTools
|
|
22
26
|
# @return [string] A HTML representation of the content block
|
23
27
|
def render
|
24
28
|
content_tag(
|
25
|
-
|
29
|
+
base_tag,
|
26
30
|
content,
|
27
31
|
class: %W[content-embed content-embed__#{content_block.document_type}],
|
28
32
|
data: {
|
@@ -62,17 +66,28 @@ module ContentBlockTools
|
|
62
66
|
ContentBlockTools.logger.warn("Content not found for content block #{content_block.content_id} and fields #{field_names}")
|
63
67
|
content_block.embed_code
|
64
68
|
else
|
65
|
-
|
69
|
+
presenter = field_presenter || ContentBlockTools::Presenters::FieldPresenters::BasePresenter
|
70
|
+
presenter.new(content).render
|
66
71
|
end
|
67
72
|
end
|
68
73
|
|
69
74
|
def field_names
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
75
|
+
@field_names ||= begin
|
76
|
+
embed_code_match = ContentBlockReference::EMBED_REGEX.match(content_block.embed_code)
|
77
|
+
if embed_code_match.present?
|
78
|
+
all_fields = embed_code_match[4]&.reverse&.chomp("/")&.reverse
|
79
|
+
all_fields&.split("/")&.map(&:to_sym)
|
80
|
+
end
|
74
81
|
end
|
75
82
|
end
|
83
|
+
|
84
|
+
def field_presenter
|
85
|
+
@field_presenter ||= field_names ? self.class::FIELD_PRESENTERS[field_names.last] : nil
|
86
|
+
end
|
87
|
+
|
88
|
+
def base_tag
|
89
|
+
field_names ? :span : self.class::BASE_TAG_TYPE
|
90
|
+
end
|
76
91
|
end
|
77
92
|
end
|
78
93
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module ContentBlockTools
|
2
|
+
module Presenters
|
3
|
+
class ContactPresenter < BasePresenter
|
4
|
+
include ActionView::Helpers::TextHelper
|
5
|
+
|
6
|
+
BASE_TAG_TYPE = :div
|
7
|
+
|
8
|
+
FIELD_PRESENTERS = {
|
9
|
+
email_address: ContentBlockTools::Presenters::FieldPresenters::Contact::EmailAddressPresenter,
|
10
|
+
}.freeze
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def default_content
|
15
|
+
content_tag(:div, class: "contact") do
|
16
|
+
concat content_tag(:p, content_block.title, class: "govuk-body")
|
17
|
+
concat(email_addresses.map { |email_address| email_address_content(email_address) }.join.html_safe) if email_addresses.any?
|
18
|
+
concat(phone_numbers.map { |phone_number| phone_number_content(phone_number) }.join.html_safe) if phone_numbers.any?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def email_address_content(email_address)
|
23
|
+
content_tag(:p, class: "govuk-body govuk-!-margin-bottom-4") do
|
24
|
+
concat content_tag(:span, email_address[:title])
|
25
|
+
concat content_tag(:a,
|
26
|
+
email_address[:email_address],
|
27
|
+
class: "govuk-link",
|
28
|
+
href: "mailto:#{email_address[:email_address]}")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def phone_number_content(phone_number)
|
33
|
+
content_tag(:p, class: "govuk-body govuk-!-margin-bottom-4") do
|
34
|
+
concat content_tag(:span, phone_number[:title])
|
35
|
+
concat content_tag(:a,
|
36
|
+
phone_number[:telephone],
|
37
|
+
class: "govuk-link",
|
38
|
+
href: "tel:#{CGI.escape phone_number[:telephone]}")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def email_addresses
|
43
|
+
content_block.details[:email_addresses]&.values
|
44
|
+
end
|
45
|
+
|
46
|
+
def phone_numbers
|
47
|
+
content_block.details[:telephones]&.values
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module ContentBlockTools
|
2
|
+
module Presenters
|
3
|
+
module FieldPresenters
|
4
|
+
class BasePresenter
|
5
|
+
include ActionView::Context
|
6
|
+
include ActionView::Helpers::TagHelper
|
7
|
+
|
8
|
+
attr_reader :field
|
9
|
+
|
10
|
+
def initialize(field)
|
11
|
+
@field = field
|
12
|
+
end
|
13
|
+
|
14
|
+
def render
|
15
|
+
field
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module ContentBlockTools
|
2
|
+
module Presenters
|
3
|
+
module FieldPresenters
|
4
|
+
module Contact
|
5
|
+
class EmailAddressPresenter < BasePresenter
|
6
|
+
def render
|
7
|
+
content_tag(:a, field, class: "govuk-link", href: "mailto:#{field}")
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/content_block_tools.rb
CHANGED
@@ -3,7 +3,11 @@
|
|
3
3
|
require "action_view"
|
4
4
|
require "uri"
|
5
5
|
|
6
|
+
require "content_block_tools/presenters/field_presenters/base_presenter"
|
7
|
+
require "content_block_tools/presenters/field_presenters/contact/email_address_presenter"
|
8
|
+
|
6
9
|
require "content_block_tools/presenters/base_presenter"
|
10
|
+
require "content_block_tools/presenters/contact_presenter"
|
7
11
|
require "content_block_tools/presenters/email_address_presenter"
|
8
12
|
require "content_block_tools/presenters/postal_address_presenter"
|
9
13
|
require "content_block_tools/presenters/pension_presenter"
|
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
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GOV.UK Dev
|
@@ -37,20 +37,34 @@ dependencies:
|
|
37
37
|
- - '='
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: 3.13.0
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: rspec-html-matchers
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - '='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.10.0
|
47
|
+
type: :development
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - '='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.10.0
|
40
54
|
- !ruby/object:Gem::Dependency
|
41
55
|
name: rubocop-govuk
|
42
56
|
requirement: !ruby/object:Gem::Requirement
|
43
57
|
requirements:
|
44
58
|
- - '='
|
45
59
|
- !ruby/object:Gem::Version
|
46
|
-
version: 5.1.
|
60
|
+
version: 5.1.6
|
47
61
|
type: :development
|
48
62
|
prerelease: false
|
49
63
|
version_requirements: !ruby/object:Gem::Requirement
|
50
64
|
requirements:
|
51
65
|
- - '='
|
52
66
|
- !ruby/object:Gem::Version
|
53
|
-
version: 5.1.
|
67
|
+
version: 5.1.6
|
54
68
|
- !ruby/object:Gem::Dependency
|
55
69
|
name: actionview
|
56
70
|
requirement: !ruby/object:Gem::Requirement
|
@@ -92,7 +106,10 @@ files:
|
|
92
106
|
- lib/content_block_tools/content_block.rb
|
93
107
|
- lib/content_block_tools/content_block_reference.rb
|
94
108
|
- lib/content_block_tools/presenters/base_presenter.rb
|
109
|
+
- lib/content_block_tools/presenters/contact_presenter.rb
|
95
110
|
- lib/content_block_tools/presenters/email_address_presenter.rb
|
111
|
+
- lib/content_block_tools/presenters/field_presenters/base_presenter.rb
|
112
|
+
- lib/content_block_tools/presenters/field_presenters/contact/email_address_presenter.rb
|
96
113
|
- lib/content_block_tools/presenters/pension_presenter.rb
|
97
114
|
- lib/content_block_tools/presenters/postal_address_presenter.rb
|
98
115
|
- lib/content_block_tools/version.rb
|