lib/soaspec/exchange_handlers/rest_accessors.rb in soaspec-0.0.84 vs lib/soaspec/exchange_handlers/rest_accessors.rb in soaspec-0.0.85

- old
+ new

@@ -1,84 +1,84 @@ -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 - def oauth2(params)# client_id: nil, client_secret: nil, token_url: nil, username: nil, password: nil, security_token: nil) - define_method('oauth_response') do - 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 = if params[:password] && params[:username] - { - grant_type: 'password', - client_id: params[:client_id], - client_secret: params[:client_secret], - username: params[:username], - password: params[:security_token] ? (params[:password] + params[:security_token]) : params[:password], - multipart: true - } - else - { - grant_type: 'client_credentials', - client_id: params[:client_id], - client_secret: params[:client_secret] - } - end - retry_count = 0 - begin - Soaspec::SpecLogger.add_to 'request_params: ' + payload.to_s - response = RestClient.post(params[:token_url], payload, cache_control: 'no_cache', verify_ssl: false) - rescue RestClient::Exception => e - Soaspec::SpecLogger.add_to("oauth_error: #{e.message}") - Soaspec::SpecLogger.add_to("oauth_error: #{e.response}") - retry_count += 1 - retry if retry_count < 3 - raise e - end - Soaspec::SpecLogger.add_to("response_headers: #{response.headers}") - Soaspec::SpecLogger.add_to("response_body: #{response.body}") - 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 + def oauth2(params)# client_id: nil, client_secret: nil, token_url: nil, username: nil, password: nil, security_token: nil) + define_method('oauth_response') do + 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 = if params[:password] && params[:username] + { + grant_type: 'password', + client_id: params[:client_id], + client_secret: params[:client_secret], + username: params[:username], + password: params[:security_token] ? (params[:password] + params[:security_token]) : params[:password], + multipart: true + } + else + { + grant_type: 'client_credentials', + client_id: params[:client_id], + client_secret: params[:client_secret] + } + end + retry_count = 0 + begin + Soaspec::SpecLogger.add_to 'request_params: ' + payload.to_s + response = RestClient.post(params[:token_url], payload, cache_control: 'no_cache', verify_ssl: false) + rescue RestClient::Exception => e + Soaspec::SpecLogger.add_to("oauth_error: #{e.message}") + Soaspec::SpecLogger.add_to("oauth_error: #{e.response}") + retry_count += 1 + retry if retry_count < 3 + raise e + end + Soaspec::SpecLogger.add_to("response_headers: #{response.headers}") + Soaspec::SpecLogger.add_to("response_body: #{response.body}") + 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