class Ragoon::Client

Attributes

endpoint[R]
response[R]

Public Class Methods

new(endpoint, options) click to toggle source
# File lib/ragoon/client.rb, line 4
def initialize(endpoint, options)
  @endpoint = endpoint
  @options = options
end

Public Instance Methods

request(action_name, body_node) click to toggle source
# File lib/ragoon/client.rb, line 9
def request(action_name, body_node)
  retry_count = @options[:retry].to_i

  retry_count.times do
    begin
      request_once(action_name, body_node)
      return
    rescue Ragoon::Error => e
      unless e.message.include?('指定された画面はアクセスできません。')
        raise e
      end
      sleep(0.5)
    end
  end
  raise Ragoon::Error.new("試行回数が#{retry_count}回を超えたので終了しました。")
end
reset() click to toggle source
# File lib/ragoon/client.rb, line 30
def reset
  @result_set = nil
end
result_set() click to toggle source
# File lib/ragoon/client.rb, line 26
def result_set
  @result_set ||= Nokogiri::XML.parse(response.body)
end

Private Instance Methods

raise_error() click to toggle source
# File lib/ragoon/client.rb, line 52
def raise_error
  raise Ragoon::Error.new(
    result_set.xpath('//soap:Reason').text.strip,
    result_set.xpath('//soap:Detail/*').map { |c| [c.name, c.text.strip] }.to_h
  )
end
request_once(action_name, body_node) click to toggle source
# File lib/ragoon/client.rb, line 36
def request_once(action_name, body_node)
  reset
  @action_name = action_name
  @body_node = body_node

  rest_options = {}
  if (@options[:skip_verify_ssl])
    rest_options[:verify_ssl] = OpenSSL::SSL::VERIFY_NONE
  end
  rest_client = RestClient::Resource.new(endpoint, rest_options)

  @response = rest_client.post(Ragoon::XML.render(action_name, body_node, @options))
ensure
  raise_error unless result_set.xpath('//soap:Fault').empty?
end