mockserver-client 1.0.8.pre → 5.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -1
  3. data/Gemfile.lock +79 -0
  4. data/README.md +89 -229
  5. data/Rakefile +8 -8
  6. data/docs/Body.md +7 -0
  7. data/docs/BodyWithContentType.md +7 -0
  8. data/docs/ConnectionOptions.md +12 -0
  9. data/docs/ControlApi.md +269 -0
  10. data/docs/Delay.md +9 -0
  11. data/docs/Expectation.md +7 -0
  12. data/docs/ExpectationApi.md +51 -0
  13. data/docs/Expectations.md +7 -0
  14. data/docs/HttpClassCallback.md +8 -0
  15. data/docs/HttpError.md +10 -0
  16. data/docs/HttpForward.md +11 -0
  17. data/docs/HttpObjectCallback.md +8 -0
  18. data/docs/HttpOverrideForwardedRequest.md +9 -0
  19. data/docs/HttpRequest.md +15 -0
  20. data/docs/HttpResponse.md +14 -0
  21. data/docs/HttpTemplate.md +10 -0
  22. data/docs/KeyToMultiValue.md +7 -0
  23. data/docs/KeyToValue.md +7 -0
  24. data/docs/Ports.md +8 -0
  25. data/docs/TimeToLive.md +10 -0
  26. data/docs/Times.md +9 -0
  27. data/docs/Verification.md +9 -0
  28. data/docs/VerificationSequence.md +8 -0
  29. data/docs/VerificationTimes.md +9 -0
  30. data/docs/VerifyApi.md +94 -0
  31. data/lib/mockserver-client.rb +62 -15
  32. data/lib/mockserver-client/api/control_api.rb +316 -0
  33. data/lib/mockserver-client/api/expectation_api.rb +73 -0
  34. data/lib/mockserver-client/api/verify_api.rb +127 -0
  35. data/lib/mockserver-client/api_client.rb +388 -0
  36. data/lib/mockserver-client/api_error.rb +38 -0
  37. data/lib/mockserver-client/configuration.rb +202 -0
  38. data/lib/mockserver-client/models/body.rb +174 -0
  39. data/lib/mockserver-client/models/body_with_content_type.rb +174 -0
  40. data/lib/mockserver-client/models/connection_options.rb +219 -0
  41. data/lib/mockserver-client/models/delay.rb +192 -0
  42. data/lib/mockserver-client/models/expectation.rb +174 -0
  43. data/lib/mockserver-client/models/expectations.rb +174 -0
  44. data/lib/mockserver-client/models/http_class_callback.rb +183 -0
  45. data/lib/mockserver-client/models/http_error.rb +201 -0
  46. data/lib/mockserver-client/models/http_forward.rb +244 -0
  47. data/lib/mockserver-client/models/http_object_callback.rb +183 -0
  48. data/lib/mockserver-client/models/http_override_forwarded_request.rb +192 -0
  49. data/lib/mockserver-client/models/http_request.rb +246 -0
  50. data/lib/mockserver-client/models/http_response.rb +237 -0
  51. data/lib/mockserver-client/models/http_template.rb +235 -0
  52. data/lib/mockserver-client/models/key_to_multi_value.rb +174 -0
  53. data/lib/mockserver-client/models/key_to_value.rb +174 -0
  54. data/lib/mockserver-client/models/ports.rb +185 -0
  55. data/lib/mockserver-client/models/time_to_live.rb +235 -0
  56. data/lib/mockserver-client/models/times.rb +192 -0
  57. data/lib/mockserver-client/models/verification.rb +192 -0
  58. data/lib/mockserver-client/models/verification_sequence.rb +185 -0
  59. data/lib/mockserver-client/models/verification_times.rb +192 -0
  60. data/lib/mockserver-client/version.rb +15 -0
  61. data/mockserver-client.gemspec +44 -36
  62. data/spec/api/control_api_spec.rb +102 -0
  63. data/spec/api/expectation_api_spec.rb +46 -0
  64. data/spec/api/verify_api_spec.rb +57 -0
  65. data/spec/api_client_spec.rb +226 -0
  66. data/spec/configuration_spec.rb +42 -0
  67. data/spec/models/body_spec.rb +35 -0
  68. data/spec/models/body_with_content_type_spec.rb +35 -0
  69. data/spec/models/connection_options_spec.rb +65 -0
  70. data/spec/models/delay_spec.rb +47 -0
  71. data/spec/models/expectation_spec.rb +35 -0
  72. data/spec/models/expectations_spec.rb +35 -0
  73. data/spec/models/http_class_callback_spec.rb +41 -0
  74. data/spec/models/http_error_spec.rb +53 -0
  75. data/spec/models/http_forward_spec.rb +63 -0
  76. data/spec/models/http_object_callback_spec.rb +41 -0
  77. data/spec/models/http_override_forwarded_request_spec.rb +47 -0
  78. data/spec/models/http_request_spec.rb +83 -0
  79. data/spec/models/http_response_spec.rb +77 -0
  80. data/spec/models/http_template_spec.rb +57 -0
  81. data/spec/models/key_to_multi_value_spec.rb +35 -0
  82. data/spec/models/key_to_value_spec.rb +35 -0
  83. data/spec/models/ports_spec.rb +41 -0
  84. data/spec/models/time_to_live_spec.rb +57 -0
  85. data/spec/models/times_spec.rb +47 -0
  86. data/spec/models/verification_sequence_spec.rb +41 -0
  87. data/spec/models/verification_spec.rb +47 -0
  88. data/spec/models/verification_times_spec.rb +47 -0
  89. data/spec/spec_helper.rb +103 -53
  90. metadata +225 -158
  91. data/.gitignore +0 -21
  92. data/.rubocop.yml +0 -7
  93. data/bin/mockserver +0 -9
  94. data/lib/cli.rb +0 -146
  95. data/lib/mockserver/abstract_client.rb +0 -111
  96. data/lib/mockserver/mock_server_client.rb +0 -46
  97. data/lib/mockserver/model/array_of.rb +0 -85
  98. data/lib/mockserver/model/body.rb +0 -56
  99. data/lib/mockserver/model/cookie.rb +0 -36
  100. data/lib/mockserver/model/delay.rb +0 -34
  101. data/lib/mockserver/model/enum.rb +0 -47
  102. data/lib/mockserver/model/expectation.rb +0 -139
  103. data/lib/mockserver/model/forward.rb +0 -41
  104. data/lib/mockserver/model/header.rb +0 -43
  105. data/lib/mockserver/model/parameter.rb +0 -43
  106. data/lib/mockserver/model/request.rb +0 -81
  107. data/lib/mockserver/model/response.rb +0 -45
  108. data/lib/mockserver/model/times.rb +0 -61
  109. data/lib/mockserver/proxy_client.rb +0 -9
  110. data/lib/mockserver/utility_methods.rb +0 -59
  111. data/lib/mockserver/version.rb +0 -5
  112. data/pom.xml +0 -118
  113. data/spec/fixtures/forward_mockserver.json +0 -7
  114. data/spec/fixtures/incorrect_login_response.json +0 -20
  115. data/spec/fixtures/post_login_request.json +0 -22
  116. data/spec/fixtures/register_expectation.json +0 -50
  117. data/spec/fixtures/retrieved_request.json +0 -22
  118. data/spec/fixtures/search_request.json +0 -6
  119. data/spec/fixtures/times_once.json +0 -6
  120. data/spec/integration/mock_client_integration_spec.rb +0 -82
  121. data/spec/mockserver/builder_spec.rb +0 -90
  122. data/spec/mockserver/mock_client_spec.rb +0 -80
  123. data/spec/mockserver/proxy_client_spec.rb +0 -38
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- # Ruby #
2
- ########
3
- *.gem
4
- *.rbc
5
- *.bundle
6
- *.so
7
- *.o
8
- *.a
9
- *.log
10
- .config
11
- .yardoc
12
- .rakeTasks
13
- Gemfile.lock
14
- InstalledFiles
15
- coverage
16
- *doc
17
- *tmp
18
- lib/bundler/man
19
- pkg
20
- spec/reports
21
- vendor/bundle
@@ -1,7 +0,0 @@
1
- Style/LineLength:
2
- Max: 180
3
- Style/ClassAndModuleChildren:
4
- EnforcedStyle: compact
5
- Style/FileName:
6
- Exclude:
7
- - '**/mockserver-client.rb'
@@ -1,9 +0,0 @@
1
- # encoding: UTF-8
2
- #!/usr/bin/env ruby
3
-
4
- #
5
- # A thor-based runner for commands in this project
6
- # @author: Nayyara Samuel (mailto: nayyara.samuel@opower.com)
7
- #
8
- require_relative '../lib/cli'
9
- MockServerCLI.start
data/lib/cli.rb DELETED
@@ -1,146 +0,0 @@
1
- # encoding: UTF-8
2
- require 'thor'
3
- require 'colorize'
4
- require_relative './mockserver-client'
5
-
6
- # CLI for this gem
7
- # @author Nayyara Samuel(nayyara.samuel@opower.com)
8
- #
9
- module CLIHelpers
10
- include MockServer
11
-
12
- LOGGER = LoggingFactory::DEFAULT_FACTORY.log('MockServerClient')
13
-
14
- # Prints out the parameters passed to it
15
- # @param options [Hash] a hash of parameters
16
- def print_parameters(options)
17
- puts "\nRunning with parameters:".bold
18
- options.each { |k, v| puts "\t#{k}: #{v}".yellow }
19
- puts ''
20
- end
21
-
22
- # Create a mockserver client
23
- # @param options [Struct] with host and port set
24
- # @return [MockServerClient] the mockserver client with the host and port
25
- def mockserver_client(options)
26
- client = MockServerClient.new(options.host, options.port)
27
- client.logger = LOGGER
28
- client
29
- end
30
-
31
- # Create a proxy client
32
- # @param options [Struct] with host and port set
33
- # @return [ProxyClient] the proxy client with the host and port
34
- def proxy_client(options)
35
- client = ProxyClient.new(options.host, options.port)
36
- client.logger = LOGGER
37
- client
38
- end
39
-
40
- # Convert a hash to a struct
41
- # @param hash [Hash] a hash
42
- # @return [Struct] a struct constructed from the hash
43
- def to_struct(hash)
44
- hash = symbolize_keys(hash)
45
- Struct.new(*hash.keys).new(*hash.values)
46
- end
47
-
48
- # Process a block using options extracted into a struct
49
- # @param mockserver [Boolean] true to use mockserver, false to use proxy
50
- # @yieldparam [AbstractClient] a mockserver or a proxy client
51
- # @yieldparam [Struct] a struct created from options hash
52
- def execute_command(mockserver = false, data_required = false, error_msg = '--data option must be provided', &_)
53
- print_parameters(options)
54
- struct_options = to_struct({ data: nil }.merge(options))
55
- if data_required && !options['data']
56
- error(error_msg)
57
- else
58
- client = mockserver ? mockserver_client(struct_options) : proxy_client(struct_options)
59
- yield client, struct_options if block_given?
60
- end
61
- end
62
-
63
- # Prints an error message
64
- # @param message [String] an error message
65
- def error(message)
66
- puts message.red
67
- end
68
-
69
- # Read a file
70
- # @param file [String] a file to read
71
- def read_file(file)
72
- YAML.load_file(file)
73
- end
74
- end
75
-
76
- # CLI for mock server and proxy clients
77
- class MockServerCLI < Thor
78
- include CLIHelpers
79
- include MockServer::UtilityMethods
80
- include MockServer::Model::DSL
81
-
82
- class_option :host, type: :string, aliases: '-h', required: true, default: 'localhost', desc: 'The host for the MockServer client.'
83
- class_option :port, type: :numeric, aliases: '-p', required: true, default: 8080, desc: 'The port for the MockServer client.'
84
- class_option :data, type: :string, aliases: '-d', desc: 'A JSON or YAML file containing the request payload.'
85
-
86
- desc 'retrieve', 'Retrieve the list of requests that have been made to the mock/proxy server.'
87
-
88
- def retrieve
89
- execute_command do |client, _|
90
- result = options.data ? client.retrieve(read_file(options.data)) : client.retrieve
91
- puts "RESULT:\n".bold + "#{result.to_json}".green
92
- end
93
- end
94
-
95
- desc 'register', 'Register an expectation with the mock server.'
96
-
97
- def register
98
- execute_command(true, true) do |client, options|
99
- payload = read_file(options.data)
100
- mock_expectation = expectation do |expectation|
101
- expectation.populate_from_payload(payload)
102
- end
103
- client.register(mock_expectation)
104
- end
105
- end
106
-
107
- desc 'dump_log', 'Dumps the matching request to the mock server logs.'
108
- option :java, type: :boolean, aliases: '-j', default: false, desc: 'A switch to turn Java format for logs on/off.'
109
-
110
- def dump_log
111
- execute_command do |client, options|
112
- options.data ? client.dump_log(read_file(options.data), options.java) : client.dump_log(nil, options.java)
113
- end
114
- end
115
-
116
- desc 'clear', 'Clears all stored mock request/responses from server.'
117
-
118
- def clear
119
- error_message = 'ERROR: No request provided. HINT: Use `clear` to selectively clear requests. Use `reset` to clear all.'
120
- execute_command(false, true, error_message) do |client, _|
121
- payload = read_file(options.data)
122
- client.clear(payload)
123
- end
124
- end
125
-
126
- desc 'reset', 'Resets the server clearing all data.'
127
-
128
- def reset
129
- execute_command do |client, _|
130
- client.reset
131
- end
132
- end
133
-
134
- desc 'verify', 'Verify that a request has been made the specified number of times to the server.'
135
-
136
- def verify
137
- execute_command(false, true) do |client, _|
138
- payload = read_file(options.data)
139
- mock_request = payload[HTTP_REQUEST]
140
- mock_times = payload[HTTP_TIMES]
141
-
142
- error 'No request found for verifying against' unless mock_request
143
- mock_times ? client.verify(mock_request, mock_times) : client.verify(mock_request)
144
- end
145
- end
146
- end
@@ -1,111 +0,0 @@
1
- # encoding: UTF-8
2
- require 'rest-client'
3
- require 'logging_factory'
4
- require_relative './model/times'
5
- require_relative './model/request'
6
- require_relative './model/expectation'
7
- require_relative './utility_methods'
8
-
9
- # An abstract client for making requests supported by mock and proxy client.
10
- # @author Nayyara Samuel(mailto: nayyara.samuel@opower.com)
11
- #
12
- module MockServer
13
- RESET_ENDPOINT = '/reset'
14
- CLEAR_ENDPOINT = '/clear'
15
- RETRIEVE_ENDPOINT = '/retrieve'
16
- DUMP_LOG_ENDPOINT = '/dumpToLog'
17
-
18
- # An abstract client for making requests supported by mock and proxy client.
19
- class AbstractClient
20
- include Model::DSL
21
- include Model
22
- include UtilityMethods
23
-
24
- attr_accessor :logger
25
-
26
- def initialize(host, port)
27
- fail 'Cannot instantiate AbstractClient class. You must subclass it.' if self.class == AbstractClient
28
- fail 'Host/port must not be nil' unless host && port
29
- @base = RestClient::Resource.new("http://#{host}:#{port}", headers: { 'Content-Type' => 'application/json' })
30
- @logger = ::LoggingFactory::DEFAULT_FACTORY.log(self.class)
31
- end
32
-
33
- # Clear all expectations with the given request
34
- # @param request [Request] the request to use to clear an expectation
35
- # @return [Object] the response from the clear action
36
- def clear(request)
37
- request = camelized_hash(HTTP_REQUEST => Request.new(symbolize_keys(request)))
38
-
39
- logger.debug("Clearing expectation with request: #{request}")
40
- logger.debug("URL: #{CLEAR_ENDPOINT}. Payload: #{request.to_hash}")
41
-
42
- response = @base[CLEAR_ENDPOINT].put(request.to_json, content_type: :json)
43
- logger.debug("Got clear response: #{response.code}")
44
- parse_string_to_json(response)
45
- end
46
-
47
- # Reset the mock server clearing all expectations previously registered
48
- # @return [Object] the response from the reset action
49
- def reset
50
- request = {}
51
-
52
- logger.debug('Resetting mockserver')
53
- logger.debug("URL: #{RESET_ENDPOINT}. Payload: #{request.to_hash}")
54
-
55
- response = @base[RESET_ENDPOINT].put(request.to_json)
56
- logger.debug("Got reset response: #{response.code}")
57
- parse_string_to_json(response)
58
- end
59
-
60
- # Retrieve the list of requests that have been processed by the server
61
- # @param request [Request] to filter requests
62
- # @return [Object] the list of responses processed by the server
63
- def retrieve(request = nil)
64
- request = request ? camelized_hash(HTTP_REQUEST => Request.new(symbolize_keys(request))) : {}
65
-
66
- logger.debug('Retrieving request list from mockserver')
67
- logger.debug("URL: #{RETRIEVE_ENDPOINT}. Payload: #{request.to_hash}")
68
-
69
- response = @base[RETRIEVE_ENDPOINT].put(request.to_json)
70
- logger.debug("Got retrieve response: #{response.code}")
71
- requests = Requests.new([])
72
- parse_string_to_json(response.body).map { |result| requests << request_from_json(result) } unless response.empty?
73
- requests.code = response.code
74
- requests
75
- end
76
-
77
- # Request to dump logs to file
78
- # @param java [Boolean] true to dump as Java code; false to dump as JSON
79
- # @return [Object] the list of responses processed by the server
80
- def dump_log(request = nil, java = false)
81
- type_params = java ? '?type=java' : ''
82
- url = "#{DUMP_LOG_ENDPOINT}#{type_params}"
83
- request = request ? Request.new(symbolize_keys(request)) : {}
84
-
85
- logger.debug('Sending dump log request to mockserver')
86
- logger.debug("URL: #{url}. Payload: #{request.to_hash}")
87
-
88
- response = @base[url].put(request.to_json)
89
- logger.debug("Got dump to log response: #{response.code}")
90
- parse_string_to_json(response)
91
- end
92
-
93
- # Verify that the given request is called the number of times expected
94
- # @param request [Request] to filter requests
95
- # @param times [Times] expected number of times
96
- # @return [Object] the list of responses processed by the server that match the request
97
- def verify(request, times = exactly(1))
98
- logger.debug('Sending query for verify to mockserver')
99
- results = retrieve(request)
100
-
101
- # Reusing the times model here so interpreting values here
102
- times = Times.new(symbolize_keys(times))
103
- num_times = times.remaining_times
104
- is_exact = !times.unlimited
105
-
106
- fulfilled = is_exact ? (num_times == results.size) : (num_times <= results.size)
107
- fail "Expected request to be present: [#{num_times}] (#{is_exact ? 'exactly' : 'at least'}). But found: [#{results.size}]" unless fulfilled
108
- results
109
- end
110
- end
111
- end
@@ -1,46 +0,0 @@
1
- # encoding: UTF-8
2
- require_relative './model/expectation'
3
- require_relative './abstract_client'
4
- require_relative './utility_methods'
5
-
6
- #
7
- # The client used to interact with the mock server.
8
- # @author:: Nayyara Samuel (mailto: nayyara.samuel@opower.com)
9
- #
10
- module MockServer
11
- EXPECTATION_ENDPOINT = '/expectation'
12
-
13
- # The client used to interact with the mock server.
14
- class MockServerClient < AbstractClient
15
- include Model
16
- include UtilityMethods
17
-
18
- # Registers an expectation with the mockserver
19
- # @param expectation [Expectation] the expectation to create the request from
20
- # @return [Object] the response from the register action
21
- def register(expectation)
22
- fail 'Expectation passed in is not valid type' unless expectation.is_a?(Expectation)
23
- request = create_expectation_request(expectation)
24
-
25
- logger.debug('Registering new expectation')
26
- logger.debug("URL: #{EXPECTATION_ENDPOINT} Payload: #{request.to_hash}")
27
-
28
- response = @base[EXPECTATION_ENDPOINT].put(request.to_json, content_type: :json)
29
- logger.debug("Got register response: #{response.code}")
30
- parse_string_to_json(response)
31
- end
32
-
33
- private
34
-
35
- # Create an expecation request to send to the expectation endpoint of
36
- # @param expectation [Expectation] the expectation to create the request from
37
- # @return [Hash] a hash representing the request to use in registering an expectation with the mock server
38
- # rubocop:disable Lint/LiteralInInterpolation
39
- def create_expectation_request(expectation)
40
- expectation_request = camelized_hash(expectation)
41
- logger.debug("Expectation JSON: #{expectation_request.to_json}")
42
- fail "You can only set either of #{[HTTP_RESPONSE, HTTP_FORWARD]}. But not both" if expectation_request[HTTP_RESPONSE] && expectation_request[HTTP_FORWARD]
43
- expectation_request
44
- end
45
- end
46
- end
@@ -1,85 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # The ArrayOf class stores instances of a given class only.
4
- # It enforces this by intercepting the methods :<<, :[]= and :insert on the Array class
5
- # and casts objects to the allowed type first. To use in your code, create a subclass of ArrayOf and override the child_class() method to return
6
- # the class associated with the array.
7
- #
8
- # NOTE: You should use this class internally with the contract that you only call :<<. :[]= and :insert method
9
- # to manipulate the array in use. Can easily be changed to have stricter rules, suffices for internal use in this gem.
10
- #
11
- # @author:: Nayyara Samuel (mailto: nayyara.samuel@opower.com)
12
- #
13
- module MockServer::Model
14
- DEFAULT_MISSING_INDEX = -1_000_000_000
15
-
16
- # The ArrayOf class stores instances of a given class only.
17
- class ArrayOf < Array
18
- alias_method :add_element, :<<
19
- alias_method :set_element, :[]=
20
- alias_method :insert_element, :insert
21
-
22
- # Create an array from the elements passed in
23
- def initialize(items)
24
- items.each do |item|
25
- self << item
26
- end
27
- end
28
-
29
- # The class/type that this array stores
30
- def child_class
31
- fail 'Subclass should override method :child_class'
32
- end
33
-
34
- # Add the item to the array
35
- # @param item [Object] an item of the type/class supported by this array
36
- # @raise [Exception] if the item cannot be converted to the allowed class
37
- def <<(item)
38
- add_element(convert_to_child_class(item))
39
- end
40
-
41
- # Set the given item at the index
42
- # @param index [Integer] the index for the new element
43
- # @param item [Object] an item of the type/class supported by this array
44
- # @raise [Exception] if the item cannot be converted to the allowed class
45
- def []=(index, item)
46
- set_element(index, convert_to_child_class(item))
47
- end
48
-
49
- # Adds the given item at the index and shifts elements forward
50
- # @param index [Integer] the index for the new element
51
- # @param item [Object] an item of the type/class supported by this array
52
- # @raise [Exception] if the item cannot be converted to the allowed class
53
- def insert(index, item)
54
- insert_element(index, convert_to_child_class(item))
55
- end
56
-
57
- # Method to set the element at the specified index.
58
- # Will insert at index if there is another object at the index; otherwise will update.
59
- # If the special DEFAULT_MISSING_INDEX value is given, will insert at the end.
60
- # @param index [Integer] the index for the new element
61
- # @param item [Object] an item of the type/class supported by this array
62
- # @raise [Exception] if the item cannot be converted to the allowed class
63
- def set(index, item)
64
- if index == DEFAULT_MISSING_INDEX
65
- self << item
66
- elsif self[index]
67
- insert(index, item)
68
- else
69
- self[index] = item
70
- end
71
- end
72
-
73
- # Cast item to target class
74
- def convert_to_child_class(item)
75
- if item && item.class != child_class
76
- begin
77
- item = child_class.new(item)
78
- rescue Exception => e # rubocop:disable Lint/RescueException
79
- raise "Failed to convert element: #{item} to required type #{child_class}. Error: #{e.message}"
80
- end
81
- end
82
- item
83
- end
84
- end
85
- end
@@ -1,56 +0,0 @@
1
- # encoding: UTF-8
2
- require 'hashie'
3
- require_relative './parameter'
4
- require_relative './enum'
5
-
6
- #
7
- # A model for a a body in a request object.
8
- # @author: Nayyara Samuel (mailto: nayyara.samuel@opower.com)
9
- #
10
- module MockServer::Model
11
- # An enum for body type
12
- class BodyType < SymbolizedEnum
13
- def allowed_values
14
- [:STRING, :REGEX, :XPATH, :PARAMETERS, :BINARY]
15
- end
16
- end
17
-
18
- # A model for a a body in a request object.
19
- class Body < Hashie::Dash
20
- include Hashie::Extensions::MethodAccess
21
- include Hashie::Extensions::IgnoreUndeclared
22
- include Hashie::Extensions::Coercion
23
-
24
- property :type, required: true
25
- property :value
26
- property :parameters
27
-
28
- coerce_key :type, BodyType
29
- coerce_key :value, String
30
- coerce_key :parameters, Parameters
31
- end
32
-
33
- # DSL methods related to body
34
- module DSL
35
- # For response object where body can only be a string
36
- def body(value)
37
- value
38
- end
39
-
40
- def exact(value)
41
- Body.new(type: :STRING, value: value)
42
- end
43
-
44
- def regex(value)
45
- Body.new(type: :REGEX, value: value)
46
- end
47
-
48
- def xpath(value)
49
- Body.new(type: :XPATH, value: value)
50
- end
51
-
52
- def parameterized(*parameters)
53
- Body.new(type: :PARAMETERS, parameters: parameters)
54
- end
55
- end
56
- end