api_resource 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/Gemfile +37 -0
  2. data/Gemfile.lock +190 -0
  3. data/Guardfile +27 -0
  4. data/Rakefile +49 -0
  5. data/VERSION +1 -0
  6. data/api_resource.gemspec +111 -0
  7. data/coverage/assets/0.5.3/app.js +88 -0
  8. data/coverage/assets/0.5.3/fancybox/blank.gif +0 -0
  9. data/coverage/assets/0.5.3/fancybox/fancy_close.png +0 -0
  10. data/coverage/assets/0.5.3/fancybox/fancy_loading.png +0 -0
  11. data/coverage/assets/0.5.3/fancybox/fancy_nav_left.png +0 -0
  12. data/coverage/assets/0.5.3/fancybox/fancy_nav_right.png +0 -0
  13. data/coverage/assets/0.5.3/fancybox/fancy_shadow_e.png +0 -0
  14. data/coverage/assets/0.5.3/fancybox/fancy_shadow_n.png +0 -0
  15. data/coverage/assets/0.5.3/fancybox/fancy_shadow_ne.png +0 -0
  16. data/coverage/assets/0.5.3/fancybox/fancy_shadow_nw.png +0 -0
  17. data/coverage/assets/0.5.3/fancybox/fancy_shadow_s.png +0 -0
  18. data/coverage/assets/0.5.3/fancybox/fancy_shadow_se.png +0 -0
  19. data/coverage/assets/0.5.3/fancybox/fancy_shadow_sw.png +0 -0
  20. data/coverage/assets/0.5.3/fancybox/fancy_shadow_w.png +0 -0
  21. data/coverage/assets/0.5.3/fancybox/fancy_title_left.png +0 -0
  22. data/coverage/assets/0.5.3/fancybox/fancy_title_main.png +0 -0
  23. data/coverage/assets/0.5.3/fancybox/fancy_title_over.png +0 -0
  24. data/coverage/assets/0.5.3/fancybox/fancy_title_right.png +0 -0
  25. data/coverage/assets/0.5.3/fancybox/fancybox-x.png +0 -0
  26. data/coverage/assets/0.5.3/fancybox/fancybox-y.png +0 -0
  27. data/coverage/assets/0.5.3/fancybox/fancybox.png +0 -0
  28. data/coverage/assets/0.5.3/fancybox/jquery.fancybox-1.3.1.css +363 -0
  29. data/coverage/assets/0.5.3/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  30. data/coverage/assets/0.5.3/favicon_green.png +0 -0
  31. data/coverage/assets/0.5.3/favicon_red.png +0 -0
  32. data/coverage/assets/0.5.3/favicon_yellow.png +0 -0
  33. data/coverage/assets/0.5.3/highlight.css +129 -0
  34. data/coverage/assets/0.5.3/highlight.pack.js +1 -0
  35. data/coverage/assets/0.5.3/jquery-1.6.2.min.js +18 -0
  36. data/coverage/assets/0.5.3/jquery.dataTables.min.js +152 -0
  37. data/coverage/assets/0.5.3/jquery.timeago.js +141 -0
  38. data/coverage/assets/0.5.3/jquery.url.js +174 -0
  39. data/coverage/assets/0.5.3/loading.gif +0 -0
  40. data/coverage/assets/0.5.3/magnify.png +0 -0
  41. data/coverage/assets/0.5.3/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  42. data/coverage/assets/0.5.3/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  43. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  44. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  45. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  46. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  47. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  48. data/coverage/assets/0.5.3/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  49. data/coverage/assets/0.5.3/smoothness/images/ui-icons_222222_256x240.png +0 -0
  50. data/coverage/assets/0.5.3/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  51. data/coverage/assets/0.5.3/smoothness/images/ui-icons_454545_256x240.png +0 -0
  52. data/coverage/assets/0.5.3/smoothness/images/ui-icons_888888_256x240.png +0 -0
  53. data/coverage/assets/0.5.3/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  54. data/coverage/assets/0.5.3/smoothness/jquery-ui-1.8.4.custom.css +295 -0
  55. data/coverage/assets/0.5.3/stylesheet.css +383 -0
  56. data/coverage/index.html +3573 -0
  57. data/lib/api_resource.rb +130 -0
  58. data/lib/api_resource/association_activation.rb +19 -0
  59. data/lib/api_resource/associations.rb +218 -0
  60. data/lib/api_resource/associations/association_proxy.rb +116 -0
  61. data/lib/api_resource/associations/belongs_to_remote_object_proxy.rb +16 -0
  62. data/lib/api_resource/associations/dynamic_resource_scope.rb +23 -0
  63. data/lib/api_resource/associations/generic_scope.rb +68 -0
  64. data/lib/api_resource/associations/has_many_remote_object_proxy.rb +16 -0
  65. data/lib/api_resource/associations/has_many_through_remote_object_proxy.rb +13 -0
  66. data/lib/api_resource/associations/has_one_remote_object_proxy.rb +24 -0
  67. data/lib/api_resource/associations/multi_argument_resource_scope.rb +15 -0
  68. data/lib/api_resource/associations/multi_object_proxy.rb +84 -0
  69. data/lib/api_resource/associations/related_object_hash.rb +12 -0
  70. data/lib/api_resource/associations/relation_scope.rb +25 -0
  71. data/lib/api_resource/associations/resource_scope.rb +32 -0
  72. data/lib/api_resource/associations/scope.rb +132 -0
  73. data/lib/api_resource/associations/single_object_proxy.rb +82 -0
  74. data/lib/api_resource/attributes.rb +243 -0
  75. data/lib/api_resource/base.rb +717 -0
  76. data/lib/api_resource/callbacks.rb +45 -0
  77. data/lib/api_resource/connection.rb +195 -0
  78. data/lib/api_resource/core_extensions.rb +7 -0
  79. data/lib/api_resource/custom_methods.rb +117 -0
  80. data/lib/api_resource/decorators.rb +6 -0
  81. data/lib/api_resource/decorators/caching_decorator.rb +20 -0
  82. data/lib/api_resource/exceptions.rb +99 -0
  83. data/lib/api_resource/formats.rb +22 -0
  84. data/lib/api_resource/formats/json_format.rb +25 -0
  85. data/lib/api_resource/formats/xml_format.rb +36 -0
  86. data/lib/api_resource/local.rb +12 -0
  87. data/lib/api_resource/log_subscriber.rb +15 -0
  88. data/lib/api_resource/mocks.rb +285 -0
  89. data/lib/api_resource/model_errors.rb +82 -0
  90. data/lib/api_resource/observing.rb +27 -0
  91. data/lib/api_resource/railtie.rb +24 -0
  92. data/lib/api_resource/scopes.rb +48 -0
  93. data/nohup.out +63 -0
  94. data/spec/lib/api_resource_spec.rb +43 -0
  95. data/spec/lib/associations_spec.rb +751 -0
  96. data/spec/lib/attributes_spec.rb +191 -0
  97. data/spec/lib/base_spec.rb +655 -0
  98. data/spec/lib/callbacks_spec.rb +68 -0
  99. data/spec/lib/connection_spec.rb +137 -0
  100. data/spec/lib/local_spec.rb +20 -0
  101. data/spec/lib/mocks_spec.rb +74 -0
  102. data/spec/lib/model_errors_spec.rb +29 -0
  103. data/spec/lib/prefixes_spec.rb +107 -0
  104. data/spec/spec_helper.rb +82 -0
  105. data/spec/support/mocks/association_mocks.rb +63 -0
  106. data/spec/support/mocks/error_resource_mocks.rb +21 -0
  107. data/spec/support/mocks/prefix_model_mocks.rb +5 -0
  108. data/spec/support/mocks/test_resource_mocks.rb +44 -0
  109. data/spec/support/requests/association_requests.rb +31 -0
  110. data/spec/support/requests/error_resource_requests.rb +25 -0
  111. data/spec/support/requests/prefix_model_requests.rb +7 -0
  112. data/spec/support/requests/test_resource_requests.rb +38 -0
  113. data/spec/support/test_resource.rb +72 -0
  114. data/spec/tmp/DIR +0 -0
  115. data/spec/tmp/api_resource_test_db.sqlite +0 -0
  116. metadata +119 -3
