dhc 1.0.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 (185) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/rubocop.yml +27 -0
  3. data/.github/workflows/test.yml +27 -0
  4. data/.gitignore +37 -0
  5. data/.rubocop.yml +105 -0
  6. data/.ruby-version +1 -0
  7. data/Gemfile +5 -0
  8. data/LICENSE +674 -0
  9. data/README.md +999 -0
  10. data/Rakefile +25 -0
  11. data/dhc.gemspec +40 -0
  12. data/lib/core_ext/hash/deep_transform_values.rb +48 -0
  13. data/lib/dhc.rb +77 -0
  14. data/lib/dhc/concerns/dhc/basic_methods_concern.rb +42 -0
  15. data/lib/dhc/concerns/dhc/configuration_concern.rb +20 -0
  16. data/lib/dhc/concerns/dhc/fix_invalid_encoding_concern.rb +42 -0
  17. data/lib/dhc/concerns/dhc/formats_concern.rb +25 -0
  18. data/lib/dhc/concerns/dhc/request/user_agent_concern.rb +25 -0
  19. data/lib/dhc/config.rb +47 -0
  20. data/lib/dhc/endpoint.rb +119 -0
  21. data/lib/dhc/error.rb +82 -0
  22. data/lib/dhc/errors/client_error.rb +73 -0
  23. data/lib/dhc/errors/parser_error.rb +4 -0
  24. data/lib/dhc/errors/server_error.rb +28 -0
  25. data/lib/dhc/errors/timeout.rb +4 -0
  26. data/lib/dhc/errors/unknown_error.rb +4 -0
  27. data/lib/dhc/format.rb +18 -0
  28. data/lib/dhc/formats.rb +8 -0
  29. data/lib/dhc/formats/form.rb +45 -0
  30. data/lib/dhc/formats/json.rb +55 -0
  31. data/lib/dhc/formats/multipart.rb +45 -0
  32. data/lib/dhc/formats/plain.rb +42 -0
  33. data/lib/dhc/interceptor.rb +36 -0
  34. data/lib/dhc/interceptors.rb +26 -0
  35. data/lib/dhc/interceptors/auth.rb +94 -0
  36. data/lib/dhc/interceptors/caching.rb +148 -0
  37. data/lib/dhc/interceptors/default_timeout.rb +16 -0
  38. data/lib/dhc/interceptors/logging.rb +37 -0
  39. data/lib/dhc/interceptors/monitoring.rb +92 -0
  40. data/lib/dhc/interceptors/prometheus.rb +51 -0
  41. data/lib/dhc/interceptors/retry.rb +41 -0
  42. data/lib/dhc/interceptors/rollbar.rb +36 -0
  43. data/lib/dhc/interceptors/throttle.rb +86 -0
  44. data/lib/dhc/interceptors/zipkin.rb +110 -0
  45. data/lib/dhc/railtie.rb +9 -0
  46. data/lib/dhc/request.rb +161 -0
  47. data/lib/dhc/response.rb +60 -0
  48. data/lib/dhc/response/data.rb +28 -0
  49. data/lib/dhc/response/data/base.rb +18 -0
  50. data/lib/dhc/response/data/collection.rb +16 -0
  51. data/lib/dhc/response/data/item.rb +29 -0
  52. data/lib/dhc/rspec.rb +11 -0
  53. data/lib/dhc/test/cache_helper.rb +3 -0
  54. data/lib/dhc/version.rb +5 -0
  55. data/script/ci/build.sh +19 -0
  56. data/spec/basic_methods/delete_spec.rb +34 -0
  57. data/spec/basic_methods/get_spec.rb +49 -0
  58. data/spec/basic_methods/post_spec.rb +42 -0
  59. data/spec/basic_methods/put_spec.rb +48 -0
  60. data/spec/basic_methods/request_spec.rb +19 -0
  61. data/spec/basic_methods/request_without_rails_spec.rb +29 -0
  62. data/spec/config/endpoints_spec.rb +63 -0
  63. data/spec/config/placeholders_spec.rb +32 -0
  64. data/spec/core_ext/hash/deep_transform_values_spec.rb +24 -0
  65. data/spec/dummy/README.rdoc +28 -0
  66. data/spec/dummy/Rakefile +8 -0
  67. data/spec/dummy/app/assets/config/manifest.js +3 -0
  68. data/spec/dummy/app/assets/images/.keep +0 -0
  69. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  70. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  71. data/spec/dummy/app/controllers/application_controller.rb +7 -0
  72. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  73. data/spec/dummy/app/helpers/application_helper.rb +4 -0
  74. data/spec/dummy/app/mailers/.keep +0 -0
  75. data/spec/dummy/app/models/.keep +0 -0
  76. data/spec/dummy/app/models/concerns/.keep +0 -0
  77. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  78. data/spec/dummy/bin/bundle +5 -0
  79. data/spec/dummy/bin/rails +6 -0
  80. data/spec/dummy/bin/rake +6 -0
  81. data/spec/dummy/config.ru +6 -0
  82. data/spec/dummy/config/application.rb +16 -0
  83. data/spec/dummy/config/boot.rb +7 -0
  84. data/spec/dummy/config/environment.rb +7 -0
  85. data/spec/dummy/config/environments/development.rb +36 -0
  86. data/spec/dummy/config/environments/production.rb +77 -0
  87. data/spec/dummy/config/environments/test.rb +41 -0
  88. data/spec/dummy/config/initializers/assets.rb +10 -0
  89. data/spec/dummy/config/initializers/backtrace_silencers.rb +9 -0
  90. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  91. data/spec/dummy/config/initializers/filter_parameter_logging.rb +6 -0
  92. data/spec/dummy/config/initializers/inflections.rb +18 -0
  93. data/spec/dummy/config/initializers/mime_types.rb +6 -0
  94. data/spec/dummy/config/initializers/session_store.rb +5 -0
  95. data/spec/dummy/config/initializers/wrap_parameters.rb +11 -0
  96. data/spec/dummy/config/locales/en.yml +23 -0
  97. data/spec/dummy/config/routes.rb +58 -0
  98. data/spec/dummy/config/secrets.yml +22 -0
  99. data/spec/dummy/lib/assets/.keep +0 -0
  100. data/spec/dummy/log/.keep +0 -0
  101. data/spec/dummy/public/404.html +67 -0
  102. data/spec/dummy/public/422.html +67 -0
  103. data/spec/dummy/public/500.html +66 -0
  104. data/spec/dummy/public/favicon.ico +0 -0
  105. data/spec/endpoint/compile_spec.rb +35 -0
  106. data/spec/endpoint/match_spec.rb +41 -0
  107. data/spec/endpoint/placeholders_spec.rb +30 -0
  108. data/spec/endpoint/remove_interpolated_params_spec.rb +17 -0
  109. data/spec/endpoint/values_as_params_spec.rb +31 -0
  110. data/spec/error/dup_spec.rb +12 -0
  111. data/spec/error/find_spec.rb +57 -0
  112. data/spec/error/response_spec.rb +17 -0
  113. data/spec/error/timeout_spec.rb +14 -0
  114. data/spec/error/to_s_spec.rb +85 -0
  115. data/spec/formats/form_spec.rb +27 -0
  116. data/spec/formats/json_spec.rb +66 -0
  117. data/spec/formats/multipart_spec.rb +26 -0
  118. data/spec/formats/plain_spec.rb +29 -0
  119. data/spec/interceptors/after_request_spec.rb +20 -0
  120. data/spec/interceptors/after_response_spec.rb +39 -0
  121. data/spec/interceptors/auth/basic_auth_spec.rb +17 -0
  122. data/spec/interceptors/auth/bearer_spec.rb +19 -0
  123. data/spec/interceptors/auth/body_spec.rb +36 -0
  124. data/spec/interceptors/auth/long_basic_auth_credentials_spec.rb +17 -0
  125. data/spec/interceptors/auth/no_instance_var_for_options_spec.rb +27 -0
  126. data/spec/interceptors/auth/reauthentication_configuration_spec.rb +61 -0
  127. data/spec/interceptors/auth/reauthentication_spec.rb +44 -0
  128. data/spec/interceptors/before_request_spec.rb +21 -0
  129. data/spec/interceptors/before_response_spec.rb +20 -0
  130. data/spec/interceptors/caching/hydra_spec.rb +26 -0
  131. data/spec/interceptors/caching/main_spec.rb +73 -0
  132. data/spec/interceptors/caching/methods_spec.rb +42 -0
  133. data/spec/interceptors/caching/multilevel_cache_spec.rb +139 -0
  134. data/spec/interceptors/caching/options_spec.rb +78 -0
  135. data/spec/interceptors/caching/parameters_spec.rb +24 -0
  136. data/spec/interceptors/caching/response_status_spec.rb +29 -0
  137. data/spec/interceptors/caching/to_cache_spec.rb +16 -0
  138. data/spec/interceptors/default_interceptors_spec.rb +15 -0
  139. data/spec/interceptors/default_timeout/main_spec.rb +34 -0
  140. data/spec/interceptors/define_spec.rb +30 -0
  141. data/spec/interceptors/dup_spec.rb +19 -0
  142. data/spec/interceptors/logging/main_spec.rb +37 -0
  143. data/spec/interceptors/monitoring/caching_spec.rb +66 -0
  144. data/spec/interceptors/monitoring/main_spec.rb +97 -0
  145. data/spec/interceptors/prometheus_spec.rb +54 -0
  146. data/spec/interceptors/response_competition_spec.rb +39 -0
  147. data/spec/interceptors/retry/main_spec.rb +73 -0
  148. data/spec/interceptors/return_response_spec.rb +38 -0
  149. data/spec/interceptors/rollbar/invalid_encoding_spec.rb +43 -0
  150. data/spec/interceptors/rollbar/main_spec.rb +57 -0
  151. data/spec/interceptors/throttle/main_spec.rb +236 -0
  152. data/spec/interceptors/throttle/reset_track_spec.rb +53 -0
  153. data/spec/interceptors/zipkin/distributed_tracing_spec.rb +135 -0
  154. data/spec/rails_helper.rb +6 -0
  155. data/spec/request/body_spec.rb +39 -0
  156. data/spec/request/encoding_spec.rb +38 -0
  157. data/spec/request/error_handling_spec.rb +88 -0
  158. data/spec/request/headers_spec.rb +12 -0
  159. data/spec/request/ignore_errors_spec.rb +73 -0
  160. data/spec/request/option_dup_spec.rb +13 -0
  161. data/spec/request/parallel_requests_spec.rb +59 -0
  162. data/spec/request/params_encoding_spec.rb +26 -0
  163. data/spec/request/request_without_rails_spec.rb +15 -0
  164. data/spec/request/url_patterns_spec.rb +54 -0
  165. data/spec/request/user_agent_spec.rb +26 -0
  166. data/spec/request/user_agent_without_rails_spec.rb +27 -0
  167. data/spec/response/body_spec.rb +16 -0
  168. data/spec/response/code_spec.rb +16 -0
  169. data/spec/response/data_accessor_spec.rb +29 -0
  170. data/spec/response/data_spec.rb +85 -0
  171. data/spec/response/effective_url_spec.rb +16 -0
  172. data/spec/response/headers_spec.rb +18 -0
  173. data/spec/response/options_spec.rb +18 -0
  174. data/spec/response/success_spec.rb +13 -0
  175. data/spec/response/time_spec.rb +21 -0
  176. data/spec/spec_helper.rb +9 -0
  177. data/spec/support/fixtures/json/feedback.json +11 -0
  178. data/spec/support/fixtures/json/feedbacks.json +164 -0
  179. data/spec/support/fixtures/json/localina_content_ad.json +23 -0
  180. data/spec/support/load_json.rb +5 -0
  181. data/spec/support/reset_config.rb +8 -0
  182. data/spec/support/zipkin_mock.rb +114 -0
  183. data/spec/timeouts/no_signal_spec.rb +13 -0
  184. data/spec/timeouts/timings_spec.rb +55 -0
  185. metadata +527 -0
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ describe DHC::Response do
6
+ context 'time' do
7
+ let(:time) { 1.3 }
8
+
9
+ let(:raw_response) { OpenStruct.new(time: time) }
10
+
11
+ it 'provides response time in seconds' do
12
+ response = DHC::Response.new(raw_response, nil)
13
+ expect(response.time).to eq time
14
+ end
15
+
16
+ it 'provides response time in miliseconds' do
17
+ response = DHC::Response.new(raw_response, nil)
18
+ expect(response.time_ms).to eq time * 1000
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pry'
4
+ require 'webmock/rspec'
5
+ require 'dhc'
6
+ require 'dhc/rspec'
7
+ require 'timecop'
8
+
9
+ Dir[File.join(__dir__, 'support/**/*.rb')].each { |f| require f }
@@ -0,0 +1,11 @@
1
+ {
2
+ "href": "http://depay.fi/v2/feedbacks/-Sc4_pYNpqfsudzhtivfkA",
3
+ "campaign": {
4
+ "href": "http://depay.fi/v2/content-ads/51dfc5690cf271c375c5a12d"
5
+ },
6
+ "source_id": "aaa",
7
+ "recommended": true,
8
+ "modified": "2014-09-19T14:03:35.599+02:00",
9
+ "created_date": "2014-09-19T14:03:35.597+02:00",
10
+ "comments": []
11
+ }
@@ -0,0 +1,164 @@
1
+ {
2
+ "href" : "http://depay.fi/v2/feedbacks/?exclude_hidden=false&offset=0&limit=10",
3
+ "items" : [ {
4
+ "href" : "http://depay.fi/v2/feedbacks/0sdaetZ-OWVg4oBiBJ-7IQ",
5
+ "campaign" : {
6
+ "href" : "http://depay.fi/v2/content-ads/51dfc5690cf271c375c5a12d"
7
+ },
8
+ "source_id" : "aaa",
9
+ "recommended" : true,
10
+ "ratings" : {
11
+ "ambiente" : 4,
12
+ "service" : 2,
13
+ "food" : 3
14
+ },
15
+ "modified" : "2014-09-18T16:13:32.987+02:00",
16
+ "created_date" : "2014-09-18T16:13:31.496+02:00",
17
+ "average_rating" : 3.0,
18
+ "comments" : [ ]
19
+ }, {
20
+ "href" : "http://depay.fi/v2/feedbacks/QsUOQWNJoB-GFUNsX7z0jg",
21
+ "campaign" : {
22
+ "href" : "http://depay.fi/v2/content-ads/51dfc5690cf271c375c5a11f"
23
+ },
24
+ "source_id" : "abcdefghs12345",
25
+ "name" : "Steve",
26
+ "recommended" : true,
27
+ "ratings" : {
28
+ "ambiente" : 3,
29
+ "service" : 5,
30
+ "food" : 2
31
+ },
32
+ "modified" : "2014-09-18T15:43:12.134+02:00",
33
+ "created_date" : "2014-09-18T15:42:57.892+02:00",
34
+ "review_title" : "GUMMYBEARS GUMMYBEARS GUMMYBEARS",
35
+ "review" : "GUMMYBEARS! ... WOAH, STEVE! No, we both know how you get when you eat gummybears!",
36
+ "average_rating" : 3.3333333333333335,
37
+ "comments" : [ ]
38
+ }, {
39
+ "href" : "http://depay.fi/v2/feedbacks/QynNtmpXlsEGvUJ0ekDKVw",
40
+ "campaign" : {
41
+ "href" : "http://depay.fi/v2/content-ads/51dfc56b0cf271c375c5a14d"
42
+ },
43
+ "source_id" : "abcdefghs12345",
44
+ "name" : "Steve",
45
+ "recommended" : true,
46
+ "ratings" : {
47
+ "ambiente" : 3,
48
+ "service" : 5,
49
+ "food" : 2
50
+ },
51
+ "modified" : "2014-09-17T11:17:39.660+02:00",
52
+ "created_date" : "2014-09-17T11:17:34.234+02:00",
53
+ "review_title" : "GUMMYBEARS GUMMYBEARS GUMMYBEARS",
54
+ "review" : "GUMMYBEARS! ... WOAH, STEVE! No, we both know how you get when you eat gummybears!",
55
+ "average_rating" : 3.3333333333333335,
56
+ "comments" : [ ]
57
+ }, {
58
+ "href" : "http://depay.fi/v2/feedbacks/INmminYWNZwW_qNFx5peJQ",
59
+ "campaign" : {
60
+ "href" : "http://depay.fi/v2/content-ads/51dfc56b0cf271c375c5a153"
61
+ },
62
+ "source_id" : "abcdefghs12345",
63
+ "name" : "Steve",
64
+ "recommended" : true,
65
+ "ratings" : {
66
+ "ambiente" : 3,
67
+ "service" : 5,
68
+ "food" : 2
69
+ },
70
+ "modified" : "2014-09-16T11:20:32.600+02:00",
71
+ "created_date" : "2014-09-16T11:20:30.194+02:00",
72
+ "review_title" : "GUMMYBEARS GUMMYBEARS GUMMYBEARS",
73
+ "review" : "GUMMYBEARS! ... WOAH, STEVE! No, we both know how you get when you eat gummybears!",
74
+ "average_rating" : 3.3333333333333335,
75
+ "comments" : [ ]
76
+ }, {
77
+ "href" : "http://depay.fi/v2/feedbacks/ltgfr0VRYDN2nxyC119wTg",
78
+ "campaign" : {
79
+ "href" : "http://depay.fi/v2/content-ads/51dfc56b0cf271c375c5a14c"
80
+ },
81
+ "source_id" : "aaa",
82
+ "recommended" : false,
83
+ "ratings" : {
84
+ "ambiente" : 2,
85
+ "service" : 1,
86
+ "food" : 1
87
+ },
88
+ "modified" : "2014-09-15T16:23:54.898+02:00",
89
+ "created_date" : "2014-09-15T16:23:40.355+02:00",
90
+ "average_rating" : 1.3333333333333333,
91
+ "comments" : [ ]
92
+ }, {
93
+ "href" : "http://depay.fi/v2/feedbacks/5dUdQP-kZ6sulN8NtpGXTw",
94
+ "campaign" : {
95
+ "href" : "http://depay.fi/v2/content-ads/51dfc56b0cf271c375c5a14c"
96
+ },
97
+ "source_id" : "abcdefghs12345",
98
+ "name" : "Steve",
99
+ "recommended" : true,
100
+ "ratings" : {
101
+ "ambiente" : 3,
102
+ "service" : 5,
103
+ "food" : 2
104
+ },
105
+ "modified" : "2014-09-12T13:10:51.220+02:00",
106
+ "created_date" : "2014-09-12T13:10:48.813+02:00",
107
+ "review_title" : "GUMMYBEARS GUMMYBEARS GUMMYBEARS",
108
+ "review" : "GUMMYBEARS! ... WOAH, STEVE! No, we both know how you get when you eat gummybears!",
109
+ "average_rating" : 3.3333333333333335,
110
+ "comments" : [ ]
111
+ }, {
112
+ "href" : "http://depay.fi/v2/feedbacks/Z3KfWzIEQ3ZVCUj2IdrSNQ",
113
+ "campaign" : {
114
+ "href" : "http://depay.fi/v2/content-ads/51dfc5690cf271c375c5a12e"
115
+ },
116
+ "source_id" : "abcdefghs",
117
+ "recommended" : true,
118
+ "modified" : "2014-09-10T16:57:36.255+02:00",
119
+ "created_date" : "2014-09-10T16:57:36.254+02:00",
120
+ "comments" : [ ]
121
+ }, {
122
+ "href" : "http://depay.fi/v2/feedbacks/ZUUUeiw-Stw5Zb1baHDUzQ",
123
+ "campaign" : {
124
+ "href" : "http://depay.fi/v2/content-ads/51dfc5690cf271c375c5a12d"
125
+ },
126
+ "source_id" : "abcdefghs",
127
+ "recommended" : true,
128
+ "modified" : "2014-09-10T16:57:32.792+02:00",
129
+ "created_date" : "2014-09-10T16:57:32.791+02:00",
130
+ "comments" : [ ]
131
+ }, {
132
+ "href" : "http://depay.fi/v2/feedbacks/GyeWvhEtU4cYN_5T2FX2UA",
133
+ "campaign" : {
134
+ "href" : "http://depay.fi/v2/content-ads/539266ec0cf2cd754583cfa0"
135
+ },
136
+ "source_id" : "abcdefghs",
137
+ "name" : "aa",
138
+ "recommended" : true,
139
+ "ratings" : {
140
+ "ambiente" : 2,
141
+ "service" : 4,
142
+ "food" : 3
143
+ },
144
+ "modified" : "2014-09-11T09:48:19.096+02:00",
145
+ "created_date" : "2014-09-10T16:35:39.201+02:00",
146
+ "review_title" : "bbb",
147
+ "review" : "fff",
148
+ "average_rating" : 3.0,
149
+ "comments" : [ ]
150
+ }, {
151
+ "href" : "http://depay.fi/v2/feedbacks/o-qTRqQGFS3Z_RPJm1f8SA",
152
+ "campaign" : {
153
+ "href" : "http://depay.fi/v2/content-ads/51dfc56c0cf271c375c5a160"
154
+ },
155
+ "source_id" : "abcdefghs12345",
156
+ "recommended" : true,
157
+ "modified" : "2014-09-10T16:31:52.493+02:00",
158
+ "created_date" : "2014-09-10T16:31:52.492+02:00",
159
+ "comments" : [ ]
160
+ } ],
161
+ "total" : 98,
162
+ "offset" : 0,
163
+ "limit" : 10
164
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "href": "http://depay.fi/v2/content-ads/51dfc5690cf271c375c5a12d",
3
+ "id": "51dfc5690cf271c375c5a12d",
4
+ "product": "BKE",
5
+ "hidden": false,
6
+ "contract_type": "published",
7
+ "source_id": "123",
8
+ "phone_number": "0041562227764",
9
+ "type": "LOCALINA",
10
+ "feedbacks": {
11
+ "href": "http://depay.fi/v2/content-ads/51dfc5690cf271c375c5a12d/feedbacks?exclude_hidden=false&offset=0&limit=10"
12
+ },
13
+ "aggregated_feedback": {
14
+ "recommendation": 1,
15
+ "number_of_feedbacks": 2,
16
+ "number_of_reviews": 0,
17
+ "number_of_ratings": 0
18
+ },
19
+ "online_booking": {
20
+ "max_persons_plus_sign": true,
21
+ "max_persons_per_reservation": 8
22
+ }
23
+ }
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ def load_json(name)
4
+ File.read("spec/support/fixtures/json/#{name}.json")
5
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.configure do |config|
4
+ config.before(:each) do
5
+ DHC::Caching.central = nil
6
+ DHC::Config.instance.reset
7
+ end
8
+ end
@@ -0,0 +1,114 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ZipkinTracer
4
+ class TraceContainer
5
+ attr_reader :trace_id, :parent_id, :span_id, :sampled, :flags
6
+
7
+ class << self
8
+ attr_accessor :current
9
+
10
+ def setup_mock(trace_id:, parent_id:, span_id:, sampled:, flags:)
11
+ @current = new(trace_id: trace_id, parent_id: parent_id, span_id: span_id, sampled: sampled, flags: flags)
12
+ end
13
+
14
+ def with_trace_id(trace_id)
15
+ yield trace_id
16
+ end
17
+ end
18
+
19
+ def initialize(trace_id:, parent_id:, span_id:, sampled:, flags:)
20
+ @trace_id = trace_id
21
+ @parent_id = parent_id
22
+ @span_id = span_id
23
+ @sampled = sampled
24
+ @flags = flags
25
+ end
26
+ end
27
+
28
+ class TraceGenerator
29
+ def next_trace_id
30
+ TraceId.new
31
+ end
32
+ end
33
+
34
+ class TraceId
35
+ def trace_id
36
+ 'trace_id'
37
+ end
38
+
39
+ def parent_id
40
+ 'parent_id'
41
+ end
42
+
43
+ def span_id
44
+ 'span_id'
45
+ end
46
+
47
+ def sampled
48
+ ZipkinTracer::TraceContainer.current.sampled
49
+ end
50
+
51
+ def flags
52
+ 'flags'
53
+ end
54
+
55
+ def sampled?
56
+ ZipkinTracer::TraceContainer.current.sampled
57
+ end
58
+ end
59
+
60
+ class Span
61
+ def record_tag(*); end
62
+
63
+ def record(*); end
64
+ end
65
+ end
66
+
67
+ module Trace
68
+ def self.default_endpoint
69
+ Endpoint.new
70
+ end
71
+
72
+ def self.tracer
73
+ Tracer.new
74
+ end
75
+
76
+ class Tracer
77
+ def start_span(*)
78
+ return ZipkinTracer::Span.new
79
+ end
80
+
81
+ def end_span(*)
82
+ return ZipkinTracer::Span.new
83
+ end
84
+ end
85
+
86
+ class Annotation
87
+ CLIENT_SEND = 'client_send'
88
+ CLIENT_RECV = 'client_recv'
89
+ end
90
+
91
+ class BinaryAnnotation
92
+ PATH = 'path'
93
+ SERVER_ADDRESS = 'server_address'
94
+ STATUS = 'status'
95
+ ERROR = 'error'
96
+
97
+ class Type
98
+ STRING = 'string'
99
+ BOOL = 'bool'
100
+ end
101
+ end
102
+
103
+ class Endpoint
104
+ class << self
105
+ def remote_endpoint(*)
106
+ new
107
+ end
108
+ end
109
+
110
+ def ip_format
111
+ 'ipv4'
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ describe DHC::Request do
6
+ context 'timeouts' do
7
+ it 'has no_signal options set to true by default' do
8
+ expect_any_instance_of(Ethon::Easy).to receive(:http_request).with(anything, anything, hash_including(nosignal: true)).and_call_original
9
+ stub_request(:get, 'http://depay.fi/')
10
+ DHC.get('http://depay.fi')
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ describe DHC::Request do
6
+ context 'timeouts' do
7
+ context 'when timeout is not a whole number and timeout_ms is not set' do
8
+ let(:options) { { timeout: 0.1 } }
9
+
10
+ it 'ceils timeout and sets timeout_ms' do
11
+ expect_any_instance_of(Ethon::Easy).to receive(:http_request)
12
+ .with(anything, anything, hash_including(timeout_ms: 100, timeout: 1))
13
+ .and_call_original
14
+ stub_request(:get, 'http://depay.fi/')
15
+ DHC.get('http://depay.fi', options)
16
+ end
17
+ end
18
+
19
+ context 'when timeout is not a whole number and timeout_ms is set' do
20
+ let(:options) { { timeout: 0.1, timeout_ms: 123 } }
21
+
22
+ it 'ceils timeout and does not change timeout_ms' do
23
+ expect_any_instance_of(Ethon::Easy).to receive(:http_request)
24
+ .with(anything, anything, hash_including(timeout_ms: 123, timeout: 1))
25
+ .and_call_original
26
+ stub_request(:get, 'http://depay.fi/')
27
+ DHC.get('http://depay.fi', options)
28
+ end
29
+ end
30
+
31
+ context 'when connecttimeout is not a whole number and connecttimeout_ms is not set' do
32
+ let(:options) { { connecttimeout: 0.1 } }
33
+
34
+ it 'ceils connecttimeout and sets connecttimeout_ms' do
35
+ expect_any_instance_of(Ethon::Easy).to receive(:http_request)
36
+ .with(anything, anything, hash_including(connecttimeout_ms: 100, connecttimeout: 1))
37
+ .and_call_original
38
+ stub_request(:get, 'http://depay.fi/')
39
+ DHC.get('http://depay.fi', options)
40
+ end
41
+ end
42
+
43
+ context 'when connecttimeout is not a whole number and connecttimeout_ms is set' do
44
+ let(:options) { { connecttimeout: 0.1, connecttimeout_ms: 123 } }
45
+
46
+ it 'ceils connecttimeout and does not change connecttimeout_ms' do
47
+ expect_any_instance_of(Ethon::Easy).to receive(:http_request)
48
+ .with(anything, anything, hash_including(connecttimeout_ms: 123, connecttimeout: 1))
49
+ .and_call_original
50
+ stub_request(:get, 'http://depay.fi/')
51
+ DHC.get('http://depay.fi', options)
52
+ end
53
+ end
54
+ end
55
+ end
metadata ADDED
@@ -0,0 +1,527 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dhc
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - https://github.com/DePayFi/dhc/contributors
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-03-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '5.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '5.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: addressable
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: typhoeus
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0.11'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0.11'
55
+ - !ruby/object:Gem::Dependency
56
+ name: prometheus-client
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.7.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.7.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '5.2'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '5.2'
97
+ - !ruby/object:Gem::Dependency
98
+ name: redis
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: 3.0.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: 3.0.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: timecop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: webmock
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ description: DHC is an advanced HTTP client. Implementing basic http-communication
182
+ enhancements like interceptors, exception handling, format handling, accessing response
183
+ data, configuring endpoints and placeholders and fully compatible, RFC-compliant
184
+ URL-template support.
185
+ email:
186
+ - engineering@depay.fi
187
+ executables: []
188
+ extensions: []
189
+ extra_rdoc_files: []
190
+ files:
191
+ - ".github/workflows/rubocop.yml"
192
+ - ".github/workflows/test.yml"
193
+ - ".gitignore"
194
+ - ".rubocop.yml"
195
+ - ".ruby-version"
196
+ - Gemfile
197
+ - LICENSE
198
+ - README.md
199
+ - Rakefile
200
+ - dhc.gemspec
201
+ - lib/core_ext/hash/deep_transform_values.rb
202
+ - lib/dhc.rb
203
+ - lib/dhc/concerns/dhc/basic_methods_concern.rb
204
+ - lib/dhc/concerns/dhc/configuration_concern.rb
205
+ - lib/dhc/concerns/dhc/fix_invalid_encoding_concern.rb
206
+ - lib/dhc/concerns/dhc/formats_concern.rb
207
+ - lib/dhc/concerns/dhc/request/user_agent_concern.rb
208
+ - lib/dhc/config.rb
209
+ - lib/dhc/endpoint.rb
210
+ - lib/dhc/error.rb
211
+ - lib/dhc/errors/client_error.rb
212
+ - lib/dhc/errors/parser_error.rb
213
+ - lib/dhc/errors/server_error.rb
214
+ - lib/dhc/errors/timeout.rb
215
+ - lib/dhc/errors/unknown_error.rb
216
+ - lib/dhc/format.rb
217
+ - lib/dhc/formats.rb
218
+ - lib/dhc/formats/form.rb
219
+ - lib/dhc/formats/json.rb
220
+ - lib/dhc/formats/multipart.rb
221
+ - lib/dhc/formats/plain.rb
222
+ - lib/dhc/interceptor.rb
223
+ - lib/dhc/interceptors.rb
224
+ - lib/dhc/interceptors/auth.rb
225
+ - lib/dhc/interceptors/caching.rb
226
+ - lib/dhc/interceptors/default_timeout.rb
227
+ - lib/dhc/interceptors/logging.rb
228
+ - lib/dhc/interceptors/monitoring.rb
229
+ - lib/dhc/interceptors/prometheus.rb
230
+ - lib/dhc/interceptors/retry.rb
231
+ - lib/dhc/interceptors/rollbar.rb
232
+ - lib/dhc/interceptors/throttle.rb
233
+ - lib/dhc/interceptors/zipkin.rb
234
+ - lib/dhc/railtie.rb
235
+ - lib/dhc/request.rb
236
+ - lib/dhc/response.rb
237
+ - lib/dhc/response/data.rb
238
+ - lib/dhc/response/data/base.rb
239
+ - lib/dhc/response/data/collection.rb
240
+ - lib/dhc/response/data/item.rb
241
+ - lib/dhc/rspec.rb
242
+ - lib/dhc/test/cache_helper.rb
243
+ - lib/dhc/version.rb
244
+ - script/ci/build.sh
245
+ - spec/basic_methods/delete_spec.rb
246
+ - spec/basic_methods/get_spec.rb
247
+ - spec/basic_methods/post_spec.rb
248
+ - spec/basic_methods/put_spec.rb
249
+ - spec/basic_methods/request_spec.rb
250
+ - spec/basic_methods/request_without_rails_spec.rb
251
+ - spec/config/endpoints_spec.rb
252
+ - spec/config/placeholders_spec.rb
253
+ - spec/core_ext/hash/deep_transform_values_spec.rb
254
+ - spec/dummy/README.rdoc
255
+ - spec/dummy/Rakefile
256
+ - spec/dummy/app/assets/config/manifest.js
257
+ - spec/dummy/app/assets/images/.keep
258
+ - spec/dummy/app/assets/javascripts/application.js
259
+ - spec/dummy/app/assets/stylesheets/application.css
260
+ - spec/dummy/app/controllers/application_controller.rb
261
+ - spec/dummy/app/controllers/concerns/.keep
262
+ - spec/dummy/app/helpers/application_helper.rb
263
+ - spec/dummy/app/mailers/.keep
264
+ - spec/dummy/app/models/.keep
265
+ - spec/dummy/app/models/concerns/.keep
266
+ - spec/dummy/app/views/layouts/application.html.erb
267
+ - spec/dummy/bin/bundle
268
+ - spec/dummy/bin/rails
269
+ - spec/dummy/bin/rake
270
+ - spec/dummy/config.ru
271
+ - spec/dummy/config/application.rb
272
+ - spec/dummy/config/boot.rb
273
+ - spec/dummy/config/environment.rb
274
+ - spec/dummy/config/environments/development.rb
275
+ - spec/dummy/config/environments/production.rb
276
+ - spec/dummy/config/environments/test.rb
277
+ - spec/dummy/config/initializers/assets.rb
278
+ - spec/dummy/config/initializers/backtrace_silencers.rb
279
+ - spec/dummy/config/initializers/cookies_serializer.rb
280
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
281
+ - spec/dummy/config/initializers/inflections.rb
282
+ - spec/dummy/config/initializers/mime_types.rb
283
+ - spec/dummy/config/initializers/session_store.rb
284
+ - spec/dummy/config/initializers/wrap_parameters.rb
285
+ - spec/dummy/config/locales/en.yml
286
+ - spec/dummy/config/routes.rb
287
+ - spec/dummy/config/secrets.yml
288
+ - spec/dummy/lib/assets/.keep
289
+ - spec/dummy/log/.keep
290
+ - spec/dummy/public/404.html
291
+ - spec/dummy/public/422.html
292
+ - spec/dummy/public/500.html
293
+ - spec/dummy/public/favicon.ico
294
+ - spec/endpoint/compile_spec.rb
295
+ - spec/endpoint/match_spec.rb
296
+ - spec/endpoint/placeholders_spec.rb
297
+ - spec/endpoint/remove_interpolated_params_spec.rb
298
+ - spec/endpoint/values_as_params_spec.rb
299
+ - spec/error/dup_spec.rb
300
+ - spec/error/find_spec.rb
301
+ - spec/error/response_spec.rb
302
+ - spec/error/timeout_spec.rb
303
+ - spec/error/to_s_spec.rb
304
+ - spec/formats/form_spec.rb
305
+ - spec/formats/json_spec.rb
306
+ - spec/formats/multipart_spec.rb
307
+ - spec/formats/plain_spec.rb
308
+ - spec/interceptors/after_request_spec.rb
309
+ - spec/interceptors/after_response_spec.rb
310
+ - spec/interceptors/auth/basic_auth_spec.rb
311
+ - spec/interceptors/auth/bearer_spec.rb
312
+ - spec/interceptors/auth/body_spec.rb
313
+ - spec/interceptors/auth/long_basic_auth_credentials_spec.rb
314
+ - spec/interceptors/auth/no_instance_var_for_options_spec.rb
315
+ - spec/interceptors/auth/reauthentication_configuration_spec.rb
316
+ - spec/interceptors/auth/reauthentication_spec.rb
317
+ - spec/interceptors/before_request_spec.rb
318
+ - spec/interceptors/before_response_spec.rb
319
+ - spec/interceptors/caching/hydra_spec.rb
320
+ - spec/interceptors/caching/main_spec.rb
321
+ - spec/interceptors/caching/methods_spec.rb
322
+ - spec/interceptors/caching/multilevel_cache_spec.rb
323
+ - spec/interceptors/caching/options_spec.rb
324
+ - spec/interceptors/caching/parameters_spec.rb
325
+ - spec/interceptors/caching/response_status_spec.rb
326
+ - spec/interceptors/caching/to_cache_spec.rb
327
+ - spec/interceptors/default_interceptors_spec.rb
328
+ - spec/interceptors/default_timeout/main_spec.rb
329
+ - spec/interceptors/define_spec.rb
330
+ - spec/interceptors/dup_spec.rb
331
+ - spec/interceptors/logging/main_spec.rb
332
+ - spec/interceptors/monitoring/caching_spec.rb
333
+ - spec/interceptors/monitoring/main_spec.rb
334
+ - spec/interceptors/prometheus_spec.rb
335
+ - spec/interceptors/response_competition_spec.rb
336
+ - spec/interceptors/retry/main_spec.rb
337
+ - spec/interceptors/return_response_spec.rb
338
+ - spec/interceptors/rollbar/invalid_encoding_spec.rb
339
+ - spec/interceptors/rollbar/main_spec.rb
340
+ - spec/interceptors/throttle/main_spec.rb
341
+ - spec/interceptors/throttle/reset_track_spec.rb
342
+ - spec/interceptors/zipkin/distributed_tracing_spec.rb
343
+ - spec/rails_helper.rb
344
+ - spec/request/body_spec.rb
345
+ - spec/request/encoding_spec.rb
346
+ - spec/request/error_handling_spec.rb
347
+ - spec/request/headers_spec.rb
348
+ - spec/request/ignore_errors_spec.rb
349
+ - spec/request/option_dup_spec.rb
350
+ - spec/request/parallel_requests_spec.rb
351
+ - spec/request/params_encoding_spec.rb
352
+ - spec/request/request_without_rails_spec.rb
353
+ - spec/request/url_patterns_spec.rb
354
+ - spec/request/user_agent_spec.rb
355
+ - spec/request/user_agent_without_rails_spec.rb
356
+ - spec/response/body_spec.rb
357
+ - spec/response/code_spec.rb
358
+ - spec/response/data_accessor_spec.rb
359
+ - spec/response/data_spec.rb
360
+ - spec/response/effective_url_spec.rb
361
+ - spec/response/headers_spec.rb
362
+ - spec/response/options_spec.rb
363
+ - spec/response/success_spec.rb
364
+ - spec/response/time_spec.rb
365
+ - spec/spec_helper.rb
366
+ - spec/support/fixtures/json/feedback.json
367
+ - spec/support/fixtures/json/feedbacks.json
368
+ - spec/support/fixtures/json/localina_content_ad.json
369
+ - spec/support/load_json.rb
370
+ - spec/support/reset_config.rb
371
+ - spec/support/zipkin_mock.rb
372
+ - spec/timeouts/no_signal_spec.rb
373
+ - spec/timeouts/timings_spec.rb
374
+ homepage: https://github.com/DePayFi/dhc
375
+ licenses:
376
+ - GPL-3.0
377
+ metadata: {}
378
+ post_install_message:
379
+ rdoc_options: []
380
+ require_paths:
381
+ - lib
382
+ required_ruby_version: !ruby/object:Gem::Requirement
383
+ requirements:
384
+ - - ">="
385
+ - !ruby/object:Gem::Version
386
+ version: 2.7.0
387
+ required_rubygems_version: !ruby/object:Gem::Requirement
388
+ requirements:
389
+ - - ">="
390
+ - !ruby/object:Gem::Version
391
+ version: '0'
392
+ requirements:
393
+ - Ruby >= 2.0.0
394
+ rubygems_version: 3.2.3
395
+ signing_key:
396
+ specification_version: 4
397
+ summary: Advanced HTTP Client for Ruby, fueled with interceptors
398
+ test_files:
399
+ - spec/basic_methods/delete_spec.rb
400
+ - spec/basic_methods/get_spec.rb
401
+ - spec/basic_methods/post_spec.rb
402
+ - spec/basic_methods/put_spec.rb
403
+ - spec/basic_methods/request_spec.rb
404
+ - spec/basic_methods/request_without_rails_spec.rb
405
+ - spec/config/endpoints_spec.rb
406
+ - spec/config/placeholders_spec.rb
407
+ - spec/core_ext/hash/deep_transform_values_spec.rb
408
+ - spec/dummy/README.rdoc
409
+ - spec/dummy/Rakefile
410
+ - spec/dummy/app/assets/config/manifest.js
411
+ - spec/dummy/app/assets/images/.keep
412
+ - spec/dummy/app/assets/javascripts/application.js
413
+ - spec/dummy/app/assets/stylesheets/application.css
414
+ - spec/dummy/app/controllers/application_controller.rb
415
+ - spec/dummy/app/controllers/concerns/.keep
416
+ - spec/dummy/app/helpers/application_helper.rb
417
+ - spec/dummy/app/mailers/.keep
418
+ - spec/dummy/app/models/.keep
419
+ - spec/dummy/app/models/concerns/.keep
420
+ - spec/dummy/app/views/layouts/application.html.erb
421
+ - spec/dummy/bin/bundle
422
+ - spec/dummy/bin/rails
423
+ - spec/dummy/bin/rake
424
+ - spec/dummy/config.ru
425
+ - spec/dummy/config/application.rb
426
+ - spec/dummy/config/boot.rb
427
+ - spec/dummy/config/environment.rb
428
+ - spec/dummy/config/environments/development.rb
429
+ - spec/dummy/config/environments/production.rb
430
+ - spec/dummy/config/environments/test.rb
431
+ - spec/dummy/config/initializers/assets.rb
432
+ - spec/dummy/config/initializers/backtrace_silencers.rb
433
+ - spec/dummy/config/initializers/cookies_serializer.rb
434
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
435
+ - spec/dummy/config/initializers/inflections.rb
436
+ - spec/dummy/config/initializers/mime_types.rb
437
+ - spec/dummy/config/initializers/session_store.rb
438
+ - spec/dummy/config/initializers/wrap_parameters.rb
439
+ - spec/dummy/config/locales/en.yml
440
+ - spec/dummy/config/routes.rb
441
+ - spec/dummy/config/secrets.yml
442
+ - spec/dummy/lib/assets/.keep
443
+ - spec/dummy/log/.keep
444
+ - spec/dummy/public/404.html
445
+ - spec/dummy/public/422.html
446
+ - spec/dummy/public/500.html
447
+ - spec/dummy/public/favicon.ico
448
+ - spec/endpoint/compile_spec.rb
449
+ - spec/endpoint/match_spec.rb
450
+ - spec/endpoint/placeholders_spec.rb
451
+ - spec/endpoint/remove_interpolated_params_spec.rb
452
+ - spec/endpoint/values_as_params_spec.rb
453
+ - spec/error/dup_spec.rb
454
+ - spec/error/find_spec.rb
455
+ - spec/error/response_spec.rb
456
+ - spec/error/timeout_spec.rb
457
+ - spec/error/to_s_spec.rb
458
+ - spec/formats/form_spec.rb
459
+ - spec/formats/json_spec.rb
460
+ - spec/formats/multipart_spec.rb
461
+ - spec/formats/plain_spec.rb
462
+ - spec/interceptors/after_request_spec.rb
463
+ - spec/interceptors/after_response_spec.rb
464
+ - spec/interceptors/auth/basic_auth_spec.rb
465
+ - spec/interceptors/auth/bearer_spec.rb
466
+ - spec/interceptors/auth/body_spec.rb
467
+ - spec/interceptors/auth/long_basic_auth_credentials_spec.rb
468
+ - spec/interceptors/auth/no_instance_var_for_options_spec.rb
469
+ - spec/interceptors/auth/reauthentication_configuration_spec.rb
470
+ - spec/interceptors/auth/reauthentication_spec.rb
471
+ - spec/interceptors/before_request_spec.rb
472
+ - spec/interceptors/before_response_spec.rb
473
+ - spec/interceptors/caching/hydra_spec.rb
474
+ - spec/interceptors/caching/main_spec.rb
475
+ - spec/interceptors/caching/methods_spec.rb
476
+ - spec/interceptors/caching/multilevel_cache_spec.rb
477
+ - spec/interceptors/caching/options_spec.rb
478
+ - spec/interceptors/caching/parameters_spec.rb
479
+ - spec/interceptors/caching/response_status_spec.rb
480
+ - spec/interceptors/caching/to_cache_spec.rb
481
+ - spec/interceptors/default_interceptors_spec.rb
482
+ - spec/interceptors/default_timeout/main_spec.rb
483
+ - spec/interceptors/define_spec.rb
484
+ - spec/interceptors/dup_spec.rb
485
+ - spec/interceptors/logging/main_spec.rb
486
+ - spec/interceptors/monitoring/caching_spec.rb
487
+ - spec/interceptors/monitoring/main_spec.rb
488
+ - spec/interceptors/prometheus_spec.rb
489
+ - spec/interceptors/response_competition_spec.rb
490
+ - spec/interceptors/retry/main_spec.rb
491
+ - spec/interceptors/return_response_spec.rb
492
+ - spec/interceptors/rollbar/invalid_encoding_spec.rb
493
+ - spec/interceptors/rollbar/main_spec.rb
494
+ - spec/interceptors/throttle/main_spec.rb
495
+ - spec/interceptors/throttle/reset_track_spec.rb
496
+ - spec/interceptors/zipkin/distributed_tracing_spec.rb
497
+ - spec/rails_helper.rb
498
+ - spec/request/body_spec.rb
499
+ - spec/request/encoding_spec.rb
500
+ - spec/request/error_handling_spec.rb
501
+ - spec/request/headers_spec.rb
502
+ - spec/request/ignore_errors_spec.rb
503
+ - spec/request/option_dup_spec.rb
504
+ - spec/request/parallel_requests_spec.rb
505
+ - spec/request/params_encoding_spec.rb
506
+ - spec/request/request_without_rails_spec.rb
507
+ - spec/request/url_patterns_spec.rb
508
+ - spec/request/user_agent_spec.rb
509
+ - spec/request/user_agent_without_rails_spec.rb
510
+ - spec/response/body_spec.rb
511
+ - spec/response/code_spec.rb
512
+ - spec/response/data_accessor_spec.rb
513
+ - spec/response/data_spec.rb
514
+ - spec/response/effective_url_spec.rb
515
+ - spec/response/headers_spec.rb
516
+ - spec/response/options_spec.rb
517
+ - spec/response/success_spec.rb
518
+ - spec/response/time_spec.rb
519
+ - spec/spec_helper.rb
520
+ - spec/support/fixtures/json/feedback.json
521
+ - spec/support/fixtures/json/feedbacks.json
522
+ - spec/support/fixtures/json/localina_content_ad.json
523
+ - spec/support/load_json.rb
524
+ - spec/support/reset_config.rb
525
+ - spec/support/zipkin_mock.rb
526
+ - spec/timeouts/no_signal_spec.rb
527
+ - spec/timeouts/timings_spec.rb