soaspec 0.2.33 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +15 -15
- data/.gitlab-ci.yml +62 -62
- data/.rspec +3 -3
- data/.rubocop.yml +2 -2
- data/CODE_OF_CONDUCT.md +74 -74
- data/ChangeLog +643 -632
- data/Dockerfile +7 -7
- data/Gemfile +8 -8
- data/LICENSE.txt +21 -21
- data/README.md +253 -231
- data/Rakefile +52 -52
- data/Todo.md +16 -16
- data/exe/soaspec +140 -138
- data/exe/xml_to_yaml_file +43 -43
- data/lib/soaspec.rb +118 -106
- data/lib/soaspec/baseline.rb +82 -22
- data/lib/soaspec/core_ext/hash.rb +44 -44
- data/lib/soaspec/cucumber/generic_steps.rb +94 -94
- data/lib/soaspec/demo.rb +6 -6
- data/lib/soaspec/errors.rb +24 -24
- data/lib/soaspec/exchange/exchange.rb +131 -129
- data/lib/soaspec/exchange/exchange_extractor.rb +105 -90
- data/lib/soaspec/exchange/exchange_properties.rb +28 -28
- data/lib/soaspec/exchange/exchange_repeater.rb +21 -21
- data/lib/soaspec/exchange/request_builder.rb +108 -70
- data/lib/soaspec/exchange/variable_storer.rb +24 -24
- data/lib/soaspec/exchange_handlers/exchange_handler.rb +98 -98
- data/lib/soaspec/exchange_handlers/exchange_handler_defaults.rb +61 -61
- data/lib/soaspec/exchange_handlers/handler_accessors.rb +132 -132
- data/lib/soaspec/exchange_handlers/request/rest_request.rb +77 -59
- data/lib/soaspec/exchange_handlers/request/soap_request.rb +41 -41
- data/lib/soaspec/exchange_handlers/response_extractor.rb +84 -84
- data/lib/soaspec/exchange_handlers/rest_exchanger_factory.rb +111 -111
- data/lib/soaspec/exchange_handlers/rest_handler.rb +307 -307
- data/lib/soaspec/exchange_handlers/rest_methods.rb +65 -65
- data/lib/soaspec/exchange_handlers/rest_parameters.rb +112 -112
- data/lib/soaspec/exchange_handlers/rest_parameters_defaults.rb +42 -42
- data/lib/soaspec/exchange_handlers/soap_handler.rb +241 -241
- data/lib/soaspec/exe_helpers.rb +94 -94
- data/lib/soaspec/generate_server.rb +48 -48
- data/lib/soaspec/generator/.rspec.erb +5 -5
- data/lib/soaspec/generator/.travis.yml.erb +5 -5
- data/lib/soaspec/generator/Gemfile.erb +8 -8
- data/lib/soaspec/generator/README.md.erb +29 -29
- data/lib/soaspec/generator/Rakefile.erb +20 -19
- data/lib/soaspec/generator/config/data/default.yml.erb +2 -2
- data/lib/soaspec/generator/css/bootstrap.css +6833 -6833
- data/lib/soaspec/generator/features/support/env.rb.erb +3 -3
- data/lib/soaspec/generator/generate_exchange.html.erb +47 -47
- data/lib/soaspec/generator/lib/blz_service.rb.erb +26 -26
- data/lib/soaspec/generator/lib/dynamic_class_content.rb.erb +12 -12
- data/lib/soaspec/generator/lib/new_rest_service.rb.erb +56 -56
- data/lib/soaspec/generator/lib/new_soap_service.rb.erb +29 -29
- data/lib/soaspec/generator/lib/package_service.rb.erb +2 -2
- data/lib/soaspec/generator/lib/shared_example.rb.erb +8 -8
- data/lib/soaspec/generator/spec/dynamic_soap_spec.rb.erb +12 -12
- data/lib/soaspec/generator/spec/rest_spec.rb.erb +9 -9
- data/lib/soaspec/generator/spec/soap_spec.rb.erb +51 -51
- data/lib/soaspec/generator/spec/spec_helper.rb.erb +23 -23
- data/lib/soaspec/generator/template/soap_template.xml +6 -6
- data/lib/soaspec/indifferent_hash.rb +9 -9
- data/lib/soaspec/interpreter.rb +70 -70
- data/lib/soaspec/matchers.rb +136 -140
- data/lib/soaspec/o_auth2.rb +142 -142
- data/lib/soaspec/soaspec_shared_examples.rb +26 -26
- data/lib/soaspec/spec_logger.rb +143 -143
- data/lib/soaspec/template_reader.rb +30 -30
- data/lib/soaspec/test_server/bank.wsdl +90 -90
- data/lib/soaspec/test_server/get_bank.rb +166 -166
- data/lib/soaspec/test_server/id_manager.rb +41 -41
- data/lib/soaspec/test_server/invoices.rb +29 -29
- data/lib/soaspec/test_server/namespace.xml +14 -14
- data/lib/soaspec/test_server/note.xml +5 -5
- data/lib/soaspec/test_server/puppy_service.rb +21 -21
- data/lib/soaspec/test_server/test_attribute.rb +14 -14
- data/lib/soaspec/test_server/test_namespace.rb +14 -14
- data/lib/soaspec/version.rb +6 -6
- data/lib/soaspec/virtual_server.rb +193 -190
- data/lib/soaspec/wait.rb +43 -43
- data/lib/soaspec/wsdl_generator.rb +215 -215
- data/soaspec.gemspec +58 -58
- data/test.wsdl +116 -116
- data/test.xml +10 -10
- data/test_wsdl.rb +43 -43
- metadata +3 -3
@@ -1,61 +1,61 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Default values set for methods on ExchangeHandler
|
4
|
-
module ExchangeHandlerDefaults
|
5
|
-
# Will be used in 'success_scenarios' shared examples.
|
6
|
-
# Set though 'mandatory_elements' method
|
7
|
-
# @return [Array] Array of symbols specifying element names
|
8
|
-
def expected_mandatory_elements
|
9
|
-
[]
|
10
|
-
end
|
11
|
-
|
12
|
-
# Change this through 'mandatory_xpath_values' method to specify xpath results that must be present in the response
|
13
|
-
# Will be used in 'success_scenarios' shared examples
|
14
|
-
# @return [Hash] Hash of 'xpath' => 'expected value' pairs
|
15
|
-
def expected_mandatory_xpath_values
|
16
|
-
{}
|
17
|
-
end
|
18
|
-
|
19
|
-
# Change this through 'mandatory_json_values' method to specify json results that must be present in the response
|
20
|
-
# Will be used in 'success_scenarios' shared examples
|
21
|
-
# @return [Hash] Hash of 'json/path' => 'expected value' pairs
|
22
|
-
def expected_mandatory_json_values
|
23
|
-
{}
|
24
|
-
end
|
25
|
-
|
26
|
-
# @return [Boolean] Whether all xpaths will be done with XML that is converted to lower case
|
27
|
-
def convert_to_lower?
|
28
|
-
false
|
29
|
-
end
|
30
|
-
|
31
|
-
# @return [Boolean] Whether to remove namespaces in xpath assertion automatically
|
32
|
-
def strip_namespaces?
|
33
|
-
false
|
34
|
-
end
|
35
|
-
|
36
|
-
# Request of API call. Either intended request or actual request
|
37
|
-
# @param [Object] response Response from calling exchange
|
38
|
-
def request(response)
|
39
|
-
return "Request not yet sent Request option is #{@request_option}" unless response
|
40
|
-
|
41
|
-
'Specific API handler should implement this'
|
42
|
-
end
|
43
|
-
|
44
|
-
# Set through 'retry_on_exceptions' method
|
45
|
-
# @return [Array] List of exceptions to retry for
|
46
|
-
def retry_on_exceptions
|
47
|
-
[]
|
48
|
-
end
|
49
|
-
|
50
|
-
# Set this through 'retry_on_exceptions' on ExchangeHandler
|
51
|
-
# @return [Integer] Time to wait before retrying each request. Default of 1
|
52
|
-
def retry_pause_time
|
53
|
-
1
|
54
|
-
end
|
55
|
-
|
56
|
-
# Set this through 'retry_on_exceptions' on ExchangeHandler
|
57
|
-
# @return [Integer] Times to retry before raising exception. Default of 3
|
58
|
-
def retry_exception_limit
|
59
|
-
3
|
60
|
-
end
|
61
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Default values set for methods on ExchangeHandler
|
4
|
+
module ExchangeHandlerDefaults
|
5
|
+
# Will be used in 'success_scenarios' shared examples.
|
6
|
+
# Set though 'mandatory_elements' method
|
7
|
+
# @return [Array] Array of symbols specifying element names
|
8
|
+
def expected_mandatory_elements
|
9
|
+
[]
|
10
|
+
end
|
11
|
+
|
12
|
+
# Change this through 'mandatory_xpath_values' method to specify xpath results that must be present in the response
|
13
|
+
# Will be used in 'success_scenarios' shared examples
|
14
|
+
# @return [Hash] Hash of 'xpath' => 'expected value' pairs
|
15
|
+
def expected_mandatory_xpath_values
|
16
|
+
{}
|
17
|
+
end
|
18
|
+
|
19
|
+
# Change this through 'mandatory_json_values' method to specify json results that must be present in the response
|
20
|
+
# Will be used in 'success_scenarios' shared examples
|
21
|
+
# @return [Hash] Hash of 'json/path' => 'expected value' pairs
|
22
|
+
def expected_mandatory_json_values
|
23
|
+
{}
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Boolean] Whether all xpaths will be done with XML that is converted to lower case
|
27
|
+
def convert_to_lower?
|
28
|
+
false
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [Boolean] Whether to remove namespaces in xpath assertion automatically
|
32
|
+
def strip_namespaces?
|
33
|
+
false
|
34
|
+
end
|
35
|
+
|
36
|
+
# Request of API call. Either intended request or actual request
|
37
|
+
# @param [Object] response Response from calling exchange
|
38
|
+
def request(response)
|
39
|
+
return "Request not yet sent Request option is #{@request_option}" unless response
|
40
|
+
|
41
|
+
'Specific API handler should implement this'
|
42
|
+
end
|
43
|
+
|
44
|
+
# Set through 'retry_on_exceptions' method
|
45
|
+
# @return [Array] List of exceptions to retry for
|
46
|
+
def retry_on_exceptions
|
47
|
+
[]
|
48
|
+
end
|
49
|
+
|
50
|
+
# Set this through 'retry_on_exceptions' on ExchangeHandler
|
51
|
+
# @return [Integer] Time to wait before retrying each request. Default of 1
|
52
|
+
def retry_pause_time
|
53
|
+
1
|
54
|
+
end
|
55
|
+
|
56
|
+
# Set this through 'retry_on_exceptions' on ExchangeHandler
|
57
|
+
# @return [Integer] Times to retry before raising exception. Default of 3
|
58
|
+
def retry_exception_limit
|
59
|
+
3
|
60
|
+
end
|
61
|
+
end
|
@@ -1,132 +1,132 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Soaspec
|
4
|
-
# Describes methods test handlers use to easily set attributes
|
5
|
-
# Some are included in 'success scenarios' and to configure the request sent
|
6
|
-
module HandlerAccessors
|
7
|
-
# Defines expected_mandatory_elements method used in 'success_scenario' shared examples
|
8
|
-
# to indicate certain elements must be present
|
9
|
-
# @param [Array] elements Array of symbols specifying expected element names for 'success scenario' in snakecase
|
10
|
-
#
|
11
|
-
# @example Inside class
|
12
|
-
# mandatory_elements :GetWeatherResult
|
13
|
-
#
|
14
|
-
# Or for a list
|
15
|
-
#
|
16
|
-
# @example Inside class
|
17
|
-
# mandatory_elements [:GetWeatherResult, :GetResultStatus]
|
18
|
-
#
|
19
|
-
# In test
|
20
|
-
# describe Exchange(:name) do
|
21
|
-
# it_behaves_like 'success scenario' # Includes checks for mandatory elements
|
22
|
-
# end
|
23
|
-
def mandatory_elements(elements)
|
24
|
-
define_method('expected_mandatory_elements') do
|
25
|
-
return [elements] if elements.is_a?(String) || elements.is_a?(Symbol)
|
26
|
-
|
27
|
-
elements
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
# Defines mandatory xpaths value pairs to be included in 'success scenario' shared example
|
32
|
-
#
|
33
|
-
# @example Inside class
|
34
|
-
# mandatory_xpath_values '//xmlns:GetWeatherResult' => 'Data Not Found'
|
35
|
-
#
|
36
|
-
# @example In test
|
37
|
-
# describe Exchange(:name) do
|
38
|
-
# it_behaves_like 'success scenario' # Includes xpath pair validation
|
39
|
-
# end
|
40
|
-
#
|
41
|
-
# @param [Hash] xpath_value_pairs Hash of element => expected value that must appear
|
42
|
-
# in a successful response body
|
43
|
-
def mandatory_xpath_values(xpath_value_pairs)
|
44
|
-
raise ArgumentError('Hash of {xpath => expected values} expected ') unless xpath_value_pairs.is_a? Hash
|
45
|
-
|
46
|
-
define_method('expected_mandatory_xpath_values') { xpath_value_pairs }
|
47
|
-
end
|
48
|
-
|
49
|
-
# Defines mandatory json path value pairs to be included in 'success scenario' shared example
|
50
|
-
#
|
51
|
-
# @example Inside class
|
52
|
-
# mandatory_json_values '$..GetWeatherResult' => 'Found'
|
53
|
-
#
|
54
|
-
# @example In test
|
55
|
-
# describe Exchange(:name) do
|
56
|
-
# it_behaves_like 'success scenario' # Includes json pair validation
|
57
|
-
# end
|
58
|
-
#
|
59
|
-
# @param [Hash] json_value_pairs Hash of element => expected value that must appear
|
60
|
-
# in a successful response body
|
61
|
-
def mandatory_json_values(json_value_pairs)
|
62
|
-
raise ArgumentError("Hash of {'jsonpath' => expected values} expected") unless json_value_pairs.is_a? Hash
|
63
|
-
|
64
|
-
define_method('expected_mandatory_json_values') { json_value_pairs }
|
65
|
-
end
|
66
|
-
|
67
|
-
# Links a particular path to a meaningful method that can be accessed from Exchange class.
|
68
|
-
# This will use the 'value_from_path' method which
|
69
|
-
# should be implemented by each ExchangeHandler
|
70
|
-
# @param [String, Symbol] name Method name used to access element
|
71
|
-
# @param [String, Symbol] path Path to find object (e.g, XPath, JSONPath).
|
72
|
-
# For JSONPath a ',' can be put to get an element either path
|
73
|
-
def element(name, path)
|
74
|
-
define_method("__custom_path_#{name}") do |response|
|
75
|
-
value_from_path(response, path.to_s)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# Links an attribute to a meaningful method that can be accessed from Exchange class.
|
80
|
-
# This will use the 'value_from_path' method which
|
81
|
-
# should be implemented by each ExchangeHandler
|
82
|
-
# @param [String, Symbol] name Method name used to access attribute
|
83
|
-
# @param [String, nil, Hash] attribute Attribute name to extract from xml. If not set, this will default to @name
|
84
|
-
def attribute(name, attribute = nil)
|
85
|
-
attribute_used = attribute || name.to_s
|
86
|
-
define_method("__custom_path_#{name}") do |response|
|
87
|
-
value_from_path(response, 'implicit', attribute: attribute_used)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
# All xpath will be done with XML that is converted to lower case
|
92
|
-
# You must then use lower case in the xpath's to obtain the desired values
|
93
|
-
# @param [Boolean] set Whether to convert all xml in response to lower case before performing XPath
|
94
|
-
def convert_to_lower(set)
|
95
|
-
return unless set
|
96
|
-
|
97
|
-
define_method('convert_to_lower?') { true }
|
98
|
-
end
|
99
|
-
|
100
|
-
# Whether to remove namespaces from response in Xpath assertion automatically
|
101
|
-
# For why this may not be a good thing in general see
|
102
|
-
# http://tenderlovemaking.com/2009/04/23/namespaces-in-xml.html
|
103
|
-
# This will be overridden if xpath has a ':' in it
|
104
|
-
# @param [Boolean] set Whether to strip namespaces form XML response
|
105
|
-
def strip_namespaces(set)
|
106
|
-
return unless set
|
107
|
-
|
108
|
-
# Whether to remove namespaces in xpath assertion automatically
|
109
|
-
define_method('strip_namespaces?') { true }
|
110
|
-
end
|
111
|
-
|
112
|
-
# Set the default hash representing data to be used in making a request
|
113
|
-
# This will set the @request_option instance variable too
|
114
|
-
# @param [Hash] hash Default hash of request
|
115
|
-
def default_hash(hash)
|
116
|
-
define_method('default_hash_value') do
|
117
|
-
@request_option = :hash
|
118
|
-
Soaspec.always_use_keys? ? hash.transform_keys_to_symbols : hash
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
# Set the request option type and the template name
|
123
|
-
# Erb is used to parse the template file, executing Ruby code in `<%= %>` blocks to work out the final request
|
124
|
-
# @param [String] name Name of file inside 'template' folder excluding extension
|
125
|
-
def template_name(name)
|
126
|
-
define_method('template_name_value') do
|
127
|
-
@request_option = :template
|
128
|
-
name
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Soaspec
|
4
|
+
# Describes methods test handlers use to easily set attributes
|
5
|
+
# Some are included in 'success scenarios' and to configure the request sent
|
6
|
+
module HandlerAccessors
|
7
|
+
# Defines expected_mandatory_elements method used in 'success_scenario' shared examples
|
8
|
+
# to indicate certain elements must be present
|
9
|
+
# @param [Array] elements Array of symbols specifying expected element names for 'success scenario' in snakecase
|
10
|
+
#
|
11
|
+
# @example Inside class
|
12
|
+
# mandatory_elements :GetWeatherResult
|
13
|
+
#
|
14
|
+
# Or for a list
|
15
|
+
#
|
16
|
+
# @example Inside class
|
17
|
+
# mandatory_elements [:GetWeatherResult, :GetResultStatus]
|
18
|
+
#
|
19
|
+
# In test
|
20
|
+
# describe Exchange(:name) do
|
21
|
+
# it_behaves_like 'success scenario' # Includes checks for mandatory elements
|
22
|
+
# end
|
23
|
+
def mandatory_elements(elements)
|
24
|
+
define_method('expected_mandatory_elements') do
|
25
|
+
return [elements] if elements.is_a?(String) || elements.is_a?(Symbol)
|
26
|
+
|
27
|
+
elements
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Defines mandatory xpaths value pairs to be included in 'success scenario' shared example
|
32
|
+
#
|
33
|
+
# @example Inside class
|
34
|
+
# mandatory_xpath_values '//xmlns:GetWeatherResult' => 'Data Not Found'
|
35
|
+
#
|
36
|
+
# @example In test
|
37
|
+
# describe Exchange(:name) do
|
38
|
+
# it_behaves_like 'success scenario' # Includes xpath pair validation
|
39
|
+
# end
|
40
|
+
#
|
41
|
+
# @param [Hash] xpath_value_pairs Hash of element => expected value that must appear
|
42
|
+
# in a successful response body
|
43
|
+
def mandatory_xpath_values(xpath_value_pairs)
|
44
|
+
raise ArgumentError('Hash of {xpath => expected values} expected ') unless xpath_value_pairs.is_a? Hash
|
45
|
+
|
46
|
+
define_method('expected_mandatory_xpath_values') { xpath_value_pairs }
|
47
|
+
end
|
48
|
+
|
49
|
+
# Defines mandatory json path value pairs to be included in 'success scenario' shared example
|
50
|
+
#
|
51
|
+
# @example Inside class
|
52
|
+
# mandatory_json_values '$..GetWeatherResult' => 'Found'
|
53
|
+
#
|
54
|
+
# @example In test
|
55
|
+
# describe Exchange(:name) do
|
56
|
+
# it_behaves_like 'success scenario' # Includes json pair validation
|
57
|
+
# end
|
58
|
+
#
|
59
|
+
# @param [Hash] json_value_pairs Hash of element => expected value that must appear
|
60
|
+
# in a successful response body
|
61
|
+
def mandatory_json_values(json_value_pairs)
|
62
|
+
raise ArgumentError("Hash of {'jsonpath' => expected values} expected") unless json_value_pairs.is_a? Hash
|
63
|
+
|
64
|
+
define_method('expected_mandatory_json_values') { json_value_pairs }
|
65
|
+
end
|
66
|
+
|
67
|
+
# Links a particular path to a meaningful method that can be accessed from Exchange class.
|
68
|
+
# This will use the 'value_from_path' method which
|
69
|
+
# should be implemented by each ExchangeHandler
|
70
|
+
# @param [String, Symbol] name Method name used to access element
|
71
|
+
# @param [String, Symbol] path Path to find object (e.g, XPath, JSONPath).
|
72
|
+
# For JSONPath a ',' can be put to get an element either path
|
73
|
+
def element(name, path)
|
74
|
+
define_method("__custom_path_#{name}") do |response|
|
75
|
+
value_from_path(response, path.to_s)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# Links an attribute to a meaningful method that can be accessed from Exchange class.
|
80
|
+
# This will use the 'value_from_path' method which
|
81
|
+
# should be implemented by each ExchangeHandler
|
82
|
+
# @param [String, Symbol] name Method name used to access attribute
|
83
|
+
# @param [String, nil, Hash] attribute Attribute name to extract from xml. If not set, this will default to @name
|
84
|
+
def attribute(name, attribute = nil)
|
85
|
+
attribute_used = attribute || name.to_s
|
86
|
+
define_method("__custom_path_#{name}") do |response|
|
87
|
+
value_from_path(response, 'implicit', attribute: attribute_used)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# All xpath will be done with XML that is converted to lower case
|
92
|
+
# You must then use lower case in the xpath's to obtain the desired values
|
93
|
+
# @param [Boolean] set Whether to convert all xml in response to lower case before performing XPath
|
94
|
+
def convert_to_lower(set)
|
95
|
+
return unless set
|
96
|
+
|
97
|
+
define_method('convert_to_lower?') { true }
|
98
|
+
end
|
99
|
+
|
100
|
+
# Whether to remove namespaces from response in Xpath assertion automatically
|
101
|
+
# For why this may not be a good thing in general see
|
102
|
+
# http://tenderlovemaking.com/2009/04/23/namespaces-in-xml.html
|
103
|
+
# This will be overridden if xpath has a ':' in it
|
104
|
+
# @param [Boolean] set Whether to strip namespaces form XML response
|
105
|
+
def strip_namespaces(set)
|
106
|
+
return unless set
|
107
|
+
|
108
|
+
# Whether to remove namespaces in xpath assertion automatically
|
109
|
+
define_method('strip_namespaces?') { true }
|
110
|
+
end
|
111
|
+
|
112
|
+
# Set the default hash representing data to be used in making a request
|
113
|
+
# This will set the @request_option instance variable too
|
114
|
+
# @param [Hash] hash Default hash of request
|
115
|
+
def default_hash(hash)
|
116
|
+
define_method('default_hash_value') do
|
117
|
+
@request_option = :hash
|
118
|
+
Soaspec.always_use_keys? ? hash.transform_keys_to_symbols : hash
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# Set the request option type and the template name
|
123
|
+
# Erb is used to parse the template file, executing Ruby code in `<%= %>` blocks to work out the final request
|
124
|
+
# @param [String] name Name of file inside 'template' folder excluding extension
|
125
|
+
def template_name(name)
|
126
|
+
define_method('template_name_value') do
|
127
|
+
@request_option = :template
|
128
|
+
name
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -1,59 +1,77 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Soaspec
|
4
|
-
# Models a request made to a REST API
|
5
|
-
class RestRequest
|
6
|
-
# @example GET method
|
7
|
-
# :get
|
8
|
-
# @return [Symbol] REST method used
|
9
|
-
attr_accessor :method
|
10
|
-
# @example JSON body
|
11
|
-
# {"test":5}
|
12
|
-
# @return [String] Body of request sent
|
13
|
-
attr_accessor :body
|
14
|
-
# @return [String] Name given to test to describe it
|
15
|
-
attr_accessor :test_name
|
16
|
-
# @return [String] User used in basic auth
|
17
|
-
attr_accessor :basic_auth_user
|
18
|
-
# @return [String] Password used in basic auth
|
19
|
-
attr_accessor :basic_auth_password
|
20
|
-
# @return [String] Url appended to base_url
|
21
|
-
attr_accessor :suburl
|
22
|
-
# @return [Hash] Miscellaneous parameters
|
23
|
-
attr_accessor :other_params
|
24
|
-
# Headers. Keys that are `symbols` will be converted from `snake_case` to `Word-Word2`
|
25
|
-
# @return [Hash] Headers sent as part of request
|
26
|
-
attr_accessor :headers
|
27
|
-
|
28
|
-
# @param [Hash] overall Overall parameters used in Request
|
29
|
-
# @param [Hash] options Headers and basic auth options
|
30
|
-
# @param [String] body Body of Request to be sent
|
31
|
-
def initialize(overall, options, body)
|
32
|
-
overall_params = overall.dup # Must duplicate hash as deletion occurring
|
33
|
-
self.body = body
|
34
|
-
self.method = overall_params.delete(:method)
|
35
|
-
self.suburl = overall_params.delete(:suburl)
|
36
|
-
self.test_name = overall_params.delete(:name)
|
37
|
-
self.other_params = overall_params
|
38
|
-
self.basic_auth_user = options[:user]
|
39
|
-
self.basic_auth_password = options[:password]
|
40
|
-
self.headers = options[:headers]
|
41
|
-
end
|
42
|
-
|
43
|
-
# @
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
# @return [
|
50
|
-
def
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
# @return [
|
55
|
-
def
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Soaspec
|
4
|
+
# Models a request made to a REST API
|
5
|
+
class RestRequest
|
6
|
+
# @example GET method
|
7
|
+
# :get
|
8
|
+
# @return [Symbol] REST method used
|
9
|
+
attr_accessor :method
|
10
|
+
# @example JSON body
|
11
|
+
# {"test":5}
|
12
|
+
# @return [String] Body of request sent
|
13
|
+
attr_accessor :body
|
14
|
+
# @return [String] Name given to test to describe it
|
15
|
+
attr_accessor :test_name
|
16
|
+
# @return [String] User used in basic auth
|
17
|
+
attr_accessor :basic_auth_user
|
18
|
+
# @return [String] Password used in basic auth
|
19
|
+
attr_accessor :basic_auth_password
|
20
|
+
# @return [String] Url appended to base_url
|
21
|
+
attr_accessor :suburl
|
22
|
+
# @return [Hash] Miscellaneous parameters
|
23
|
+
attr_accessor :other_params
|
24
|
+
# Headers. Keys that are `symbols` will be converted from `snake_case` to `Word-Word2`
|
25
|
+
# @return [Hash] Headers sent as part of request
|
26
|
+
attr_accessor :headers
|
27
|
+
|
28
|
+
# @param [Hash] overall Overall parameters used in Request
|
29
|
+
# @param [Hash] options Headers and basic auth options
|
30
|
+
# @param [String] body Body of Request to be sent
|
31
|
+
def initialize(overall, options, body)
|
32
|
+
overall_params = overall.dup # Must duplicate hash as deletion occurring
|
33
|
+
self.body = body
|
34
|
+
self.method = overall_params.delete(:method)
|
35
|
+
self.suburl = overall_params.delete(:suburl)
|
36
|
+
self.test_name = overall_params.delete(:name)
|
37
|
+
self.other_params = overall_params
|
38
|
+
self.basic_auth_user = options[:user]
|
39
|
+
self.basic_auth_password = options[:password]
|
40
|
+
self.headers = options[:headers]
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [Hash] Query parameters for a REST Request
|
44
|
+
def query
|
45
|
+
other_params[:q]
|
46
|
+
end
|
47
|
+
|
48
|
+
# @param [String, Symbol] value Message to send to object retrieving a value
|
49
|
+
# @return [Object] Result of retrieving value
|
50
|
+
def [](value)
|
51
|
+
send(value)
|
52
|
+
end
|
53
|
+
|
54
|
+
# @return [String] Show inspection of all parameters
|
55
|
+
def to_s
|
56
|
+
inspect
|
57
|
+
end
|
58
|
+
|
59
|
+
# @return [Array] Array containing parameters used in making a request
|
60
|
+
def flatten
|
61
|
+
[method] + [suburl].flatten + query.flatten
|
62
|
+
end
|
63
|
+
|
64
|
+
# @return [String] Description that could be used in filename
|
65
|
+
def description
|
66
|
+
suburl_desc = suburl.is_a?(Array) ? File.join(suburl) : suburl
|
67
|
+
query_desc = ''
|
68
|
+
if query
|
69
|
+
query.each do |key, value|
|
70
|
+
query_desc = File.join(query_desc, "#{key}_#{value}")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
components = [method.to_s, suburl_desc, query_desc, 'response']
|
74
|
+
File.join(*components.collect!(&:to_s))
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|