Kentico/delivery-sdk-ruby

View on GitHub
lib/delivery/resolvers/linked_item_resolver.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Kontent
  module Ai
    module Delivery
      module Resolvers
        # Resolves a content item by its codename. It contains the modular content
        # of item/items response.
        class LinkedItemResolver
          def initialize(modular_content, content_link_url_resolver, inline_content_item_resolver)
            @modular_content = modular_content
            @content_link_url_resolver = content_link_url_resolver
            @inline_content_item_resolver = inline_content_item_resolver
            @resolved_items = {}
          end

          # Resolves a content item. If the link for a codename was resolved
          # before, it returns the same instance of ContentItem.
          #
          # * *Args*:
          #   - *codename* (+string+) Codename of the content item
          #
          # * *Return*:
          #   - Kontent::Ai::Delivery::ContentItem
          def resolve(codename)
            @resolved_items[codename] ||= resolve_item(codename)
          end

          private

          def resolve_item(codename)
            item = @modular_content.values.find { |i| i['system']['codename'] == codename }
            unless item.nil?
              return ContentItem.new(JSON.parse(JSON.generate(item)),
                                     @content_link_url_resolver,
                                     @inline_content_item_resolver,
                                     self)
            end
            nil
          end
        end
      end
    end
  end
end