class Jekyll::Contentful::Importer

Importer class

Entry fetching logic

Attributes

config[R]

Public Class Methods

new(jekyll_config) click to toggle source
# File lib/jekyll-contentful-data-import/importer.rb, line 13
def initialize(jekyll_config)
  @jekyll_config = jekyll_config
  @config = jekyll_config.key?('contentful') ? jekyll_config['contentful'] : jekyll_config

  autoload_mappers!
end

Public Instance Methods

client(space, access_token, environment = nil, options = {}) click to toggle source
# File lib/jekyll-contentful-data-import/importer.rb, line 97
def client(space, access_token, environment = nil, options = {})
  options = {
    space: space,
    access_token: access_token,
    environment: environment || 'master',
    dynamic_entries: :auto,
    raise_errors: true,
    integration_name: 'jekyll',
    integration_version: Jekyll::Contentful::VERSION
  }.merge(options)

  ::Contentful::Client.new(options)
end
export_data(name, space_client, options) click to toggle source
# File lib/jekyll-contentful-data-import/importer.rb, line 33
def export_data(name, space_client, options)
  entries = get_entries(space_client, options)

  if options.fetch('individual_entry_files', false)
    export_data_multiple_files(
      name,
      entries,
      options
    )
  else
    export_data_single_file(
      name,
      entries,
      options
    )
  end
end
export_data_multiple_files(name, entries, options) click to toggle source
# File lib/jekyll-contentful-data-import/importer.rb, line 59
def export_data_multiple_files(name, entries, options)
  Jekyll::Contentful::MultiFileDataExporter.new(
    name,
    entries,
    options
  ).run
end
export_data_single_file(name, entries, options) click to toggle source
# File lib/jekyll-contentful-data-import/importer.rb, line 51
def export_data_single_file(name, entries, options)
  Jekyll::Contentful::SingleFileDataExporter.new(
    name,
    entries,
    options
  ).run
end
get_entries(space_client, options) click to toggle source
# File lib/jekyll-contentful-data-import/importer.rb, line 77
def get_entries(space_client, options)
  cda_query = options.fetch('cda_query', {})
  return space_client.entries(cda_query) unless options.fetch('all_entries', false)

  all = []
  query = cda_query.clone
  query[:order] = 'sys.createdAt' unless query.key?(:order)
  num_entries = space_client.entries(limit: 1).total

  page_size = options.fetch('all_entries_page_size', 1000)
  ((num_entries / page_size) + 1).times do |i|
    query[:limit] = page_size
    query[:skip] = i * page_size
    page = space_client.entries(query)
    page.each { |entry| all << entry }
  end

  all
end
run() click to toggle source
# File lib/jekyll-contentful-data-import/importer.rb, line 20
def run
  spaces.each do |name, options|
    space_client = client(
      value_for(options, 'space'),
      value_for(options, 'access_token'),
      value_for(options, 'environment'),
      client_options(options.fetch('client_options', {}))
    )

    export_data(name, space_client, options)
  end
end
spaces() click to toggle source
# File lib/jekyll-contentful-data-import/importer.rb, line 73
def spaces
  config['spaces'].map(&:first)
end
value_for(options, key) click to toggle source
# File lib/jekyll-contentful-data-import/importer.rb, line 67
def value_for(options, key)
  potential_value = options[key]
  return ENV[potential_value.gsub('ENV_', '')] if !potential_value.nil? && potential_value.start_with?('ENV_')
  potential_value
end

Private Instance Methods

autoload_mappers!() click to toggle source
# File lib/jekyll-contentful-data-import/importer.rb, line 124
def autoload_mappers!
  mapper_search_path = File.join(@jekyll_config['source'], @jekyll_config['plugins_dir'], 'mappers')
  mapper_files = Jekyll::Utils.safe_glob(mapper_search_path, File.join('**', '*.rb'))
  Jekyll::External.require_with_graceful_fail(mapper_files)
rescue StandardError
  Jekyll.logger.debug "Couldn't find custom mappers"
end
client_options(options) click to toggle source
# File lib/jekyll-contentful-data-import/importer.rb, line 113
def client_options(options)
  options = options.each_with_object({}) do |(k, v), memo|
    memo[k.to_sym] = v
    memo
  end

  options.delete(:dynamic_entries)
  options.delete(:raise_errors)
  options
end