class Order2cb::OrderHandler

Public Class Methods

new() click to toggle source
# File lib/order2cb.rb, line 15
def initialize
  @caseBlocksAPIEndpoint = ENV['CB_API_ENDPOINT']
  @caseBlocksAPIToken = ENV['CB_API_TOKEN']
  @caseBlocksCaseTypeID = ENV['CB_CASE_TYPE_ID']

  @tyreshopperDatabaseHost = ENV['DB_HOST']
  @tyreshopperDatabaseUser = ENV['DB_USER']
  @tyreshopperDatabasePassword = ENV['DB_PASSWORD']
  @tyreshopperDatabaseName = ENV['DB_NAME']

  @interval = ENV['CHECK_INTERVAL'] ? ENV['CHECK_INTERVAL'] : 60

  logfile = ENV['ORDER2CB_LOGFILE_PATH'].nil? ? STDOUT : File.open(ENV['ORDER2CB_LOGFILE_PATH'], 'a')
  logfile.sync = true
  @logger = Logger.new logfile
  @stop = false
  @orders_sent_to_caseblocks = []

  @options = {:use_patch_command => @usePatchCommand, :case_blocks_api_endpoint => @caseBlocksAPIEndpoint, :caseblocks_api_token => @caseBlocksAPIToken}

  raise RuntimeError, "Please ensure CB_API_ENDPOINT is set." if @caseBlocksAPIEndpoint.nil? or @caseBlocksAPIEndpoint.empty?
  raise RuntimeError, "Please ensure CB_API_TOKEN is set." if @caseBlocksAPIToken.nil? or @caseBlocksAPIToken.empty?
  raise RuntimeError, "Please ensure DB_HOST is set." if @tyreshopperDatabaseHost.nil? or @tyreshopperDatabaseHost.empty?
  raise RuntimeError, "Please ensure DB_USER is set." if @tyreshopperDatabaseUser.nil? or @tyreshopperDatabaseUser.empty?
  raise RuntimeError, "Please ensure DB_PASSWORD is set." if @tyreshopperDatabasePassword.nil?
  raise RuntimeError, "Please ensure DB_NAME is set." if @tyreshopperDatabaseName .nil? or @tyreshopperDatabaseName.empty?
  raise RuntimeError, "Please ensure CB_CASE_TYPE_ID is set." if @caseBlocksCaseTypeID.nil? or @caseBlocksCaseTypeID.empty?

  @logger.info "MessageHandler ready to transfer messages."
end

Public Instance Methods

all_recent_orders(start_time = DateTime.parse(4.hours.ago.to_s)) click to toggle source
# File lib/order2cb.rb, line 101
def all_recent_orders(start_time = DateTime.parse(4.hours.ago.to_s))
  results = $db_client.query("SELECT * from exp_spree_orders where completed_at > '#{start_time}';")
  @logger.debug "Found #{results.count} completed orders in the last #{time_ago_in_words(start_time)} to be processed"
  results.map{|row| row["number"]}
end
process_orders(orders_to_process) click to toggle source
# File lib/order2cb.rb, line 77
def process_orders(orders_to_process)
  @logger.debug "Checking for orders"
  caseblocks = Caseblocks.new(@logger)
  orders_to_process.each do |order_number|
    begin
      order = ::Order2cb::Order.find(order_number)
      unless caseblocks.order_exists?(order)
        # @logger.debug "#{order.number} doesn't exist in caseblocks, sending it now"
        if caseblocks.create_order(order)
          @logger.info "Sent #{order.number} to caseblocks."
        else
          @logger.error "Failed to send #{order.number} to caseblocks."
        end
      else
        # @logger.debug "#{order.number} already exists in caseblocks... skipping."
      end
    rescue => e
      @logger.error e.message
      @logger.error e.backtrace.join('\n')
    end
  end

end
push_orders(order_numbers) click to toggle source
# File lib/order2cb.rb, line 62
def push_orders(order_numbers)
  $db_client = Mysql2::Client.new(:host => @tyreshopperDatabaseHost, :username => @tyreshopperDatabaseUser, :password => @tyreshopperDatabasePassword, :database => @tyreshopperDatabaseName)
  process_orders(order_numbers)
  $db_client.close
end
run() click to toggle source
# File lib/order2cb.rb, line 46
def run
  @logger.info "Starting processing orders from tyreshopper to caseblocks"
  until @stop
    begin
      setup_db_client
      process_orders(all_recent_orders)
      $db_client.close
      @logger.debug "Waiting for #{@interval} seconds..."
    rescue => e
      @logger.error e.message
      @logger.error e.backtrace.join('\n')
    end
    sleep @interval
  end
end
setup_db_client() click to toggle source
# File lib/order2cb.rb, line 73
def setup_db_client
  $db_client = Mysql2::Client.new(:host => @tyreshopperDatabaseHost, :username => @tyreshopperDatabaseUser, :password => @tyreshopperDatabasePassword, :database => @tyreshopperDatabaseName)
end
stop() click to toggle source
# File lib/order2cb.rb, line 69
def stop
  @stop = true
end