http_stub 0.23.1 → 0.24.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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/lib/http_stub.rb +4 -3
  3. data/lib/http_stub/configurer/dsl/server.rb +9 -0
  4. data/lib/http_stub/configurer/server/command.rb +1 -1
  5. data/lib/http_stub/configurer/server/command_processor.rb +2 -2
  6. data/lib/http_stub/rake/server_tasks.rb +11 -7
  7. data/lib/http_stub/server/application/application.rb +115 -0
  8. data/lib/http_stub/server/application/cross_origin_support.rb +34 -0
  9. data/lib/http_stub/server/application/response_pipeline.rb +20 -0
  10. data/lib/http_stub/server/application/text_formatting_support.rb +21 -0
  11. data/lib/http_stub/server/public/jquery-2.2.4.min.js +4 -0
  12. data/lib/http_stub/server/stub/response/file.rb +2 -2
  13. data/lib/http_stub/server/stub/response/text.rb +2 -2
  14. data/lib/http_stub/server/views/_activate_scenario.haml +1 -1
  15. data/lib/http_stub/server/views/layout.haml +1 -1
  16. data/lib/http_stub/version.rb +1 -1
  17. data/spec/acceptance/cross_origin_support_spec.rb +127 -0
  18. data/spec/acceptance/stub_match_spec.rb +0 -1
  19. data/spec/lib/http_stub/configurer/dsl/stub_builder_spec.rb +0 -4
  20. data/spec/lib/http_stub/configurer/request/stub_spec.rb +0 -7
  21. data/spec/lib/http_stub/configurer/server/command_processor_integration_spec.rb +2 -1
  22. data/spec/lib/http_stub/rake/server_tasks_smoke_spec.rb +7 -4
  23. data/spec/lib/http_stub/server/{application_integration_spec.rb → application/application_integration_spec.rb} +1 -1
  24. data/spec/lib/http_stub/server/{application_spec.rb → application/application_spec.rb} +8 -4
  25. data/spec/lib/http_stub/server/application/cross_origin_support_spec.rb +114 -0
  26. data/spec/lib/http_stub/server/{response_pipeline_spec.rb → application/response_pipeline_spec.rb} +5 -5
  27. data/spec/lib/http_stub/server/{application_helpers_spec.rb → application/text_formatting_support_spec.rb} +4 -4
  28. data/spec/lib/http_stub/server/registry_spec.rb +0 -5
  29. data/spec/spec_helper.rb +5 -14
  30. data/spec/support/browser_integration.rb +9 -0
  31. data/spec/support/cross_origin_server/application.rb +5 -0
  32. data/spec/support/cross_origin_server/index_page.rb +26 -0
  33. data/spec/support/cross_origin_server/integration.rb +24 -0
  34. data/spec/support/cross_origin_server/public/index.html +33 -0
  35. data/spec/support/server_integration.rb +9 -3
  36. metadata +56 -41
  37. data/lib/http_stub/server/application.rb +0 -110
  38. data/lib/http_stub/server/application_helpers.rb +0 -19
  39. data/lib/http_stub/server/public/jquery-2.2.1.min.js +0 -4
  40. data/lib/http_stub/server/response_pipeline.rb +0 -18
