lib/contentful/sync.rb in contentful-0.8.0 vs lib/contentful/sync.rb in contentful-0.9.0
- old
+ new
@@ -2,67 +2,78 @@
require_relative 'deleted_entry'
require_relative 'deleted_asset'
require_relative 'sync_page'
module Contentful
+ # Resource class for Sync.
+ # @see _ https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/synchronization
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)
+ #
+ # @note Please Keep in Mind: Iterating fires a new request for each page
+ #
+ # @yield [Contentful::SyncPage]
+ def each_page
page = first_page
- block.call(page)
+ yield page if block_given?
until completed?
page = page.next_page
- block.call(page)
+ yield page if block_given?
end
end
# Returns the first sync result page
+ #
+ # @return [Contentful::SyncPage]
def first_page
get(@first_page_options_or_url)
end
# Returns false as long as last sync page has not been reached
+ #
+ # @return [Boolean]
def completed?
+ # rubocop:disable Style/DoubleNegation
!!next_sync_url
+ # rubocop:enable Style/DoubleNegation
end
# Directly iterates over all resources that have changed
+ #
+ # @yield [Contentful::Entry, Contentful::Asset]
def each_item(&block)
each_page do |page|
- page.each_item do |item|
- block.call item
- end
+ page.each_item(&block)
end
end
+ # @private
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
+ page = fetch_page(options_or_url)
- if @client.configuration[:raw_mode]
- return page
- end
+ return page if @client.configuration[:raw_mode]
link_page_to_sync! page
update_sync_state_from! page
page
end
private
+
+ def fetch_page(options_or_url)
+ return Request.new(@client, options_or_url).get if options_or_url.is_a? String
+ Request.new(@client, '/sync', options_or_url).get
+ end
def link_page_to_sync!(page)
page.instance_variable_set :@sync, self
end