Sha256: 4268b09a5796641e04bc966e77bf637e4601f074dc651700a44864904b330db8

Contents?: true

Size: 1.79 KB

Versions: 3

Compression:

Stored size: 1.79 KB

Contents

module ContentfulMiddleman
  class Instance
    API_PREVIEW_URL = 'preview.contentful.com'

    def initialize(extension)
      @extension = extension
    end

    def entries
      if options.all_entries
        all_entries(options.cda_query)
      else
        client.entries(options.cda_query)
      end
    end

    def space_name
      @space_name ||= options.space.fetch(:name)
    end

    def content_types_ids_to_mappers
      @content_types_mappers ||= options.content_types.reduce({}) do |acc, (content_type_id, config)|
        content_type_mapper  = config.fetch(:mapper)
        acc[content_type_id] = content_type_mapper
        acc
      end
    end

    def content_types_ids_to_names
      @content_types_names ||= options.content_types.reduce({}) do |acc, (content_type_id, config)|
        content_type_name    = config.fetch(:name)
        acc[content_type_id] = content_type_name
        acc
      end
    end

    def options
      @extension.options
    end

    private

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

      ((num_entries / 1000) + 1).times do |i|
        query[:limit] = 1000
        query[:skip] = i * 1000
        page = client.entries(query)
        page.each { |entry| all << entry }
      end

      all
    end

    def client
      @client ||= Contentful::Client.new(client_options)
    end

    def client_options
      client_options = {
          access_token:     options.access_token,
          space:            options.space.fetch(:id),
          dynamic_entries:  :auto,
          raise_errors:     true
      }

      client_options[:api_url] = API_PREVIEW_URL if options.use_preview_api
      client_options
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
contentful_middleman-1.3.2 lib/contentful_middleman/instance.rb
contentful_middleman-1.3.1 lib/contentful_middleman/instance.rb
contentful_middleman-1.2.0 lib/contentful_middleman/instance.rb