@@ -0,0 +1,24 @@
1
+ shared_context "cross origin server integration" do
2
+
3
+ before(:context) do
4
+ @cross_origin_server_pid = Process.spawn("ruby #{File.dirname(__FILE__)}/application.rb")
5
+ ::Wait.until!(description: "cross origin server started") do
6
+ Net::HTTP.get_response(cross_origin_server_host, "/", cross_origin_server_port)
7
+ end
8
+ end
9
+
10
+ after(:context) { Process.kill(9, @cross_origin_server_pid) }
11
+
12
+ def cross_origin_server_host
13
+ "localhost"
14
+ end
15
+
16
+ def cross_origin_server_port
17
+ 8005
18
+ end
19
+
20
+ def cross_origin_server_uri
21
+ "http://#{cross_origin_server_host}:#{cross_origin_server_port}"
22
+ end
23
+
24
+ end
@@ -0,0 +1,33 @@
1
+ <html>
2
+ <head>
3
+ <script type="application/javascript">
4
+
5
+ function activateScenario() {
6
+ var request = new XMLHttpRequest();
7
+ request.open("POST", "http://localhost:8001/http_stub/scenarios/activate", false);
8
+ request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
9
+
10
+ var result = "Failed";
11
+ try {
12
+ request.send(encodeURI("name=" + document.getElementById("scenario_name").value));
13
+ if (request.status == 200) {
14
+ result = "Succeeded";
15
+ }
16
+ } catch(error) {
17
+ //Intentionally blank
18
+ }
19
+
20
+ document.getElementById("response_indicator").innerHTML = result;
21
+ }
22
+
23
+ </script>
24
+ </head>
25
+ <body>
26
+ <label for="scenario_name">Scenario Name: </label><input id="scenario_name" type="text" />
27
+ <br/>
28
+ <button id="activate_scenario" onclick="activateScenario()">Activate</button>
29
+ <br/>
30
+ <hr/>
31
+ <label>Cross-Origin Request Response:</label><span id="response_indicator">&nbsp;</span>
32
+ </body>
33
+ </html>
@@ -3,11 +3,17 @@ shared_context "server integration" do
3
3
  include HtmlHelpers
4
4
 
5
5
  before(:context) do
6
- @pid = Process.spawn("rake example_server:start:foreground --trace")
7
- ::Wait.until!(description: "http stub server started") { Net::HTTP.get_response(server_host, "/", server_port) }
6
+ @server_pid = Process.spawn("rake #{server_name}:start:foreground --trace")
7
+ ::Wait.until!(description: "http stub server #{server_name} started") do
8
+ Net::HTTP.get_response(server_host, "/", server_port)
9
+ end
8
10
  end
9
11
 
10
- after(:context) { Process.kill(9, @pid) }
12
+ after(:context) { Process.kill(9, @server_pid) }
13
+
14
+ def server_name
15
+ "example_server"
16
+ end
11
17
 
12
18
  def server_host
13
19
  "localhost"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_stub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.1
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - dueckes
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2016-05-30 00:00:00.000000000 Z
15
+ date: 2016-07-15 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rake
@@ -146,56 +146,56 @@ dependencies:
146
146
  requirements:
147
147
  - - "~>"
148
148
  - !ruby/object:Gem::Version
149
- version: '0.40'
149
+ version: '0.41'
150
150
  type: :development
151
151
  prerelease: false
152
152
  version_requirements: !ruby/object:Gem::Requirement
153
153
  requirements:
154
154
  - - "~>"
155
155
  - !ruby/object:Gem::Version
156
- version: '0.40'
156
+ version: '0.41'
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: rspec
159
159
  requirement: !ruby/object:Gem::Requirement
160
160
  requirements:
161
161
  - - "~>"
162
162
  - !ruby/object:Gem::Version
163
- version: '3.4'
163
+ version: '3.5'
164
164
  type: :development
165
165
  prerelease: false
166
166
  version_requirements: !ruby/object:Gem::Requirement
167
167
  requirements:
168
168
  - - "~>"
169
169
  - !ruby/object:Gem::Version
170
- version: '3.4'
170
+ version: '3.5'
171
171
  - !ruby/object:Gem::Dependency
172
- name: coderay
172
+ name: nokogiri
173
173
  requirement: !ruby/object:Gem::Requirement
174
174
  requirements:
175
175
  - - "~>"
176
176
  - !ruby/object:Gem::Version
177
- version: '1.1'
177
+ version: '1.6'
178
178
  type: :development
179
179
  prerelease: false
180
180
  version_requirements: !ruby/object:Gem::Requirement
181
181
  requirements:
182
182
  - - "~>"
183
183
  - !ruby/object:Gem::Version
184
- version: '1.1'
184
+ version: '1.6'
185
185
  - !ruby/object:Gem::Dependency
186
- name: rack-test
186
+ name: httparty
187
187
  requirement: !ruby/object:Gem::Requirement
188
188
  requirements:
189
189
  - - "~>"
190
190
  - !ruby/object:Gem::Version
191
- version: '0.6'
191
+ version: '0.13'
192
192
  type: :development