@@ -0,0 +1,383 @@
1
+ /* -----------------------------------------------------------------------
2
+
3
+
4
+ Blueprint CSS Framework 0.9
5
+ http://blueprintcss.org
6
+
7
+ * Copyright (c) 2007-Present. See LICENSE for more info.
8
+ * See README for instructions on how to use Blueprint.
9
+ * For credits and origins, see AUTHORS.
10
+ * This is a compressed file. See the sources in the 'src' directory.
11
+
12
+ ----------------------------------------------------------------------- */
13
+
14
+ /* reset.css */
15
+ html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;}
16
+ article, aside, dialog, figure, footer, header, hgroup, nav, section {display:block;}
17
+ body {line-height:1.5;}
18
+ table {border-collapse:separate;border-spacing:0;}
19
+ caption, th, td {text-align:left;font-weight:normal;}
20
+ table, td, th {vertical-align:middle;}
21
+ blockquote:before, blockquote:after, q:before, q:after {content:"";}
22
+ blockquote, q {quotes:"" "";}
23
+ a img {border:none;}
24
+
25
+ /* typography.css */
26
+ html {font-size:100.01%;}
27
+ body {font-size:82%;color:#222;background:#fff;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;}
28
+ h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;}
29
+ h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
30
+ h2 {font-size:2em;margin-bottom:0.75em;}
31
+ h3 {font-size:1.5em;line-height:1;margin-bottom:1em;}
32
+ h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;}
33
+ h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;}
34
+ h6 {font-size:1em;font-weight:bold;}
35
+ h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
36
+ p {margin:0 0 1.5em;}
37
+ p img.left {float:left;margin:1.5em 1.5em 1.5em 0;padding:0;}
38
+ p img.right {float:right;margin:1.5em 0 1.5em 1.5em;}
39
+ a:focus, a:hover {color:#000;}
40
+ a {color:#009;text-decoration:underline;}
41
+ blockquote {margin:1.5em;color:#666;font-style:italic;}
42
+ strong {font-weight:bold;}
43
+ em, dfn {font-style:italic;}
44
+ dfn {font-weight:bold;}
45
+ sup, sub {line-height:0;}
46
+ abbr, acronym {border-bottom:1px dotted #666;}
47
+ address {margin:0 0 1.5em;font-style:italic;}
48
+ del {color:#666;}
49
+ pre {margin:1.5em 0;white-space:pre;}
50
+ pre, code, tt {font:1em 'andale mono', 'lucida console', monospace;line-height:1.5;}
51
+ li ul, li ol {margin:0;}
52
+ ul, ol {margin:0 1.5em 1.5em 0;padding-left:3.333em;}
53
+ ul {list-style-type:disc;}
54
+ ol {list-style-type:decimal;}
55
+ dl {margin:0 0 1.5em 0;}
56
+ dl dt {font-weight:bold;}
57
+ dd {margin-left:1.5em;}
58
+ table {margin-bottom:1.4em;width:100%;}
59
+ th {font-weight:bold;}
60
+ thead th {background:#c3d9ff;}
61
+ th, td, caption {padding:4px 10px 4px 5px;}
62
+ tr.even td {background:#efefef;}
63
+ tfoot {font-style:italic;}
64
+ caption {background:#eee;}
65
+ .small {font-size:.8em;margin-bottom:1.875em;line-height:1.875em;}
66
+ .large {font-size:1.2em;line-height:2.5em;margin-bottom:1.25em;}
67
+ .hide {display:none;}
68
+ .quiet {color:#666;}
69
+ .loud {color:#000;}
70
+ .highlight {background:#ff0;}
71
+ .added {background:#060;color:#fff;}
72
+ .removed {background:#900;color:#fff;}
73
+ .first {margin-left:0;padding-left:0;}
74
+ .last {margin-right:0;padding-right:0;}
75
+ .top {margin-top:0;padding-top:0;}
76
+ .bottom {margin-bottom:0;padding-bottom:0;}
77
+
78
+ /* forms.css */
79
+ label {font-weight:bold;}
80
+ fieldset {padding:1.4em;margin:0 0 1.5em 0;border:1px solid #ccc;}
81
+ legend {font-weight:bold;font-size:1.2em;}
82
+ input[type=text], input[type=password], input.text, input.title, textarea, select {background-color:#fff;border:1px solid #bbb;}
83
+ input[type=text]:focus, input[type=password]:focus, input.text:focus, input.title:focus, textarea:focus, select:focus {border-color:#666;}
84
+ input[type=text], input[type=password], input.text, input.title, textarea, select {margin:0.5em 0;}
85
+ input.text, input.title {width:300px;padding:5px;}
86
+ input.title {font-size:1.5em;}
87
+ textarea {width:390px;height:250px;padding:5px;}
88
+ input[type=checkbox], input[type=radio], input.checkbox, input.radio {position:relative;top:.25em;}
89
+ form.inline {line-height:3;}
90
+ form.inline p {margin-bottom:0;}
91
+ .error, .notice, .success {padding:.8em;margin-bottom:1em;border:2px solid #ddd;}
92
+ .error {background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}
93
+ .notice {background:#FFF6BF;color:#514721;border-color:#FFD324;}
94
+ .success {background:#E6EFC2;color:#264409;border-color:#C6D880;}
95
+ .error a {color:#8a1f11;}
96
+ .notice a {color:#514721;}
97
+ .success a {color:#264409;}
98
+ .box {padding:1.5em;margin-bottom:1.5em;background:#E5ECF9;}
99
+ hr {background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:.1em;margin:0 0 1.45em;border:none;}
100
+ hr.space {background:#fff;color:#fff;visibility:hidden;}
101
+ .clearfix:after, .container:after {content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden;}
102
+ .clearfix, .container {display:block;}
103
+ .clear {clear:both;}
104
+
105
+ #loading {
106
+ position: fixed;
107
+ left: 40%;
108
+ top: 50%;
109
+ }
110
+
111
+ a {
112
+ color: #333;
113
+ text-decoration: none;
114
+ }
115
+
116
+ a:hover {
117
+ color: #000;
118
+ text-decoration: underline;
119
+ }
120
+
121
+ body {
122
+ font-family: "Lucida Grande", Helvetica, "Helvetica Neue", Arial, sans-serif;
123
+ padding: 12px;
124
+ background-color: #333;
125
+ }
126
+
127
+ h1, h2, h3, h4 {
128
+ color: #1C2324;
129
+ margin: 0;
130
+ padding: 0;
131
+ margin-bottom: 12px;
132
+ }
133
+
134
+ table {
135
+ width: 100%;
136
+ }
137
+
138
+ #content {
139
+ clear: left;
140
+ background-color: white;
141
+ border: 2px solid #ddd;
142
+ border-top: 8px solid #ddd;
143
+ padding: 18px;
144
+ -webkit-border-bottom-left-radius: 5px;
145
+ -webkit-border-bottom-right-radius: 5px;
146
+ -webkit-border-top-right-radius: 5px;
147
+ -moz-border-radius-bottomleft: 5px;
148
+ -moz-border-radius-bottomright: 5px;
149
+ -moz-border-radius-topright: 5px;
150
+ border-bottom-left-radius: 5px;
151
+ border-bottom-right-radius: 5px;
152
+ border-top-right-radius: 5px;
153
+ }
154
+
155
+ .dataTables_filter, .dataTables_info {
156
+ padding: 2px 6px;
157
+ }
158
+
159
+ abbr.timeago {
160
+ text-decoration: none;
161
+ border: none;
162
+ font-weight: bold;
163
+ }
164
+
165
+ .timestamp {
166
+ float: right;
167
+ color: #ddd;
168
+ }
169
+
170
+ .group_tabs {
171
+ list-style: none;
172
+ float: left;
173
+ margin: 0;
174
+ padding: 0;
175
+ }
176
+ .group_tabs li {
177
+ display: inline;
178
+ float: left;
179
+ }
180
+
181
+ .group_tabs li a {
182
+ font-family: Helvetica, Arial, sans-serif;
183
+ display: block;
184
+ float: left;
185
+ text-decoration: none;
186
+ padding: 4px 8px;
187
+ background-color: #aaa;
188
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#DDD), to(#aaa));
189
+ background: -moz-linear-gradient(#DDD, #aaa);
190
+ background: linear-gradient(#DDD, #aaa);
191
+ text-shadow: #e5e5e5 1px 1px 0px;
192
+ border-bottom: none;
193
+ color: #333;
194
+ font-weight: bold;
195
+ margin-right: 8px;
196
+ border-top: 1px solid #efefef;
197
+ -webkit-border-top-left-radius: 2px;
198
+ -webkit-border-top-right-radius: 2px;
199
+ -moz-border-radius-topleft: 2px;
200
+ -moz-border-radius-topright: 2px;
201
+ border-top-left-radius: 2px;
202
+ border-top-right-radius: 2px;
203
+ }
204
+
205
+ .group_tabs li a:hover {
206
+ background-color: #ccc;
207
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#eee), to(#aaa));
208
+ background: -moz-linear-gradient(#eee, #aaa);
209
+ background: linear-gradient(#eee, #aaa);
210
+ }
211
+
212
+ .group_tabs li a:active {
213
+ padding-top: 5px;
214
+ padding-bottom: 3px;
215
+ }
216
+
217
+ .group_tabs li.active a {
218
+ color: black;
219
+ text-shadow: #fff 1px 1px 0px;
220
+ background-color: #ddd;
221
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#fff), to(#ddd));
222
+ background: -moz-linear-gradient(#fff, #ddd);
223
+ background: linear-gradient(#fff, #ddd);
224
+ }
225
+
226
+ .file_list {
227
+ margin-bottom: 18px;
228
+ }
229
+
230
+ a.src_link {
231
+ background: url('./magnify.png') no-repeat left 50%;
232
+ padding-left: 18px;
233
+ }
234
+
235
+ tr, td {
236
+ margin: 0;
237
+ padding: 0;
238
+ }
239
+
240
+ th {
241
+ white-space: nowrap;
242
+ }
243
+
244
+ th.ui-state-default {
245
+ cursor: pointer;
246
+ }
247
+
248
+ th span.ui-icon {
249
+ float: left;
250
+ }
251
+
252
+ td {
253
+ padding: 4px 8px;
254
+ }
255
+
256
+ td.strong {
257
+ font-weight: bold;
258
+ }
259
+
260
+ .source_table h3, .source_table h4 {
261
+ padding: 0;
262
+ margin: 0;
263
+ margin-bottom: 4px;
264
+ }
265
+
266
+ .source_table .header {
267
+ padding: 10px;
268
+ }
269
+
270
+ .source_table pre {
271
+ margin: 0;
272
+ padding: 0;
273
+ white-space: normal;
274
+ }
275
+
276
+ .source_table pre, .source_table code {
277
+ color: #000;
278
+ font-family: "Monaco", "Inconsolata", "Consolas", monospace;
279
+ }
280
+
281
+ .source_table pre {
282
+ background-color: #333;
283
+ }
284
+
285
+ .source_table pre ol {
286
+ margin: 0px;
287
+ padding: 0px;
288
+ margin-left: 45px;
289
+ font-size: 12px;
290
+ color: white;
291
+ }
292
+
293
+ .source_table pre li {
294
+ margin: 0px;
295
+ padding: 2px 6px;
296
+ border-left: 5px solid white;
297
+ }
298
+
299
+ .source_table pre li code {
300
+ white-space: pre;
301
+ white-space: pre-wrap;
302
+ }
303
+
304
+ .source_table pre .hits {
305
+ float: right;
306
+ margin-left: 10px;
307
+ padding: 2px 4px;
308
+
309
+ background-color: #444;
310
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#222), to(#666));
311
+ background: -moz-linear-gradient(#222, #666);
312
+ background: linear-gradient(#222, #666);
313
+
314
+ color: white;
315
+ font-family: Helvetica, "Helvetica Neue", Arial, sans-serif;
316
+ font-size: 10px;
317
+ font-weight: bold;
318
+ text-align: center;
319
+ border-radius: 6px;
320
+ }
321
+
322
+ #footer {
323
+ color: #ddd;
324
+ font-size: 12px;
325
+ font-weight: bold;
326
+ margin-top: 12px;
327
+ text-align: right;
328
+ }
329
+ #footer a {
330
+ color: #eee;
331
+ text-decoration: underline;
332
+ }
333
+ #footer a:hover {
334
+ color: #fff;
335
+ text-decoration: none;
336
+ }
337
+
338
+ .green {
339
+ color: #090;
340
+ }
341
+ .red {
342
+ color: #900;
343
+ }
344
+ .yellow {
345
+ color: #da0;
346
+ }
347
+ .source_table .covered {
348
+ border-color: #090;
349
+ }
350
+ .source_table .missed {
351
+ border-color: #900;
352
+ }
353
+ .source_table .never {
354
+ border-color: black;
355
+ }
356
+ .source_table .skipped {
357
+ border-color: #fc0;
358
+ }
359
+
360
+ .source_table .covered:nth-child(odd) {
361
+ background-color: #CDF2CD;
362
+ }
363
+ .source_table .covered:nth-child(even) {
364
+ background-color: #DBF2DB;
365
+ }
366
+ .source_table .missed:nth-child(odd) {
367
+ background-color: #F7C0C0;
368
+ }
369
+ .source_table .missed:nth-child(even) {
370
+ background-color: #F7CFCF;
371
+ }
372
+ .source_table .never:nth-child(odd) {
373
+ background-color: #efefef;
374
+ }
375
+ .source_table .never:nth-child(even) {
376
+ background-color: #f4f4f4;
377
+ }
378
+ .source_table .skipped:nth-child(odd) {
379
+ background-color: #FBF0C0;
380
+ }
381
+ .source_table .skipped:nth-child(even) {
382
+ background-color: #FBFfCf;
383
+ }
@@ -0,0 +1,3573 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <title>Code coverage for Api resource</title>
5
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6
+ <script src='./assets/0.5.3/jquery-1.6.2.min.js' type='text/javascript'></script>
7
+ <script src='./assets/0.5.3/jquery.dataTables.min.js' type='text/javascript'></script>
8
+ <script src='./assets/0.5.3/fancybox/jquery.fancybox-1.3.1.pack.js' type='text/javascript'></script>
9
+ <script src='./assets/0.5.3/jquery.timeago.js' type='text/javascript'></script>
10
+ <script src='./assets/0.5.3/jquery.url.js' type='text/javascript'></script>
11
+ <script src='./assets/0.5.3/highlight.pack.js' type='text/javascript'></script>
12
+ <script src='./assets/0.5.3/app.js' type='text/javascript'></script>
13
+ <link href='./assets/0.5.3/stylesheet.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
14
+ <link href='./assets/0.5.3/highlight.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
15
+ <link href='./assets/0.5.3/fancybox/jquery.fancybox-1.3.1.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
16
+ <link href='./assets/0.5.3/smoothness/jquery-ui-1.8.4.custom.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
17
+ <link rel="shortcut icon" type="image/png" href="./assets/0.5.3/favicon_yellow.png" />
18
+ <link rel="icon" type="image/png" href="./assets/0.5.3/favicon.png" />
19
+ </head>
20
+
21
+ <body>
22
+ <div id="loading">
23
+ <img src="./assets/0.5.3/loading.gif" alt="loading"/>
24
+ </div>
25
+ <div id="wrapper" style="display:none;">
26
+ <div class="timestamp">Generated <abbr class="timeago" title="2012-11-28T12:19:35-05:00">2012-11-28T12:19:35-05:00</abbr></div>
27
+ <ul class="group_tabs"></ul>
28
+
29
+ <div id="content">
30
+ <div class="file_list_container" id="AllFiles">
31
+ <h2>
32
+ <span class="group_name">All Files</span>
33
+ (<span class="covered_percent"><span class="yellow">89.06%</span></span>
34
+ covered at
35
+ <span class="covered_strength">
36
+ <span class="green">
37
+ 16.73
38
+ </span>
39
+ </span> hits/line)
40
+ </h2>
41
+ <a name="AllFiles"></a>
42
+ <div>
43
+ <b>6</b> files in total.
44
+ <b>265</b> relevant lines.
45
+ <span class="green"><b>236</b> lines covered</span> and
46
+ <span class="red"><b>29</b> lines missed </span>
47
+ </div>
48
+ <table class="file_list">
49
+ <thead>
50
+ <tr>
51
+ <th>File</th>
52
+ <th>% covered</th>
53
+ <th>Lines</th>
54
+ <th>Relevant Lines</th>
55
+ <th>Lines covered</th>
56
+ <th>Lines missed</th>
57
+ <th>Avg. Hits / Line</th>
58
+ </tr>
59
+ </thead>
60
+ <tbody>
61
+
62
+ <tr>
63
+ <td class="strong"><a href="#f4a9128adaf0ca270ed9974955a23cd018c72919" class="src_link" title="lib/api_resource/connection.rb">lib/api_resource/connection.rb</a></td>
64
+ <td class="yellow strong">83.67 %</td>
65
+ <td>195</td>
66
+ <td>98</td>
67
+ <td>82</td>
68
+ <td>16</td>
69
+ <td>58.1</td>
70
+ </tr>
71
+
72
+ <tr>
73
+ <td class="strong"><a href="#f45fa2fcc995002867927f6d8aed1c11923634e8" class="src_link" title="lib/api_resource/decorators.rb">lib/api_resource/decorators.rb</a></td>
74
+ <td class="green strong">100.0 %</td>
75
+ <td>6</td>
76
+ <td>4</td>
77
+ <td>4</td>
78
+ <td>0</td>
79
+ <td>1.0</td>
80
+ </tr>
81
+
82
+ <tr>
83
+ <td class="strong"><a href="#d6e8030adf5eba08e7d2cc9b2c181aa296332935" class="src_link" title="lib/api_resource/decorators/caching_decorator.rb">lib/api_resource/decorators/caching_decorator.rb</a></td>
84
+ <td class="green strong">100.0 %</td>
85
+ <td>20</td>
86
+ <td>11</td>
87
+ <td>11</td>
88
+ <td>0</td>
89
+ <td>1.5</td>
90
+ </tr>
91
+
92
+ <tr>
93
+ <td class="strong"><a href="#289a75214eb3e0964963f50e7b8a4ba229915e18" class="src_link" title="lib/api_resource/formats/xml_format.rb">lib/api_resource/formats/xml_format.rb</a></td>
94
+ <td class="red strong">66.67 %</td>
95
+ <td>36</td>
96
+ <td>18</td>
97
+ <td>12</td>
98
+ <td>6</td>
99
+ <td>0.7</td>
100
+ </tr>
101
+
102
+ <tr>
103
+ <td class="strong"><a href="#ff7575239f433378ab950b3e87078c133cf0d7b1" class="src_link" title="lib/api_resource/local.rb">lib/api_resource/local.rb</a></td>
104
+ <td class="green strong">100.0 %</td>
105
+ <td>12</td>
106
+ <td>6</td>
107
+ <td>6</td>
108
+ <td>0</td>
109
+ <td>1.0</td>
110
+ </tr>
111
+
112
+ <tr>
113
+ <td class="strong"><a href="#e00127c96dbadd619a510b634fe0f45a70befec3" class="src_link" title="lib/api_resource/mocks.rb">lib/api_resource/mocks.rb</a></td>
114
+ <td class="green strong">94.53 %</td>
115
+ <td>285</td>
116
+ <td>128</td>
117
+ <td>121</td>
118
+ <td>7</td>
119
+ <td>38.1</td>
120
+ </tr>
121
+
122
+ </tbody>
123
+ </table>
124
+ </div>
125
+
126
+
127
+
128
+ </div>
129
+
130
+ <div id="footer">
131
+ Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.6.1
132
+ and simplecov-html v0.5.3<br/>
133
+ using RSpec
134
+ </div>
135
+
136
+ <div class="source_files">
137
+
138
+ <div class="source_table" id="f4a9128adaf0ca270ed9974955a23cd018c72919">
139
+ <div class="header">
140
+ <h3>lib/api_resource/connection.rb</h3>
141
+ <h4><span class="yellow">83.67 %</span> covered</h4>
142
+ <div>
143
+ <b>98</b> relevant lines.
144
+ <span class="green"><b>82</b> lines covered</span> and
145
+ <span class="red"><b>16</b> lines missed.</span>
146
+ </div>
147
+ </div>
148
+
149
+ <pre>
150
+ <ol>
151
+
152
+ <li class="covered" data-hits="1" data-linenumber="1">
153
+ <span class="hits">1</span>
154
+
155
+ <code class="ruby">require 'active_support/core_ext/benchmark'</code>
156
+ </li>
157
+
158
+ <li class="covered" data-hits="1" data-linenumber="2">
159
+ <span class="hits">1</span>
160
+
161
+ <code class="ruby">require 'rest_client'</code>
162
+ </li>
163
+
164
+ <li class="covered" data-hits="1" data-linenumber="3">
165
+ <span class="hits">1</span>
166
+
167
+ <code class="ruby">require 'net/https'</code>
168
+ </li>
169
+
170
+ <li class="covered" data-hits="1" data-linenumber="4">
171
+ <span class="hits">1</span>
172
+
173
+ <code class="ruby">require 'date'</code>
174
+ </li>
175
+
176
+ <li class="covered" data-hits="1" data-linenumber="5">
177
+ <span class="hits">1</span>
178
+
179
+ <code class="ruby">require 'time'</code>
180
+ </li>
181
+
182
+ <li class="covered" data-hits="1" data-linenumber="6">
183
+ <span class="hits">1</span>
184
+
185
+ <code class="ruby">require 'uri'</code>
186
+ </li>
187
+
188
+ <li class="never" data-hits="" data-linenumber="7">
189
+
190
+
191
+ <code class="ruby"></code>
192
+ </li>
193
+
194
+ <li class="covered" data-hits="1" data-linenumber="8">
195
+ <span class="hits">1</span>
196
+
197
+ <code class="ruby">module ApiResource</code>
198
+ </li>
199
+
200
+ <li class="never" data-hits="" data-linenumber="9">
201
+
202
+
203
+ <code class="ruby"> # Class to handle connections to remote web services.</code>
204
+ </li>
205
+
206
+ <li class="never" data-hits="" data-linenumber="10">
207
+
208
+
209
+ <code class="ruby"> # This class is used by ActiveResource::Base to interface with REST</code>
210
+ </li>
211
+
212
+ <li class="never" data-hits="" data-linenumber="11">
213
+
214
+
215
+ <code class="ruby"> # services.</code>
216
+ </li>
217
+
218
+ <li class="covered" data-hits="1" data-linenumber="12">
219
+ <span class="hits">1</span>
220
+
221
+ <code class="ruby"> class Connection</code>
222
+ </li>
223
+
224
+ <li class="never" data-hits="" data-linenumber="13">
225
+
226
+
227
+ <code class="ruby"></code>
228
+ </li>
229
+
230
+ <li class="covered" data-hits="1" data-linenumber="14">
231
+ <span class="hits">1</span>
232
+
233
+ <code class="ruby"> HTTP_FORMAT_HEADER_NAMES = { </code>
234
+ </li>
235
+
236
+ <li class="never" data-hits="" data-linenumber="15">
237
+
238
+
239
+ <code class="ruby"> :get =&gt; 'Accept',</code>
240
+ </li>
241
+
242
+ <li class="never" data-hits="" data-linenumber="16">
243
+
244
+
245
+ <code class="ruby"> :put =&gt; 'Content-Type',</code>
246
+ </li>
247
+
248
+ <li class="never" data-hits="" data-linenumber="17">
249
+
250
+
251
+ <code class="ruby"> :post =&gt; 'Content-Type',</code>
252
+ </li>
253
+
254
+ <li class="never" data-hits="" data-linenumber="18">
255
+
256
+
257
+ <code class="ruby"> :delete =&gt; 'Accept',</code>
258
+ </li>
259
+
260
+ <li class="never" data-hits="" data-linenumber="19">
261
+
262
+
263
+ <code class="ruby"> :head =&gt; 'Accept'</code>
264
+ </li>
265
+
266
+ <li class="never" data-hits="" data-linenumber="20">
267
+
268
+
269
+ <code class="ruby"> }</code>
270
+ </li>
271
+
272
+ <li class="never" data-hits="" data-linenumber="21">
273
+
274
+
275
+ <code class="ruby"></code>
276
+ </li>
277
+
278
+ <li class="covered" data-hits="1" data-linenumber="22">
279
+ <span class="hits">1</span>
280
+
281
+ <code class="ruby"> attr_reader :site, :user, :password, :auth_type, :timeout, :proxy, :ssl_options</code>
282
+ </li>
283
+
284
+ <li class="covered" data-hits="1" data-linenumber="23">
285
+ <span class="hits">1</span>
286
+
287
+ <code class="ruby"> attr_accessor :format, :headers</code>
288
+ </li>
289
+
290
+ <li class="never" data-hits="" data-linenumber="24">
291
+
292
+
293
+ <code class="ruby"></code>
294
+ </li>
295
+
296
+ <li class="covered" data-hits="1" data-linenumber="25">
297
+ <span class="hits">1</span>
298
+
299
+ <code class="ruby"> class &lt;&lt; self</code>
300
+ </li>
301
+
302
+ <li class="covered" data-hits="1" data-linenumber="26">
303
+ <span class="hits">1</span>
304
+
305
+ <code class="ruby"> def requests</code>
306
+ </li>
307
+
308
+ <li class="missed" data-hits="0" data-linenumber="27">
309
+
310
+
311
+ <code class="ruby"> @@requests ||= []</code>
312
+ </li>
313
+
314
+ <li class="never" data-hits="" data-linenumber="28">
315
+
316
+
317
+ <code class="ruby"> end</code>
318
+ </li>
319
+
320
+ <li class="never" data-hits="" data-linenumber="29">
321
+
322
+
323
+ <code class="ruby"> end</code>
324
+ </li>
325
+
326
+ <li class="never" data-hits="" data-linenumber="30">
327
+
328
+
329
+ <code class="ruby"></code>
330
+ </li>
331
+
332
+ <li class="never" data-hits="" data-linenumber="31">
333
+
334
+
335
+ <code class="ruby"> # The +site+ parameter is required and will set the +site+</code>
336
+ </li>
337
+
338
+ <li class="never" data-hits="" data-linenumber="32">
339
+
340
+
341
+ <code class="ruby"> # attribute to the URI for the remote resource service.</code>
342
+ </li>
343
+
344
+ <li class="covered" data-hits="1" data-linenumber="33">
345
+ <span class="hits">1</span>
346
+
347
+ <code class="ruby"> def initialize(site, format = ApiResource::Formats::JsonFormat, headers)</code>
348
+ </li>
349
+
350
+ <li class="covered" data-hits="338" data-linenumber="34">
351
+ <span class="hits">338</span>
352
+
353
+ <code class="ruby"> raise ArgumentError, 'Missing site URI' unless site</code>
354
+ </li>
355
+
356
+ <li class="covered" data-hits="338" data-linenumber="35">
357
+ <span class="hits">338</span>
358
+
359
+ <code class="ruby"> @user = @password = nil</code>
360
+ </li>
361
+
362
+ <li class="covered" data-hits="338" data-linenumber="36">
363
+ <span class="hits">338</span>
364
+
365
+ <code class="ruby"> @uri_parser = URI.const_defined?(:Parser) ? URI::Parser.new : URI</code>
366
+ </li>
367
+
368
+ <li class="covered" data-hits="338" data-linenumber="37">
369
+ <span class="hits">338</span>
370
+
371
+ <code class="ruby"> self.site = site</code>
372
+ </li>
373
+
374
+ <li class="covered" data-hits="338" data-linenumber="38">
375
+ <span class="hits">338</span>
376
+
377
+ <code class="ruby"> self.format = format</code>
378
+ </li>
379
+
380
+ <li class="covered" data-hits="338" data-linenumber="39">
381
+ <span class="hits">338</span>
382
+
383
+ <code class="ruby"> self.headers = headers</code>
384
+ </li>
385
+
386
+ <li class="never" data-hits="" data-linenumber="40">
387
+
388
+
389
+ <code class="ruby"> end</code>
390
+ </li>
391
+
392
+ <li class="never" data-hits="" data-linenumber="41">
393
+
394
+
395
+ <code class="ruby"></code>
396
+ </li>
397
+
398
+ <li class="never" data-hits="" data-linenumber="42">
399
+
400
+
401
+ <code class="ruby"> # Set URI for remote service.</code>
402
+ </li>
403
+
404
+ <li class="covered" data-hits="1" data-linenumber="43">
405
+ <span class="hits">1</span>
406
+
407
+ <code class="ruby"> def site=(site)</code>
408
+ </li>
409
+
410
+ <li class="covered" data-hits="338" data-linenumber="44">
411
+ <span class="hits">338</span>
412
+
413
+ <code class="ruby"> @site = site.is_a?(URI) ? site : @uri_parser.parse(site)</code>
414
+ </li>
415
+
416
+ <li class="covered" data-hits="338" data-linenumber="45">
417
+ <span class="hits">338</span>
418
+
419
+ <code class="ruby"> @user = @uri_parser.unescape(@site.user) if @site.user</code>
420
+ </li>
421
+
422
+ <li class="covered" data-hits="338" data-linenumber="46">
423
+ <span class="hits">338</span>
424
+
425
+ <code class="ruby"> @password = @uri_parser.unescape(@site.password) if @site.password</code>
426
+ </li>
427
+
428
+ <li class="never" data-hits="" data-linenumber="47">
429
+
430
+
431
+ <code class="ruby"> end</code>
432
+ </li>
433
+
434
+ <li class="never" data-hits="" data-linenumber="48">
435
+
436
+
437
+ <code class="ruby"></code>
438
+ </li>
439
+
440
+ <li class="never" data-hits="" data-linenumber="49">
441
+
442
+
443
+ <code class="ruby"> # Sets the number of seconds after which HTTP requests to the remote service should time out.</code>
444
+ </li>
445
+
446
+ <li class="covered" data-hits="1" data-linenumber="50">
447
+ <span class="hits">1</span>
448
+
449
+ <code class="ruby"> def timeout=(timeout)</code>
450
+ </li>
451
+
452
+ <li class="covered" data-hits="490" data-linenumber="51">
453
+ <span class="hits">490</span>
454
+
455
+ <code class="ruby"> @timeout = timeout</code>
456
+ </li>
457
+
458
+ <li class="never" data-hits="" data-linenumber="52">
459
+
460
+
461
+ <code class="ruby"> end</code>
462
+ </li>
463
+
464
+ <li class="never" data-hits="" data-linenumber="53">
465
+
466
+
467
+ <code class="ruby"> </code>
468
+ </li>
469
+
470
+ <li class="covered" data-hits="1" data-linenumber="54">
471
+ <span class="hits">1</span>
472
+
473
+ <code class="ruby"> def get(path, headers = self.headers)</code>
474
+ </li>
475
+
476
+ <li class="never" data-hits="" data-linenumber="55">
477
+
478
+
479
+ <code class="ruby"> # our site and headers for this request</code>
480
+ </li>
481
+
482
+ <li class="covered" data-hits="96" data-linenumber="56">
483
+ <span class="hits">96</span>
484
+
485
+ <code class="ruby"> site = self.site.merge(path)</code>
486
+ </li>
487
+
488
+ <li class="covered" data-hits="96" data-linenumber="57">
489
+ <span class="hits">96</span>
490
+
491
+ <code class="ruby"> headers = build_request_headers(headers, :get, site)</code>
492
+ </li>
493
+
494
+ <li class="never" data-hits="" data-linenumber="58">
495
+
496
+
497
+ <code class="ruby"></code>
498
+ </li>
499
+
500
+ <li class="covered" data-hits="96" data-linenumber="59">
501
+ <span class="hits">96</span>
502
+
503
+ <code class="ruby"> self.with_caching(path, headers) do</code>
504
+ </li>
505
+
506
+ <li class="covered" data-hits="94" data-linenumber="60">
507
+ <span class="hits">94</span>
508
+
509
+ <code class="ruby"> format.decode(request(:get, path, headers))</code>
510
+ </li>
511
+
512
+ <li class="never" data-hits="" data-linenumber="61">
513
+
514
+
515
+ <code class="ruby"> end</code>
516
+ </li>
517
+
518
+ <li class="never" data-hits="" data-linenumber="62">
519
+
520
+
521
+ <code class="ruby"> end</code>
522
+ </li>
523
+
524
+ <li class="never" data-hits="" data-linenumber="63">
525
+
526
+
527
+ <code class="ruby"> </code>
528
+ </li>
529
+
530
+ <li class="covered" data-hits="1" data-linenumber="64">
531
+ <span class="hits">1</span>
532
+
533
+ <code class="ruby"> def delete(path, headers = self.headers)</code>
534
+ </li>
535
+
536
+ <li class="covered" data-hits="4" data-linenumber="65">
537
+ <span class="hits">4</span>
538
+
539
+ <code class="ruby"> request(:delete, path, build_request_headers(headers, :delete, self.site.merge(path)))</code>
540
+ </li>
541
+
542
+ <li class="covered" data-hits="4" data-linenumber="66">
543
+ <span class="hits">4</span>
544
+
545
+ <code class="ruby"> return true</code>
546
+ </li>
547
+
548
+ <li class="never" data-hits="" data-linenumber="67">
549
+
550
+
551
+ <code class="ruby"> end</code>
552
+ </li>
553
+
554
+ <li class="never" data-hits="" data-linenumber="68">
555
+
556
+
557
+ <code class="ruby"> </code>
558
+ </li>
559
+
560
+ <li class="covered" data-hits="1" data-linenumber="69">
561
+ <span class="hits">1</span>
562
+
563
+ <code class="ruby"> def head(path, headers = self.headers)</code>
564
+ </li>
565
+
566
+ <li class="covered" data-hits="1" data-linenumber="70">
567
+ <span class="hits">1</span>
568
+
569
+ <code class="ruby"> request(:head, path, build_request_headers(headers, :head, self.site.merge(path)))</code>
570
+ </li>
571
+
572
+ <li class="never" data-hits="" data-linenumber="71">
573
+
574
+
575
+ <code class="ruby"> end</code>
576
+ </li>
577
+
578
+ <li class="never" data-hits="" data-linenumber="72">
579
+
580
+
581
+ <code class="ruby"> </code>
582
+ </li>
583
+
584
+ <li class="never" data-hits="" data-linenumber="73">
585
+
586
+
587
+ <code class="ruby"> </code>
588
+ </li>
589
+
590
+ <li class="covered" data-hits="1" data-linenumber="74">
591
+ <span class="hits">1</span>
592
+
593
+ <code class="ruby"> def put(path, body = {}, headers = self.headers)</code>
594
+ </li>
595
+
596
+ <li class="never" data-hits="" data-linenumber="75">
597
+
598
+
599
+ <code class="ruby"> # If there's a file to send then we can't use JSON or XML</code>
600
+ </li>
601
+
602
+ <li class="covered" data-hits="2" data-linenumber="76">
603
+ <span class="hits">2</span>
604
+
605
+ <code class="ruby"> if !body.is_a?(String) &amp;&amp; RestClient::Payload.has_file?(body)</code>
606
+ </li>
607
+
608
+ <li class="missed" data-hits="0" data-linenumber="77">
609
+
610
+
611
+ <code class="ruby"> format.decode(request(:put, path, body, build_request_headers(headers, :put, self.site.merge(path))))</code>
612
+ </li>
613
+
614
+ <li class="never" data-hits="" data-linenumber="78">
615
+
616
+
617
+ <code class="ruby"> else</code>
618
+ </li>
619
+
620
+ <li class="covered" data-hits="2" data-linenumber="79">
621
+ <span class="hits">2</span>
622
+
623
+ <code class="ruby"> format.decode(request(:put, path, body, build_request_headers(headers, :put, self.site.merge(path))))</code>
624
+ </li>
625
+
626
+ <li class="never" data-hits="" data-linenumber="80">
627
+
628
+
629
+ <code class="ruby"> end</code>
630
+ </li>
631
+
632
+ <li class="never" data-hits="" data-linenumber="81">
633
+
634
+
635
+ <code class="ruby"> end</code>
636
+ </li>
637
+
638
+ <li class="never" data-hits="" data-linenumber="82">
639
+
640
+
641
+ <code class="ruby"> </code>
642
+ </li>
643
+
644
+ <li class="covered" data-hits="1" data-linenumber="83">
645
+ <span class="hits">1</span>
646
+
647
+ <code class="ruby"> def post(path, body = {}, headers = self.headers)</code>
648
+ </li>
649
+
650
+ <li class="covered" data-hits="6" data-linenumber="84">
651
+ <span class="hits">6</span>
652
+
653
+ <code class="ruby"> if !body.is_a?(String) &amp;&amp; RestClient::Payload.has_file?(body)</code>
654
+ </li>
655
+
656
+ <li class="missed" data-hits="0" data-linenumber="85">
657
+
658
+
659
+ <code class="ruby"> format.decode(request(:post, path, body, build_request_headers(headers, :post, self.site.merge(path))))</code>
660
+ </li>
661
+
662
+ <li class="never" data-hits="" data-linenumber="86">
663
+
664
+
665
+ <code class="ruby"> else</code>
666
+ </li>
667
+
668
+ <li class="covered" data-hits="6" data-linenumber="87">
669
+ <span class="hits">6</span>
670
+
671
+ <code class="ruby"> format.decode(request(:post, path, body, build_request_headers(headers, :post, self.site.merge(path))))</code>
672
+ </li>
673
+
674
+ <li class="never" data-hits="" data-linenumber="88">
675
+
676
+
677
+ <code class="ruby"> end</code>
678
+ </li>
679
+
680
+ <li class="never" data-hits="" data-linenumber="89">
681
+
682
+
683
+ <code class="ruby"> end</code>
684
+ </li>
685
+
686
+ <li class="never" data-hits="" data-linenumber="90">
687
+
688
+
689
+ <code class="ruby"></code>
690
+ </li>
691
+
692
+ <li class="covered" data-hits="1" data-linenumber="91">
693
+ <span class="hits">1</span>
694
+
695
+ <code class="ruby"> protected</code>
696
+ </li>
697
+
698
+ <li class="never" data-hits="" data-linenumber="92">
699
+
700
+
701
+ <code class="ruby"></code>
702
+ </li>
703
+
704
+ <li class="covered" data-hits="1" data-linenumber="93">
705
+ <span class="hits">1</span>
706
+
707
+ <code class="ruby"> def cache_key(path, headers)</code>
708
+ </li>
709
+
710
+ <li class="covered" data-hits="2" data-linenumber="94">
711
+ <span class="hits">2</span>
712
+
713
+ <code class="ruby"> key = Digest::MD5.hexdigest([path, headers].to_s)</code>
714
+ </li>
715
+
716
+ <li class="covered" data-hits="2" data-linenumber="95">
717
+ <span class="hits">2</span>
718
+
719
+ <code class="ruby"> return &quot;a-#{key}-#{ApiResource::Base.ttl}&quot;</code>
720
+ </li>
721
+
722
+ <li class="never" data-hits="" data-linenumber="96">
723
+
724
+
725
+ <code class="ruby"> end</code>
726
+ </li>
727
+
728
+ <li class="never" data-hits="" data-linenumber="97">
729
+
730
+
731
+ <code class="ruby"></code>
732
+ </li>
733
+
734
+ <li class="covered" data-hits="1" data-linenumber="98">
735
+ <span class="hits">1</span>
736
+
737
+ <code class="ruby"> def with_caching(path, data = {}, &amp;block)</code>
738
+ </li>
739
+
740
+ <li class="covered" data-hits="96" data-linenumber="99">
741
+ <span class="hits">96</span>
742
+
743
+ <code class="ruby"> if ApiResource::Base.ttl.to_f &gt; 0.0</code>
744
+ </li>
745
+
746
+ <li class="covered" data-hits="2" data-linenumber="100">
747
+ <span class="hits">2</span>
748
+
749
+ <code class="ruby"> key = self.cache_key(path, data)</code>
750
+ </li>
751
+
752
+ <li class="covered" data-hits="2" data-linenumber="101">
753
+ <span class="hits">2</span>
754
+
755
+ <code class="ruby"> ApiResource.cache.fetch(key, :expires_in =&gt; ApiResource::Base.ttl) do</code>
756
+ </li>
757
+
758
+ <li class="missed" data-hits="0" data-linenumber="102">
759
+
760
+
761
+ <code class="ruby"> yield</code>
762
+ </li>
763
+
764
+ <li class="never" data-hits="" data-linenumber="103">
765
+
766
+
767
+ <code class="ruby"> end</code>
768
+ </li>
769
+
770
+ <li class="never" data-hits="" data-linenumber="104">
771
+
772
+
773
+ <code class="ruby"> else</code>
774
+ </li>
775
+
776
+ <li class="covered" data-hits="94" data-linenumber="105">
777
+ <span class="hits">94</span>
778
+
779
+ <code class="ruby"> yield</code>
780
+ </li>
781
+
782
+ <li class="never" data-hits="" data-linenumber="106">
783
+
784
+
785
+ <code class="ruby"> end</code>
786
+ </li>
787
+
788
+ <li class="never" data-hits="" data-linenumber="107">
789
+
790
+
791
+ <code class="ruby"> end</code>
792
+ </li>
793
+
794
+ <li class="never" data-hits="" data-linenumber="108">
795
+
796
+
797
+ <code class="ruby"></code>
798
+ </li>
799
+
800
+ <li class="covered" data-hits="1" data-linenumber="109">
801
+ <span class="hits">1</span>
802
+
803
+ <code class="ruby"> private</code>
804
+ </li>
805
+
806
+ <li class="never" data-hits="" data-linenumber="110">
807
+
808
+
809
+ <code class="ruby"> # Makes a request to the remote service.</code>
810
+ </li>
811
+
812
+ <li class="covered" data-hits="1" data-linenumber="111">
813
+ <span class="hits">1</span>
814
+
815
+ <code class="ruby"> def request(method, path, *arguments)</code>
816
+ </li>
817
+
818
+ <li class="covered" data-hits="107" data-linenumber="112">
819
+ <span class="hits">107</span>
820
+
821
+ <code class="ruby"> handle_response(path) do</code>
822
+ </li>
823
+
824
+ <li class="covered" data-hits="107" data-linenumber="113">
825
+ <span class="hits">107</span>
826
+
827
+ <code class="ruby"> ActiveSupport::Notifications.instrument(&quot;request.api_resource&quot;) do |payload|</code>
828
+ </li>
829
+
830
+ <li class="never" data-hits="" data-linenumber="114">
831
+
832
+
833
+ <code class="ruby"> </code>
834
+ </li>
835
+
836
+ <li class="never" data-hits="" data-linenumber="115">
837
+
838
+
839
+ <code class="ruby"> # debug logging</code>
840
+ </li>
841
+
842
+ <li class="covered" data-hits="107" data-linenumber="116">
843
+ <span class="hits">107</span>
844
+
845
+ <code class="ruby"> ApiResource.logger.debug(&quot;#{method.to_s.upcase} #{path}&quot;)</code>
846
+ </li>
847
+
848
+ <li class="never" data-hits="" data-linenumber="117">
849
+
850
+
851
+ <code class="ruby"> </code>
852
+ </li>
853
+
854
+ <li class="covered" data-hits="107" data-linenumber="118">
855
+ <span class="hits">107</span>
856
+
857
+ <code class="ruby"> payload[:method] = method</code>
858
+ </li>
859
+
860
+ <li class="covered" data-hits="107" data-linenumber="119">
861
+ <span class="hits">107</span>
862
+
863
+ <code class="ruby"> payload[:request_uri] = &quot;#{site.scheme}://#{site.host}:#{site.port}#{path}&quot;</code>
864
+ </li>
865
+
866
+ <li class="covered" data-hits="107" data-linenumber="120">
867
+ <span class="hits">107</span>
868
+
869
+ <code class="ruby"> payload[:result] = http(path).send(method, *arguments)</code>
870
+ </li>
871
+
872
+ <li class="never" data-hits="" data-linenumber="121">
873
+
874
+
875
+ <code class="ruby"> end</code>
876
+ </li>
877
+
878
+ <li class="never" data-hits="" data-linenumber="122">
879
+
880
+
881
+ <code class="ruby"> end</code>
882
+ </li>
883
+
884
+ <li class="never" data-hits="" data-linenumber="123">
885
+
886
+
887
+ <code class="ruby"> end</code>
888
+ </li>
889
+
890
+ <li class="never" data-hits="" data-linenumber="124">
891
+
892
+
893
+ <code class="ruby"></code>
894
+ </li>
895
+
896
+ <li class="never" data-hits="" data-linenumber="125">
897
+
898
+
899
+ <code class="ruby"> # Handles response and error codes from the remote service.</code>
900
+ </li>
901
+
902
+ <li class="covered" data-hits="1" data-linenumber="126">
903
+ <span class="hits">1</span>
904
+
905
+ <code class="ruby"> def handle_response(path, &amp;block)</code>
906
+ </li>
907
+
908
+ <li class="covered" data-hits="107" data-linenumber="127">
909
+ <span class="hits">107</span>
910
+
911
+ <code class="ruby"> begin</code>
912
+ </li>
913
+
914
+ <li class="covered" data-hits="107" data-linenumber="128">
915
+ <span class="hits">107</span>
916
+
917
+ <code class="ruby"> result = yield</code>
918
+ </li>
919
+
920
+ <li class="never" data-hits="" data-linenumber="129">
921
+
922
+
923
+ <code class="ruby"> rescue RestClient::RequestTimeout</code>
924
+ </li>
925
+
926
+ <li class="covered" data-hits="1" data-linenumber="130">
927
+ <span class="hits">1</span>
928
+
929
+ <code class="ruby"> raise ApiResource::RequestTimeout.new(&quot;Request Time Out - Accessing #{path}}&quot;)</code>
930
+ </li>
931
+
932
+ <li class="never" data-hits="" data-linenumber="131">
933
+
934
+
935
+ <code class="ruby"> rescue Exception =&gt; error</code>
936
+ </li>
937
+
938
+ <li class="covered" data-hits="2" data-linenumber="132">
939
+ <span class="hits">2</span>
940
+
941
+ <code class="ruby"> if error.respond_to?(:http_code)</code>
942
+ </li>
943
+
944
+ <li class="covered" data-hits="2" data-linenumber="133">
945
+ <span class="hits">2</span>
946
+
947
+ <code class="ruby"> ApiResource.logger.error(&quot;#{self} accessing #{path}&quot;)</code>
948
+ </li>
949
+
950
+ <li class="covered" data-hits="2" data-linenumber="134">
951
+ <span class="hits">2</span>
952
+
953
+ <code class="ruby"> ApiResource.logger.error(error.message)</code>
954
+ </li>
955
+
956
+ <li class="covered" data-hits="2" data-linenumber="135">
957
+ <span class="hits">2</span>
958
+
959
+ <code class="ruby"> result = error.response</code>
960
+ </li>
961
+
962
+ <li class="never" data-hits="" data-linenumber="136">
963
+
964
+
965
+ <code class="ruby"> else</code>
966
+ </li>
967
+
968
+ <li class="missed" data-hits="0" data-linenumber="137">
969
+
970
+
971
+ <code class="ruby"> raise ApiResource::ConnectionError.new(nil, :message =&gt; &quot;Unknown error #{error}&quot;)</code>
972
+ </li>
973
+
974
+ <li class="never" data-hits="" data-linenumber="138">
975
+
976
+
977
+ <code class="ruby"> end</code>
978
+ </li>
979
+
980
+ <li class="never" data-hits="" data-linenumber="139">
981
+
982
+
983
+ <code class="ruby"> end</code>
984
+ </li>
985
+
986
+ <li class="covered" data-hits="106" data-linenumber="140">
987
+ <span class="hits">106</span>
988
+
989
+ <code class="ruby"> return propogate_response_or_error(result, result.code)</code>
990
+ </li>
991
+
992
+ <li class="never" data-hits="" data-linenumber="141">
993
+
994
+
995
+ <code class="ruby"> end</code>
996
+ </li>
997
+
998
+ <li class="never" data-hits="" data-linenumber="142">
999
+
1000
+
1001
+ <code class="ruby"> </code>
1002
+ </li>
1003
+
1004
+ <li class="covered" data-hits="1" data-linenumber="143">
1005
+ <span class="hits">1</span>
1006
+
1007
+ <code class="ruby"> def propogate_response_or_error(response, code)</code>
1008
+ </li>
1009
+
1010
+ <li class="covered" data-hits="106" data-linenumber="144">
1011
+ <span class="hits">106</span>
1012
+
1013
+ <code class="ruby"> case code.to_i</code>
1014
+ </li>
1015
+
1016
+ <li class="never" data-hits="" data-linenumber="145">
1017
+
1018
+
1019
+ <code class="ruby"> when 301,302</code>
1020
+ </li>
1021
+
1022
+ <li class="missed" data-hits="0" data-linenumber="146">
1023
+
1024
+
1025
+ <code class="ruby"> raise ApiResource::Redirection.new(response)</code>
1026
+ </li>
1027
+
1028
+ <li class="never" data-hits="" data-linenumber="147">
1029
+
1030
+
1031
+ <code class="ruby"> when 200..400</code>
1032
+ </li>
1033
+
1034
+ <li class="covered" data-hits="102" data-linenumber="148">
1035
+ <span class="hits">102</span>
1036
+
1037
+ <code class="ruby"> response.body</code>
1038
+ </li>
1039
+
1040
+ <li class="never" data-hits="" data-linenumber="149">
1041
+
1042
+
1043
+ <code class="ruby"> when 400</code>
1044
+ </li>
1045
+
1046
+ <li class="missed" data-hits="0" data-linenumber="150">
1047
+
1048
+
1049
+ <code class="ruby"> raise ApiResource::BadRequest.new(response)</code>
1050
+ </li>
1051
+
1052
+ <li class="never" data-hits="" data-linenumber="151">
1053
+
1054
+
1055
+ <code class="ruby"> when 401</code>
1056
+ </li>
1057
+
1058
+ <li class="missed" data-hits="0" data-linenumber="152">
1059
+
1060
+
1061
+ <code class="ruby"> raise ApiResource::UnauthorizedAccess.new(response)</code>
1062
+ </li>
1063
+
1064
+ <li class="never" data-hits="" data-linenumber="153">
1065
+
1066
+
1067
+ <code class="ruby"> when 403</code>
1068
+ </li>
1069
+
1070
+ <li class="missed" data-hits="0" data-linenumber="154">
1071
+
1072
+
1073
+ <code class="ruby"> raise ApiResource::ForbiddenAccess.new(response)</code>
1074
+ </li>
1075
+
1076
+ <li class="never" data-hits="" data-linenumber="155">
1077
+
1078
+
1079
+ <code class="ruby"> when 404</code>
1080
+ </li>
1081
+
1082
+ <li class="covered" data-hits="2" data-linenumber="156">
1083
+ <span class="hits">2</span>
1084
+
1085
+ <code class="ruby"> raise ApiResource::ResourceNotFound.new(response)</code>
1086
+ </li>
1087
+
1088
+ <li class="never" data-hits="" data-linenumber="157">
1089
+
1090
+
1091
+ <code class="ruby"> when 405</code>
1092
+ </li>
1093
+
1094
+ <li class="missed" data-hits="0" data-linenumber="158">
1095
+
1096
+
1097
+ <code class="ruby"> raise ApiResource::MethodNotAllowed.new(response)</code>
1098
+ </li>
1099
+
1100
+ <li class="never" data-hits="" data-linenumber="159">
1101
+
1102
+
1103
+ <code class="ruby"> when 406</code>
1104
+ </li>
1105
+
1106
+ <li class="missed" data-hits="0" data-linenumber="160">
1107
+
1108
+
1109
+ <code class="ruby"> raise ApiResource::NotAccepatable.new(response)</code>
1110
+ </li>
1111
+
1112
+ <li class="never" data-hits="" data-linenumber="161">
1113
+
1114
+
1115
+ <code class="ruby"> when 409</code>
1116
+ </li>
1117
+
1118
+ <li class="missed" data-hits="0" data-linenumber="162">
1119
+
1120
+
1121
+ <code class="ruby"> raise ApiResource::ResourceNotFound.new(response)</code>
1122
+ </li>
1123
+
1124
+ <li class="never" data-hits="" data-linenumber="163">
1125
+
1126
+
1127
+ <code class="ruby"> when 410</code>
1128
+ </li>
1129
+
1130
+ <li class="missed" data-hits="0" data-linenumber="164">
1131
+
1132
+
1133
+ <code class="ruby"> raise ApiResource::ResourceGone.new(response)</code>
1134
+ </li>
1135
+
1136
+ <li class="never" data-hits="" data-linenumber="165">
1137
+
1138
+
1139
+ <code class="ruby"> when 422</code>
1140
+ </li>
1141
+
1142
+ <li class="covered" data-hits="2" data-linenumber="166">
1143
+ <span class="hits">2</span>
1144
+
1145
+ <code class="ruby"> raise ApiResource::UnprocessableEntity.new(response)</code>
1146
+ </li>
1147
+
1148
+ <li class="never" data-hits="" data-linenumber="167">
1149
+
1150
+
1151
+ <code class="ruby"> when 401..499</code>
1152
+ </li>
1153
+
1154
+ <li class="missed" data-hits="0" data-linenumber="168">
1155
+
1156
+
1157
+ <code class="ruby"> raise ApiResource::ClientError.new(response)</code>
1158
+ </li>
1159
+
1160
+ <li class="never" data-hits="" data-linenumber="169">
1161
+
1162
+
1163
+ <code class="ruby"> when 500..600</code>
1164
+ </li>
1165
+
1166
+ <li class="missed" data-hits="0" data-linenumber="170">
1167
+
1168
+
1169
+ <code class="ruby"> raise ApiResource::ServerError.new(response)</code>
1170
+ </li>
1171
+
1172
+ <li class="never" data-hits="" data-linenumber="171">
1173
+
1174
+
1175
+ <code class="ruby"> else</code>
1176
+ </li>
1177
+
1178
+ <li class="missed" data-hits="0" data-linenumber="172">
1179
+
1180
+
1181
+ <code class="ruby"> raise ApiResource::ConnectionError.new(response, :message =&gt; &quot;Unknown response code: #{code}&quot;)</code>
1182
+ </li>
1183
+
1184
+ <li class="never" data-hits="" data-linenumber="173">
1185
+
1186
+
1187
+ <code class="ruby"> end</code>
1188
+ </li>
1189
+
1190
+ <li class="never" data-hits="" data-linenumber="174">
1191
+
1192
+
1193
+ <code class="ruby"> end</code>
1194
+ </li>
1195
+
1196
+ <li class="never" data-hits="" data-linenumber="175">
1197
+
1198
+
1199
+ <code class="ruby"> </code>
1200
+ </li>
1201
+
1202
+ <li class="never" data-hits="" data-linenumber="176">
1203
+
1204
+
1205
+ <code class="ruby"> # Creates new Net::HTTP instance for communication with the</code>
1206
+ </li>
1207
+
1208
+ <li class="never" data-hits="" data-linenumber="177">
1209
+
1210
+
1211
+ <code class="ruby"> # remote service and resources.</code>
1212
+ </li>
1213
+
1214
+ <li class="covered" data-hits="1" data-linenumber="178">
1215
+ <span class="hits">1</span>
1216
+
1217
+ <code class="ruby"> def http(path)</code>
1218
+ </li>
1219
+
1220
+ <li class="covered" data-hits="4" data-linenumber="179">
1221
+ <span class="hits">4</span>
1222
+
1223
+ <code class="ruby"> unless path =~ /\./</code>
1224
+ </li>
1225
+
1226
+ <li class="covered" data-hits="4" data-linenumber="180">
1227
+ <span class="hits">4</span>
1228
+
1229
+ <code class="ruby"> path += &quot;.#{self.format.extension}&quot;</code>
1230
+ </li>
1231
+
1232
+ <li class="never" data-hits="" data-linenumber="181">
1233
+
1234
+
1235
+ <code class="ruby"> end</code>
1236
+ </li>
1237
+
1238
+ <li class="covered" data-hits="4" data-linenumber="182">
1239
+ <span class="hits">4</span>
1240
+
1241
+ <code class="ruby"> RestClient::Resource.new(&quot;#{site.scheme}://#{site.host}:#{site.port}#{path}&quot;, {:timeout =&gt; ApiResource::Base.timeout, :open_timeout =&gt; ApiResource::Base.open_timeout})</code>
1242
+ </li>
1243
+
1244
+ <li class="never" data-hits="" data-linenumber="183">
1245
+
1246
+
1247
+ <code class="ruby"> end</code>
1248
+ </li>
1249
+
1250
+ <li class="never" data-hits="" data-linenumber="184">
1251
+
1252
+
1253
+ <code class="ruby"> </code>
1254
+ </li>
1255
+
1256
+ <li class="covered" data-hits="1" data-linenumber="185">
1257
+ <span class="hits">1</span>
1258
+
1259
+ <code class="ruby"> def build_request_headers(headers, verb, uri)</code>
1260
+ </li>
1261
+
1262
+ <li class="covered" data-hits="109" data-linenumber="186">
1263
+ <span class="hits">109</span>
1264
+
1265
+ <code class="ruby"> http_format_header(verb).update(headers)</code>
1266
+ </li>
1267
+
1268
+ <li class="never" data-hits="" data-linenumber="187">
1269
+
1270
+
1271
+ <code class="ruby"> end</code>
1272
+ </li>
1273
+
1274
+ <li class="never" data-hits="" data-linenumber="188">
1275
+
1276
+
1277
+ <code class="ruby"> </code>
1278
+ </li>
1279
+
1280
+ <li class="covered" data-hits="1" data-linenumber="189">
1281
+ <span class="hits">1</span>
1282
+
1283
+ <code class="ruby"> def http_format_header(verb)</code>
1284
+ </li>
1285
+
1286
+ <li class="covered" data-hits="109" data-linenumber="190">
1287
+ <span class="hits">109</span>
1288
+
1289
+ <code class="ruby"> {}.tap do |ret|</code>
1290
+ </li>
1291
+
1292
+ <li class="covered" data-hits="109" data-linenumber="191">
1293
+ <span class="hits">109</span>
1294
+
1295
+ <code class="ruby"> ret[HTTP_FORMAT_HEADER_NAMES[verb]] = format.mime_type</code>
1296
+ </li>
1297
+
1298
+ <li class="never" data-hits="" data-linenumber="192">
1299
+
1300
+
1301
+ <code class="ruby"> end</code>
1302
+ </li>
1303
+
1304
+ <li class="never" data-hits="" data-linenumber="193">
1305
+
1306
+
1307
+ <code class="ruby"> end</code>
1308
+ </li>
1309
+
1310
+ <li class="never" data-hits="" data-linenumber="194">
1311
+
1312
+
1313
+ <code class="ruby"> end</code>
1314
+ </li>
1315
+
1316
+ <li class="never" data-hits="" data-linenumber="195">
1317
+
1318
+
1319
+ <code class="ruby">end</code>
1320
+ </li>
1321
+
1322
+ </ol>
1323
+ </pre>
1324
+ </div>
1325
+
1326
+ <div class="source_table" id="f45fa2fcc995002867927f6d8aed1c11923634e8">
1327
+ <div class="header">
1328
+ <h3>lib/api_resource/decorators.rb</h3>
1329
+ <h4><span class="green">100.0 %</span> covered</h4>
1330
+ <div>
1331
+ <b>4</b> relevant lines.
1332
+ <span class="green"><b>4</b> lines covered</span> and
1333
+ <span class="red"><b>0</b> lines missed.</span>
1334
+ </div>
1335
+ </div>
1336
+
1337
+ <pre>
1338
+ <ol>
1339
+
1340
+ <li class="covered" data-hits="1" data-linenumber="1">
1341
+ <span class="hits">1</span>
1342
+
1343
+ <code class="ruby">module ApiResource</code>
1344
+ </li>
1345
+
1346
+ <li class="covered" data-hits="1" data-linenumber="2">
1347
+ <span class="hits">1</span>
1348
+
1349
+ <code class="ruby"> module Decorators</code>
1350
+ </li>
1351
+
1352
+ <li class="covered" data-hits="1" data-linenumber="3">
1353
+ <span class="hits">1</span>
1354
+
1355
+ <code class="ruby"> extend ActiveSupport::Autoload</code>
1356
+ </li>
1357
+
1358
+ <li class="covered" data-hits="1" data-linenumber="4">
1359
+ <span class="hits">1</span>
1360
+
1361
+ <code class="ruby"> autoload :CachingDecorator</code>
1362
+ </li>
1363
+
1364
+ <li class="never" data-hits="" data-linenumber="5">
1365
+
1366
+
1367
+ <code class="ruby"> end</code>
1368
+ </li>
1369
+
1370
+ <li class="never" data-hits="" data-linenumber="6">
1371
+
1372
+
1373
+ <code class="ruby">end</code>
1374
+ </li>
1375
+
1376
+ </ol>
1377
+ </pre>
1378
+ </div>
1379
+
1380
+ <div class="source_table" id="d6e8030adf5eba08e7d2cc9b2c181aa296332935">
1381
+ <div class="header">
1382
+ <h3>lib/api_resource/decorators/caching_decorator.rb</h3>
1383
+ <h4><span class="green">100.0 %</span> covered</h4>
1384
+ <div>
1385
+ <b>11</b> relevant lines.
1386
+ <span class="green"><b>11</b> lines covered</span> and
1387
+ <span class="red"><b>0</b> lines missed.</span>
1388
+ </div>
1389
+ </div>
1390
+
1391
+ <pre>
1392
+ <ol>
1393
+
1394
+ <li class="covered" data-hits="1" data-linenumber="1">
1395
+ <span class="hits">1</span>
1396
+
1397
+ <code class="ruby">module ApiResource</code>
1398
+ </li>
1399
+
1400
+ <li class="covered" data-hits="1" data-linenumber="2">
1401
+ <span class="hits">1</span>
1402
+
1403
+ <code class="ruby"> module Decorators</code>
1404
+ </li>
1405
+
1406
+ <li class="covered" data-hits="1" data-linenumber="3">
1407
+ <span class="hits">1</span>
1408
+
1409
+ <code class="ruby"> class CachingDecorator</code>
1410
+ </li>
1411
+
1412
+ <li class="covered" data-hits="1" data-linenumber="4">
1413
+ <span class="hits">1</span>
1414
+
1415
+ <code class="ruby"> attr_reader :owner</code>
1416
+ </li>
1417
+
1418
+ <li class="covered" data-hits="1" data-linenumber="5">
1419
+ <span class="hits">1</span>
1420
+
1421
+ <code class="ruby"> attr_reader :ttl</code>
1422
+ </li>
1423
+
1424
+ <li class="never" data-hits="" data-linenumber="6">
1425
+
1426
+
1427
+ <code class="ruby"></code>
1428
+ </li>
1429
+
1430
+ <li class="covered" data-hits="1" data-linenumber="7">
1431
+ <span class="hits">1</span>
1432
+
1433
+ <code class="ruby"> def initialize(owner, ttl)</code>
1434
+ </li>
1435
+
1436
+ <li class="covered" data-hits="3" data-linenumber="8">
1437
+ <span class="hits">3</span>
1438
+
1439
+ <code class="ruby"> @owner = owner</code>
1440
+ </li>
1441
+
1442
+ <li class="covered" data-hits="3" data-linenumber="9">
1443
+ <span class="hits">3</span>
1444
+
1445
+ <code class="ruby"> @ttl = ttl</code>
1446
+ </li>
1447
+
1448
+ <li class="never" data-hits="" data-linenumber="10">
1449
+
1450
+
1451
+ <code class="ruby"> end</code>
1452
+ </li>
1453
+
1454
+ <li class="never" data-hits="" data-linenumber="11">
1455
+
1456
+
1457
+ <code class="ruby"></code>
1458
+ </li>
1459
+
1460
+ <li class="never" data-hits="" data-linenumber="12">
1461
+
1462
+
1463
+ <code class="ruby"></code>
1464
+ </li>
1465
+
1466
+ <li class="covered" data-hits="1" data-linenumber="13">
1467
+ <span class="hits">1</span>
1468
+
1469
+ <code class="ruby"> def method_missing(method_name, *args, &amp;block)</code>
1470
+ </li>
1471
+
1472
+ <li class="covered" data-hits="2" data-linenumber="14">
1473
+ <span class="hits">2</span>
1474
+
1475
+ <code class="ruby"> ApiResource.with_ttl(self.ttl) do</code>
1476
+ </li>
1477
+
1478
+ <li class="covered" data-hits="2" data-linenumber="15">
1479
+ <span class="hits">2</span>
1480
+
1481
+ <code class="ruby"> self.owner.send(method_name, *args, &amp;block)</code>
1482
+ </li>
1483
+
1484
+ <li class="never" data-hits="" data-linenumber="16">
1485
+
1486
+
1487
+ <code class="ruby"> end</code>
1488
+ </li>
1489
+
1490
+ <li class="never" data-hits="" data-linenumber="17">
1491
+
1492
+
1493
+ <code class="ruby"> end</code>
1494
+ </li>
1495
+
1496
+ <li class="never" data-hits="" data-linenumber="18">
1497
+
1498
+
1499
+ <code class="ruby"> end</code>
1500
+ </li>
1501
+
1502
+ <li class="never" data-hits="" data-linenumber="19">
1503
+
1504
+
1505
+ <code class="ruby"> end</code>
1506
+ </li>
1507
+
1508
+ <li class="never" data-hits="" data-linenumber="20">
1509
+
1510
+
1511
+ <code class="ruby">end</code>
1512
+ </li>
1513
+
1514
+ </ol>
1515
+ </pre>
1516
+ </div>
1517
+
1518
+ <div class="source_table" id="289a75214eb3e0964963f50e7b8a4ba229915e18">
1519
+ <div class="header">
1520
+ <h3>lib/api_resource/formats/xml_format.rb</h3>
1521
+ <h4><span class="red">66.67 %</span> covered</h4>
1522
+ <div>
1523
+ <b>18</b> relevant lines.
1524
+ <span class="green"><b>12</b> lines covered</span> and
1525
+ <span class="red"><b>6</b> lines missed.</span>
1526
+ </div>
1527
+ </div>
1528
+
1529
+ <pre>
1530
+ <ol>
1531
+
1532
+ <li class="covered" data-hits="1" data-linenumber="1">
1533
+ <span class="hits">1</span>
1534
+
1535
+ <code class="ruby">require 'active_support/core_ext/hash/conversions'</code>
1536
+ </li>
1537
+
1538
+ <li class="never" data-hits="" data-linenumber="2">
1539
+
1540
+
1541
+ <code class="ruby"></code>
1542
+ </li>
1543
+
1544
+ <li class="covered" data-hits="1" data-linenumber="3">
1545
+ <span class="hits">1</span>
1546
+
1547
+ <code class="ruby">module ApiResource</code>
1548
+ </li>
1549
+
1550
+ <li class="covered" data-hits="1" data-linenumber="4">
1551
+ <span class="hits">1</span>
1552
+
1553
+ <code class="ruby"> module Formats</code>
1554
+ </li>
1555
+
1556
+ <li class="covered" data-hits="1" data-linenumber="5">
1557
+ <span class="hits">1</span>
1558
+
1559
+ <code class="ruby"> module XmlFormat</code>
1560
+ </li>
1561
+
1562
+ <li class="covered" data-hits="1" data-linenumber="6">
1563
+ <span class="hits">1</span>
1564
+
1565
+ <code class="ruby"> extend self</code>
1566
+ </li>
1567
+
1568
+ <li class="never" data-hits="" data-linenumber="7">
1569
+
1570
+
1571
+ <code class="ruby"></code>
1572
+ </li>
1573
+
1574
+ <li class="covered" data-hits="1" data-linenumber="8">
1575
+ <span class="hits">1</span>
1576
+
1577
+ <code class="ruby"> def extension</code>
1578
+ </li>
1579
+
1580
+ <li class="covered" data-hits="1" data-linenumber="9">
1581
+ <span class="hits">1</span>
1582
+
1583
+ <code class="ruby"> &quot;xml&quot;</code>
1584
+ </li>
1585
+
1586
+ <li class="never" data-hits="" data-linenumber="10">
1587
+
1588
+
1589
+ <code class="ruby"> end</code>
1590
+ </li>
1591
+
1592
+ <li class="never" data-hits="" data-linenumber="11">
1593
+
1594
+
1595
+ <code class="ruby"></code>
1596
+ </li>
1597
+
1598
+ <li class="covered" data-hits="1" data-linenumber="12">
1599
+ <span class="hits">1</span>
1600
+
1601
+ <code class="ruby"> def mime_type</code>
1602
+ </li>
1603
+
1604
+ <li class="missed" data-hits="0" data-linenumber="13">
1605
+
1606
+
1607
+ <code class="ruby"> &quot;application/xml&quot;</code>
1608
+ </li>
1609
+
1610
+ <li class="never" data-hits="" data-linenumber="14">
1611
+
1612
+
1613
+ <code class="ruby"> end</code>
1614
+ </li>
1615
+
1616
+ <li class="never" data-hits="" data-linenumber="15">
1617
+
1618
+
1619
+ <code class="ruby"></code>
1620
+ </li>
1621
+
1622
+ <li class="covered" data-hits="1" data-linenumber="16">
1623
+ <span class="hits">1</span>
1624
+
1625
+ <code class="ruby"> def encode(hash, options={})</code>
1626
+ </li>
1627
+
1628
+ <li class="missed" data-hits="0" data-linenumber="17">
1629
+
1630
+
1631
+ <code class="ruby"> hash.to_xml(options)</code>
1632
+ </li>
1633
+
1634
+ <li class="never" data-hits="" data-linenumber="18">
1635
+
1636
+
1637
+ <code class="ruby"> end</code>
1638
+ </li>
1639
+
1640
+ <li class="never" data-hits="" data-linenumber="19">
1641
+
1642
+
1643
+ <code class="ruby"></code>
1644
+ </li>
1645
+
1646
+ <li class="covered" data-hits="1" data-linenumber="20">
1647
+ <span class="hits">1</span>
1648
+
1649
+ <code class="ruby"> def decode(xml)</code>
1650
+ </li>
1651
+
1652
+ <li class="missed" data-hits="0" data-linenumber="21">
1653
+
1654
+
1655
+ <code class="ruby"> from_xml_data(Hash.from_xml(xml))</code>
1656
+ </li>
1657
+
1658
+ <li class="never" data-hits="" data-linenumber="22">
1659
+
1660
+
1661
+ <code class="ruby"> end</code>
1662
+ </li>
1663
+
1664
+ <li class="never" data-hits="" data-linenumber="23">
1665
+
1666
+
1667
+ <code class="ruby"></code>
1668
+ </li>
1669
+
1670
+ <li class="covered" data-hits="1" data-linenumber="24">
1671
+ <span class="hits">1</span>
1672
+
1673
+ <code class="ruby"> private</code>
1674
+ </li>
1675
+
1676
+ <li class="never" data-hits="" data-linenumber="25">
1677
+
1678
+
1679
+ <code class="ruby"> # Manipulate from_xml Hash, because xml_simple is not exactly what we</code>
1680
+ </li>
1681
+
1682
+ <li class="never" data-hits="" data-linenumber="26">
1683
+
1684
+
1685
+ <code class="ruby"> # want for Active Resource.</code>
1686
+ </li>
1687
+
1688
+ <li class="covered" data-hits="1" data-linenumber="27">
1689
+ <span class="hits">1</span>
1690
+
1691
+ <code class="ruby"> def from_xml_data(data)</code>
1692
+ </li>
1693
+
1694
+ <li class="missed" data-hits="0" data-linenumber="28">
1695
+
1696
+
1697
+ <code class="ruby"> if data.is_a?(Hash) &amp;&amp; data.keys.size == 1</code>
1698
+ </li>
1699
+
1700
+ <li class="missed" data-hits="0" data-linenumber="29">
1701
+
1702
+
1703
+ <code class="ruby"> data.values.first</code>
1704
+ </li>
1705
+
1706
+ <li class="never" data-hits="" data-linenumber="30">
1707
+
1708
+
1709
+ <code class="ruby"> else</code>
1710
+ </li>
1711
+
1712
+ <li class="missed" data-hits="0" data-linenumber="31">
1713
+
1714
+
1715
+ <code class="ruby"> data</code>
1716
+ </li>
1717
+
1718
+ <li class="never" data-hits="" data-linenumber="32">
1719
+
1720
+
1721
+ <code class="ruby"> end</code>
1722
+ </li>
1723
+
1724
+ <li class="never" data-hits="" data-linenumber="33">
1725
+
1726
+
1727
+ <code class="ruby"> end</code>
1728
+ </li>
1729
+
1730
+ <li class="never" data-hits="" data-linenumber="34">
1731
+
1732
+
1733
+ <code class="ruby"> end</code>
1734
+ </li>
1735
+
1736
+ <li class="never" data-hits="" data-linenumber="35">
1737
+
1738
+
1739
+ <code class="ruby"> end</code>
1740
+ </li>
1741
+
1742
+ <li class="never" data-hits="" data-linenumber="36">
1743
+
1744
+
1745
+ <code class="ruby">end</code>
1746
+ </li>
1747
+
1748
+ </ol>
1749
+ </pre>
1750
+ </div>
1751
+
1752
+ <div class="source_table" id="ff7575239f433378ab950b3e87078c133cf0d7b1">
1753
+ <div class="header">
1754
+ <h3>lib/api_resource/local.rb</h3>
1755
+ <h4><span class="green">100.0 %</span> covered</h4>
1756
+ <div>
1757
+ <b>6</b> relevant lines.
1758
+ <span class="green"><b>6</b> lines covered</span> and
1759
+ <span class="red"><b>0</b> lines missed.</span>
1760
+ </div>
1761
+ </div>
1762
+
1763
+ <pre>
1764
+ <ol>
1765
+
1766
+ <li class="covered" data-hits="1" data-linenumber="1">
1767
+ <span class="hits">1</span>
1768
+
1769
+ <code class="ruby">module ApiResource</code>
1770
+ </li>
1771
+
1772
+ <li class="covered" data-hits="1" data-linenumber="2">
1773
+ <span class="hits">1</span>
1774
+
1775
+ <code class="ruby"> class Local &lt; Base</code>
1776
+ </li>
1777
+
1778
+ <li class="never" data-hits="" data-linenumber="3">
1779
+
1780
+
1781
+ <code class="ruby"> # nothing to do here</code>
1782
+ </li>
1783
+
1784
+ <li class="covered" data-hits="1" data-linenumber="4">
1785
+ <span class="hits">1</span>
1786
+
1787
+ <code class="ruby"> def self.set_class_attributes_upon_load</code>
1788
+ </li>
1789
+
1790
+ <li class="covered" data-hits="1" data-linenumber="5">
1791
+ <span class="hits">1</span>
1792
+
1793
+ <code class="ruby"> true</code>
1794
+ </li>
1795
+
1796
+ <li class="never" data-hits="" data-linenumber="6">
1797
+
1798
+
1799
+ <code class="ruby"> end</code>
1800
+ </li>
1801
+
1802
+ <li class="never" data-hits="" data-linenumber="7">
1803
+
1804
+
1805
+ <code class="ruby"> # shouldn't do anything here either - </code>
1806
+ </li>
1807
+
1808
+ <li class="covered" data-hits="1" data-linenumber="8">
1809
+ <span class="hits">1</span>
1810
+
1811
+ <code class="ruby"> def self.reload_class_attributes</code>
1812
+ </li>
1813
+
1814
+ <li class="covered" data-hits="1" data-linenumber="9">
1815
+ <span class="hits">1</span>
1816
+
1817
+ <code class="ruby"> true</code>
1818
+ </li>
1819
+
1820
+ <li class="never" data-hits="" data-linenumber="10">
1821
+
1822
+
1823
+ <code class="ruby"> end</code>
1824
+ </li>
1825
+
1826
+ <li class="never" data-hits="" data-linenumber="11">
1827
+
1828
+
1829
+ <code class="ruby"> end</code>
1830
+ </li>
1831
+
1832
+ <li class="never" data-hits="" data-linenumber="12">
1833
+
1834
+
1835
+ <code class="ruby">end</code>
1836
+ </li>
1837
+
1838
+ </ol>
1839
+ </pre>
1840
+ </div>
1841
+
1842
+ <div class="source_table" id="e00127c96dbadd619a510b634fe0f45a70befec3">
1843
+ <div class="header">
1844
+ <h3>lib/api_resource/mocks.rb</h3>
1845
+ <h4><span class="green">94.53 %</span> covered</h4>
1846
+ <div>
1847
+ <b>128</b> relevant lines.
1848
+ <span class="green"><b>121</b> lines covered</span> and
1849
+ <span class="red"><b>7</b> lines missed.</span>
1850
+ </div>
1851
+ </div>
1852
+
1853
+ <pre>
1854
+ <ol>
1855
+
1856
+ <li class="covered" data-hits="1" data-linenumber="1">
1857
+ <span class="hits">1</span>
1858
+
1859
+ <code class="ruby">require 'api_resource'</code>
1860
+ </li>
1861
+
1862
+ <li class="never" data-hits="" data-linenumber="2">
1863
+
1864
+
1865
+ <code class="ruby"></code>
1866
+ </li>
1867
+
1868
+ <li class="covered" data-hits="1" data-linenumber="3">
1869
+ <span class="hits">1</span>
1870
+
1871
+ <code class="ruby">module ApiResource</code>
1872
+ </li>
1873
+
1874
+ <li class="never" data-hits="" data-linenumber="4">
1875
+
1876
+
1877
+ <code class="ruby"> </code>
1878
+ </li>
1879
+
1880
+ <li class="covered" data-hits="1" data-linenumber="5">
1881
+ <span class="hits">1</span>
1882
+
1883
+ <code class="ruby"> module Mocks</code>
1884
+ </li>
1885
+
1886
+ <li class="never" data-hits="" data-linenumber="6">
1887
+
1888
+
1889
+ <code class="ruby"> </code>
1890
+ </li>
1891
+
1892
+ <li class="covered" data-hits="1" data-linenumber="7">
1893
+ <span class="hits">1</span>
1894
+
1895
+ <code class="ruby"> @@endpoints = {}</code>
1896
+ </li>
1897
+
1898
+ <li class="covered" data-hits="1" data-linenumber="8">
1899
+ <span class="hits">1</span>
1900
+
1901
+ <code class="ruby"> @@path = nil</code>
1902
+ </li>
1903
+
1904
+ <li class="never" data-hits="" data-linenumber="9">
1905
+
1906
+
1907
+ <code class="ruby"></code>
1908
+ </li>
1909
+
1910
+ <li class="never" data-hits="" data-linenumber="10">
1911
+
1912
+
1913
+ <code class="ruby"> # A simple interface class to change the new connection to look like the </code>
1914
+ </li>
1915
+
1916
+ <li class="never" data-hits="" data-linenumber="11">
1917
+
1918
+
1919
+ <code class="ruby"> # old activeresource connection</code>
1920
+ </li>
1921
+
1922
+ <li class="covered" data-hits="1" data-linenumber="12">
1923
+ <span class="hits">1</span>
1924
+
1925
+ <code class="ruby"> class Interface</code>
1926
+ </li>
1927
+
1928
+ <li class="never" data-hits="" data-linenumber="13">
1929
+
1930
+
1931
+ <code class="ruby"> </code>
1932
+ </li>
1933
+
1934
+ <li class="covered" data-hits="1" data-linenumber="14">
1935
+ <span class="hits">1</span>
1936
+
1937
+ <code class="ruby"> def initialize(path)</code>
1938
+ </li>
1939
+
1940
+ <li class="covered" data-hits="106" data-linenumber="15">
1941
+ <span class="hits">106</span>
1942
+
1943
+ <code class="ruby"> @path = path</code>
1944
+ </li>
1945
+
1946
+ <li class="never" data-hits="" data-linenumber="16">
1947
+
1948
+
1949
+ <code class="ruby"> end</code>
1950
+ </li>
1951
+
1952
+ <li class="never" data-hits="" data-linenumber="17">
1953
+
1954
+
1955
+ <code class="ruby"> </code>
1956
+ </li>
1957
+
1958
+ <li class="covered" data-hits="1" data-linenumber="18">
1959
+ <span class="hits">1</span>
1960
+
1961
+ <code class="ruby"> def get(*args, &amp;block)</code>
1962
+ </li>
1963
+
1964
+ <li class="covered" data-hits="92" data-linenumber="19">
1965
+ <span class="hits">92</span>
1966
+
1967
+ <code class="ruby"> Connection.send(:get, @path, *args, &amp;block)</code>
1968
+ </li>
1969
+
1970
+ <li class="never" data-hits="" data-linenumber="20">
1971
+
1972
+
1973
+ <code class="ruby"> end</code>
1974
+ </li>
1975
+
1976
+ <li class="covered" data-hits="1" data-linenumber="21">
1977
+ <span class="hits">1</span>
1978
+
1979
+ <code class="ruby"> def post(*args, &amp;block)</code>
1980
+ </li>
1981
+
1982
+ <li class="covered" data-hits="6" data-linenumber="22">
1983
+ <span class="hits">6</span>
1984
+
1985
+ <code class="ruby"> Connection.send(:post, @path, *args, &amp;block)</code>
1986
+ </li>
1987
+
1988
+ <li class="never" data-hits="" data-linenumber="23">
1989
+
1990
+
1991
+ <code class="ruby"> end</code>
1992
+ </li>
1993
+
1994
+ <li class="covered" data-hits="1" data-linenumber="24">
1995
+ <span class="hits">1</span>
1996
+
1997
+ <code class="ruby"> def put(*args, &amp;block)</code>
1998
+ </li>
1999
+
2000
+ <li class="covered" data-hits="2" data-linenumber="25">
2001
+ <span class="hits">2</span>
2002
+
2003
+ <code class="ruby"> Connection.send(:put, @path, *args, &amp;block)</code>
2004
+ </li>
2005
+
2006
+ <li class="never" data-hits="" data-linenumber="26">
2007
+
2008
+
2009
+ <code class="ruby"> end</code>
2010
+ </li>
2011
+
2012
+ <li class="covered" data-hits="1" data-linenumber="27">
2013
+ <span class="hits">1</span>
2014
+
2015
+ <code class="ruby"> def delete(*args, &amp;block)</code>
2016
+ </li>
2017
+
2018
+ <li class="covered" data-hits="4" data-linenumber="28">
2019
+ <span class="hits">4</span>
2020
+
2021
+ <code class="ruby"> Connection.send(:delete, @path, *args, &amp;block)</code>
2022
+ </li>
2023
+
2024
+ <li class="never" data-hits="" data-linenumber="29">
2025
+
2026
+
2027
+ <code class="ruby"> end</code>
2028
+ </li>
2029
+
2030
+ <li class="covered" data-hits="1" data-linenumber="30">
2031
+ <span class="hits">1</span>
2032
+
2033
+ <code class="ruby"> def head(*args, &amp;block)</code>
2034
+ </li>
2035
+
2036
+ <li class="covered" data-hits="1" data-linenumber="31">
2037
+ <span class="hits">1</span>
2038
+
2039
+ <code class="ruby"> Connection.send(:head, @path, *args, &amp;block)</code>
2040
+ </li>
2041
+
2042
+ <li class="never" data-hits="" data-linenumber="32">
2043
+
2044
+
2045
+ <code class="ruby"> end</code>
2046
+ </li>
2047
+
2048
+ <li class="never" data-hits="" data-linenumber="33">
2049
+
2050
+
2051
+ <code class="ruby"> end</code>
2052
+ </li>
2053
+
2054
+ <li class="never" data-hits="" data-linenumber="34">
2055
+
2056
+
2057
+ <code class="ruby"></code>
2058
+ </li>
2059
+
2060
+ <li class="never" data-hits="" data-linenumber="35">
2061
+
2062
+
2063
+ <code class="ruby"> # set ApiResource's http </code>
2064
+ </li>
2065
+
2066
+ <li class="covered" data-hits="1" data-linenumber="36">
2067
+ <span class="hits">1</span>
2068
+
2069
+ <code class="ruby"> def self.init</code>
2070
+ </li>
2071
+
2072
+ <li class="covered" data-hits="2" data-linenumber="37">
2073
+ <span class="hits">2</span>
2074
+
2075
+ <code class="ruby"> ::ApiResource::Connection.class_eval do</code>
2076
+ </li>
2077
+
2078
+ <li class="covered" data-hits="2" data-linenumber="38">
2079
+ <span class="hits">2</span>
2080
+
2081
+ <code class="ruby"> private</code>
2082
+ </li>
2083
+
2084
+ <li class="covered" data-hits="2" data-linenumber="39">
2085
+ <span class="hits">2</span>
2086
+
2087
+ <code class="ruby"> alias_method :http_without_mock, :http</code>
2088
+ </li>
2089
+
2090
+ <li class="covered" data-hits="2" data-linenumber="40">
2091
+ <span class="hits">2</span>
2092
+
2093
+ <code class="ruby"> def http(path)</code>
2094
+ </li>
2095
+
2096
+ <li class="covered" data-hits="106" data-linenumber="41">
2097
+ <span class="hits">106</span>
2098
+
2099
+ <code class="ruby"> Interface.new(path)</code>
2100
+ </li>
2101
+
2102
+ <li class="never" data-hits="" data-linenumber="42">
2103
+
2104
+
2105
+ <code class="ruby"> end</code>
2106
+ </li>
2107
+
2108
+ <li class="never" data-hits="" data-linenumber="43">
2109
+
2110
+
2111
+ <code class="ruby"> end</code>
2112
+ </li>
2113
+
2114
+ <li class="never" data-hits="" data-linenumber="44">
2115
+
2116
+
2117
+ <code class="ruby"> end</code>
2118
+ </li>
2119
+
2120
+ <li class="never" data-hits="" data-linenumber="45">
2121
+
2122
+
2123
+ <code class="ruby"> </code>
2124
+ </li>
2125
+
2126
+ <li class="never" data-hits="" data-linenumber="46">
2127
+
2128
+
2129
+ <code class="ruby"> # set ApiResource's http </code>
2130
+ </li>
2131
+
2132
+ <li class="covered" data-hits="1" data-linenumber="47">
2133
+ <span class="hits">1</span>
2134
+
2135
+ <code class="ruby"> def self.remove</code>
2136
+ </li>
2137
+
2138
+ <li class="covered" data-hits="1" data-linenumber="48">
2139
+ <span class="hits">1</span>
2140
+
2141
+ <code class="ruby"> ::ApiResource::Connection.class_eval do</code>
2142
+ </li>
2143
+
2144
+ <li class="covered" data-hits="1" data-linenumber="49">
2145
+ <span class="hits">1</span>
2146
+
2147
+ <code class="ruby"> private</code>
2148
+ </li>
2149
+
2150
+ <li class="covered" data-hits="1" data-linenumber="50">
2151
+ <span class="hits">1</span>
2152
+
2153
+ <code class="ruby"> alias_method :http, :http_without_mock</code>
2154
+ </li>
2155
+
2156
+ <li class="never" data-hits="" data-linenumber="51">
2157
+
2158
+
2159
+ <code class="ruby"> end</code>
2160
+ </li>
2161
+
2162
+ <li class="never" data-hits="" data-linenumber="52">
2163
+
2164
+
2165
+ <code class="ruby"> end</code>
2166
+ </li>
2167
+
2168
+ <li class="never" data-hits="" data-linenumber="53">
2169
+
2170
+
2171
+ <code class="ruby"></code>
2172
+ </li>
2173
+
2174
+ <li class="never" data-hits="" data-linenumber="54">
2175
+
2176
+
2177
+ <code class="ruby"> # clear out the defined mocks</code>
2178
+ </li>
2179
+
2180
+ <li class="covered" data-hits="1" data-linenumber="55">
2181
+ <span class="hits">1</span>
2182
+
2183
+ <code class="ruby"> def self.clear_endpoints</code>
2184
+ </li>
2185
+
2186
+ <li class="covered" data-hits="1" data-linenumber="56">
2187
+ <span class="hits">1</span>
2188
+
2189
+ <code class="ruby"> ret = @@endpoints</code>
2190
+ </li>
2191
+
2192
+ <li class="covered" data-hits="1" data-linenumber="57">
2193
+ <span class="hits">1</span>
2194
+
2195
+ <code class="ruby"> @@endpoints = {}</code>
2196
+ </li>
2197
+
2198
+ <li class="covered" data-hits="1" data-linenumber="58">
2199
+ <span class="hits">1</span>
2200
+
2201
+ <code class="ruby"> ret</code>
2202
+ </li>
2203
+
2204
+ <li class="never" data-hits="" data-linenumber="59">
2205
+
2206
+
2207
+ <code class="ruby"> end</code>
2208
+ </li>
2209
+
2210
+ <li class="never" data-hits="" data-linenumber="60">
2211
+
2212
+
2213
+ <code class="ruby"> # re-set the endpoints</code>
2214
+ </li>
2215
+
2216
+ <li class="covered" data-hits="1" data-linenumber="61">
2217
+ <span class="hits">1</span>
2218
+
2219
+ <code class="ruby"> def self.set_endpoints(new_endpoints)</code>
2220
+ </li>
2221
+
2222
+ <li class="missed" data-hits="0" data-linenumber="62">
2223
+
2224
+
2225
+ <code class="ruby"> @@endpoints = new_endpoints</code>
2226
+ </li>
2227
+
2228
+ <li class="never" data-hits="" data-linenumber="63">
2229
+
2230
+
2231
+ <code class="ruby"> end</code>
2232
+ </li>
2233
+
2234
+ <li class="never" data-hits="" data-linenumber="64">
2235
+
2236
+
2237
+ <code class="ruby"> # return the defined endpoints</code>
2238
+ </li>
2239
+
2240
+ <li class="covered" data-hits="1" data-linenumber="65">
2241
+ <span class="hits">1</span>
2242
+
2243
+ <code class="ruby"> def self.endpoints</code>
2244
+ </li>
2245
+
2246
+ <li class="missed" data-hits="0" data-linenumber="66">
2247
+
2248
+
2249
+ <code class="ruby"> @@endpoints</code>
2250
+ </li>
2251
+
2252
+ <li class="never" data-hits="" data-linenumber="67">
2253
+
2254
+
2255
+ <code class="ruby"> end</code>
2256
+ </li>
2257
+
2258
+ <li class="covered" data-hits="1" data-linenumber="68">
2259
+ <span class="hits">1</span>
2260
+
2261
+ <code class="ruby"> def self.define(&amp;block)</code>
2262
+ </li>
2263
+
2264
+ <li class="covered" data-hits="4" data-linenumber="69">
2265
+ <span class="hits">4</span>
2266
+
2267
+ <code class="ruby"> instance_eval(&amp;block) if block_given?</code>
2268
+ </li>
2269
+
2270
+ <li class="never" data-hits="" data-linenumber="70">
2271
+
2272
+
2273
+ <code class="ruby"> end</code>
2274
+ </li>
2275
+
2276
+ <li class="never" data-hits="" data-linenumber="71">
2277
+
2278
+
2279
+ <code class="ruby"> # define an endpoint for the mock</code>
2280
+ </li>
2281
+
2282
+ <li class="covered" data-hits="1" data-linenumber="72">
2283
+ <span class="hits">1</span>
2284
+
2285
+ <code class="ruby"> def self.endpoint(path, &amp;block)</code>
2286
+ </li>
2287
+
2288
+ <li class="covered" data-hits="23" data-linenumber="73">
2289
+ <span class="hits">23</span>
2290
+
2291
+ <code class="ruby"> path, format = path.split(&quot;.&quot;)</code>
2292
+ </li>
2293
+
2294
+ <li class="covered" data-hits="23" data-linenumber="74">
2295
+ <span class="hits">23</span>
2296
+
2297
+ <code class="ruby"> @@endpoints[path] ||= []</code>
2298
+ </li>
2299
+
2300
+ <li class="covered" data-hits="23" data-linenumber="75">
2301
+ <span class="hits">23</span>
2302
+
2303
+ <code class="ruby"> with_path_and_format(path, format) do</code>
2304
+ </li>
2305
+
2306
+ <li class="covered" data-hits="23" data-linenumber="76">
2307
+ <span class="hits">23</span>
2308
+
2309
+ <code class="ruby"> instance_eval(&amp;block) if block_given?</code>
2310
+ </li>
2311
+
2312
+ <li class="never" data-hits="" data-linenumber="77">
2313
+
2314
+
2315
+ <code class="ruby"> end</code>
2316
+ </li>
2317
+
2318
+ <li class="never" data-hits="" data-linenumber="78">
2319
+
2320
+
2321
+ <code class="ruby"> end</code>
2322
+ </li>
2323
+
2324
+ <li class="never" data-hits="" data-linenumber="79">
2325
+
2326
+
2327
+ <code class="ruby"> # find a matching response</code>
2328
+ </li>
2329
+
2330
+ <li class="covered" data-hits="1" data-linenumber="80">
2331
+ <span class="hits">1</span>
2332
+
2333
+ <code class="ruby"> def self.find_response(request)</code>
2334
+ </li>
2335
+
2336
+ <li class="never" data-hits="" data-linenumber="81">
2337
+
2338
+
2339
+ <code class="ruby"> # these are stored as [[Request, Response], [Request, Response]]</code>
2340
+ </li>
2341
+
2342
+ <li class="covered" data-hits="99" data-linenumber="82">
2343
+ <span class="hits">99</span>
2344
+
2345
+ <code class="ruby"> responses_and_params = self.responses_for_path(request.path)</code>
2346
+ </li>
2347
+
2348
+ <li class="covered" data-hits="313" data-linenumber="83">
2349
+ <span class="hits">313</span>
2350
+
2351
+ <code class="ruby"> ret = (responses_and_params[:responses] || []).select{|pair| pair.first.match?(request)}</code>
2352
+ </li>
2353
+
2354
+ <li class="covered" data-hits="99" data-linenumber="84">
2355
+ <span class="hits">99</span>
2356
+
2357
+ <code class="ruby"> raise Exception.new(&quot;More than one response matches #{request}&quot;) if ret.length &gt; 1</code>
2358
+ </li>
2359
+
2360
+ <li class="covered" data-hits="99" data-linenumber="85">
2361
+ <span class="hits">99</span>
2362
+
2363
+ <code class="ruby"> return ret.first ? {:response =&gt; ret.first[1], :params =&gt; responses_and_params[:params]} : nil</code>
2364
+ </li>
2365
+
2366
+ <li class="never" data-hits="" data-linenumber="86">
2367
+
2368
+
2369
+ <code class="ruby"> end</code>
2370
+ </li>
2371
+
2372
+ <li class="never" data-hits="" data-linenumber="87">
2373
+
2374
+
2375
+ <code class="ruby"></code>
2376
+ </li>
2377
+
2378
+ <li class="covered" data-hits="1" data-linenumber="88">
2379
+ <span class="hits">1</span>
2380
+
2381
+ <code class="ruby"> def self.paths_match?(known_path, entered_path)</code>
2382
+ </li>
2383
+
2384
+ <li class="covered" data-hits="256" data-linenumber="89">
2385
+ <span class="hits">256</span>
2386
+
2387
+ <code class="ruby"> PathString.paths_match?(known_path, entered_path)</code>
2388
+ </li>
2389
+
2390
+ <li class="never" data-hits="" data-linenumber="90">
2391
+
2392
+
2393
+ <code class="ruby"> end</code>
2394
+ </li>
2395
+
2396
+ <li class="never" data-hits="" data-linenumber="91">
2397
+
2398
+
2399
+ <code class="ruby"></code>
2400
+ </li>
2401
+
2402
+ <li class="never" data-hits="" data-linenumber="92">
2403
+
2404
+
2405
+ <code class="ruby"> # This method assumes that the two are matching paths</code>
2406
+ </li>
2407
+
2408
+ <li class="never" data-hits="" data-linenumber="93">
2409
+
2410
+
2411
+ <code class="ruby"> # if they aren't the behavior is undefined</code>
2412
+ </li>
2413
+
2414
+ <li class="covered" data-hits="1" data-linenumber="94">
2415
+ <span class="hits">1</span>
2416
+
2417
+ <code class="ruby"> def self.extract_params(known_path, entered_path)</code>
2418
+ </li>
2419
+
2420
+ <li class="covered" data-hits="10" data-linenumber="95">
2421
+ <span class="hits">10</span>
2422
+
2423
+ <code class="ruby"> PathString.extract_params(known_path, entered_path)</code>
2424
+ </li>
2425
+
2426
+ <li class="never" data-hits="" data-linenumber="96">
2427
+
2428
+
2429
+ <code class="ruby"> end</code>
2430
+ </li>
2431
+
2432
+ <li class="never" data-hits="" data-linenumber="97">
2433
+
2434
+
2435
+ <code class="ruby"></code>
2436
+ </li>
2437
+
2438
+ <li class="never" data-hits="" data-linenumber="98">
2439
+
2440
+
2441
+ <code class="ruby"> # returns a hash {:responses =&gt; [[Request, Response],[Request,Response]], :params =&gt; {...}}</code>
2442
+ </li>
2443
+
2444
+ <li class="never" data-hits="" data-linenumber="99">
2445
+
2446
+
2447
+ <code class="ruby"> # if there is no match returns nil</code>
2448
+ </li>
2449
+
2450
+ <li class="covered" data-hits="1" data-linenumber="100">
2451
+ <span class="hits">1</span>
2452
+
2453
+ <code class="ruby"> def self.responses_for_path(path)</code>
2454
+ </li>
2455
+
2456
+ <li class="covered" data-hits="101" data-linenumber="101">
2457
+ <span class="hits">101</span>
2458
+
2459
+ <code class="ruby"> path = path.split(&quot;?&quot;).first</code>
2460
+ </li>
2461
+
2462
+ <li class="covered" data-hits="101" data-linenumber="102">
2463
+ <span class="hits">101</span>
2464
+
2465
+ <code class="ruby"> path = path.split(/\./).first</code>
2466
+ </li>
2467
+
2468
+ <li class="never" data-hits="" data-linenumber="103">
2469
+
2470
+
2471
+ <code class="ruby"> # The obvious case</code>
2472
+ </li>
2473
+
2474
+ <li class="covered" data-hits="101" data-linenumber="104">
2475
+ <span class="hits">101</span>
2476
+
2477
+ <code class="ruby"> if @@endpoints[path]</code>
2478
+ </li>
2479
+
2480
+ <li class="covered" data-hits="87" data-linenumber="105">
2481
+ <span class="hits">87</span>
2482
+
2483
+ <code class="ruby"> return {:responses =&gt; @@endpoints[path], :params =&gt; {}}</code>
2484
+ </li>
2485
+
2486
+ <li class="never" data-hits="" data-linenumber="106">
2487
+
2488
+
2489
+ <code class="ruby"> end</code>
2490
+ </li>
2491
+
2492
+ <li class="never" data-hits="" data-linenumber="107">
2493
+
2494
+
2495
+ <code class="ruby"> # parameter names prefixed with colons should match parts</code>
2496
+ </li>
2497
+
2498
+ <li class="never" data-hits="" data-linenumber="108">
2499
+
2500
+
2501
+ <code class="ruby"> # of the path and push those parameters into the response</code>
2502
+ </li>
2503
+
2504
+ <li class="covered" data-hits="14" data-linenumber="109">
2505
+ <span class="hits">14</span>
2506
+
2507
+ <code class="ruby"> @@endpoints.keys.each do |possible_path|</code>
2508
+ </li>
2509
+
2510
+ <li class="covered" data-hits="256" data-linenumber="110">
2511
+ <span class="hits">256</span>
2512
+
2513
+ <code class="ruby"> if self.paths_match?(possible_path, path)</code>
2514
+ </li>
2515
+
2516
+ <li class="covered" data-hits="10" data-linenumber="111">
2517
+ <span class="hits">10</span>
2518
+
2519
+ <code class="ruby"> return {:responses =&gt; @@endpoints[possible_path], :params =&gt; self.extract_params(possible_path, path)}</code>
2520
+ </li>
2521
+
2522
+ <li class="never" data-hits="" data-linenumber="112">
2523
+
2524
+
2525
+ <code class="ruby"> end</code>
2526
+ </li>
2527
+
2528
+ <li class="never" data-hits="" data-linenumber="113">
2529
+
2530
+
2531
+ <code class="ruby"> end</code>
2532
+ </li>
2533
+
2534
+ <li class="never" data-hits="" data-linenumber="114">
2535
+
2536
+
2537
+ <code class="ruby"></code>
2538
+ </li>
2539
+
2540
+ <li class="covered" data-hits="4" data-linenumber="115">
2541
+ <span class="hits">4</span>
2542
+
2543
+ <code class="ruby"> return {:responses =&gt; nil, :params =&gt; nil}</code>
2544
+ </li>
2545
+
2546
+ <li class="never" data-hits="" data-linenumber="116">
2547
+
2548
+
2549
+ <code class="ruby"> end</code>
2550
+ </li>
2551
+
2552
+ <li class="never" data-hits="" data-linenumber="117">
2553
+
2554
+
2555
+ <code class="ruby"> </code>
2556
+ </li>
2557
+
2558
+ <li class="never" data-hits="" data-linenumber="118">
2559
+
2560
+
2561
+ <code class="ruby"></code>
2562
+ </li>
2563
+
2564
+ <li class="covered" data-hits="1" data-linenumber="119">
2565
+ <span class="hits">1</span>
2566
+
2567
+ <code class="ruby"> private</code>
2568
+ </li>
2569
+
2570
+ <li class="covered" data-hits="1" data-linenumber="120">
2571
+ <span class="hits">1</span>
2572
+
2573
+ <code class="ruby"> def self.with_path_and_format(path, format, &amp;block)</code>
2574
+ </li>
2575
+
2576
+ <li class="covered" data-hits="23" data-linenumber="121">
2577
+ <span class="hits">23</span>
2578
+
2579
+ <code class="ruby"> @@path, @@format = path, format</code>
2580
+ </li>
2581
+
2582
+ <li class="covered" data-hits="23" data-linenumber="122">
2583
+ <span class="hits">23</span>
2584
+
2585
+ <code class="ruby"> ret = yield</code>
2586
+ </li>
2587
+
2588
+ <li class="covered" data-hits="23" data-linenumber="123">
2589
+ <span class="hits">23</span>
2590
+
2591
+ <code class="ruby"> @@path, @@format = nil, nil</code>
2592
+ </li>
2593
+
2594
+ <li class="covered" data-hits="23" data-linenumber="124">
2595
+ <span class="hits">23</span>
2596
+
2597
+ <code class="ruby"> ret</code>
2598
+ </li>
2599
+
2600
+ <li class="never" data-hits="" data-linenumber="125">
2601
+
2602
+
2603
+ <code class="ruby"> end</code>
2604
+ </li>
2605
+
2606
+ <li class="never" data-hits="" data-linenumber="126">
2607
+
2608
+
2609
+ <code class="ruby"> # define the </code>
2610
+ </li>
2611
+
2612
+ <li class="covered" data-hits="1" data-linenumber="127">
2613
+ <span class="hits">1</span>
2614
+
2615
+ <code class="ruby"> [:post, :put, :get, :delete, :head].each do |verb|</code>
2616
+ </li>
2617
+
2618
+ <li class="covered" data-hits="5" data-linenumber="128">
2619
+ <span class="hits">5</span>
2620
+
2621
+ <code class="ruby"> instance_eval &lt;&lt;-EOE, __FILE__, __LINE__ + 1</code>
2622
+ </li>
2623
+
2624
+ <li class="never" data-hits="" data-linenumber="129">
2625
+
2626
+
2627
+ <code class="ruby"> def #{verb}(response_body, opts = {}, &amp;block)</code>
2628
+ </li>
2629
+
2630
+ <li class="never" data-hits="" data-linenumber="130">
2631
+
2632
+
2633
+ <code class="ruby"></code>
2634
+ </li>
2635
+
2636
+ <li class="never" data-hits="" data-linenumber="131">
2637
+
2638
+
2639
+ <code class="ruby"> raise Exception.new(&quot;Must be called from within an endpoint block&quot;) unless @@path</code>
2640
+ </li>
2641
+
2642
+ <li class="never" data-hits="" data-linenumber="132">
2643
+
2644
+
2645
+ <code class="ruby"> opts = opts.reverse_merge({:status_code =&gt; 200, :response_headers =&gt; {}, :params =&gt; {}}) </code>
2646
+ </li>
2647
+
2648
+ <li class="never" data-hits="" data-linenumber="133">
2649
+
2650
+
2651
+ <code class="ruby"></code>
2652
+ </li>
2653
+
2654
+ <li class="never" data-hits="" data-linenumber="134">
2655
+
2656
+
2657
+ <code class="ruby"> @@endpoints[@@path] &lt;&lt; [MockRequest.new(:#{verb}, @@path, :params =&gt; opts[:params], :format =&gt; @@format), MockResponse.new(response_body, :status_code =&gt; opts[:status_code], :headers =&gt; opts[:response_headers], :format =&gt; @@format, &amp;block)]</code>
2658
+ </li>
2659
+
2660
+ <li class="never" data-hits="" data-linenumber="135">
2661
+
2662
+
2663
+ <code class="ruby"> end</code>
2664
+ </li>
2665
+
2666
+ <li class="never" data-hits="" data-linenumber="136">
2667
+
2668
+
2669
+ <code class="ruby"> EOE</code>
2670
+ </li>
2671
+
2672
+ <li class="never" data-hits="" data-linenumber="137">
2673
+
2674
+
2675
+ <code class="ruby"> end</code>
2676
+ </li>
2677
+
2678
+ <li class="never" data-hits="" data-linenumber="138">
2679
+
2680
+
2681
+ <code class="ruby"></code>
2682
+ </li>
2683
+
2684
+ <li class="covered" data-hits="1" data-linenumber="139">
2685
+ <span class="hits">1</span>
2686
+
2687
+ <code class="ruby"> class MockResponse</code>
2688
+ </li>
2689
+
2690
+ <li class="covered" data-hits="1" data-linenumber="140">
2691
+ <span class="hits">1</span>
2692
+
2693
+ <code class="ruby"> attr_reader :body, :headers, :code, :format, :block</code>
2694
+ </li>
2695
+
2696
+ <li class="covered" data-hits="1" data-linenumber="141">
2697
+ <span class="hits">1</span>
2698
+
2699
+ <code class="ruby"> def initialize(body, opts = {}, &amp;block) </code>
2700
+ </li>
2701
+
2702
+ <li class="covered" data-hits="43" data-linenumber="142">
2703
+ <span class="hits">43</span>
2704
+
2705
+ <code class="ruby"> opts = opts.reverse_merge({:headers =&gt; {}, :status_code =&gt; 200})</code>
2706
+ </li>
2707
+
2708
+ <li class="covered" data-hits="43" data-linenumber="143">
2709
+ <span class="hits">43</span>
2710
+
2711
+ <code class="ruby"> @body = body</code>
2712
+ </li>
2713
+
2714
+ <li class="covered" data-hits="43" data-linenumber="144">
2715
+ <span class="hits">43</span>
2716
+
2717
+ <code class="ruby"> @headers = opts[:headers]</code>
2718
+ </li>
2719
+
2720
+ <li class="covered" data-hits="43" data-linenumber="145">
2721
+ <span class="hits">43</span>
2722
+
2723
+ <code class="ruby"> @code = opts[:status_code]</code>
2724
+ </li>
2725
+
2726
+ <li class="covered" data-hits="43" data-linenumber="146">
2727
+ <span class="hits">43</span>
2728
+
2729
+ <code class="ruby"> @format = (opts[:format] || :json)</code>
2730
+ </li>
2731
+
2732
+ <li class="covered" data-hits="43" data-linenumber="147">
2733
+ <span class="hits">43</span>
2734
+
2735
+ <code class="ruby"> @block = block if block_given?</code>
2736
+ </li>
2737
+
2738
+ <li class="never" data-hits="" data-linenumber="148">
2739
+
2740
+
2741
+ <code class="ruby"> end</code>
2742
+ </li>
2743
+
2744
+ <li class="covered" data-hits="1" data-linenumber="149">
2745
+ <span class="hits">1</span>
2746
+
2747
+ <code class="ruby"> def []=(key, val)</code>
2748
+ </li>
2749
+
2750
+ <li class="missed" data-hits="0" data-linenumber="150">
2751
+
2752
+
2753
+ <code class="ruby"> @headers[key] = val</code>
2754
+ </li>
2755
+
2756
+ <li class="never" data-hits="" data-linenumber="151">
2757
+
2758
+
2759
+ <code class="ruby"> end</code>
2760
+ </li>
2761
+
2762
+ <li class="covered" data-hits="1" data-linenumber="152">
2763
+ <span class="hits">1</span>
2764
+
2765
+ <code class="ruby"> def [](key)</code>
2766
+ </li>
2767
+
2768
+ <li class="missed" data-hits="0" data-linenumber="153">
2769
+
2770
+
2771
+ <code class="ruby"> @headers[key]</code>
2772
+ </li>
2773
+
2774
+ <li class="never" data-hits="" data-linenumber="154">
2775
+
2776
+
2777
+ <code class="ruby"> end</code>
2778
+ </li>
2779
+
2780
+ <li class="never" data-hits="" data-linenumber="155">
2781
+
2782
+
2783
+ <code class="ruby"></code>
2784
+ </li>
2785
+
2786
+ <li class="covered" data-hits="1" data-linenumber="156">
2787
+ <span class="hits">1</span>
2788
+
2789
+ <code class="ruby"> def body</code>
2790
+ </li>
2791
+
2792
+ <li class="covered" data-hits="107" data-linenumber="157">
2793
+ <span class="hits">107</span>
2794
+
2795
+ <code class="ruby"> raise Exception.new(&quot;Body must respond to to_#{self.format}&quot;) unless @body.respond_to?(&quot;to_#{self.format}&quot;)</code>
2796
+ </li>
2797
+
2798
+ <li class="covered" data-hits="107" data-linenumber="158">
2799
+ <span class="hits">107</span>
2800
+
2801
+ <code class="ruby"> @body.send(&quot;to_#{self.format}&quot;)</code>
2802
+ </li>
2803
+
2804
+ <li class="never" data-hits="" data-linenumber="159">
2805
+
2806
+
2807
+ <code class="ruby"> end</code>
2808
+ </li>
2809
+
2810
+ <li class="never" data-hits="" data-linenumber="160">
2811
+
2812
+
2813
+ <code class="ruby"></code>
2814
+ </li>
2815
+
2816
+ <li class="covered" data-hits="1" data-linenumber="161">
2817
+ <span class="hits">1</span>
2818
+
2819
+ <code class="ruby"> def body_as_object</code>
2820
+ </li>
2821
+
2822
+ <li class="missed" data-hits="0" data-linenumber="162">
2823
+
2824
+
2825
+ <code class="ruby"> return @body</code>
2826
+ </li>
2827
+
2828
+ <li class="never" data-hits="" data-linenumber="163">
2829
+
2830
+
2831
+ <code class="ruby"> end</code>
2832
+ </li>
2833
+
2834
+ <li class="never" data-hits="" data-linenumber="164">
2835
+
2836
+
2837
+ <code class="ruby"></code>
2838
+ </li>
2839
+
2840
+ <li class="covered" data-hits="1" data-linenumber="165">
2841
+ <span class="hits">1</span>
2842
+
2843
+ <code class="ruby"> def generate_response(params)</code>
2844
+ </li>
2845
+
2846
+ <li class="covered" data-hits="97" data-linenumber="166">
2847
+ <span class="hits">97</span>
2848
+
2849
+ <code class="ruby"> @body = @body.instance_exec(params, &amp;self.block) if self.block</code>
2850
+ </li>
2851
+
2852
+ <li class="never" data-hits="" data-linenumber="167">
2853
+
2854
+
2855
+ <code class="ruby"> end</code>
2856
+ </li>
2857
+
2858
+ <li class="never" data-hits="" data-linenumber="168">
2859
+
2860
+
2861
+ <code class="ruby"> end</code>
2862
+ </li>
2863
+
2864
+ <li class="never" data-hits="" data-linenumber="169">
2865
+
2866
+
2867
+ <code class="ruby"></code>
2868
+ </li>
2869
+
2870
+ <li class="covered" data-hits="1" data-linenumber="170">
2871
+ <span class="hits">1</span>
2872
+
2873
+ <code class="ruby"> class MockRequest</code>
2874
+ </li>
2875
+
2876
+ <li class="covered" data-hits="1" data-linenumber="171">
2877
+ <span class="hits">1</span>
2878
+
2879
+ <code class="ruby"> attr_reader :method, :path, :body, :headers, :params, :format, :query</code>
2880
+ </li>
2881
+
2882
+ <li class="never" data-hits="" data-linenumber="172">
2883
+
2884
+
2885
+ <code class="ruby"></code>
2886
+ </li>
2887
+
2888
+ <li class="covered" data-hits="1" data-linenumber="173">
2889
+ <span class="hits">1</span>
2890
+
2891
+ <code class="ruby"> def initialize(method, path, opts = {})</code>
2892
+ </li>
2893
+
2894
+ <li class="covered" data-hits="136" data-linenumber="174">
2895
+ <span class="hits">136</span>
2896
+
2897
+ <code class="ruby"> @method = method.to_sym</code>
2898
+ </li>
2899
+
2900
+ <li class="never" data-hits="" data-linenumber="175">
2901
+
2902
+
2903
+ <code class="ruby"></code>
2904
+ </li>
2905
+
2906
+ <li class="never" data-hits="" data-linenumber="176">
2907
+
2908
+
2909
+ <code class="ruby"> # set the normalized path, format and query string</code>
2910
+ </li>
2911
+
2912
+ <li class="covered" data-hits="136" data-linenumber="177">
2913
+ <span class="hits">136</span>
2914
+
2915
+ <code class="ruby"> @path, @query = path.split(&quot;?&quot;)</code>
2916
+ </li>
2917
+
2918
+ <li class="covered" data-hits="136" data-linenumber="178">
2919
+ <span class="hits">136</span>
2920
+
2921
+ <code class="ruby"> @path, @format = @path.split(&quot;.&quot;)</code>
2922
+ </li>
2923
+
2924
+ <li class="never" data-hits="" data-linenumber="179">
2925
+
2926
+
2927
+ <code class="ruby"></code>
2928
+ </li>
2929
+
2930
+ <li class="never" data-hits="" data-linenumber="180">
2931
+
2932
+
2933
+ <code class="ruby"> # if we have params, it is a MockRequest definition</code>
2934
+ </li>
2935
+
2936
+ <li class="covered" data-hits="136" data-linenumber="181">
2937
+ <span class="hits">136</span>
2938
+
2939
+ <code class="ruby"> if opts[:params]</code>
2940
+ </li>
2941
+
2942
+ <li class="covered" data-hits="34" data-linenumber="182">
2943
+ <span class="hits">34</span>
2944
+
2945
+ <code class="ruby"> @params = opts[:params]</code>
2946
+ </li>
2947
+
2948
+ <li class="never" data-hits="" data-linenumber="183">
2949
+
2950
+
2951
+ <code class="ruby"> # otherwise, we need to check either the query string or the body</code>
2952
+ </li>
2953
+
2954
+ <li class="never" data-hits="" data-linenumber="184">
2955
+
2956
+
2957
+ <code class="ruby"> # depending on the http verb</code>
2958
+ </li>
2959
+
2960
+ <li class="never" data-hits="" data-linenumber="185">
2961
+
2962
+
2963
+ <code class="ruby"> else</code>
2964
+ </li>
2965
+
2966
+ <li class="covered" data-hits="102" data-linenumber="186">
2967
+ <span class="hits">102</span>
2968
+
2969
+ <code class="ruby"> case @method</code>
2970
+ </li>
2971
+
2972
+ <li class="never" data-hits="" data-linenumber="187">
2973
+
2974
+
2975
+ <code class="ruby"> when :post, :put</code>
2976
+ </li>
2977
+
2978
+ <li class="covered" data-hits="6" data-linenumber="188">
2979
+ <span class="hits">6</span>
2980
+
2981
+ <code class="ruby"> @params = JSON.parse(opts[:body] || &quot;&quot;)</code>
2982
+ </li>
2983
+
2984
+ <li class="never" data-hits="" data-linenumber="189">
2985
+
2986
+
2987
+ <code class="ruby"> when :get, :delete, :head</code>
2988
+ </li>
2989
+
2990
+ <li class="covered" data-hits="96" data-linenumber="190">
2991
+ <span class="hits">96</span>
2992
+
2993
+ <code class="ruby"> @params = typecast_values(</code>
2994
+ </li>
2995
+
2996
+ <li class="never" data-hits="" data-linenumber="191">
2997
+
2998
+
2999
+ <code class="ruby"> Rack::Utils.parse_nested_query(@query || &quot;&quot;)</code>
3000
+ </li>
3001
+
3002
+ <li class="never" data-hits="" data-linenumber="192">
3003
+
3004
+
3005
+ <code class="ruby"> )</code>
3006
+ </li>
3007
+
3008
+ <li class="never" data-hits="" data-linenumber="193">
3009
+
3010
+
3011
+ <code class="ruby"> end</code>
3012
+ </li>
3013
+
3014
+ <li class="never" data-hits="" data-linenumber="194">
3015
+
3016
+
3017
+ <code class="ruby"> end</code>
3018
+ </li>
3019
+
3020
+ <li class="covered" data-hits="136" data-linenumber="195">
3021
+ <span class="hits">136</span>
3022
+
3023
+ <code class="ruby"> @body = opts[:body]</code>
3024
+ </li>
3025
+
3026
+ <li class="covered" data-hits="136" data-linenumber="196">
3027
+ <span class="hits">136</span>
3028
+
3029
+ <code class="ruby"> @headers = opts[:headers] || {}</code>
3030
+ </li>
3031
+
3032
+ <li class="covered" data-hits="136" data-linenumber="197">
3033
+ <span class="hits">136</span>
3034
+
3035
+ <code class="ruby"> @headers[&quot;Content-Length&quot;] = @body.blank? ? &quot;0&quot; : @body.size.to_s</code>
3036
+ </li>
3037
+
3038
+ <li class="never" data-hits="" data-linenumber="198">
3039
+
3040
+
3041
+ <code class="ruby"> end</code>
3042
+ </li>
3043
+
3044
+ <li class="never" data-hits="" data-linenumber="199">
3045
+
3046
+
3047
+ <code class="ruby"></code>
3048
+ </li>
3049
+
3050
+ <li class="never" data-hits="" data-linenumber="200">
3051
+
3052
+
3053
+ <code class="ruby"> # </code>
3054
+ </li>
3055
+
3056
+ <li class="covered" data-hits="1" data-linenumber="201">
3057
+ <span class="hits">1</span>
3058
+
3059
+ <code class="ruby"> def typecast_values(data)</code>
3060
+ </li>
3061
+
3062
+ <li class="covered" data-hits="121" data-linenumber="202">
3063
+ <span class="hits">121</span>
3064
+
3065
+ <code class="ruby"> if data.is_a?(Hash)</code>
3066
+ </li>
3067
+
3068
+ <li class="covered" data-hits="97" data-linenumber="203">
3069
+ <span class="hits">97</span>
3070
+
3071
+ <code class="ruby"> data.each_pair do |k,v|</code>
3072
+ </li>
3073
+
3074
+ <li class="covered" data-hits="23" data-linenumber="204">
3075
+ <span class="hits">23</span>
3076
+
3077
+ <code class="ruby"> data[k] = typecast_values(v)</code>
3078
+ </li>
3079
+
3080
+ <li class="never" data-hits="" data-linenumber="205">
3081
+
3082
+
3083
+ <code class="ruby"> end</code>
3084
+ </li>
3085
+
3086
+ <li class="never" data-hits="" data-linenumber="206">
3087
+
3088
+
3089
+ <code class="ruby"> elsif data.is_a?(Array)</code>
3090
+ </li>
3091
+
3092
+ <li class="covered" data-hits="1" data-linenumber="207">
3093
+ <span class="hits">1</span>
3094
+
3095
+ <code class="ruby"> data = data.collect{|v|</code>
3096
+ </li>
3097
+
3098
+ <li class="covered" data-hits="2" data-linenumber="208">
3099
+ <span class="hits">2</span>
3100
+
3101
+ <code class="ruby"> typecast_values(v)</code>
3102
+ </li>
3103
+
3104
+ <li class="never" data-hits="" data-linenumber="209">
3105
+
3106
+
3107
+ <code class="ruby"> }</code>
3108
+ </li>
3109
+
3110
+ <li class="never" data-hits="" data-linenumber="210">
3111
+
3112
+
3113
+ <code class="ruby"> else</code>
3114
+ </li>
3115
+
3116
+ <li class="covered" data-hits="23" data-linenumber="211">
3117
+ <span class="hits">23</span>
3118
+
3119
+ <code class="ruby"> data = if data.to_s =~ /^\d+$/</code>
3120
+ </li>
3121
+
3122
+ <li class="missed" data-hits="0" data-linenumber="212">
3123
+
3124
+
3125
+ <code class="ruby"> data.to_i</code>
3126
+ </li>
3127
+
3128
+ <li class="never" data-hits="" data-linenumber="213">
3129
+
3130
+
3131
+ <code class="ruby"> elsif data =~ /^[\d\.]+$/</code>
3132
+ </li>
3133
+
3134
+ <li class="missed" data-hits="0" data-linenumber="214">
3135
+
3136
+
3137
+ <code class="ruby"> data.to_f</code>
3138
+ </li>
3139
+
3140
+ <li class="never" data-hits="" data-linenumber="215">
3141
+
3142
+
3143
+ <code class="ruby"> elsif data == &quot;true&quot;</code>
3144
+ </li>
3145
+
3146
+ <li class="covered" data-hits="16" data-linenumber="216">
3147
+ <span class="hits">16</span>
3148
+
3149
+ <code class="ruby"> true</code>
3150
+ </li>
3151
+
3152
+ <li class="never" data-hits="" data-linenumber="217">
3153
+
3154
+
3155
+ <code class="ruby"> elsif data == &quot;false&quot;</code>
3156
+ </li>
3157
+
3158
+ <li class="covered" data-hits="3" data-linenumber="218">
3159
+ <span class="hits">3</span>
3160
+
3161
+ <code class="ruby"> false</code>
3162
+ </li>
3163
+
3164
+ <li class="never" data-hits="" data-linenumber="219">
3165
+
3166
+
3167
+ <code class="ruby"> else</code>
3168
+ </li>
3169
+
3170
+ <li class="covered" data-hits="4" data-linenumber="220">
3171
+ <span class="hits">4</span>
3172
+
3173
+ <code class="ruby"> data</code>
3174
+ </li>
3175
+
3176
+ <li class="never" data-hits="" data-linenumber="221">
3177
+
3178
+
3179
+ <code class="ruby"> end</code>
3180
+ </li>
3181
+
3182
+ <li class="never" data-hits="" data-linenumber="222">
3183
+
3184
+
3185
+ <code class="ruby"> end</code>
3186
+ </li>
3187
+
3188
+ <li class="covered" data-hits="121" data-linenumber="223">
3189
+ <span class="hits">121</span>
3190
+
3191
+ <code class="ruby"> data.nil? ? &quot;&quot; : data</code>
3192
+ </li>
3193
+
3194
+ <li class="never" data-hits="" data-linenumber="224">
3195
+
3196
+
3197
+ <code class="ruby"> end</code>
3198
+ </li>
3199
+
3200
+ <li class="never" data-hits="" data-linenumber="225">
3201
+
3202
+
3203
+ <code class="ruby"></code>
3204
+ </li>
3205
+
3206
+ <li class="never" data-hits="" data-linenumber="226">
3207
+
3208
+
3209
+ <code class="ruby"> # because of the context these come from, we can assume that the path already matches</code>
3210
+ </li>
3211
+
3212
+ <li class="covered" data-hits="1" data-linenumber="227">
3213
+ <span class="hits">1</span>
3214
+
3215
+ <code class="ruby"> def match?(request)</code>
3216
+ </li>
3217
+
3218
+ <li class="covered" data-hits="214" data-linenumber="228">
3219
+ <span class="hits">214</span>
3220
+
3221
+ <code class="ruby"> return false unless self.method == request.method</code>
3222
+ </li>
3223
+
3224
+ <li class="covered" data-hits="180" data-linenumber="229">
3225
+ <span class="hits">180</span>
3226
+
3227
+ <code class="ruby"> return false unless self.format == request.format || request.format.nil? || self.format.nil?</code>
3228
+ </li>
3229
+
3230
+ <li class="covered" data-hits="180" data-linenumber="230">
3231
+ <span class="hits">180</span>
3232
+
3233
+ <code class="ruby"> Comparator.diff(self.params, request.params) == {}</code>
3234
+ </li>
3235
+
3236
+ <li class="never" data-hits="" data-linenumber="231">
3237
+
3238
+
3239
+ <code class="ruby"> end</code>
3240
+ </li>
3241
+
3242
+ <li class="never" data-hits="" data-linenumber="232">
3243
+
3244
+
3245
+ <code class="ruby"> # string representation</code>
3246
+ </li>
3247
+
3248
+ <li class="covered" data-hits="1" data-linenumber="233">
3249
+ <span class="hits">1</span>
3250
+
3251
+ <code class="ruby"> def to_s</code>
3252
+ </li>
3253
+
3254
+ <li class="covered" data-hits="2" data-linenumber="234">
3255
+ <span class="hits">2</span>
3256
+
3257
+ <code class="ruby"> &quot;#{self.method.upcase} #{self.format} #{self.path} #{self.params}&quot;</code>
3258
+ </li>
3259
+
3260
+ <li class="never" data-hits="" data-linenumber="235">
3261
+
3262
+
3263
+ <code class="ruby"> end</code>
3264
+ </li>
3265
+
3266
+ <li class="never" data-hits="" data-linenumber="236">
3267
+
3268
+
3269
+ <code class="ruby"> end</code>
3270
+ </li>
3271
+
3272
+ <li class="covered" data-hits="1" data-linenumber="237">
3273
+ <span class="hits">1</span>
3274
+
3275
+ <code class="ruby"> class Connection</code>
3276
+ </li>
3277
+
3278
+ <li class="never" data-hits="" data-linenumber="238">
3279
+
3280
+
3281
+ <code class="ruby"></code>
3282
+ </li>
3283
+
3284
+ <li class="covered" data-hits="1" data-linenumber="239">
3285
+ <span class="hits">1</span>
3286
+
3287
+ <code class="ruby"> cattr_accessor :requests</code>
3288
+ </li>
3289
+
3290
+ <li class="covered" data-hits="1" data-linenumber="240">
3291
+ <span class="hits">1</span>
3292
+
3293
+ <code class="ruby"> self.requests = []</code>
3294
+ </li>
3295
+
3296
+ <li class="never" data-hits="" data-linenumber="241">
3297
+
3298
+
3299
+ <code class="ruby"></code>
3300
+ </li>
3301
+
3302
+ <li class="never" data-hits="" data-linenumber="242">
3303
+
3304
+
3305
+ <code class="ruby"> # body? methods</code>
3306
+ </li>
3307
+
3308
+ <li class="never" data-hits="" data-linenumber="243">
3309
+
3310
+
3311
+ <code class="ruby"> { true =&gt; %w(post put),</code>
3312
+ </li>
3313
+
3314
+ <li class="covered" data-hits="1" data-linenumber="244">
3315
+ <span class="hits">1</span>
3316
+
3317
+ <code class="ruby"> false =&gt; %w(get delete head) }.each do |has_body, methods|</code>
3318
+ </li>
3319
+
3320
+ <li class="covered" data-hits="2" data-linenumber="245">
3321
+ <span class="hits">2</span>
3322
+
3323
+ <code class="ruby"> methods.each do |method|</code>
3324
+ </li>
3325
+
3326
+ <li class="never" data-hits="" data-linenumber="246">
3327
+
3328
+
3329
+ <code class="ruby"> # def post(path, body, headers)</code>
3330
+ </li>
3331
+
3332
+ <li class="never" data-hits="" data-linenumber="247">
3333
+
3334
+
3335
+ <code class="ruby"> # request = ApiResource::Request.new(:post, path, body, headers)</code>
3336
+ </li>
3337
+
3338
+ <li class="never" data-hits="" data-linenumber="248">
3339
+
3340
+
3341
+ <code class="ruby"> # self.class.requests &lt;&lt; request</code>
3342
+ </li>
3343
+
3344
+ <li class="never" data-hits="" data-linenumber="249">
3345
+
3346
+
3347
+ <code class="ruby"> # if response = LifebookerClient::Mocks.find_response(request)</code>
3348
+ </li>
3349
+
3350
+ <li class="never" data-hits="" data-linenumber="250">
3351
+
3352
+
3353
+ <code class="ruby"> # response</code>
3354
+ </li>
3355
+
3356
+ <li class="never" data-hits="" data-linenumber="251">
3357
+
3358
+
3359
+ <code class="ruby"> # else</code>
3360
+ </li>
3361
+
3362
+ <li class="never" data-hits="" data-linenumber="252">
3363
+
3364
+
3365
+ <code class="ruby"> # raise InvalidRequestError.new(&quot;Could not find a response </code>
3366
+ </li>
3367
+
3368
+ <li class="never" data-hits="" data-linenumber="253">
3369
+
3370
+
3371
+ <code class="ruby"> # recorded for #{request.to_s} - Responses recorded are: -</code>
3372
+ </li>
3373
+
3374
+ <li class="never" data-hits="" data-linenumber="254">
3375
+
3376
+
3377
+ <code class="ruby"> # #{inspect_responses}&quot;)</code>
3378
+ </li>
3379
+
3380
+ <li class="never" data-hits="" data-linenumber="255">
3381
+
3382
+
3383
+ <code class="ruby"> # end</code>
3384
+ </li>
3385
+
3386
+ <li class="never" data-hits="" data-linenumber="256">
3387
+
3388
+
3389
+ <code class="ruby"> # end</code>
3390
+ </li>
3391
+
3392
+ <li class="covered" data-hits="5" data-linenumber="257">
3393
+ <span class="hits">5</span>
3394
+
3395
+ <code class="ruby"> instance_eval &lt;&lt;-EOE, __FILE__, __LINE__ + 1</code>
3396
+ </li>
3397
+
3398
+ <li class="never" data-hits="" data-linenumber="258">
3399
+
3400
+
3401
+ <code class="ruby"> def #{method}(path, #{'body, ' if has_body}headers)</code>
3402
+ </li>
3403
+
3404
+ <li class="never" data-hits="" data-linenumber="259">
3405
+
3406
+
3407
+ <code class="ruby"> opts = {:headers =&gt; headers}</code>
3408
+ </li>
3409
+
3410
+ <li class="never" data-hits="" data-linenumber="260">
3411
+
3412
+
3413
+ <code class="ruby"> #{&quot;opts[:body] = body&quot; if has_body}</code>
3414
+ </li>
3415
+
3416
+ <li class="never" data-hits="" data-linenumber="261">
3417
+
3418
+
3419
+ <code class="ruby"> request = MockRequest.new(:#{method}, path, opts)</code>
3420
+ </li>
3421
+
3422
+ <li class="never" data-hits="" data-linenumber="262">
3423
+
3424
+
3425
+ <code class="ruby"> self.requests &lt;&lt; request</code>
3426
+ </li>
3427
+
3428
+ <li class="never" data-hits="" data-linenumber="263">
3429
+
3430
+
3431
+ <code class="ruby"> if response = Mocks.find_response(request)</code>
3432
+ </li>
3433
+
3434
+ <li class="never" data-hits="" data-linenumber="264">
3435
+
3436
+
3437
+ <code class="ruby"> response[:response].tap{|resp| </code>
3438
+ </li>
3439
+
3440
+ <li class="never" data-hits="" data-linenumber="265">
3441
+
3442
+
3443
+ <code class="ruby"> resp.generate_response(</code>
3444
+ </li>
3445
+
3446
+ <li class="never" data-hits="" data-linenumber="266">
3447
+
3448
+
3449
+ <code class="ruby"> request.params</code>
3450
+ </li>
3451
+
3452
+ <li class="never" data-hits="" data-linenumber="267">
3453
+
3454
+
3455
+ <code class="ruby"> .with_indifferent_access</code>
3456
+ </li>
3457
+
3458
+ <li class="never" data-hits="" data-linenumber="268">
3459
+
3460
+
3461
+ <code class="ruby"> .merge(response[:params].with_indifferent_access)</code>
3462
+ </li>
3463
+
3464
+ <li class="never" data-hits="" data-linenumber="269">
3465
+
3466
+
3467
+ <code class="ruby"> )</code>
3468
+ </li>
3469
+
3470
+ <li class="never" data-hits="" data-linenumber="270">
3471
+
3472
+
3473
+ <code class="ruby"> }</code>
3474
+ </li>
3475
+
3476
+ <li class="never" data-hits="" data-linenumber="271">
3477
+
3478
+
3479
+ <code class="ruby"> else</code>
3480
+ </li>
3481
+
3482
+ <li class="never" data-hits="" data-linenumber="272">
3483
+
3484
+
3485
+ <code class="ruby"> raise ApiResource::ResourceNotFound.new(</code>
3486
+ </li>
3487
+
3488
+ <li class="never" data-hits="" data-linenumber="273">
3489
+
3490
+
3491
+ <code class="ruby"> MockResponse.new({}, {:headers =&gt; {&quot;Content-type&quot; =&gt; &quot;application/json&quot;}, :status_code =&gt; 404}),</code>
3492
+ </li>
3493
+
3494
+ <li class="never" data-hits="" data-linenumber="274">
3495
+
3496
+
3497
+ <code class="ruby"> :message =&gt; &quot;\nCould not find a response recorded for \#{request.pretty_inspect}\n&quot; +</code>
3498
+ </li>
3499
+
3500
+ <li class="never" data-hits="" data-linenumber="275">
3501
+
3502
+
3503
+ <code class="ruby"> &quot;Potential Responses Are:\n&quot; +</code>
3504
+ </li>
3505
+
3506
+ <li class="never" data-hits="" data-linenumber="276">
3507
+
3508
+
3509
+ <code class="ruby"> &quot;\#{Array.wrap(Mocks.responses_for_path(request.path)[:responses]).collect(&amp;:first).pretty_inspect}&quot;</code>
3510
+ </li>
3511
+
3512
+ <li class="never" data-hits="" data-linenumber="277">
3513
+
3514
+
3515
+ <code class="ruby"> )</code>
3516
+ </li>
3517
+
3518
+ <li class="never" data-hits="" data-linenumber="278">
3519
+
3520
+
3521
+ <code class="ruby"> end</code>
3522
+ </li>
3523
+
3524
+ <li class="never" data-hits="" data-linenumber="279">
3525
+
3526
+
3527
+ <code class="ruby"> end</code>
3528
+ </li>
3529
+
3530
+ <li class="never" data-hits="" data-linenumber="280">
3531
+
3532
+
3533
+ <code class="ruby"> EOE</code>
3534
+ </li>
3535
+
3536
+ <li class="never" data-hits="" data-linenumber="281">
3537
+
3538
+
3539
+ <code class="ruby"> end</code>
3540
+ </li>
3541
+
3542
+ <li class="never" data-hits="" data-linenumber="282">
3543
+
3544
+
3545
+ <code class="ruby"> end</code>
3546
+ </li>
3547
+
3548
+ <li class="never" data-hits="" data-linenumber="283">
3549
+
3550
+
3551
+ <code class="ruby"> end</code>
3552
+ </li>
3553
+
3554
+ <li class="never" data-hits="" data-linenumber="284">
3555
+
3556
+
3557
+ <code class="ruby"> end</code>
3558
+ </li>
3559
+
3560
+ <li class="never" data-hits="" data-linenumber="285">
3561
+
3562
+
3563
+ <code class="ruby">end</code>
3564
+ </li>
3565
+
3566
+ </ol>
3567
+ </pre>
3568
+ </div>
3569
+
3570
+ </div>
3571
+ </div>
3572
+ </body>
3573
+ </html>