Class: Jekyll::Contentfyll::Importer

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll-contentfyll/importer.rb

Overview

Importer class

Entry fetching logic

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(jekyll_config) ⇒ Importer

Returns a new instance of Importer.



11
12
13
14
15
# 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

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



9
10
11
# File 'lib/jekyll-contentfyll/importer.rb', line 9

def config
  @config
end

Instance Method Details

#client(space, access_token, environment = nil, options = {}) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
# 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) ⇒ Object



30
31
32
33
34
35
# 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) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# 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

#runObject



17
18
19
20
21
22
23
24
25
26
27
28
# 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

#spacesObject



43
44
45
# File 'lib/jekyll-contentfyll/importer.rb', line 43

def spaces
  config['spaces'].map(&:first)
end

#value_for(options, key) ⇒ Object



37
38
39
40
41
# 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