193
193
  prerelease: false
194
194
  version_requirements: !ruby/object:Gem::Requirement
195
195
  requirements:
196
196
  - - "~>"
197
197
  - !ruby/object:Gem::Version
198
- version: '0.6'
198
+ version: '0.13'
199
199
  - !ruby/object:Gem::Dependency
200
200
  name: json
201
201
  requirement: !ruby/object:Gem::Requirement
@@ -211,89 +211,89 @@ dependencies:
211
211
  - !ruby/object:Gem::Version
212
212
  version: '1.8'
213
213
  - !ruby/object:Gem::Dependency
214
- name: httparty
214
+ name: rack-test
215
215
  requirement: !ruby/object:Gem::Requirement
216
216
  requirements:
217
217
  - - "~>"
218
218
  - !ruby/object:Gem::Version
219
- version: '0.13'
219
+ version: '0.6'
220
220
  type: :development
221
221
  prerelease: false
222
222
  version_requirements: !ruby/object:Gem::Requirement
223
223
  requirements:
224
224
  - - "~>"
225
225
  - !ruby/object:Gem::Version
226
- version: '0.13'
226
+ version: '0.6'
227
227
  - !ruby/object:Gem::Dependency
228
- name: nokogiri
228
+ name: wait_until
229
229
  requirement: !ruby/object:Gem::Requirement
230
230
  requirements:
231
231
  - - "~>"
232
232
  - !ruby/object:Gem::Version
233
- version: '1.6'
233
+ version: '0.3'
234
234
  type: :development
235
235
  prerelease: false
236
236
  version_requirements: !ruby/object:Gem::Requirement
237
237
  requirements:
238
238
  - - "~>"
239
239
  - !ruby/object:Gem::Version
240
- version: '1.6'
240
+ version: '0.3'
241
241
  - !ruby/object:Gem::Dependency
242
- name: wait_until
242
+ name: selenium-webdriver
243
243
  requirement: !ruby/object:Gem::Requirement
244
244
  requirements:
245
245
  - - "~>"
246
246
  - !ruby/object:Gem::Version
247
- version: '0.3'
247
+ version: '2.53'
248
248
  type: :development
249
249
  prerelease: false
250
250
  version_requirements: !ruby/object:Gem::Requirement
251
251
  requirements:
252
252
  - - "~>"
253
253
  - !ruby/object:Gem::Version
254
- version: '0.3'
254
+ version: '2.53'
255
255
  - !ruby/object:Gem::Dependency
256
256
  name: simplecov
257
257
  requirement: !ruby/object:Gem::Requirement
258
258
  requirements:
259
259
  - - "~>"
260
260
  - !ruby/object:Gem::Version
261
- version: '0.11'
261
+ version: '0.12'
262
262
  type: :development
263
263
  prerelease: false
264
264
  version_requirements: !ruby/object:Gem::Requirement
265
265
  requirements:
266
266
  - - "~>"
267
267
  - !ruby/object:Gem::Version
268
- version: '0.11'
268
+ version: '0.12'
269
269
  - !ruby/object:Gem::Dependency
270
- name: travis-lint
270
+ name: codeclimate-test-reporter
271
271
  requirement: !ruby/object:Gem::Requirement
272
272
  requirements:
273
273
  - - "~>"
274
274
  - !ruby/object:Gem::Version
275
- version: '2.0'
275
+ version: '0.6'
276
276
  type: :development
277
277
  prerelease: false
278
278
  version_requirements: !ruby/object:Gem::Requirement
279
279
  requirements:
280
280
  - - "~>"
281
281
  - !ruby/object:Gem::Version
282
- version: '2.0'
282
+ version: '0.6'
283
283
  - !ruby/object:Gem::Dependency
284
- name: codeclimate-test-reporter
284
+ name: travis-lint
285
285
  requirement: !ruby/object:Gem::Requirement
286
286
  requirements:
287
287
  - - "~>"
288
288
  - !ruby/object:Gem::Version
289
- version: '0.5'
289
+ version: '2.0'
290
290
  type: :development
291
291
  prerelease: false
292
292
  version_requirements: !ruby/object:Gem::Requirement
