class PickpointApi::Session

Attributes

state[R]
test[R]

Public Class Methods

new(hash = {}) click to toggle source
# File lib/pickpoint_api/session.rb, line 11
def initialize(hash = {})
  @state = :new
  @test = hash[:test] == true
end

Private Instance Methods

api_path() click to toggle source
# File lib/pickpoint_api/session.rb, line 98
def api_path
  if @test
    API_TEST_PATH
  else
    API_PROD_PATH
  end
end
attach_session_id(data, key) click to toggle source
# File lib/pickpoint_api/session.rb, line 125
def attach_session_id(data, key)
  {
    'SessionId' => @session_id,
    key => data
  }
end
check_for_error(response, error_field, error = ApiError) { || ... } click to toggle source
# File lib/pickpoint_api/session.rb, line 18
def check_for_error(response, error_field, error = ApiError)
  if !response[error_field].nil? && !response[error_field].empty?
    yield if block_given?
    raise error, response[error_field]
  else
    response
  end
end
create_request(action) click to toggle source
# File lib/pickpoint_api/session.rb, line 106
def create_request(action)
  action_config = ACTIONS[action]

  if action_config.nil?
    raise UnknownApiAction, action
  end

  action_path = "#{api_path}#{action_config[:path]}"

  if action_config[:method] == :post
    req = ::Net::HTTP::Post.new action_path
  elsif action_config[:method] == :get
    req = ::Net::HTTP::Get.new action_path
  end

  req.content_type = 'application/json'
  req
end
ensure_session_state(state = :started) click to toggle source
# File lib/pickpoint_api/session.rb, line 39
def ensure_session_state(state = :started)
  if @state != state
    raise InvalidSessionState
  end
end
execute_action(action, data = {}) click to toggle source
# File lib/pickpoint_api/session.rb, line 132
def execute_action(action, data = {})
  logger.debug("Request: action: #{action}; data: #{data.inspect}")
  req = create_request(action)
  req.body = data.to_json
  response = send_request(req)
  log_response(response)

  if response.code != '200'
    raise ApiError, response.body
  end

  response.body
end
json_request(action, data) click to toggle source
# File lib/pickpoint_api/session.rb, line 45
def json_request(action, data)
  response = execute_action(action, data)
  JSON.parse(response)
end
log_response(response) click to toggle source
# File lib/pickpoint_api/session.rb, line 152
def log_response(response)
  if !response.body.nil?
    if response.body.start_with?('%PDF')
      logger.debug("Response: #{response.code}; data: PDF")
    else
      logger.debug("Response: #{response.code}; data: #{response.body[0,200]}#{response.body.size > 200 ? '...' : ''}")
    end
  end
end
logger() click to toggle source
# File lib/pickpoint_api/session.rb, line 162
def logger
  ::PickpointApi.logger
end
parameterless_request(action) click to toggle source
# File lib/pickpoint_api/session.rb, line 33
def parameterless_request(action)
  ensure_session_state
  response = execute_action(action)
  JSON.parse(response)
end
request_by_invoice_id(action, invoice_id = nil, sender_invoice_number = nil) click to toggle source
# File lib/pickpoint_api/session.rb, line 81
def request_by_invoice_id(action, invoice_id = nil, sender_invoice_number = nil)
  ensure_session_state
  data = {
    'SessionId' => @session_id
  }

  if !invoice_id.nil?
    data['InvoiceNumber'] = invoice_id
  end

  if !sender_invoice_number.nil?
    data['SenderInvoiceNumber'] = sender_invoice_number
  end

  json_request(action, data)
end
request_by_invoice_ids(invoice_ids, action) click to toggle source
# File lib/pickpoint_api/session.rb, line 50
def request_by_invoice_ids(invoice_ids, action)
  ensure_session_state
  data = if invoice_ids.kind_of?(Array)
    invoice_ids
  else
    [invoice_ids]
  end

  data = attach_session_id(data,'Invoices')
  response = execute_action(action, data)

  if response.start_with?('Error')
    raise ApiError, response
  else
    return response
  end
end
return_request(action, ikn, document_number, date_from, date_to = DateTime.now) click to toggle source
# File lib/pickpoint_api/session.rb, line 68
def return_request(action, ikn, document_number, date_from, date_to = DateTime.now)
  ensure_session_state
  data = {
    'SessionId' => @session_id,
    'IKN' => ikn,
    'DocumentNumber' => document_number,
    'DateFrom' => date_from.strftime(DATE_FORMAT),
    'DateEnd' => date_to.strftime(DATE_FORMAT)
  }
  json_request(action, data)
  check_for_error(res, 'Error')
end
send_request(req) click to toggle source
# File lib/pickpoint_api/session.rb, line 146
def send_request(req)
  ::Net::HTTP.start(API_HOST, API_PORT) do |http|
    http.request(req)
  end
end
sendings_request(action, data) click to toggle source
# File lib/pickpoint_api/session.rb, line 27
def sendings_request(action, data)
  ensure_session_state
  data = attach_session_id(data, 'Sendings')
  json_request(action, data)
end