Sha256: 37c5b3acb5fc08821ca7b09f3f786b71a340a28e03213c9ddcf2f3db1e5723f9

Contents?: true

Size: 1.59 KB

Versions: 2

Compression:

Stored size: 1.59 KB

Contents

require_relative 'resource_builder'
require_relative 'deleted_entry'
require_relative 'deleted_asset'
require_relative 'sync_page'

module Contentful
  class Sync
    attr_reader :next_sync_url

    def initialize(client, options_or_url)
      @client = client
      @next_sync_url = nil
      @first_page_options_or_url = options_or_url
    end

    # Iterates over all pages of the current sync
    # Please Keep in Mind: Iterating fires a new request for each page
    def each_page(&block)
      page = first_page
      block.call(page)

      until completed?
        page = page.next_page
        block.call(page)
      end
    end

    # Returns the first sync result page
    def first_page
      get(@first_page_options_or_url)
    end

    # Returns false as long as last sync page has not been reached
    def completed?
      !!next_sync_url
    end

    # Directly iterates over all resources that have changed
    def each_item(&block)
      each_page do |page|
        page.each_item do |item|
          block.call item
        end
      end
    end

    def get(options_or_url)
      if options_or_url.is_a? String
        page = Request.new(@client, options_or_url).get
      else
        page = Request.new(@client, '/sync', options_or_url).get
      end

      if @client.configuration[:raw_mode]
        return page
      end

      link_page_to_sync! page
      update_sync_state_from! page

      page
    end

    private

    def link_page_to_sync!(page)
      page.instance_variable_set :@sync, self
    end

    def update_sync_state_from!(page)
      @next_sync_url = page.next_sync_url
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
contentful-0.8.0 lib/contentful/sync.rb
contentful-0.7.0 lib/contentful/sync.rb