Sha256: b5ec121af7f6d42a0c3ce91fc302022012e7441f803b31800287382843762980

Contents?: true

Size: 956 Bytes

Versions: 1

Compression:

Stored size: 956 Bytes

Contents

class SyncAllTicketsJob
  
  class QuitAll < RuntimeError; end
  
  
  def self.run!
    new.run!
  end
  
  def run!
    Project \
      .unretired
      .where(Project.arel_table[:ticket_tracker_name].not_in(%w{None Houston}))
      .each(&method(:update_tickets_for_project!))
  rescue QuitAll
  end
  
  def update_tickets_for_project!(project)
    SyncProjectTicketsJob.new(project).run!
    
  rescue Houston::Adapters::TicketTracker::ConnectionError
    retry if (connection_retry_count += 1) < 3
    connection_error!(project)
  rescue Houston::Adapters::TicketTracker::InvalidQueryError
    query_error!(project)
  ensure
    sleep 2 # give Unfuddle a break
  end
  
  
private
  
  def initialize
    @connection_retry_count = 0
  end
  
  attr_reader :connection_retry_count
  
  def connection_error!(project)
    Houston.report_exception $!
    raise QuitAll
  end
    
  def query_error!(project)
    Houston.report_exception $!
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
houston-core-0.5.0.beta1 app/jobs/sync_all_tickets_job.rb