mockserver-client 1.0.8.pre → 5.3.0

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.
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