Class: RequestHandler

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

Overview

This class is used to handle and send requests via the Brightpearl API. It then takes the responses and adds them to the queue, and logs if necessary TODO - Current Brightpearl Bugged issues include TODO - Api Documentation XML has duplicate parameters in some URLs TODO - Warehouse Location PUT having duplicate ID tag TODO - Warehouse Goods-Out Note Delete having duplicate ID tag TODO - Warehouse Goods note GET having duplicate ID-SET TODO - Product Type Association XML POST URI malformed TODO - Parameters need standardized TODO - API Documentation contains invalid URIs for Developer URIs


Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(appRef, appToken, accID, dataCenter, apiVersion) ⇒ RequestHandler

Returns a new instance of RequestHandler.



25
26
27
28
29
30
# File 'lib/handlers/request_handler.rb', line 25

def initialize(appRef,appToken,accID,dataCenter,apiVersion)
  @currentConnection = Connection.new(appRef,appToken,accID,dataCenter,apiVersion)
  @requestQueue = Queue.new
  @responseQueue = Queue.new
  @requestIncrementID = 0
end

Instance Attribute Details

#currentConnectionObject (readonly)

Returns the value of attribute currentConnection.



21
22
23
# File 'lib/handlers/request_handler.rb', line 21

def currentConnection
  @currentConnection
end

#requestIncrementIDObject (readonly)

Returns the value of attribute requestIncrementID.



22
23
24
# File 'lib/handlers/request_handler.rb', line 22

def requestIncrementID
  @requestIncrementID
end

#responseQueueObject (readonly)

Returns the value of attribute responseQueue.



20
21
22
# File 'lib/handlers/request_handler.rb', line 20

def responseQueue
  @responseQueue
end

Instance Method Details

#buildRequestURL(resourceURI, requestType, arrayOfParameters) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/handlers/request_handler.rb', line 142

def buildRequestURL(resourceURI,requestType,arrayOfParameters)
  arrayOfParameters ||= Array[nil]
  if (arrayOfParameters!= nil && arrayOfParameters.is_a?(Array) == false)
    puts "Array of values not entered to build request URL, please enter an array of values"
  end
  url = 'http://ws-' << @currentConnection.dataCenter<< '.brightpearl.com/' << @currentConnection.apiVersion << '/' << @currentConnection.accountID << resourceURI
  if(requestType.to_s.casecmp('GET') || requestType.to_s.casecmp('OPTIONS') || requestType.to_s.caseCMP('POST')||  requestType.to_s.casecmp('PATCH') ||  requestType.to_s.casecmp('PUT') ||  requestType.to_s.casecmp('DELETE'))
    uriparameters = url.scan(/{.+?}/)#scans the request string for all paramaters in the URI/URL
    uriparameters.each_with_index  do |x,index| #for each paramater found we replace the value
      if index == 0
        url.gsub!(x,arrayOfParameters[0].to_s)
      elsif index == 1
        url.gsub!(x,arrayOfParameters[1].to_s)
      else
        puts "Invalid amount of paramaters specified in URL. Contact Developer/administrator as this application may need updated!"
      end
    end
  end
  return url
end

#call(resourceURI, requestType, parameterArray = nil, postBody = nil) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
# File 'lib/handlers/request_handler.rb', line 39

def call(resourceURI, requestType,parameterArray = nil,postBody = nil)
  #Checks if the string includes http or https, if it does this means a full URI was passed in
  if (resourceURI.downcase["https"] || resourceURI.downcase["http"])
    requestToAdd = Request.new(@requestIncrementID,resourceURI,requestType,@currentConnection.accountID,postBody)
    @requestIncrementID += 1
  else
    requestToAdd = Request.new(@requestIncrementID,buildRequestURL(resourceURI,requestType,parameterArray),requestType,@currentConnection.accountID,postBody)
  end
  addRequestToQueue(requestToAdd) if requestToAdd != nil
  return @requestIncrementID - 1
end

#update(delayTime = 1) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/handlers/request_handler.rb', line 57

def update(delayTime = 1)
  current = Thread.new do
    while @requestQueue.length > 0 do
      requestString = @requestQueue.pop
      uri = URI(requestString.uri.to_s)
      Net::HTTP.start(uri.host,uri.port) do |http|
        puts requestString.requestType.to_s
        case requestString.requestType
          when 'post'
            request = Net::HTTP::Post.new uri
            request.body = requestString.requestBody
            request.add_field('brightpearl-app-ref',@currentConnection.appRef)
            request.add_field('brightpearl-account-token',@currentConnection.appToken)
            if @apiVersion.to_s.casecmp('use') || @apiVersion.to_s.casecmp('eu1')
              response = http.request request
              @responseQueue.push(Response.new(requestString,response))
            else
              puts 'Error - Invalid datacenter supplied, please enter a valid datacenter.'
            end
          when 'get'
            request = Net::HTTP::Get.new uri
            request.add_field('brightpearl-app-ref',@currentConnection.appRef)
            request.add_field('brightpearl-account-token',@currentConnection.appToken)
            if @apiVersion.to_s.casecmp('use') || @apiVersion.to_s.casecmp('eu1')
              response = http.request request
              @responseQueue.push(Response.new(requestString,response))
            else
              puts 'Error - Invalid datacenter supplied, please enter a valid datacenter.'
            end
          when 'patch'
            request = Net::HTTP::Patch.new uri
            request.body = requestString.requestBody
            request.add_field('brightpearl-app-ref',@currentConnection.appRef)
            request.add_field('brightpearl-account-token',@currentConnection.appToken)
            if @apiVersion.to_s.casecmp('use') || @apiVersion.to_s.casecmp('eu1')
              response = http.request request
              @responseQueue.push(Response.new(requestString,response))
            else
              puts 'Error - Invalid datacenter supplied, please enter a valid datacenter.'
            end
          when 'put'
            request = Net::HTTP::Put.new uri
            request.body = requestString.requestBody
            request.add_field('brightpearl-app-ref',@currentConnection.appRef)
            request.add_field('brightpearl-account-token',@currentConnection.appToken)
            if @apiVersion.to_s.casecmp('use') || @apiVersion.to_s.casecmp('eu1')
              response = http.request request
              @responseQueue.push(Response.new(requestString,response))
            else
              puts 'Error - Invalid datacenter supplied, please enter a valid datacenter.'
            end
          when 'delete'
            request = Net::HTTP::Delete.new uri
            request.body = requestString.requestBody
            request.add_field('brightpearl-app-ref',@currentConnection.appRef)
            request.add_field('brightpearl-account-token',@currentConnection.appToken)
            if @apiVersion.to_s.casecmp('use') || @apiVersion.to_s.casecmp('eu1')
              response = http.request request
              @responseQueue.push(Response.new(requestString,response))
            else
              puts 'Error - Invalid datacenter supplied, please enter a valid datacenter.'
            end
          when 'search'
            request = Net::HTTP::Get.new uri
            request.add_field('brightpearl-app-ref',@currentConnection.appRef)
            request.add_field('brightpearl-account-token',@currentConnection.appToken)
            if @apiVersion.to_s.casecmp('use') || @apiVersion.to_s.casecmp('eu1')
              response = http.request request
              @responseQueue.push(Response.new(requestString,response))
            else
              puts 'Error - Invalid datacenter supplied, please enter a valid datacenter.'
            end
          else
            puts 'Invalid request Type, please input a valid request Type for your request...'
        end
      end
      sleep(delayTime)
    end
  end
  current.join
end