class Contentful::MiddlemanPages::Extension

Constants

SOURCE_PATH

Public Class Methods

new(app, options, &block) click to toggle source
Calls superclass method
# File lib/contentful/middleman-pages/extension.rb, line 61
def initialize(app, options, &block)
  super

  @contentful_resources = []
end

Public Instance Methods

after_configuration() click to toggle source

Middleman hooks

# File lib/contentful/middleman-pages/extension.rb, line 70
def after_configuration
  massage_options
end
manipulate_resource_list(resources) click to toggle source
# File lib/contentful/middleman-pages/extension.rb, line 74
def manipulate_resource_list(resources)
  new_resources_list = resources
  @contentful_resources += options.data.map do |entry_id, entry_data|
    expanded_permalink = expand_permalink entry_data
    resource           = ::Middleman::Sitemap::Resource.new(
      @app.sitemap,
      expanded_permalink,
      options.template
    )

    resource.extend ResourceInstanceMethods
    resource.data = entry_data
    resource.add_metadata locals: entry_data

    if (index = is_existing_resource?(resource, new_resources_list))
      new_resources_list[index] = resource
    else
      new_resources_list << resource
    end

    resource
  end

  (resources + @contentful_resources).map do |resource|
     contentful_metadata   = resource.metadata.fetch(:locals).fetch(:contentful, {}.to_hashugar)
     contentful_metadata[@space_name] = {@content_type_name => @contentful_resources}.to_hashugar
     resource.add_metadata locals: {contentful: contentful_metadata}
     resource
  end

  new_resources_list
end

Private Instance Methods

apply_prefix_option() click to toggle source
# File lib/contentful/middleman-pages/extension.rb, line 108
def apply_prefix_option
  unless options.prefix.nil?
    options.template  = ::File.join(options.prefix, options.template)

    template_path = ::File.join(::File.expand_path(::Dir.pwd), SOURCE_PATH, options.template)
    app.logger.warn "contentful_pages: template not found at #{template_path}" unless ::File.exist?(template_path)

    options.permalink = ::File.join(options.prefix, options.permalink) unless options.permalink.nil?
  end
end
is_existing_resource?(resource, resources) click to toggle source
# File lib/contentful/middleman-pages/extension.rb, line 123
def is_existing_resource?(resource, resources)
  resource_id = resource.data.fetch("id")
  resources.find_index do |existing_resource|
    existing_resource.data["id"] == resource_id
  end
end
massage_data_option() click to toggle source
# File lib/contentful/middleman-pages/extension.rb, line 142
def massage_data_option
  data_option                   = options.data
  space_name, content_type_name = *data_option.split(".")

  @space_name        = space_name
  @content_type_name = content_type_name

  unless app.data[space_name] && app.data[space_name][content_type_name]
    app.logger.warn "contentful_pages: no local data for key #{data_option}"
    options.data = []
    return
  end

  options.data = app.data[space_name].fetch(content_type_name)
end
massage_options() click to toggle source
# File lib/contentful/middleman-pages/extension.rb, line 134
def massage_options
  apply_prefix_option

  massage_data_option
  massage_permalink_option
  massage_template_option
end
massage_template_option() click to toggle source
# File lib/contentful/middleman-pages/extension.rb, line 165
def massage_template_option
  # Ignore the template used to render this page. Otherwise
  # Middleman will try to render it but the resource won't have
  # the required local variables and there'll be an error
  app.ignore options.template
  options.template = ::File.join(app.source_dir, options.template)
end
uri_template() click to toggle source
# File lib/contentful/middleman-pages/extension.rb, line 130
def uri_template
  @path_template ||= super options.permalink
end