content_block_tools 0.3.0 → 0.4.0

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: c5a8912c68bece449eed300679bcf0d45af28c4f92924c55122bd899efdbfbd5
4
- data.tar.gz: 79c6081a7b9c0b65a51c01c60522d92188cc16c4c6dd66120948d1fce1b09f4a
3
+ metadata.gz: 9d0b492495818ff1ae3a52098b3386bb9f5665fa2c8aca6b260d244305d9f8d6
4
+ data.tar.gz: 4c67d72795c6345aab7619d81213293c537a7d95bb7b8fa015f8c6d1d1ff6ca0
5
5
  SHA512:
6
- metadata.gz: ab9ccde7803fbd1d862c860e220c90cc2db9476dc2fd3bc8091fa821babe0928bd4e6e090093e04908afaaca0f3feeec0bf9ba61cf2849c70976d9cd4bd7616b
7
- data.tar.gz: b5a1d3a0e79ac3241b39d85d2c4e44798485f844e71ec83cbc8e284e3d7d9b83e84ae98baf709f7f614636fc60cf13dddf7c8d9daf5a5391eea88074a13030a6
6
+ metadata.gz: 68ea93d11e33b68f51c0a4893d95266cf46fcf09ab5faaff2487a83ee40c4790045610f9d055a21da9bb7d59cf266b36c9b35b397f5bbec393b6bf9778e364db
7
+ data.tar.gz: 9dae479a604a0be374db8bd8267e62c231c00e4f2da39e20d7e60de9131d7580fe4035bd1518fe9b4a94ebb6f2ed25315dc86872b9241e2f76884cd3d539ab9e
@@ -6,5 +6,7 @@ on:
6
6
  jobs:
7
7
  autorelease:
8
8
  uses: alphagov/govuk-infrastructure/.github/workflows/autorelease-rubygem.yml@main
9
+ with:
10
+ gem_name: content_block_tools
9
11
  secrets:
10
12
  GH_TOKEN: ${{ secrets.GOVUK_CI_GITHUB_API_TOKEN }}
@@ -40,5 +40,7 @@ jobs:
40
40
  permissions:
41
41
  contents: write
42
42
  uses: alphagov/govuk-infrastructure/.github/workflows/publish-rubygem.yml@main
43
+ with:
44
+ gem_name: content_block_tools
43
45
  secrets:
44
46
  GEM_HOST_API_KEY: ${{ secrets.ALPHAGOV_RUBYGEMS_API_KEY }}
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.0
11
+
12
+ * BREAKING: allow support for field names in block's embed code. new ContentBlocks now require an embed code argument. (
13
+ [17]
14
+ (https://github.com/alphagov/govuk_content_block_tools/pull/17))
15
+
16
+ ## 0.3.1
17
+
18
+ * Support any Rails version `>= 6` ([#10](https://github.com/alphagov/govuk_content_block_tools/pull/10))
19
+
10
20
  ## 0.3.0
11
21
 
12
22
  * Symbolise details hash ([#8](https://github.com/alphagov/content_block_tools/pull/8))
@@ -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.2"
30
+ spec.add_development_dependency "rubocop-govuk", "5.0.3"
31
31
 
32
- spec.add_dependency "actionview", ">= 6", "< 7.2.2"
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 = /(\/.*)?/
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
- attr_reader :content_block
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ContentBlockTools
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.0"
5
5
  end
@@ -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.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-11-20 00:00:00.000000000 Z
10
+ date: 2025-02-04 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.2
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.2
53
+ version: 5.0.3
55
54
  - !ruby/object:Gem::Dependency
56
55
  name: actionview
57
56
  requirement: !ruby/object:Gem::Requirement
@@ -59,9 +58,6 @@ dependencies:
59
58
  - - ">="
60
59
  - !ruby/object:Gem::Version
61
60
  version: '6'
62
- - - "<"
63
- - !ruby/object:Gem::Version
64
- version: 7.2.2
65
61
  type: :runtime
66
62
  prerelease: false
67
63
  version_requirements: !ruby/object:Gem::Requirement
@@ -69,10 +65,6 @@ dependencies:
69
65
  - - ">="
70
66
  - !ruby/object:Gem::Version
71
67
  version: '6'
72
- - - "<"
73
- - !ruby/object:Gem::Version
74
- version: 7.2.2
75
- description:
76
68
  email:
77
69
  - govuk-dev@digital.cabinet-office.gov.uk
78
70
  executables: []
@@ -100,12 +92,12 @@ files:
100
92
  - lib/content_block_tools/content_block_reference.rb
101
93
  - lib/content_block_tools/presenters/base_presenter.rb
102
94
  - lib/content_block_tools/presenters/email_address_presenter.rb
95
+ - lib/content_block_tools/presenters/postal_address_presenter.rb
103
96
  - lib/content_block_tools/version.rb
104
97
  homepage: https://github.com/alphagov/content_block_tools
105
98
  licenses:
106
99
  - MIT
107
100
  metadata: {}
108
- post_install_message:
109
101
  rdoc_options: []
110
102
  require_paths:
111
103
  - lib
@@ -120,8 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
112
  - !ruby/object:Gem::Version
121
113
  version: '0'
122
114
  requirements: []
123
- rubygems_version: 3.5.23
124
- signing_key:
115
+ rubygems_version: 3.6.3
125
116
  specification_version: 4
126
117
  summary: A suite of tools for working with GOV.UK Content Blocks
127
118
  test_files: []