class Kentico::Kontent::Delivery::ContentItem

Attributes

inline_content_item_resolver[RW]

Public Class Methods

new(source, content_link_url_resolver, inline_content_item_resolver, linked_items_resolver) click to toggle source

Constructor.

# File lib/delivery/models/content_item.rb, line 42
def initialize(source, content_link_url_resolver, inline_content_item_resolver, linked_items_resolver)
  @source =
    if source['item'].nil?
      source
    else
      source['item']
    end
  @linked_items_resolver = linked_items_resolver
  self.content_link_url_resolver = content_link_url_resolver
  self.inline_content_item_resolver = inline_content_item_resolver
end

Public Instance Methods

elements() click to toggle source

Parses the 'elements' JSON object as a dynamic OpenStruct object.

  • Returns:

    • OpenStruct The elements of the content item

# File lib/delivery/models/content_item.rb, line 15
def elements
  @elements unless @elements.nil?
  @elements = JSON.parse(
    JSON.generate(@source['elements']),
    object_class: OpenStruct
  )
end
get_assets(code_name) click to toggle source

Returns an array of assets inserted into the specified element of the 'asset' type.

  • Args:

    • code_name (string) The code name of the desired element

  • Returns:

    • Array The element's assets parsed as OpenStruct objects

# File lib/delivery/models/content_item.rb, line 84
def get_assets(code_name)
  element = get_element code_name
  element['value'].map { |n| OpenStruct.new(n) }
end
get_inline_items(code_name) click to toggle source

Returns an array of ContentItems that are inserted as inline content items or componenets of a 'rich_text' element.

  • Args:

    • code_name (string) The code name of the desired element

  • Returns:

    • Array The element's inline content items parsed as ContentItem objects

# File lib/delivery/models/content_item.rb, line 110
def get_inline_items(code_name)
  element = get_element code_name
  get_linked_items element['modular_content']
end
get_string(code_name) click to toggle source

Gets a string representation of the data stored in the element. Using this method instead of directly accessing the elements collection causes the content to be resolved using the resolvers passed during instantiation. See github.com/Kentico/kontent-delivery-sdk-ruby#resolving-links

  • Args:

    • code_name (string) The code name of the desired element

  • Returns:

    • string The data converted to a string, resolved if the element is a 'rich_text' element

# File lib/delivery/models/content_item.rb, line 64
def get_string(code_name)
  element = get_element code_name
  content = element['value']

  if element['type'] == 'rich_text'
    content = content_link_url_resolver.resolve content, element['links'] if should_resolve_links element
    inline_items = get_inline_items code_name
    content = inline_content_item_resolver.resolve content, inline_items if should_resolve_inline_content element
  end
  content.to_s
end
system() click to toggle source

Parses the 'system' JSON object as a dynamic OpenStruct object.

  • Returns:

    • OpenStruct The system properties of the content item

# File lib/delivery/models/content_item.rb, line 27
def system
  @system unless @system.nil?
  @system = JSON.parse(
    JSON.generate(@source['system']),
    object_class: OpenStruct
  )
end

Private Instance Methods

get_element(code_name) click to toggle source

Gets the JSON object from the 'elements' collection with the specified key

  • Args:

    • code_name (string, symbol) The code name or symbol of the desired element

  • Returns:

    • JSON The element as a JSON object

  • Raises:

    • ArgumentError if code_name is nil

# File lib/delivery/models/content_item.rb, line 135
def get_element(code_name)
  raise ArgumentError, "Argument 'code_name' cannot be null" if code_name.nil?

  code_name = code_name.to_s if code_name.is_a? Symbol
  @source['elements'][code_name]
end
get_linked_items(codenames) click to toggle source
# File lib/delivery/models/content_item.rb, line 142
def get_linked_items(codenames)
  return [] unless codenames.class == Array

  codenames.each_with_object([]) do |codename, items|
    item = @linked_items_resolver.resolve codename
    items << item if item
  end
end
should_resolve_inline_content(element) click to toggle source
# File lib/delivery/models/content_item.rb, line 121
def should_resolve_inline_content(element)
  !element['modular_content'].nil? && !inline_content_item_resolver.nil?
end