Class: Order2cb::OrderHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/order2cb.rb

Instance Method Summary collapse

Constructor Details

#initializeOrderHandler

Returns a new instance of OrderHandler.

Raises:

  • (RuntimeError)


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/order2cb.rb', line 16

def initialize
  @caseBlocksAPIEndpoint = ENV['CB_API_ENDPOINT']
  @caseBlocksAPIToken = ENV['CB_API_TOKEN']
  @caseBlocksQueue = ENV['CB_QUEUE']
  @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

  @usePatchCommand = (@caseBlocksQueue =~ /patch/)
  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

Instance Method Details

#order_exists_in_casebocksObject



99
100
101
102
# File 'lib/order2cb.rb', line 99

def order_exists_in_casebocks
  RestClient.get 'https://login.caseblocks/com/search', {:params => {:auth_token => @caseBlocksAPIToken, 'foo' => 'bar'}}
  return false
end

#orders_to_process(start_time = DateTime.parse(2.hours.ago.to_s)) ⇒ Object



93
94
95
96
97
# File 'lib/order2cb.rb', line 93

def orders_to_process(start_time = DateTime.parse(2.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
end

#process_ordersObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/order2cb.rb', line 69

def process_orders
  @logger.debug "Checking for orders"
  caseblocks = Caseblocks.new(@logger)
  orders_to_process.each do |order|
    begin
      order = ::Order2cb::Order.find(order['number'])
      unless caseblocks.order_exists?(order.number)
        @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

#runObject



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/order2cb.rb', line 49

def run
  @logger.info "Starting processing orders from tyreshopper to caseblocks"
  until @stop
    begin
      $db_client = Mysql2::Client.new(:host => @tyreshopperDatabaseHost, :username => @tyreshopperDatabaseUser, :password => @tyreshopperDatabasePassword, :database => @tyreshopperDatabaseName)
      process_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

#send_to_caseblocks(msgHash) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/order2cb.rb', line 104

def send_to_caseblocks(msgHash)
  @logger.debug "Sending to CaseBlocks"

  response = RestClient.post(add_auth(Uri.parse("#{@caseBlocksAPIEndpoint}/case_blocks/cases")), msgHash.to_json,
                             :content_type => :json,
                             :accept => :json,
                             "AUTH_TOKEN" => @caseBlocksAPIToken)
  @logger.info "Received #{response.code} Location: #{response.headers[:location]}"
rescue RestClient::ExceptionWithResponse => ex
  if ex.response.nil?
    @logger.error "Received a bad response (null) from CaseBlocks. Re-raising."
    raise ex
  else
    @logger.error "Received #{ex.response.code} bad response: #{ex.response.body}"
  end
end

#stopObject



65
66
67
# File 'lib/order2cb.rb', line 65

def stop
  @stop = true
end