Class: ContentBlockTools::ContentBlockReference
- Inherits:
-
Data
- Object
- Data
- ContentBlockTools::ContentBlockReference
- Defined in:
- lib/content_block_tools/content_block_reference.rb
Overview
Defines a reference pointer for a Content Block
Constant Summary collapse
- SUPPORTED_DOCUMENT_TYPES =
An array of the supported document types
%w[contact content_block_pension content_block_contact].freeze
- UUID_REGEX =
The regex used to find UUIDs
/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/
- CONTENT_ID_ALIAS_REGEX =
The regex used to find content ID aliases
/[a-z0-9\-–—]+/
- FIELD_REGEX =
The regex to find optional field names after the UUID, begins with ‘/’
/(\/[a-z0-9_\-–—\/]*)?/
- EMBED_REGEX =
The regex used when scanning a document using find_all_in_document
/({{embed:(#{SUPPORTED_DOCUMENT_TYPES.join('|')}):(#{UUID_REGEX}|#{CONTENT_ID_ALIAS_REGEX})#{FIELD_REGEX}}})/
Instance Attribute Summary collapse
-
#document_type ⇒ String
readonly
The document type of the content block - this will be used to work out which Presenter will be used to render the content block.
-
#embed_code ⇒ String
readonly
The embed_code used for a block.
-
#identifier ⇒ String
readonly
The identifier for a block - can be a UUID or a slug.
Class Method Summary collapse
-
.find_all_in_document(document) ⇒ Array<ContentBlockReference>
Finds all content block references within a document, using ‘ContentBlockReference::EMBED_REGEX` to scan through the document.
Instance Method Summary collapse
-
#identifier_is_alias? ⇒ Boolean
Returns if the identifier is an alias.
Instance Attribute Details
#document_type ⇒ String (readonly)
The document type of the content block - this will be used to work out which Presenter will be used to render the content block. All supported document_types are documented in SUPPORTED_DOCUMENT_TYPES
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/content_block_tools/content_block_reference.rb', line 29 class ContentBlockReference < Data # An array of the supported document types SUPPORTED_DOCUMENT_TYPES = %w[contact content_block_pension content_block_contact].freeze # The regex used to find UUIDs UUID_REGEX = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/ # The regex used to find content ID aliases CONTENT_ID_ALIAS_REGEX = /[a-z0-9\-–—]+/ # The regex to find optional field names after the UUID, begins with '/' FIELD_REGEX = /(\/[a-z0-9_\-–—\/]*)?/ # The regex used when scanning a document using {ContentBlockTools::ContentBlockReference.find_all_in_document} EMBED_REGEX = /({{embed:(#{SUPPORTED_DOCUMENT_TYPES.join('|')}):(#{UUID_REGEX}|#{CONTENT_ID_ALIAS_REGEX})#{FIELD_REGEX}}})/ # Returns if the identifier is an alias # # @return Boolean def identifier_is_alias? !identifier.match?(UUID_REGEX) end class << self # Finds all content block references within a document, using `ContentBlockReference::EMBED_REGEX` # to scan through the document # # @return [Array<ContentBlockReference>] An array of content block references def find_all_in_document(document) document.scan(ContentBlockReference::EMBED_REGEX).map do |match| match = prepare_match(match) ContentBlockTools.logger.info("Found Content Block Reference: #{match}") ContentBlockReference.new(document_type: match[1], identifier: match[2], embed_code: match[0]) end end private # This replaces an en / em dashes in content block references with double or triple dashes. This can occur # because Kramdown (the markdown parser that Govspeak is based on) replaces double dashes with en dashes and # triple dashes with em dashes def prepare_match(match) [ match[0], match[1], replace_dashes(match[2]), match[3], ] end def replace_dashes(value) value&.gsub("–", "--") &.gsub("—", "---") end end end |
#embed_code ⇒ String (readonly)
The embed_code used for a block
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/content_block_tools/content_block_reference.rb', line 29 class ContentBlockReference < Data # An array of the supported document types SUPPORTED_DOCUMENT_TYPES = %w[contact content_block_pension content_block_contact].freeze # The regex used to find UUIDs UUID_REGEX = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/ # The regex used to find content ID aliases CONTENT_ID_ALIAS_REGEX = /[a-z0-9\-–—]+/ # The regex to find optional field names after the UUID, begins with '/' FIELD_REGEX = /(\/[a-z0-9_\-–—\/]*)?/ # The regex used when scanning a document using {ContentBlockTools::ContentBlockReference.find_all_in_document} EMBED_REGEX = /({{embed:(#{SUPPORTED_DOCUMENT_TYPES.join('|')}):(#{UUID_REGEX}|#{CONTENT_ID_ALIAS_REGEX})#{FIELD_REGEX}}})/ # Returns if the identifier is an alias # # @return Boolean def identifier_is_alias? !identifier.match?(UUID_REGEX) end class << self # Finds all content block references within a document, using `ContentBlockReference::EMBED_REGEX` # to scan through the document # # @return [Array<ContentBlockReference>] An array of content block references def find_all_in_document(document) document.scan(ContentBlockReference::EMBED_REGEX).map do |match| match = prepare_match(match) ContentBlockTools.logger.info("Found Content Block Reference: #{match}") ContentBlockReference.new(document_type: match[1], identifier: match[2], embed_code: match[0]) end end private # This replaces an en / em dashes in content block references with double or triple dashes. This can occur # because Kramdown (the markdown parser that Govspeak is based on) replaces double dashes with en dashes and # triple dashes with em dashes def prepare_match(match) [ match[0], match[1], replace_dashes(match[2]), match[3], ] end def replace_dashes(value) value&.gsub("–", "--") &.gsub("—", "---") end end end |
#identifier ⇒ String (readonly)
The identifier for a block - can be a UUID or a slug. The UUID will refer to the ‘content_id` of a block within Publishing API, while the slug will refer to a block’s Content ID alias.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/content_block_tools/content_block_reference.rb', line 29 class ContentBlockReference < Data # An array of the supported document types SUPPORTED_DOCUMENT_TYPES = %w[contact content_block_pension content_block_contact].freeze # The regex used to find UUIDs UUID_REGEX = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/ # The regex used to find content ID aliases CONTENT_ID_ALIAS_REGEX = /[a-z0-9\-–—]+/ # The regex to find optional field names after the UUID, begins with '/' FIELD_REGEX = /(\/[a-z0-9_\-–—\/]*)?/ # The regex used when scanning a document using {ContentBlockTools::ContentBlockReference.find_all_in_document} EMBED_REGEX = /({{embed:(#{SUPPORTED_DOCUMENT_TYPES.join('|')}):(#{UUID_REGEX}|#{CONTENT_ID_ALIAS_REGEX})#{FIELD_REGEX}}})/ # Returns if the identifier is an alias # # @return Boolean def identifier_is_alias? !identifier.match?(UUID_REGEX) end class << self # Finds all content block references within a document, using `ContentBlockReference::EMBED_REGEX` # to scan through the document # # @return [Array<ContentBlockReference>] An array of content block references def find_all_in_document(document) document.scan(ContentBlockReference::EMBED_REGEX).map do |match| match = prepare_match(match) ContentBlockTools.logger.info("Found Content Block Reference: #{match}") ContentBlockReference.new(document_type: match[1], identifier: match[2], embed_code: match[0]) end end private # This replaces an en / em dashes in content block references with double or triple dashes. This can occur # because Kramdown (the markdown parser that Govspeak is based on) replaces double dashes with en dashes and # triple dashes with em dashes def prepare_match(match) [ match[0], match[1], replace_dashes(match[2]), match[3], ] end def replace_dashes(value) value&.gsub("–", "--") &.gsub("—", "---") end end end |
Class Method Details
.find_all_in_document(document) ⇒ Array<ContentBlockReference>
Finds all content block references within a document, using ‘ContentBlockReference::EMBED_REGEX` to scan through the document
53 54 55 56 57 58 59 |
# File 'lib/content_block_tools/content_block_reference.rb', line 53 def find_all_in_document(document) document.scan(ContentBlockReference::EMBED_REGEX).map do |match| match = prepare_match(match) ContentBlockTools.logger.info("Found Content Block Reference: #{match}") ContentBlockReference.new(document_type: match[1], identifier: match[2], embed_code: match[0]) end end |
Instance Method Details
#identifier_is_alias? ⇒ Boolean
Returns if the identifier is an alias
44 45 46 |
# File 'lib/content_block_tools/content_block_reference.rb', line 44 def identifier_is_alias? !identifier.match?(UUID_REGEX) end |