content_block_tools 0.3.1 → 0.4.1
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 +10 -0
- data/content_block_tools.gemspec +1 -1
- data/lib/content_block_tools/content_block.rb +9 -1
- data/lib/content_block_tools/content_block_reference.rb +4 -2
- data/lib/content_block_tools/presenters/base_presenter.rb +23 -1
- data/lib/content_block_tools/presenters/postal_address_presenter.rb +11 -0
- data/lib/content_block_tools/version.rb +1 -1
- data/lib/content_block_tools.rb +1 -0
- metadata +6 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18b58df1f935b54e55beaaa53766a00ba74ba07b9233459a00b82e155d13d25b
|
4
|
+
data.tar.gz: 49971e740aae00d280477c88329a73653e38ea223e412c18749fe1f493b6213f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a67d4af7d37f6c95571691356da0e3e8c463e5e01c3ea3c35b9626542eedddc5bb0bd3baa304f713095ac188380e653e567adce4473baec09d3340cacbf56197
|
7
|
+
data.tar.gz: 43ccfa780acdf748532762a00523febd21c02cecf48bef34ae1add7af8d368774f7f5c2a83aa02f98a9365a62d341953758310d65f79aee466f963813ceadcae
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,16 @@
|
|
7
7
|
useful summary for people upgrading their application, not a replication
|
8
8
|
of the commit log.
|
9
9
|
|
10
|
+
## 0.4.1
|
11
|
+
|
12
|
+
* Fix field regular expression ([18](https://github.com/alphagov/govuk_content_block_tools/pull/18))
|
13
|
+
|
14
|
+
## 0.4.0
|
15
|
+
|
16
|
+
* BREAKING: allow support for field names in block's embed code. new ContentBlocks now require an embed code argument. (
|
17
|
+
[17]
|
18
|
+
(https://github.com/alphagov/govuk_content_block_tools/pull/17))
|
19
|
+
|
10
20
|
## 0.3.1
|
11
21
|
|
12
22
|
* Support any Rails version `>= 6` ([#10](https://github.com/alphagov/govuk_content_block_tools/pull/10))
|
data/content_block_tools.gemspec
CHANGED
@@ -27,7 +27,7 @@ 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 "rubocop-govuk", "5.0.
|
30
|
+
spec.add_development_dependency "rubocop-govuk", "5.0.3"
|
31
31
|
|
32
32
|
spec.add_dependency "actionview", ">= 6"
|
33
33
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ContentBlockTools
|
2
|
-
ContentBlock = Data.define(:content_id, :title, :document_type, :details)
|
2
|
+
ContentBlock = Data.define(:content_id, :title, :document_type, :details, :embed_code)
|
3
3
|
|
4
4
|
# Defines a Content Block
|
5
5
|
#
|
@@ -33,10 +33,18 @@ module ContentBlockTools
|
|
33
33
|
# content_block.details #=> { email_address: "foo@example.com" }
|
34
34
|
# @return [Hash] the details
|
35
35
|
# @api public
|
36
|
+
#
|
37
|
+
# @!attribute [r] embed_code
|
38
|
+
# The embed_code used for a block containing optional field name
|
39
|
+
# @example
|
40
|
+
# content_block_reference.embed_code #=> "{{embed:content_block_email_address:2b92cade-549c-4449-9796-e7a3957f3a86}}"
|
41
|
+
# content_block_reference.embed_code #=> "{{embed:content_block_postal_address:2b92cade-549c-4449-9796-e7a3957f3a86/field_name}}"
|
42
|
+
# @return [String]
|
36
43
|
class ContentBlock < Data
|
37
44
|
# A lookup of presenters for particular content block types
|
38
45
|
CONTENT_PRESENTERS = {
|
39
46
|
"content_block_email_address" => ContentBlockTools::Presenters::EmailAddressPresenter,
|
47
|
+
"content_block_postal_address" => ContentBlockTools::Presenters::PostalAddressPresenter,
|
40
48
|
}.freeze
|
41
49
|
|
42
50
|
# Calls the appropriate presenter class to return a HTML representation of a content
|
@@ -26,11 +26,13 @@ module ContentBlockTools
|
|
26
26
|
# @return [String]
|
27
27
|
class ContentBlockReference < Data
|
28
28
|
# An array of the supported document types
|
29
|
-
SUPPORTED_DOCUMENT_TYPES = %w[contact content_block_email_address].freeze
|
29
|
+
SUPPORTED_DOCUMENT_TYPES = %w[contact content_block_email_address content_block_postal_address].freeze
|
30
30
|
# The regex used to find UUIDs
|
31
31
|
UUID_REGEX = /([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/
|
32
|
+
# The regex to find optional field names after the UUID, begins with '/'
|
33
|
+
FIELD_REGEX = /(\/[a-z0-9_\-\/]*)?/
|
32
34
|
# The regex used when scanning a document using {ContentBlockTools::ContentBlockReference.find_all_in_document}
|
33
|
-
EMBED_REGEX = /({{embed:(#{SUPPORTED_DOCUMENT_TYPES.join('|')}):#{UUID_REGEX}}})/
|
35
|
+
EMBED_REGEX = /({{embed:(#{SUPPORTED_DOCUMENT_TYPES.join('|')}):#{UUID_REGEX}#{FIELD_REGEX}}})/
|
34
36
|
|
35
37
|
class << self
|
36
38
|
# Finds all content block references within a document, using `ContentBlockReference::EMBED_REGEX`
|
@@ -29,21 +29,43 @@ module ContentBlockTools
|
|
29
29
|
content_block: "",
|
30
30
|
document_type: content_block.document_type,
|
31
31
|
content_id: content_block.content_id,
|
32
|
+
field_names: field_names&.join(","),
|
32
33
|
},
|
33
34
|
)
|
34
35
|
end
|
35
36
|
|
36
37
|
private
|
37
38
|
|
39
|
+
attr_reader :content_block
|
40
|
+
|
38
41
|
# The default representation of the content block - this can be overridden in a subclass
|
42
|
+
# by overriding the content, default_content or content_for_fields methods
|
39
43
|
#
|
40
44
|
# @return [string] A representation of the content block to be wrapped in the base_tag in
|
41
45
|
# {#content}
|
42
46
|
def content
|
47
|
+
if field_names.present?
|
48
|
+
content_for_fields
|
49
|
+
else
|
50
|
+
default_content
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def default_content
|
43
55
|
content_block.title
|
44
56
|
end
|
45
57
|
|
46
|
-
|
58
|
+
def content_for_fields
|
59
|
+
content_block.details.dig(*field_names)
|
60
|
+
end
|
61
|
+
|
62
|
+
def field_names
|
63
|
+
embed_code_match = ContentBlockReference::EMBED_REGEX.match(content_block.embed_code)
|
64
|
+
if embed_code_match.present?
|
65
|
+
all_fields = embed_code_match[4]&.reverse&.chomp("/")&.reverse
|
66
|
+
all_fields&.split("/")&.map(&:to_sym)
|
67
|
+
end
|
68
|
+
end
|
47
69
|
end
|
48
70
|
end
|
49
71
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module ContentBlockTools
|
2
|
+
module Presenters
|
3
|
+
class PostalAddressPresenter < BasePresenter
|
4
|
+
private
|
5
|
+
|
6
|
+
def default_content
|
7
|
+
"#{content_block.details[:line_1]}, #{content_block.details[:town_or_city]}, #{content_block.details[:postcode]}"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/lib/content_block_tools.rb
CHANGED
@@ -5,6 +5,7 @@ require "uri"
|
|
5
5
|
|
6
6
|
require "content_block_tools/presenters/base_presenter"
|
7
7
|
require "content_block_tools/presenters/email_address_presenter"
|
8
|
+
require "content_block_tools/presenters/postal_address_presenter"
|
8
9
|
|
9
10
|
require "content_block_tools/content_block"
|
10
11
|
require "content_block_tools/content_block_reference"
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: content_block_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GOV.UK Dev
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-02-06 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: rake
|
@@ -44,14 +43,14 @@ dependencies:
|
|
44
43
|
requirements:
|
45
44
|
- - '='
|
46
45
|
- !ruby/object:Gem::Version
|
47
|
-
version: 5.0.
|
46
|
+
version: 5.0.3
|
48
47
|
type: :development
|
49
48
|
prerelease: false
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
51
50
|
requirements:
|
52
51
|
- - '='
|
53
52
|
- !ruby/object:Gem::Version
|
54
|
-
version: 5.0.
|
53
|
+
version: 5.0.3
|
55
54
|
- !ruby/object:Gem::Dependency
|
56
55
|
name: actionview
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,7 +65,6 @@ dependencies:
|
|
66
65
|
- - ">="
|
67
66
|
- !ruby/object:Gem::Version
|
68
67
|
version: '6'
|
69
|
-
description:
|
70
68
|
email:
|
71
69
|
- govuk-dev@digital.cabinet-office.gov.uk
|
72
70
|
executables: []
|
@@ -94,12 +92,12 @@ files:
|
|
94
92
|
- lib/content_block_tools/content_block_reference.rb
|
95
93
|
- lib/content_block_tools/presenters/base_presenter.rb
|
96
94
|
- lib/content_block_tools/presenters/email_address_presenter.rb
|
95
|
+
- lib/content_block_tools/presenters/postal_address_presenter.rb
|
97
96
|
- lib/content_block_tools/version.rb
|
98
97
|
homepage: https://github.com/alphagov/content_block_tools
|
99
98
|
licenses:
|
100
99
|
- MIT
|
101
100
|
metadata: {}
|
102
|
-
post_install_message:
|
103
101
|
rdoc_options: []
|
104
102
|
require_paths:
|
105
103
|
- lib
|
@@ -114,8 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
112
|
- !ruby/object:Gem::Version
|
115
113
|
version: '0'
|
116
114
|
requirements: []
|
117
|
-
rubygems_version: 3.
|
118
|
-
signing_key:
|
115
|
+
rubygems_version: 3.6.3
|
119
116
|
specification_version: 4
|
120
117
|
summary: A suite of tools for working with GOV.UK Content Blocks
|
121
118
|
test_files: []
|