Sha256: fad20d68214c411a4ff24c1100fb57d281a3eabb05bf9fd76e2bfa44813b5c70

Contents?: true

Size: 1.5 KB

Versions: 3

Compression:

Stored size: 1.5 KB

Contents

module Kentico
  module Kontent
    module Resolvers
      ##
      # This class resolve the filename of the page.
      # If no user-defined resolver was provided or it returned nil
      # then content will be resolved in a default way.

      class FilenameResolver
        def initialize(global_config)
          @global_config = global_config
        end

        def execute(content_item)
          filename = custom_resolver && custom_resolver.resolve(content_item)
          filename || resolve_internal(content_item)
        end

        private

        ##
        # User-provided provided resolver is instantiated based on the name from configuration.

        def custom_resolver
          return @custom_resolver if @custom_resolver

          resolver_name = @global_config.filename_resolver
          return unless resolver_name

          @custom_resolver = Module.const_get(resolver_name).new
        end

        ##
        # Internal resolver will try to locate the url slug element and return its value.
        # If no slug was present then the item's codename will be used as the filename.

        def resolve_internal(content_item)
          url_slug = get_url_slug(content_item)
          url_slug&.value || content_item.system.codename
        end

        def get_url_slug(item)
          item.elements.each_pair { |_codename, element| return element if slug?(element) }
        end

        def slug?(element)
          element.type == Constants::ItemElementType::URL_SLUG
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
kontent-jekyll-1.0.0 lib/kontent-jekyll/resolvers/filename_resolver.rb
kontent-jekyll-0.12.0 lib/kontent-jekyll/resolvers/filename_resolver.rb
kontent-jekyll-0.11.2 lib/kontent-jekyll/resolvers/filename_resolver.rb