class Contentful::Scheduler::Queue
Attributes
config[R]
logger[R]
Public Class Methods
instance(logger = ::Contentful::Webhook::Listener::Support::NullLogger.new)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 12 def self.instance(logger = ::Contentful::Webhook::Listener::Support::NullLogger.new) @@instance ||= new(logger) end
new(logger)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 231 def initialize(logger) @config = ::Contentful::Scheduler.config @logger = logger end
Public Instance Methods
getPublishOrUnpublishDate(webhook, type)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 201 def getPublishOrUnpublishDate(webhook, type) if type == 'publish' publish_date(webhook) else unpublish_date(webhook) end end
getScheduleType(type)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 193 def getScheduleType(type) if type == 'publish' ::Contentful::Scheduler::Tasks::Publish else ::Contentful::Scheduler::Tasks::Unpublish end end
in_publish_queue?(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 132 def in_publish_queue?(webhook) Resque.peek(::Contentful::Scheduler::Tasks::Publish, 0, -1).any? do |job| job['args'][0] == webhook.space_id && job['args'][1] == webhook.id end end
in_unpublish_queue?(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 138 def in_unpublish_queue?(webhook) Resque.peek(::Contentful::Scheduler::Tasks::Unpublish, 0, -1).any? do |job| job['args'][0] == webhook.space_id && job['args'][1] == webhook.id end end
isContentBlockAvailable(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 101 def isContentBlockAvailable(webhook) return !webhook.fields['contentBlocks'].nil? end
log_event_success(webhook, success, event_kind, action)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 93 def log_event_success(webhook, success, event_kind, action) if success logger.info "Webhook {id: #{webhook.id}, space_id: #{webhook.space_id}} successfully #{action} the #{event_kind} queue" else logger.warn "Webhook {id: #{webhook.id}, space_id: #{webhook.space_id}} couldn't be #{action} the #{event_kind} queue" end end
publish_date(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 144 def publish_date(webhook) date_field = webhook_publish_field(webhook) date_field = date_field[date_field.keys[0]] if date_field.is_a? Hash Chronic.parse(date_field).utc end
publish_is_future?(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 124 def publish_is_future?(webhook) publish_date(webhook) > Time.now.utc end
publishable?(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 105 def publishable?(webhook) return false unless spaces.key?(webhook.space_id) if webhook_publish_field?(webhook) return !webhook_publish_field(webhook).nil? && publish_is_future?(webhook) end false end
remove(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 56 def remove(webhook) remove_publish(webhook) remove_unpublish(webhook) end
removeContentBlocks(webhook, type)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 175 def removeContentBlocks(webhook, type) if isContentBlockAvailable(webhook) webhook.fields['contentBlocks']['fi-FI'].each do |sys| success = Resque.remove_delayed( getScheduleType(type), webhook.space_id, sys['sys']['id'], ::Contentful::Scheduler.config[:management_token] ) if success logger.info "Webhook Content Block {id: #{sys['sys']['id']}, space_id: #{webhook.space_id}} successfully removed from " + type + " queue" else logger.warn "Webhook Content Block {id: #{sys['sys']['id']}, space_id: #{webhook.space_id}} couldn't be removed from " + type + " queue" end end end end
remove_publish(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 61 def remove_publish(webhook) return unless publishable?(webhook) return unless in_publish_queue?(webhook) success = Resque.remove_delayed( ::Contentful::Scheduler::Tasks::Publish, webhook.space_id, webhook.id, ::Contentful::Scheduler.config[:management_token] ) removeContentBlocks(webhook, 'publish') log_event_success(webhook, success, 'publish', 'removed from') end
remove_unpublish(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 77 def remove_unpublish(webhook) return unless unpublishable?(webhook) return unless in_unpublish_queue?(webhook) success = Resque.remove_delayed( ::Contentful::Scheduler::Tasks::Unpublish, webhook.space_id, webhook.id, ::Contentful::Scheduler.config[:management_token] ) removeContentBlocks(webhook, 'unpublish') log_event_success(webhook, success, 'unpublish', 'removed from') end
spaces()
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 209 def spaces config[:spaces] end
unpublish_date(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 150 def unpublish_date(webhook) date_field = webhook_unpublish_field(webhook) date_field = date_field[date_field.keys[0]] if date_field.is_a? Hash Chronic.parse(date_field).utc end
unpublish_is_future?(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 128 def unpublish_is_future?(webhook) unpublish_date(webhook) > Time.now.utc end
unpublishable?(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 115 def unpublishable?(webhook) return false unless spaces.key?(webhook.space_id) if webhook_unpublish_field?(webhook) return !webhook_unpublish_field(webhook).nil? && unpublish_is_future?(webhook) end false end
updateContentBlocks(webhook, type)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 156 def updateContentBlocks(webhook, type) if isContentBlockAvailable(webhook) webhook.fields['contentBlocks']['fi-FI'].each do |sys| success = Resque.enqueue_at( getPublishOrUnpublishDate(webhook, type), getScheduleType(type), webhook.space_id, sys['sys']['id'], ::Contentful::Scheduler.config[:spaces][webhook.space_id][:management_token] ) if success logger.info "Webhook Content block {id: #{sys['sys']['id']}, space_id: #{webhook.space_id}} successfully added to " + type + " queue" else logger.warn "Webhook Content block {id: #{sys['sys']['id']}, space_id: #{webhook.space_id}} couldn't be added to " + type + " queue" end end end end
update_or_create(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 16 def update_or_create(webhook) if publishable?(webhook) successPublish = update_or_create_for_publish(webhook) updateContentBlocks(webhook, 'publish') log_event_success(webhook, successPublish, 'publish', 'added to') end if unpublishable?(webhook) successUnpublish = update_or_create_for_unpublish(webhook) updateContentBlocks(webhook, 'unpublish') log_event_success(webhook, successUnpublish, 'unpublish', 'added to') end end
update_or_create_for_publish(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 30 def update_or_create_for_publish(webhook) remove_publish(webhook) if in_publish_queue?(webhook) return false unless publish_is_future?(webhook) return Resque.enqueue_at( publish_date(webhook), ::Contentful::Scheduler::Tasks::Publish, webhook.space_id, webhook.id, ::Contentful::Scheduler.config[:spaces][webhook.space_id][:management_token] ) end
update_or_create_for_unpublish(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 43 def update_or_create_for_unpublish(webhook) remove_unpublish(webhook) if in_unpublish_queue?(webhook) return false unless unpublish_is_future?(webhook) return Resque.enqueue_at( unpublish_date(webhook), ::Contentful::Scheduler::Tasks::Unpublish, webhook.space_id, webhook.id, ::Contentful::Scheduler.config[:spaces][webhook.space_id][:management_token] ) end
webhook_publish_field(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 221 def webhook_publish_field(webhook) webhook.fields[spaces[webhook.space_id][:publish_field]] end
webhook_publish_field?(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 213 def webhook_publish_field?(webhook) webhook.fields.key?(spaces.fetch(webhook.space_id, {})[:publish_field]) if webhook.respond_to?(:fields) end
webhook_unpublish_field(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 225 def webhook_unpublish_field(webhook) webhook.fields[spaces[webhook.space_id][:unpublish_field]] end
webhook_unpublish_field?(webhook)
click to toggle source
# File lib/contentful/scheduler/queue.rb, line 217 def webhook_unpublish_field?(webhook) webhook.fields.key?(spaces.fetch(webhook.space_id, {})[:unpublish_field]) if webhook.respond_to?(:fields) end