lib/soaspec/exchange_handlers/rest_accessors.rb in soaspec-0.1.5 vs lib/soaspec/exchange_handlers/rest_accessors.rb in soaspec-0.1.6

- old
+ new

@@ -1,93 +1,93 @@ -module Soaspec - # Accessors specific to REST handler - module RestAccessors - - # Defines method 'base_url_value' containing base URL used in REST requests - # @param [String] url Base Url to use in REST requests. Suburl is appended to this - def base_url(url) - define_method('base_url_value') do - url - end - end - - # Will create access_token method based on passed parameters - # @param [Hash] params Params client_id: nil, client_secret: nil, token_url: nil, username: nil, password: nil, security_token: nil - def oauth2(params) - # Payload to add to o-auth request dependent on params provided - define_method('oauth_payload') do |updated_params| - payload = { client_id: updated_params[:client_id], client_secret: updated_params[:client_secret] } - payload.merge(if updated_params[:password] && updated_params[:username] - { - grant_type: 'password', - username: updated_params[:username], - password: updated_params[:security_token] ? (updated_params[:password] + updated_params[:security_token]) : updated_params[:password], - multipart: true - } - else - { grant_type: 'client_credentials' } - end) - end - # Method to send request to get oauth token based on parameters - define_method('oauth_response') do - raise 'client_id and client_secret not set' unless params[:client_id] && params[:client_secret] - params[:username] = api_username || ERB.new(params[:username]).result(binding) if params[:username] - params[:security_token] = ERB.new(params[:security_token]).result(binding) if params[:security_token] - params[:token_url] = ERB.new(params[:token_url]).result(binding) if params[:token_url] - params[:password] = ERB.new(params[:password]).result(binding) if params[:password] - payload = oauth_payload(params) - request_message = if Soaspec.debug_oauth? - "request_params: #{payload}" - else - params[:username] ? "User '#{params[:username]}'" : 'client_credentials' - end - Soaspec::SpecLogger.info request_message - retry_count = 0 - begin - response = RestClient.post(params[:token_url], payload, cache_control: 'no_cache', verify_ssl: false) - rescue RestClient::Exception => e - Soaspec::SpecLogger.info("oauth_error: #{e.message}") - Soaspec::SpecLogger.info("oauth_response: #{e.response}") - retry_count += 1 - retry if retry_count < 3 - raise e - end - if Soaspec.debug_oauth? - Soaspec::SpecLogger.info("response_headers: #{response.headers}") - Soaspec::SpecLogger.info("response_body: #{response.body}") - end - JSON.parse(response) - end - - define_method('access_token') do - oauth_response['access_token'] - end - define_method('instance_url') do - oauth_response['instance_url'] - end - end - - # Pass path to YAML file containing OAuth2 parameters - # @param [String] path_to_filename Will have Soaspec.credentials_folder appended to it if set - def oauth2_file(path_to_filename) - full_path = Soaspec.credentials_folder ? File.join(Soaspec.credentials_folder, path_to_filename + '.yml') : path_to_filename + '.yml' - file_hash = YAML.load_file(full_path) - raise 'File at ' + full_path + ' is not a hash ' unless file_hash.is_a? Hash - oauth_hash = file_hash.transform_keys_to_symbols - oauth2 **oauth_hash - end - - # @param [Hash] headers Hash of REST headers used in RestClient - def headers(headers) - define_method('rest_client_headers') do - headers - end - end - - # Convert each key from snake_case to PascalCase - def pascal_keys(set) - define_method('pascal_keys?') do - set - end - end - end +module Soaspec + # Accessors specific to REST handler + module RestAccessors + + # Defines method 'base_url_value' containing base URL used in REST requests + # @param [String] url Base Url to use in REST requests. Suburl is appended to this + def base_url(url) + define_method('base_url_value') do + url + end + end + + # Will create access_token method based on passed parameters + # @param [Hash] params Params client_id: nil, client_secret: nil, token_url: nil, username: nil, password: nil, security_token: nil + def oauth2(params) + # Payload to add to o-auth request dependent on params provided + define_method('oauth_payload') do |updated_params| + payload = { client_id: updated_params[:client_id], client_secret: updated_params[:client_secret] } + payload.merge(if updated_params[:password] && updated_params[:username] + { + grant_type: 'password', + username: updated_params[:username], + password: updated_params[:security_token] ? (updated_params[:password] + updated_params[:security_token]) : updated_params[:password], + multipart: true + } + else + { grant_type: 'client_credentials' } + end) + end + # Method to send request to get oauth token based on parameters + define_method('oauth_response') do + raise 'client_id and client_secret not set' unless params[:client_id] && params[:client_secret] + params[:username] = api_username || ERB.new(params[:username]).result(binding) if params[:username] + params[:security_token] = ERB.new(params[:security_token]).result(binding) if params[:security_token] + params[:token_url] = ERB.new(params[:token_url]).result(binding) if params[:token_url] + params[:password] = ERB.new(params[:password]).result(binding) if params[:password] + payload = oauth_payload(params) + request_message = if Soaspec.debug_oauth? + "request_params: #{payload}" + else + params[:username] ? "User '#{params[:username]}'" : 'client_credentials' + end + Soaspec::SpecLogger.info request_message + retry_count = 0 + begin + response = RestClient.post(params[:token_url], payload, cache_control: 'no_cache', verify_ssl: false) + rescue RestClient::Exception => e + Soaspec::SpecLogger.info("oauth_error: #{e.message}") + Soaspec::SpecLogger.info("oauth_response: #{e.response}") + retry_count += 1 + retry if retry_count < 3 + raise e + end + if Soaspec.debug_oauth? + Soaspec::SpecLogger.info("response_headers: #{response.headers}") + Soaspec::SpecLogger.info("response_body: #{response.body}") + end + JSON.parse(response) + end + + define_method('access_token') do + oauth_response['access_token'] + end + define_method('instance_url') do + oauth_response['instance_url'] + end + end + + # Pass path to YAML file containing OAuth2 parameters + # @param [String] path_to_filename Will have Soaspec.credentials_folder appended to it if set + def oauth2_file(path_to_filename) + full_path = Soaspec.credentials_folder ? File.join(Soaspec.credentials_folder, path_to_filename + '.yml') : path_to_filename + '.yml' + file_hash = YAML.load_file(full_path) + raise 'File at ' + full_path + ' is not a hash ' unless file_hash.is_a? Hash + oauth_hash = file_hash.transform_keys_to_symbols + oauth2 **oauth_hash + end + + # @param [Hash] headers Hash of REST headers used in RestClient + def headers(headers) + define_method('rest_client_headers') do + headers + end + end + + # Convert each key from snake_case to PascalCase + def pascal_keys(set) + define_method('pascal_keys?') do + set + end + end + end end \ No newline at end of file