293
293
  requirements:
294
294
  - - "~>"
295
295
  - !ruby/object:Gem::Version
296
- version: '0.5'
296
+ version: '2.0'
297
297
  description: fakeweb for a HTTP server, informing it to stub / fake responses
298
298
  email: matthew.ueckerman@myob.com
299
299
  executables: []
@@ -336,18 +336,19 @@ files:
336
336
  - "./lib/http_stub/rake/server_daemon_tasks.rb"
337
337
  - "./lib/http_stub/rake/server_tasks.rb"
338
338
  - "./lib/http_stub/rake/task_generators.rb"
339
- - "./lib/http_stub/server/application.rb"
340
- - "./lib/http_stub/server/application_helpers.rb"
339
+ - "./lib/http_stub/server/application/application.rb"
340
+ - "./lib/http_stub/server/application/cross_origin_support.rb"
341
+ - "./lib/http_stub/server/application/response_pipeline.rb"
342
+ - "./lib/http_stub/server/application/text_formatting_support.rb"
341
343
  - "./lib/http_stub/server/daemon.rb"
342
344
  - "./lib/http_stub/server/public/favicon.ico"
343
- - "./lib/http_stub/server/public/jquery-2.2.1.min.js"
345
+ - "./lib/http_stub/server/public/jquery-2.2.4.min.js"
344
346
  - "./lib/http_stub/server/registry.rb"
345
347
  - "./lib/http_stub/server/request.rb"
346
348
  - "./lib/http_stub/server/request/headers.rb"
347
349
  - "./lib/http_stub/server/request/parameters.rb"
348
350
  - "./lib/http_stub/server/request/request.rb"
349
351
  - "./lib/http_stub/server/response.rb"
350
- - "./lib/http_stub/server/response_pipeline.rb"
351
352
  - "./lib/http_stub/server/scenario.rb"
352
353
  - "./lib/http_stub/server/scenario/activator.rb"
353
354
  - "./lib/http_stub/server/scenario/controller.rb"
@@ -407,6 +408,7 @@ files:
407
408
  - "./spec/acceptance/activator_spec.rb"
408
409
  - "./spec/acceptance/configurer_initialization_spec.rb"
409
410
  - "./spec/acceptance/configurer_part_spec.rb"
411
+ - "./spec/acceptance/cross_origin_support_spec.rb"
410
412
  - "./spec/acceptance/endpoint_template_spec.rb"
411
413
  - "./spec/acceptance/request_reference_spec.rb"
412
414
  - "./spec/acceptance/scenario_spec.rb"
@@ -450,9 +452,11 @@ files:
450
452
  - "./spec/lib/http_stub/rake/server_daemon_tasks_smoke_spec.rb"
451
453
  - "./spec/lib/http_stub/rake/server_tasks_smoke_spec.rb"
452
454
  - "./spec/lib/http_stub/rake/server_tasks_spec.rb"
453
- - "./spec/lib/http_stub/server/application_helpers_spec.rb"
454
- - "./spec/lib/http_stub/server/application_integration_spec.rb"
455
- - "./spec/lib/http_stub/server/application_spec.rb"
455
+ - "./spec/lib/http_stub/server/application/application_integration_spec.rb"
456
+ - "./spec/lib/http_stub/server/application/application_spec.rb"
457
+ - "./spec/lib/http_stub/server/application/cross_origin_support_spec.rb"
458
+ - "./spec/lib/http_stub/server/application/response_pipeline_spec.rb"
459
+ - "./spec/lib/http_stub/server/application/text_formatting_support_spec.rb"
456
460
  - "./spec/lib/http_stub/server/daemon_integration_spec.rb"
457
461
  - "./spec/lib/http_stub/server/daemon_spec.rb"
458
462
  - "./spec/lib/http_stub/server/payload_file_consolidator_spec.rb"
@@ -461,7 +465,6 @@ files:
461
465
  - "./spec/lib/http_stub/server/request/parameters_spec.rb"
462
466
  - "./spec/lib/http_stub/server/request/request_spec.rb"
463
467
  - "./spec/lib/http_stub/server/request_spec.rb"
