Class: Soaspec::RestRequest

Inherits:
Object
  • Object
show all
Defined in:
lib/soaspec/exchange_handlers/request/rest_request.rb

Overview

Models a request made to a REST API

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(overall, options, rest_handler) ⇒ RestRequest

Returns a new instance of RestRequest.

Parameters:

  • overall (Hash)

    Overall parameters used in Request

  • options (Hash)

    Headers and basic auth options

  • < (< Soaspec::RestHandler] rest_handler RestHandler handling creation of this request)

    Soaspec::RestHandler] rest_handler RestHandler handling creation of this request



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 64

def initialize(overall, options, rest_handler)
  self.rest_handler = rest_handler
  overall_params = interpret_parameters(overall)
  @overall_params = overall_params.dup
  self.method = overall_params.delete(:method)
  self.body = post_data
  overall_params.delete(:body)
  overall_params.delete(:payload)
  self.suburl = overall_params.delete(:suburl)
  self.test_name = overall_params.delete(:name)
  self.other_params = overall_params
  self.basic_auth_user = options[:user]
  self.basic_auth_password = options[:password]
  self.headers = options[:headers] # TODO: Use this in request
end

Instance Attribute Details

#basic_auth_passwordString

Returns Password used in basic auth.

Returns:

  • (String)

    Password used in basic auth



21
22
23
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 21

def basic_auth_password
  @basic_auth_password
end

#basic_auth_userString

Returns User used in basic auth.

Returns:

  • (String)

    User used in basic auth



19
20
21
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 19

def basic_auth_user
  @basic_auth_user
end

#bodyString

This will be the actual payload sent. This could be set in Exchange through the payload explicitly, the ‘body’ param which will convert a Hash to JSON or a template

Examples:

JSON body

{"test":5}

Returns:

  • (String)

    Body of request sent. Payload that will be sent in request



15
16
17
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 15

def body
  @body
end

#headersHash

Headers. Keys that are ‘symbols` will be converted from `snake_case` to `Word-Word2`

Returns:

  • (Hash)

    Headers sent as part of request



28
29
30
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 28

def headers
  @headers
end

#methodSymbol

Returns REST method used.

Examples:

GET method

:get

Returns:

  • (Symbol)

    REST method used



9
10
11
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 9

def method
  @method
end

#other_paramsHash

Returns Miscellaneous parameters.

Returns:

  • (Hash)

    Miscellaneous parameters



25
26
27
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 25

def other_params
  @other_params
end

#rest_handlerSoaspec::RestHandler

Returns RestHandler used for this request.

Returns:



30
31
32
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 30

def rest_handler
  @rest_handler
end

#suburlString

Returns Url appended to base_url.

Returns:

  • (String)

    Url appended to base_url



23
24
25
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 23

def suburl
  @suburl
end

#test_nameString

Returns Name given to test to describe it.

Returns:

  • (String)

    Name given to test to describe it



17
18
19
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 17

def test_name
  @test_name
end

Instance Method Details

#[](value) ⇒ Object

Returns Result of retrieving value.

Parameters:

  • value (String, Symbol)

    Message to send to object retrieving a value

Returns:

  • (Object)

    Result of retrieving value



87
88
89
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 87

def [](value)
  send(value)
end

#call(merged_options) ⇒ Object

Use the request parameters to call the REST api



113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 113

def call(merged_options)
  rest_handler.exception = nil # Remove any previously stored exception
  Soaspec::SpecLogger.info("request body: #{body}") if body
  merge_headers = (merged_options[:headers] || {}).merge(other_params)
  params = merged_options.merge(method: method, url: full_url,
                                headers: merge_headers)
  params.merge!(payload: body) if body
  RestClient::Request.execute params
rescue RestClient::Exception => e
  rest_handler.exception = e
  raise e unless e.respond_to? :response

  e.response
end

#descriptionString

Returns Description that could be used in filename.

Returns:

  • (String)

    Description that could be used in filename



102
103
104
105
106
107
108
109
110
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 102

def description
  suburl_desc = suburl.is_a?(Array) ? File.join(suburl) : suburl
  query_desc = ''
  query&.each do |key, value|
    query_desc = File.join(query_desc, "#{key}_#{value}")
  end
  components = [method.to_s, suburl_desc, query_desc, 'response']
  File.join(*components.collect!(&:to_s))
end

#flattenArray

Returns Array containing parameters used in making a request.

Returns:

  • (Array)

    Array containing parameters used in making a request



97
98
99
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 97

def flatten
  [method] + [suburl].flatten + query.flatten
end

#full_urlString

Returns Base url plus sub url.

Returns:

  • (String)

    Base url plus sub url



33
34
35
36
37
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 33

def full_url
  url = rest_handler.base_url_value
  url += "/#{suburl}" if suburl
  @full_url = ERB.new(url).result(binding)
end

#interpret_parameters(request_parameters) ⇒ Hash

Interpret REST parameters given provided parameters and adding defaults, making transformations

Parameters:

  • request_parameters (Hash)

    Parameters used in making a request

Returns:

  • (Hash)

    Request parameters merged with default values



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 44

def interpret_parameters(request_parameters)
  request_parameters = request_parameters.dup # Must duplicate hash as deletion occurring
  request_parameters[:params] ||= {}
  request_parameters[:method] ||= :post
  suburl = request_parameters[:suburl]
  if suburl
    request_parameters[:suburl] = if suburl.is_a? Array
                                    suburl.collect(&:to_s).join('/')
                                  else
                                    suburl.to_s
                                  end
  end
  # Use q for query parameters. Nested :params is ugly, long and unclear
  request_parameters[:params] = request_parameters.delete(:q) if request_parameters[:q]
  request_parameters
end

#post_dataString, NilClass

Work out data to send based upon payload, template_name, or body

Returns:

  • (String, NilClass)

    Payload to send in REST request. Nil if nothing is to be sent



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 130

def post_data
  option = rest_handler.request_option
  body = if option == :hash && !@overall_params[:payload]
           @overall_params[:payload] = JSON.generate(rest_handler.hash_used_in_request(@overall_params[:body])).to_s
         elsif option == :template
           test_values = nil
           test_values = @overall_params[:body].dup if @overall_params[:body]
           Soaspec::TemplateReader.new.render_body(rest_handler.template_name, test_values || @overall_params)
         else
           @overall_params[:payload]
         end
  return body if body && body != '{}'

  nil
end

#queryHash

Returns Query parameters for a REST Request.

Returns:

  • (Hash)

    Query parameters for a REST Request



81
82
83
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 81

def query
  other_params[:params]
end

#to_sString

Returns Show inspection of all parameters.

Returns:

  • (String)

    Show inspection of all parameters



92
93
94
# File 'lib/soaspec/exchange_handlers/request/rest_request.rb', line 92

def to_s
  inspect
end