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