464
- - "./spec/lib/http_stub/server/response_pipeline_spec.rb"
465
468
  - "./spec/lib/http_stub/server/response_spec.rb"
466
469
  - "./spec/lib/http_stub/server/scenario/activator_spec.rb"
467
470
  - "./spec/lib/http_stub/server/scenario/controller_spec.rb"
@@ -504,7 +507,12 @@ files:
504
507
  - "./spec/resources/sample.pdf"
505
508
  - "./spec/resources/sample.txt"
506
509
  - "./spec/spec_helper.rb"
510
+ - "./spec/support/browser_integration.rb"
507
511
  - "./spec/support/configurer_integration.rb"
512
+ - "./spec/support/cross_origin_server/application.rb"
513
+ - "./spec/support/cross_origin_server/index_page.rb"
514
+ - "./spec/support/cross_origin_server/integration.rb"
515
+ - "./spec/support/cross_origin_server/public/index.html"
508
516
  - "./spec/support/html_helpers.rb"
509
517
  - "./spec/support/http_stub/empty_configurer.rb"
510
518
  - "./spec/support/http_stub/scenario_fixture.rb"
@@ -541,6 +549,7 @@ test_files:
541
549
  - "./spec/acceptance/activator_spec.rb"
542
550
  - "./spec/acceptance/configurer_initialization_spec.rb"
543
551
  - "./spec/acceptance/configurer_part_spec.rb"
552
+ - "./spec/acceptance/cross_origin_support_spec.rb"
544
553
  - "./spec/acceptance/endpoint_template_spec.rb"
545
554
  - "./spec/acceptance/request_reference_spec.rb"
546
555
  - "./spec/acceptance/scenario_spec.rb"
@@ -584,9 +593,11 @@ test_files:
584
593
  - "./spec/lib/http_stub/rake/server_daemon_tasks_smoke_spec.rb"
585
594
  - "./spec/lib/http_stub/rake/server_tasks_smoke_spec.rb"
586
595
  - "./spec/lib/http_stub/rake/server_tasks_spec.rb"
587
- - "./spec/lib/http_stub/server/application_helpers_spec.rb"
588
- - "./spec/lib/http_stub/server/application_integration_spec.rb"
589
- - "./spec/lib/http_stub/server/application_spec.rb"
596
+ - "./spec/lib/http_stub/server/application/application_integration_spec.rb"
597
+ - "./spec/lib/http_stub/server/application/application_spec.rb"
598
+ - "./spec/lib/http_stub/server/application/cross_origin_support_spec.rb"
599
+ - "./spec/lib/http_stub/server/application/response_pipeline_spec.rb"
600
+ - "./spec/lib/http_stub/server/application/text_formatting_support_spec.rb"
590
601
  - "./spec/lib/http_stub/server/daemon_integration_spec.rb"
591
602
  - "./spec/lib/http_stub/server/daemon_spec.rb"
592
603
  - "./spec/lib/http_stub/server/payload_file_consolidator_spec.rb"
@@ -595,7 +606,6 @@ test_files:
595
606
  - "./spec/lib/http_stub/server/request/parameters_spec.rb"
596
607
  - "./spec/lib/http_stub/server/request/request_spec.rb"
597
608
  - "./spec/lib/http_stub/server/request_spec.rb"
598
- - "./spec/lib/http_stub/server/response_pipeline_spec.rb"
599
609
  - "./spec/lib/http_stub/server/response_spec.rb"
600
610
  - "./spec/lib/http_stub/server/scenario/activator_spec.rb"
601
611
  - "./spec/lib/http_stub/server/scenario/controller_spec.rb"
@@ -638,7 +648,12 @@ test_files:
638
648
  - "./spec/resources/sample.pdf"
639
649
  - "./spec/resources/sample.txt"
640
650
  - "./spec/spec_helper.rb"
651
+ - "./spec/support/browser_integration.rb"
641
652
  - "./spec/support/configurer_integration.rb"
653
+ - "./spec/support/cross_origin_server/application.rb"
654
+ - "./spec/support/cross_origin_server/index_page.rb"
655
+ - "./spec/support/cross_origin_server/integration.rb"
656
+ - "./spec/support/cross_origin_server/public/index.html"
642
657
  - "./spec/support/html_helpers.rb"
