class Jekyll::Contentfyll::Importer

Importer class

Entry fetching logic

Attributes

config[R]

Public Class Methods

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

end

Public Instance Methods

client(space, access_token, environment = nil, options = {}) click to toggle source
# File lib/jekyll-contentfyll/importer.rb, line 73
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::Contentfyll::VERSION
  }.merge(options)

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

  Jekyll.logger.info "Number of entries:"
  Jekyll.logger.info entries.length
end
get_entries(space_client, options) click to toggle source
# File lib/jekyll-contentfyll/importer.rb, line 47
def get_entries(space_client, options)
  cda_query = options.fetch('cda_query', {})
  Jekyll.logger.info options
  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)

  Jekyll.logger.info num_entries
  Jekyll.logger.info page_size
  Jekyll.logger.info query

  ((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-contentfyll/importer.rb, line 17
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-contentfyll/importer.rb, line 43
def spaces
  config['spaces'].map(&:first)
end
value_for(options, key) click to toggle source
# File lib/jekyll-contentfyll/importer.rb, line 37
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

client_options(options) click to toggle source
# File lib/jekyll-contentfyll/importer.rb, line 89
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