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