643
658
  - "./spec/support/http_stub/empty_configurer.rb"
644
659
  - "./spec/support/http_stub/scenario_fixture.rb"
@@ -1,110 +0,0 @@
1
- module HttpStub
2
- module Server
3
-
4
- class Application < Sinatra::Base
5
-
6
- SUPPORTED_REQUEST_TYPES = [ :get, :post, :put, :delete, :patch, :options ].freeze
7
-
8
- private_constant :SUPPORTED_REQUEST_TYPES
9
-
10
- set :root, File.dirname(__FILE__)
11
-
12
- register Sinatra::Partial
13
-
14
- enable :dump_errors, :logging, :partial_underscores
15
- disable :protection
16
-
17
- def self.any_request_type(path, opts={}, &block)
18
- SUPPORTED_REQUEST_TYPES.each { |type| self.send(type, path, opts, &block) }
19
- end
20
- private_class_method :any_request_type
21
-
22
- def initialize
23
- super()
24
- @stub_registry = HttpStub::Server::Stub::Registry.new
25
- @scenario_registry = HttpStub::Server::Registry.new("scenario")
26
- @match_result_registry = HttpStub::Server::Registry.new("match result")
27
- @stub_controller = HttpStub::Server::Stub::Controller.new(@stub_registry, @match_result_registry)
28
- @scenario_controller = HttpStub::Server::Scenario::Controller.new(@scenario_registry, @stub_registry)
29
- end
30
-
31
- before do
32
- @response_pipeline = HttpStub::Server::ResponsePipeline.new(self)
33
- @http_stub_request = HttpStub::Server::Request.create(request)
34
- end
35
-
36
- get "/http_stub" do
37
- haml :index, {}
38
- end
39
-
40
- post "/http_stub/stubs" do
41
- response = @stub_controller.register(@http_stub_request, logger)
42
- @response_pipeline.process(response)
43
- end
44
-
45
- get "/http_stub/stubs" do
46
- haml :stubs, {}, stubs: @stub_registry.all
47
- end
48
-
49
- delete "/http_stub/stubs" do
50
- @stub_controller.clear(logger)
51
- halt 200, "OK"
52
- end
53
-
54
- post "/http_stub/stubs/memory" do
55
- @stub_registry.remember
56
- halt 200, "OK"
57
- end
58
-
59
- get "/http_stub/stubs/memory" do
60
- @stub_registry.recall
61
- halt 200, "OK"
62
- end
63
-
64
- get "/http_stub/stubs/matches" do
65
- haml :match_results, {}, match_results: @match_result_registry.all
66
- end
67
-
68
- get "/http_stub/stubs/:id" do
69
- haml :stub, {}, the_stub: @stub_registry.find(params[:id], logger)
70
- end
71
-
72
- post "/http_stub/scenarios" do
73
- response = @scenario_controller.register(@http_stub_request, logger)
74
- @response_pipeline.process(response)
75
- end
76
-
77
- get "/http_stub/scenarios" do
78
- pass unless params[:name]
79
- haml :scenario, {}, scenario: @scenario_registry.find(URI.decode_www_form_component(params[:name]), logger)
80
- end
81
-
82
- get "/http_stub/scenarios" do
83
- haml :scenarios, {}, scenarios: @scenario_registry.all.sort_by(&:name)
84
- end
85
-
86
- post "/http_stub/scenarios/activate" do
87
- response = @scenario_controller.activate(params[:name], logger)
88
- @response_pipeline.process(response)
89
- end
90
-
91
- delete "/http_stub/scenarios" do
92
- @scenario_controller.clear(logger)
93
- halt 200, "OK"
94
- end
95
-
96
- get "/application.css" do
97
- sass :application
98
- end
99
-
100
- any_request_type(//) do
101
- response = @stub_controller.match(@http_stub_request, logger)
102
- @response_pipeline.process(response)
103
- end
104
-
105
- helpers { include HttpStub::Server::ApplicationHelpers }
106
-
107
- end
108
-
109
- end
110
- end