venice 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +3 -3
  3. data/README.md +2 -3
  4. data/lib/venice/client.rb +1 -12
  5. data/lib/venice/receipt.rb +37 -5
  6. data/lib/venice/version.rb +1 -1
  7. data/venice-0.1.0.gem +0 -0
  8. data/venice-0.1.1.gem +0 -0
  9. metadata +4 -43
  10. data/coverage/assets/0.7.1/application.css +0 -1110
  11. data/coverage/assets/0.7.1/application.js +0 -626
  12. data/coverage/assets/0.7.1/fancybox/blank.gif +0 -0
  13. data/coverage/assets/0.7.1/fancybox/fancy_close.png +0 -0
  14. data/coverage/assets/0.7.1/fancybox/fancy_loading.png +0 -0
  15. data/coverage/assets/0.7.1/fancybox/fancy_nav_left.png +0 -0
  16. data/coverage/assets/0.7.1/fancybox/fancy_nav_right.png +0 -0
  17. data/coverage/assets/0.7.1/fancybox/fancy_shadow_e.png +0 -0
  18. data/coverage/assets/0.7.1/fancybox/fancy_shadow_n.png +0 -0
  19. data/coverage/assets/0.7.1/fancybox/fancy_shadow_ne.png +0 -0
  20. data/coverage/assets/0.7.1/fancybox/fancy_shadow_nw.png +0 -0
  21. data/coverage/assets/0.7.1/fancybox/fancy_shadow_s.png +0 -0
  22. data/coverage/assets/0.7.1/fancybox/fancy_shadow_se.png +0 -0
  23. data/coverage/assets/0.7.1/fancybox/fancy_shadow_sw.png +0 -0
  24. data/coverage/assets/0.7.1/fancybox/fancy_shadow_w.png +0 -0
  25. data/coverage/assets/0.7.1/fancybox/fancy_title_left.png +0 -0
  26. data/coverage/assets/0.7.1/fancybox/fancy_title_main.png +0 -0
  27. data/coverage/assets/0.7.1/fancybox/fancy_title_over.png +0 -0
  28. data/coverage/assets/0.7.1/fancybox/fancy_title_right.png +0 -0
  29. data/coverage/assets/0.7.1/fancybox/fancybox-x.png +0 -0
  30. data/coverage/assets/0.7.1/fancybox/fancybox-y.png +0 -0
  31. data/coverage/assets/0.7.1/fancybox/fancybox.png +0 -0
  32. data/coverage/assets/0.7.1/favicon_green.png +0 -0
  33. data/coverage/assets/0.7.1/favicon_red.png +0 -0
  34. data/coverage/assets/0.7.1/favicon_yellow.png +0 -0
  35. data/coverage/assets/0.7.1/loading.gif +0 -0
  36. data/coverage/assets/0.7.1/magnify.png +0 -0
  37. data/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  38. data/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  39. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  40. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  41. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  42. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  43. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  44. data/coverage/assets/0.7.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  45. data/coverage/assets/0.7.1/smoothness/images/ui-icons_222222_256x240.png +0 -0
  46. data/coverage/assets/0.7.1/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  47. data/coverage/assets/0.7.1/smoothness/images/ui-icons_454545_256x240.png +0 -0
  48. data/coverage/assets/0.7.1/smoothness/images/ui-icons_888888_256x240.png +0 -0
  49. data/coverage/assets/0.7.1/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  50. data/coverage/index.html +0 -1374
@@ -1,1374 +0,0 @@
1
- <!DOCTYPE html>
2
- <html xmlns='http://www.w3.org/1999/xhtml'>
3
- <head>
4
- <title>Code coverage for Venice</title>
5
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6
- <script src='./assets/0.7.1/application.js' type='text/javascript'></script>
7
- <link href='./assets/0.7.1/application.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
8
- <link rel="shortcut icon" type="image/png" href="./assets/0.7.1/favicon_yellow.png" />
9
- <link rel="icon" type="image/png" href="./assets/0.7.1/favicon.png" />
10
- </head>
11
-
12
- <body>
13
- <div id="loading">
14
- <img src="./assets/0.7.1/loading.gif" alt="loading"/>
15
- </div>
16
- <div id="wrapper" style="display:none;">
17
- <div class="timestamp">Generated <abbr class="timeago" title="2013-02-21T13:28:15-08:00">2013-02-21T13:28:15-08:00</abbr></div>
18
- <ul class="group_tabs"></ul>
19
-
20
- <div id="content">
21
- <div class="file_list_container" id="AllFiles">
22
- <h2>
23
- <span class="group_name">All Files</span>
24
- (<span class="covered_percent"><span class="yellow">89.25%</span></span>
25
- covered at
26
- <span class="covered_strength">
27
- <span class="green">
28
- 1.07
29
- </span>
30
- </span> hits/line)
31
- </h2>
32
- <a name="AllFiles"></a>
33
- <div>
34
- <b>3</b> files in total.
35
- <b>93</b> relevant lines.
36
- <span class="green"><b>83</b> lines covered</span> and
37
- <span class="red"><b>10</b> lines missed </span>
38
- </div>
39
- <table class="file_list">
40
- <thead>
41
- <tr>
42
- <th>File</th>
43
- <th>% covered</th>
44
- <th>Lines</th>
45
- <th>Relevant Lines</th>
46
- <th>Lines covered</th>
47
- <th>Lines missed</th>
48
- <th>Avg. Hits / Line</th>
49
- </tr>
50
- </thead>
51
- <tbody>
52
-
53
- <tr>
54
- <td class="strong"><a href="#dcf52f64c59adfacf1ba337f64f38e8f0d88d020" class="src_link" title="lib/venice.rb">lib/venice.rb</a></td>
55
- <td class="green strong">100.0 %</td>
56
- <td>6</td>
57
- <td>4</td>
58
- <td>4</td>
59
- <td>0</td>
60
- <td>1.0</td>
61
- </tr>
62
-
63
- <tr>
64
- <td class="strong"><a href="#b34e96787be9708510704e8eaef5e4ac1ed6e802" class="src_link" title="lib/venice/client.rb">lib/venice/client.rb</a></td>
65
- <td class="green strong">100.0 %</td>
66
- <td>43</td>
67
- <td>24</td>
68
- <td>24</td>
69
- <td>0</td>
70
- <td>1.2</td>
71
- </tr>
72
-
73
- <tr>
74
- <td class="strong"><a href="#bfa68f3f472ff4ebd36c0ba66e5d8ff44dd68c88" class="src_link" title="lib/venice/receipt.rb">lib/venice/receipt.rb</a></td>
75
- <td class="yellow strong">84.62 %</td>
76
- <td>154</td>
77
- <td>65</td>
78
- <td>55</td>
79
- <td>10</td>
80
- <td>1.0</td>
81
- </tr>
82
-
83
- </tbody>
84
- </table>
85
- </div>
86
-
87
-
88
-
89
- </div>
90
-
91
- <div id="footer">
92
- Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.7.1
93
- and simplecov-html v0.7.1<br/>
94
- using RSpec
95
- </div>
96
-
97
- <div class="source_files">
98
-
99
- <div class="source_table" id="dcf52f64c59adfacf1ba337f64f38e8f0d88d020">
100
- <div class="header">
101
- <h3>lib/venice.rb</h3>
102
- <h4><span class="green">100.0 %</span> covered</h4>
103
- <div>
104
- <b>4</b> relevant lines.
105
- <span class="green"><b>4</b> lines covered</span> and
106
- <span class="red"><b>0</b> lines missed.</span>
107
- </div>
108
- </div>
109
-
110
- <pre>
111
- <ol>
112
-
113
- <li class="covered" data-hits="1" data-linenumber="1">
114
- <span class="hits">1</span>
115
-
116
- <code class="ruby">module Venice</code>
117
- </li>
118
-
119
- <li class="covered" data-hits="1" data-linenumber="2">
120
- <span class="hits">1</span>
121
-
122
- <code class="ruby"> VERSION = &quot;0.0.1&quot;</code>
123
- </li>
124
-
125
- <li class="never" data-hits="" data-linenumber="3">
126
-
127
-
128
- <code class="ruby">end</code>
129
- </li>
130
-
131
- <li class="never" data-hits="" data-linenumber="4">
132
-
133
-
134
- <code class="ruby"></code>
135
- </li>
136
-
137
- <li class="covered" data-hits="1" data-linenumber="5">
138
- <span class="hits">1</span>
139
-
140
- <code class="ruby">require 'venice/client'</code>
141
- </li>
142
-
143
- <li class="covered" data-hits="1" data-linenumber="6">
144
- <span class="hits">1</span>
145
-
146
- <code class="ruby">require 'venice/receipt'</code>
147
- </li>
148
-
149
- </ol>
150
- </pre>
151
- </div>
152
-
153
- <div class="source_table" id="b34e96787be9708510704e8eaef5e4ac1ed6e802">
154
- <div class="header">
155
- <h3>lib/venice/client.rb</h3>
156
- <h4><span class="green">100.0 %</span> covered</h4>
157
- <div>
158
- <b>24</b> relevant lines.
159
- <span class="green"><b>24</b> lines covered</span> and
160
- <span class="red"><b>0</b> lines missed.</span>
161
- </div>
162
- </div>
163
-
164
- <pre>
165
- <ol>
166
-
167
- <li class="covered" data-hits="1" data-linenumber="1">
168
- <span class="hits">1</span>
169
-
170
- <code class="ruby">require 'excon'</code>
171
- </li>
172
-
173
- <li class="covered" data-hits="1" data-linenumber="2">
174
- <span class="hits">1</span>
175
-
176
- <code class="ruby">require 'json'</code>
177
- </li>
178
-
179
- <li class="never" data-hits="" data-linenumber="3">
180
-
181
-
182
- <code class="ruby"></code>
183
- </li>
184
-
185
- <li class="covered" data-hits="1" data-linenumber="4">
186
- <span class="hits">1</span>
187
-
188
- <code class="ruby">module Venice</code>
189
- </li>
190
-
191
- <li class="covered" data-hits="1" data-linenumber="5">
192
- <span class="hits">1</span>
193
-
194
- <code class="ruby"> ITUNES_PRODUCTION_RECEIPT_VERIFICATION_ENDPOINT = &quot;https://buy.itunes.apple.com/verifyReceipt&quot;</code>
195
- </li>
196
-
197
- <li class="covered" data-hits="1" data-linenumber="6">
198
- <span class="hits">1</span>
199
-
200
- <code class="ruby"> ITUNES_DEVELOPMENT_RECEIPT_VERIFICATION_ENDPOINT = &quot;https://sandbox.itunes.apple.com/verifyReceipt&quot;</code>
201
- </li>
202
-
203
- <li class="never" data-hits="" data-linenumber="7">
204
-
205
-
206
- <code class="ruby"></code>
207
- </li>
208
-
209
- <li class="covered" data-hits="1" data-linenumber="8">
210
- <span class="hits">1</span>
211
-
212
- <code class="ruby"> class Client</code>
213
- </li>
214
-
215
- <li class="covered" data-hits="1" data-linenumber="9">
216
- <span class="hits">1</span>
217
-
218
- <code class="ruby"> attr_accessor :verification_url</code>
219
- </li>
220
-
221
- <li class="never" data-hits="" data-linenumber="10">
222
-
223
-
224
- <code class="ruby"></code>
225
- </li>
226
-
227
- <li class="covered" data-hits="1" data-linenumber="11">
228
- <span class="hits">1</span>
229
-
230
- <code class="ruby"> def initialize</code>
231
- </li>
232
-
233
- <li class="covered" data-hits="2" data-linenumber="12">
234
- <span class="hits">2</span>
235
-
236
- <code class="ruby"> @verification_url = ENV['IAP_VERIFICATION_ENDPOINT']</code>
237
- </li>
238
-
239
- <li class="never" data-hits="" data-linenumber="13">
240
-
241
-
242
- <code class="ruby"> end</code>
243
- </li>
244
-
245
- <li class="never" data-hits="" data-linenumber="14">
246
-
247
-
248
- <code class="ruby"></code>
249
- </li>
250
-
251
- <li class="covered" data-hits="1" data-linenumber="15">
252
- <span class="hits">1</span>
253
-
254
- <code class="ruby"> def verify!(data)</code>
255
- </li>
256
-
257
- <li class="covered" data-hits="2" data-linenumber="16">
258
- <span class="hits">2</span>
259
-
260
- <code class="ruby"> response = Excon.post(@verification_url, :headers =&gt; headers, :body =&gt; {'receipt-data' =&gt; data}.to_json)</code>
261
- </li>
262
-
263
- <li class="covered" data-hits="2" data-linenumber="17">
264
- <span class="hits">2</span>
265
-
266
- <code class="ruby"> JSON.parse(response.body)</code>
267
- </li>
268
-
269
- <li class="never" data-hits="" data-linenumber="18">
270
-
271
-
272
- <code class="ruby"> end</code>
273
- </li>
274
-
275
- <li class="never" data-hits="" data-linenumber="19">
276
-
277
-
278
- <code class="ruby"></code>
279
- </li>
280
-
281
- <li class="covered" data-hits="1" data-linenumber="20">
282
- <span class="hits">1</span>
283
-
284
- <code class="ruby"> class &lt;&lt; self</code>
285
- </li>
286
-
287
- <li class="covered" data-hits="1" data-linenumber="21">
288
- <span class="hits">1</span>
289
-
290
- <code class="ruby"> def development</code>
291
- </li>
292
-
293
- <li class="covered" data-hits="1" data-linenumber="22">
294
- <span class="hits">1</span>
295
-
296
- <code class="ruby"> client = self.new</code>
297
- </li>
298
-
299
- <li class="covered" data-hits="1" data-linenumber="23">
300
- <span class="hits">1</span>
301
-
302
- <code class="ruby"> client.verification_url = ITUNES_DEVELOPMENT_RECEIPT_VERIFICATION_ENDPOINT</code>
303
- </li>
304
-
305
- <li class="covered" data-hits="1" data-linenumber="24">
306
- <span class="hits">1</span>
307
-
308
- <code class="ruby"> client</code>
309
- </li>
310
-
311
- <li class="never" data-hits="" data-linenumber="25">
312
-
313
-
314
- <code class="ruby"> end</code>
315
- </li>
316
-
317
- <li class="never" data-hits="" data-linenumber="26">
318
-
319
-
320
- <code class="ruby"></code>
321
- </li>
322
-
323
- <li class="covered" data-hits="1" data-linenumber="27">
324
- <span class="hits">1</span>
325
-
326
- <code class="ruby"> def production</code>
327
- </li>
328
-
329
- <li class="covered" data-hits="1" data-linenumber="28">
330
- <span class="hits">1</span>
331
-
332
- <code class="ruby"> client = self.new</code>
333
- </li>
334
-
335
- <li class="covered" data-hits="1" data-linenumber="29">
336
- <span class="hits">1</span>
337
-
338
- <code class="ruby"> client.verification_url = ITUNES_PRODUCTION_RECEIPT_VERIFICATION_ENDPOINT</code>
339
- </li>
340
-
341
- <li class="covered" data-hits="1" data-linenumber="30">
342
- <span class="hits">1</span>
343
-
344
- <code class="ruby"> client</code>
345
- </li>
346
-
347
- <li class="never" data-hits="" data-linenumber="31">
348
-
349
-
350
- <code class="ruby"> end</code>
351
- </li>
352
-
353
- <li class="never" data-hits="" data-linenumber="32">
354
-
355
-
356
- <code class="ruby"> end</code>
357
- </li>
358
-
359
- <li class="never" data-hits="" data-linenumber="33">
360
-
361
-
362
- <code class="ruby"></code>
363
- </li>
364
-
365
- <li class="covered" data-hits="1" data-linenumber="34">
366
- <span class="hits">1</span>
367
-
368
- <code class="ruby"> private</code>
369
- </li>
370
-
371
- <li class="never" data-hits="" data-linenumber="35">
372
-
373
-
374
- <code class="ruby"></code>
375
- </li>
376
-
377
- <li class="covered" data-hits="1" data-linenumber="36">
378
- <span class="hits">1</span>
379
-
380
- <code class="ruby"> def headers</code>
381
- </li>
382
-
383
- <li class="never" data-hits="" data-linenumber="37">
384
-
385
-
386
- <code class="ruby"> {</code>
387
- </li>
388
-
389
- <li class="never" data-hits="" data-linenumber="38">
390
-
391
-
392
- <code class="ruby"> 'Accept' =&gt; 'application/json',</code>
393
- </li>
394
-
395
- <li class="never" data-hits="" data-linenumber="39">
396
-
397
-
398
- <code class="ruby"> 'Content-Type' =&gt; 'application/json'</code>
399
- </li>
400
-
401
- <li class="covered" data-hits="2" data-linenumber="40">
402
- <span class="hits">2</span>
403
-
404
- <code class="ruby"> }</code>
405
- </li>
406
-
407
- <li class="never" data-hits="" data-linenumber="41">
408
-
409
-
410
- <code class="ruby"> end</code>
411
- </li>
412
-
413
- <li class="never" data-hits="" data-linenumber="42">
414
-
415
-
416
- <code class="ruby"> end</code>
417
- </li>
418
-
419
- <li class="never" data-hits="" data-linenumber="43">
420
-
421
-
422
- <code class="ruby">end</code>
423
- </li>
424
-
425
- </ol>
426
- </pre>
427
- </div>
428
-
429
- <div class="source_table" id="bfa68f3f472ff4ebd36c0ba66e5d8ff44dd68c88">
430
- <div class="header">
431
- <h3>lib/venice/receipt.rb</h3>
432
- <h4><span class="yellow">84.62 %</span> covered</h4>
433
- <div>
434
- <b>65</b> relevant lines.
435
- <span class="green"><b>55</b> lines covered</span> and
436
- <span class="red"><b>10</b> lines missed.</span>
437
- </div>
438
- </div>
439
-
440
- <pre>
441
- <ol>
442
-
443
- <li class="covered" data-hits="1" data-linenumber="1">
444
- <span class="hits">1</span>
445
-
446
- <code class="ruby">require 'time'</code>
447
- </li>
448
-
449
- <li class="never" data-hits="" data-linenumber="2">
450
-
451
-
452
- <code class="ruby"></code>
453
- </li>
454
-
455
- <li class="covered" data-hits="1" data-linenumber="3">
456
- <span class="hits">1</span>
457
-
458
- <code class="ruby">module Venice</code>
459
- </li>
460
-
461
- <li class="covered" data-hits="1" data-linenumber="4">
462
- <span class="hits">1</span>
463
-
464
- <code class="ruby"> class ReceiptVerificationError &lt; StandardError; end</code>
465
- </li>
466
-
467
- <li class="never" data-hits="" data-linenumber="5">
468
-
469
-
470
- <code class="ruby"></code>
471
- </li>
472
-
473
- <li class="never" data-hits="" data-linenumber="6">
474
-
475
-
476
- <code class="ruby"> # 21000: The App Store could not read the JSON object you provided.</code>
477
- </li>
478
-
479
- <li class="covered" data-hits="1" data-linenumber="7">
480
- <span class="hits">1</span>
481
-
482
- <code class="ruby"> class InvalidJSONObjectError &lt; ReceiptVerificationError; end</code>
483
- </li>
484
-
485
- <li class="never" data-hits="" data-linenumber="8">
486
-
487
-
488
- <code class="ruby"></code>
489
- </li>
490
-
491
- <li class="never" data-hits="" data-linenumber="9">
492
-
493
-
494
- <code class="ruby"> # 21002: The data in the receipt-data property was malformed.</code>
495
- </li>
496
-
497
- <li class="covered" data-hits="1" data-linenumber="10">
498
- <span class="hits">1</span>
499
-
500
- <code class="ruby"> class MalformedReceiptDataError &lt; ReceiptVerificationError; end</code>
501
- </li>
502
-
503
- <li class="never" data-hits="" data-linenumber="11">
504
-
505
-
506
- <code class="ruby"></code>
507
- </li>
508
-
509
- <li class="never" data-hits="" data-linenumber="12">
510
-
511
-
512
- <code class="ruby"> # 21003: The receipt could not be authenticated.</code>
513
- </li>
514
-
515
- <li class="covered" data-hits="1" data-linenumber="13">
516
- <span class="hits">1</span>
517
-
518
- <code class="ruby"> class ReceiptVerificationAuthenticationError &lt; ReceiptVerificationError; end</code>
519
- </li>
520
-
521
- <li class="never" data-hits="" data-linenumber="14">
522
-
523
-
524
- <code class="ruby"></code>
525
- </li>
526
-
527
- <li class="never" data-hits="" data-linenumber="15">
528
-
529
-
530
- <code class="ruby"> # 21004: The shared secret you provided does not match the shared secret on file for your account.</code>
531
- </li>
532
-
533
- <li class="covered" data-hits="1" data-linenumber="16">
534
- <span class="hits">1</span>
535
-
536
- <code class="ruby"> class SharedSecretMismatchError &lt; ReceiptVerificationError; end</code>
537
- </li>
538
-
539
- <li class="never" data-hits="" data-linenumber="17">
540
-
541
-
542
- <code class="ruby"></code>
543
- </li>
544
-
545
- <li class="never" data-hits="" data-linenumber="18">
546
-
547
-
548
- <code class="ruby"> # 21005: The receipt server is not currently available.</code>
549
- </li>
550
-
551
- <li class="covered" data-hits="1" data-linenumber="19">
552
- <span class="hits">1</span>
553
-
554
- <code class="ruby"> class ReceiptVerificationServerOfflineError &lt; ReceiptVerificationError; end</code>
555
- </li>
556
-
557
- <li class="never" data-hits="" data-linenumber="20">
558
-
559
-
560
- <code class="ruby"></code>
561
- </li>
562
-
563
- <li class="never" data-hits="" data-linenumber="21">
564
-
565
-
566
- <code class="ruby"> # 21006: This receipt is valid but the subscription has expired. When this status code is returned to your server, the receipt data is also decoded and returned as part of the response.</code>
567
- </li>
568
-
569
- <li class="covered" data-hits="1" data-linenumber="22">
570
- <span class="hits">1</span>
571
-
572
- <code class="ruby"> class ValidReceiptExpiredSubscriptionError &lt; ReceiptVerificationError; end</code>
573
- </li>
574
-
575
- <li class="never" data-hits="" data-linenumber="23">
576
-
577
-
578
- <code class="ruby"></code>
579
- </li>
580
-
581
- <li class="never" data-hits="" data-linenumber="24">
582
-
583
-
584
- <code class="ruby"> # 21007: This receipt is a sandbox receipt, but it was sent to the production service for verification.</code>
585
- </li>
586
-
587
- <li class="covered" data-hits="1" data-linenumber="25">
588
- <span class="hits">1</span>
589
-
590
- <code class="ruby"> class SandboxReceiptSentToProductionError &lt; ReceiptVerificationError; end</code>
591
- </li>
592
-
593
- <li class="never" data-hits="" data-linenumber="26">
594
-
595
-
596
- <code class="ruby"></code>
597
- </li>
598
-
599
- <li class="never" data-hits="" data-linenumber="27">
600
-
601
-
602
- <code class="ruby"> # 21008: This receipt is a production receipt, but it was sent to the sandbox service for verification.</code>
603
- </li>
604
-
605
- <li class="covered" data-hits="1" data-linenumber="28">
606
- <span class="hits">1</span>
607
-
608
- <code class="ruby"> class ProductionReceiptSentToSandboxError &lt; ReceiptVerificationError; end</code>
609
- </li>
610
-
611
- <li class="never" data-hits="" data-linenumber="29">
612
-
613
-
614
- <code class="ruby"></code>
615
- </li>
616
-
617
- <li class="covered" data-hits="1" data-linenumber="30">
618
- <span class="hits">1</span>
619
-
620
- <code class="ruby"> RECEIPT_VERIFICATION_ERRORS_BY_STATUS_CODE = {</code>
621
- </li>
622
-
623
- <li class="never" data-hits="" data-linenumber="31">
624
-
625
-
626
- <code class="ruby"> 21000 =&gt; InvalidJSONObjectError,</code>
627
- </li>
628
-
629
- <li class="never" data-hits="" data-linenumber="32">
630
-
631
-
632
- <code class="ruby"> 21002 =&gt; MalformedReceiptDataError,</code>
633
- </li>
634
-
635
- <li class="never" data-hits="" data-linenumber="33">
636
-
637
-
638
- <code class="ruby"> 21003 =&gt; ReceiptVerificationAuthenticationError,</code>
639
- </li>
640
-
641
- <li class="never" data-hits="" data-linenumber="34">
642
-
643
-
644
- <code class="ruby"> 21004 =&gt; SharedSecretMismatchError,</code>
645
- </li>
646
-
647
- <li class="never" data-hits="" data-linenumber="35">
648
-
649
-
650
- <code class="ruby"> 21005 =&gt; ReceiptVerificationServerOfflineError,</code>
651
- </li>
652
-
653
- <li class="never" data-hits="" data-linenumber="36">
654
-
655
-
656
- <code class="ruby"> 21006 =&gt; ValidReceiptExpiredSubscriptionError,</code>
657
- </li>
658
-
659
- <li class="never" data-hits="" data-linenumber="37">
660
-
661
-
662
- <code class="ruby"> 21007 =&gt; SandboxReceiptSentToProductionError,</code>
663
- </li>
664
-
665
- <li class="never" data-hits="" data-linenumber="38">
666
-
667
-
668
- <code class="ruby"> 21008 =&gt; ProductionReceiptSentToSandboxError</code>
669
- </li>
670
-
671
- <li class="never" data-hits="" data-linenumber="39">
672
-
673
-
674
- <code class="ruby"> }</code>
675
- </li>
676
-
677
- <li class="never" data-hits="" data-linenumber="40">
678
-
679
-
680
- <code class="ruby"></code>
681
- </li>
682
-
683
- <li class="covered" data-hits="1" data-linenumber="41">
684
- <span class="hits">1</span>
685
-
686
- <code class="ruby"> class Receipt</code>
687
- </li>
688
-
689
- <li class="never" data-hits="" data-linenumber="42">
690
-
691
-
692
- <code class="ruby"> # The number of items purchased. This value corresponds to the quantity property of the SKPayment object stored in the transaction’s payment property.</code>
693
- </li>
694
-
695
- <li class="covered" data-hits="1" data-linenumber="43">
696
- <span class="hits">1</span>
697
-
698
- <code class="ruby"> attr_reader :quantity</code>
699
- </li>
700
-
701
- <li class="never" data-hits="" data-linenumber="44">
702
-
703
-
704
- <code class="ruby"></code>
705
- </li>
706
-
707
- <li class="never" data-hits="" data-linenumber="45">
708
-
709
-
710
- <code class="ruby"> # The product identifier of the item that was purchased. This value corresponds to the productIdentifier property of the SKPayment object stored in the transaction’s payment property.</code>
711
- </li>
712
-
713
- <li class="covered" data-hits="1" data-linenumber="46">
714
- <span class="hits">1</span>
715
-
716
- <code class="ruby"> attr_reader :product_id</code>
717
- </li>
718
-
719
- <li class="never" data-hits="" data-linenumber="47">
720
-
721
-
722
- <code class="ruby"> </code>
723
- </li>
724
-
725
- <li class="never" data-hits="" data-linenumber="48">
726
-
727
-
728
- <code class="ruby"> # The transaction identifier of the item that was purchased. This value corresponds to the transaction’s transactionIdentifier property.</code>
729
- </li>
730
-
731
- <li class="covered" data-hits="1" data-linenumber="49">
732
- <span class="hits">1</span>
733
-
734
- <code class="ruby"> attr_reader :transaction_id</code>
735
- </li>
736
-
737
- <li class="never" data-hits="" data-linenumber="50">
738
-
739
-
740
- <code class="ruby"> </code>
741
- </li>
742
-
743
- <li class="never" data-hits="" data-linenumber="51">
744
-
745
-
746
- <code class="ruby"> # The date and time this transaction occurred. This value corresponds to the transaction’s transactionDate property.</code>
747
- </li>
748
-
749
- <li class="covered" data-hits="1" data-linenumber="52">
750
- <span class="hits">1</span>
751
-
752
- <code class="ruby"> attr_reader :purchase_date</code>
753
- </li>
754
-
755
- <li class="never" data-hits="" data-linenumber="53">
756
-
757
-
758
- <code class="ruby"></code>
759
- </li>
760
-
761
- <li class="never" data-hits="" data-linenumber="54">
762
-
763
-
764
- <code class="ruby"> # A string that the App Store uses to uniquely identify the application that created the payment transaction. If your server supports multiple applications, you can use this value to differentiate between them. Applications that are executing in the sandbox do not yet have an app-item-id assigned to them, so this key is missing from receipts created by the sandbox.</code>
765
- </li>
766
-
767
- <li class="covered" data-hits="1" data-linenumber="55">
768
- <span class="hits">1</span>
769
-
770
- <code class="ruby"> attr_reader :app_item_id</code>
771
- </li>
772
-
773
- <li class="never" data-hits="" data-linenumber="56">
774
-
775
-
776
- <code class="ruby"></code>
777
- </li>
778
-
779
- <li class="never" data-hits="" data-linenumber="57">
780
-
781
-
782
- <code class="ruby"> # An arbitrary number that uniquely identifies a revision of your application. This key is missing in receipts created by the sandbox.</code>
783
- </li>
784
-
785
- <li class="covered" data-hits="1" data-linenumber="58">
786
- <span class="hits">1</span>
787
-
788
- <code class="ruby"> attr_reader :version_external_identifier</code>
789
- </li>
790
-
791
- <li class="never" data-hits="" data-linenumber="59">
792
-
793
-
794
- <code class="ruby"></code>
795
- </li>
796
-
797
- <li class="never" data-hits="" data-linenumber="60">
798
-
799
-
800
- <code class="ruby"> # The bundle identifier for the application.</code>
801
- </li>
802
-
803
- <li class="covered" data-hits="1" data-linenumber="61">
804
- <span class="hits">1</span>
805
-
806
- <code class="ruby"> attr_reader :bid</code>
807
- </li>
808
-
809
- <li class="never" data-hits="" data-linenumber="62">
810
-
811
-
812
- <code class="ruby"></code>
813
- </li>
814
-
815
- <li class="never" data-hits="" data-linenumber="63">
816
-
817
-
818
- <code class="ruby"> # A version number for the application.</code>
819
- </li>
820
-
821
- <li class="covered" data-hits="1" data-linenumber="64">
822
- <span class="hits">1</span>
823
-
824
- <code class="ruby"> attr_reader :bvrs</code>
825
- </li>
826
-
827
- <li class="never" data-hits="" data-linenumber="65">
828
-
829
-
830
- <code class="ruby"></code>
831
- </li>
832
-
833
- <li class="never" data-hits="" data-linenumber="66">
834
-
835
-
836
- <code class="ruby"> # For a transaction that restores a previous transaction, this is the original receipt</code>
837
- </li>
838
-
839
- <li class="covered" data-hits="1" data-linenumber="67">
840
- <span class="hits">1</span>
841
-
842
- <code class="ruby"> attr_accessor :original</code>
843
- </li>
844
-
845
- <li class="never" data-hits="" data-linenumber="68">
846
-
847
-
848
- <code class="ruby"></code>
849
- </li>
850
-
851
- <li class="never" data-hits="" data-linenumber="69">
852
-
853
-
854
- <code class="ruby"> # For an active subscription was renewed with transaction that took place after the receipt your server sent to the App Store, this is the latest receipt.</code>
855
- </li>
856
-
857
- <li class="covered" data-hits="1" data-linenumber="70">
858
- <span class="hits">1</span>
859
-
860
- <code class="ruby"> attr_accessor :latest</code>
861
- </li>
862
-
863
- <li class="never" data-hits="" data-linenumber="71">
864
-
865
-
866
- <code class="ruby"></code>
867
- </li>
868
-
869
- <li class="covered" data-hits="1" data-linenumber="72">
870
- <span class="hits">1</span>
871
-
872
- <code class="ruby"> def initialize(attributes = {})</code>
873
- </li>
874
-
875
- <li class="covered" data-hits="2" data-linenumber="73">
876
- <span class="hits">2</span>
877
-
878
- <code class="ruby"> @quantity = Integer(attributes['quantity']) if attributes['quantity']</code>
879
- </li>
880
-
881
- <li class="covered" data-hits="2" data-linenumber="74">
882
- <span class="hits">2</span>
883
-
884
- <code class="ruby"> @product_id = attributes['product_id']</code>
885
- </li>
886
-
887
- <li class="covered" data-hits="2" data-linenumber="75">
888
- <span class="hits">2</span>
889
-
890
- <code class="ruby"> @transaction_id = attributes['transaction_id']</code>
891
- </li>
892
-
893
- <li class="covered" data-hits="2" data-linenumber="76">
894
- <span class="hits">2</span>
895
-
896
- <code class="ruby"> @purchase_date = DateTime.parse(attributes['purchase_date']) if attributes['purchase_date']</code>
897
- </li>
898
-
899
- <li class="covered" data-hits="2" data-linenumber="77">
900
- <span class="hits">2</span>
901
-
902
- <code class="ruby"> @app_item_id = attributes['app_item_id']</code>
903
- </li>
904
-
905
- <li class="covered" data-hits="2" data-linenumber="78">
906
- <span class="hits">2</span>
907
-
908
- <code class="ruby"> @version_external_identifier = attributes['version_external_identifier']</code>
909
- </li>
910
-
911
- <li class="covered" data-hits="2" data-linenumber="79">
912
- <span class="hits">2</span>
913
-
914
- <code class="ruby"> @bid = attributes['bid']</code>
915
- </li>
916
-
917
- <li class="covered" data-hits="2" data-linenumber="80">
918
- <span class="hits">2</span>
919
-
920
- <code class="ruby"> @bvrs = attributes['bvrs']</code>
921
- </li>
922
-
923
- <li class="never" data-hits="" data-linenumber="81">
924
-
925
-
926
- <code class="ruby"></code>
927
- </li>
928
-
929
- <li class="covered" data-hits="2" data-linenumber="82">
930
- <span class="hits">2</span>
931
-
932
- <code class="ruby"> if attributes['original_transaction_id'] || attributes['original_purchase_date']</code>
933
- </li>
934
-
935
- <li class="covered" data-hits="1" data-linenumber="83">
936
- <span class="hits">1</span>
937
-
938
- <code class="ruby"> original_attributes = {</code>
939
- </li>
940
-
941
- <li class="never" data-hits="" data-linenumber="84">
942
-
943
-
944
- <code class="ruby"> 'transaction_id' =&gt; attributes['original_transaction_id'],</code>
945
- </li>
946
-
947
- <li class="never" data-hits="" data-linenumber="85">
948
-
949
-
950
- <code class="ruby"> 'purchase_date' =&gt; attributes['original_purchase_date']</code>
951
- </li>
952
-
953
- <li class="never" data-hits="" data-linenumber="86">
954
-
955
-
956
- <code class="ruby"> }</code>
957
- </li>
958
-
959
- <li class="never" data-hits="" data-linenumber="87">
960
-
961
-
962
- <code class="ruby"></code>
963
- </li>
964
-
965
- <li class="covered" data-hits="1" data-linenumber="88">
966
- <span class="hits">1</span>
967
-
968
- <code class="ruby"> self.original = Receipt.new(original_attributes)</code>
969
- </li>
970
-
971
- <li class="never" data-hits="" data-linenumber="89">
972
-
973
-
974
- <code class="ruby"> end</code>
975
- </li>
976
-
977
- <li class="never" data-hits="" data-linenumber="90">
978
-
979
-
980
- <code class="ruby"> end</code>
981
- </li>
982
-
983
- <li class="never" data-hits="" data-linenumber="91">
984
-
985
-
986
- <code class="ruby"></code>
987
- </li>
988
-
989
- <li class="covered" data-hits="1" data-linenumber="92">
990
- <span class="hits">1</span>
991
-
992
- <code class="ruby"> def to_h</code>
993
- </li>
994
-
995
- <li class="never" data-hits="" data-linenumber="93">
996
-
997
-
998
- <code class="ruby"> {</code>
999
- </li>
1000
-
1001
- <li class="never" data-hits="" data-linenumber="94">
1002
-
1003
-
1004
- <code class="ruby"> :quantity =&gt; @quantity,</code>
1005
- </li>
1006
-
1007
- <li class="never" data-hits="" data-linenumber="95">
1008
-
1009
-
1010
- <code class="ruby"> :product_id =&gt; @product_id,</code>
1011
- </li>
1012
-
1013
- <li class="never" data-hits="" data-linenumber="96">
1014
-
1015
-
1016
- <code class="ruby"> :transaction_id =&gt; @transaction_id,</code>
1017
- </li>
1018
-
1019
- <li class="missed" data-hits="0" data-linenumber="97">
1020
-
1021
-
1022
- <code class="ruby"> :purchase_date =&gt; (@purchase_date.httpdate rescue nil),</code>
1023
- </li>
1024
-
1025
- <li class="missed" data-hits="0" data-linenumber="98">
1026
-
1027
-
1028
- <code class="ruby"> :original_transaction_id =&gt; (@original.transaction_id rescue nil),</code>
1029
- </li>
1030
-
1031
- <li class="missed" data-hits="0" data-linenumber="99">
1032
-
1033
-
1034
- <code class="ruby"> :original_purchase_date =&gt; (@original.purchase_date.httpdate rescue nil),</code>
1035
- </li>
1036
-
1037
- <li class="never" data-hits="" data-linenumber="100">
1038
-
1039
-
1040
- <code class="ruby"> :app_item_id =&gt; @app_item_id,</code>
1041
- </li>
1042
-
1043
- <li class="never" data-hits="" data-linenumber="101">
1044
-
1045
-
1046
- <code class="ruby"> :version_external_identifier =&gt; @version_external_identifier,</code>
1047
- </li>
1048
-
1049
- <li class="never" data-hits="" data-linenumber="102">
1050
-
1051
-
1052
- <code class="ruby"> :bid =&gt; @bid,</code>
1053
- </li>
1054
-
1055
- <li class="never" data-hits="" data-linenumber="103">
1056
-
1057
-
1058
- <code class="ruby"> :bvrs =&gt; @bvrs</code>
1059
- </li>
1060
-
1061
- <li class="missed" data-hits="0" data-linenumber="104">
1062
-
1063
-
1064
- <code class="ruby"> }</code>
1065
- </li>
1066
-
1067
- <li class="never" data-hits="" data-linenumber="105">
1068
-
1069
-
1070
- <code class="ruby"> end</code>
1071
- </li>
1072
-
1073
- <li class="never" data-hits="" data-linenumber="106">
1074
-
1075
-
1076
- <code class="ruby"></code>
1077
- </li>
1078
-
1079
- <li class="covered" data-hits="1" data-linenumber="107">
1080
- <span class="hits">1</span>
1081
-
1082
- <code class="ruby"> def to_json</code>
1083
- </li>
1084
-
1085
- <li class="missed" data-hits="0" data-linenumber="108">
1086
-
1087
-
1088
- <code class="ruby"> self.to_h.to_json</code>
1089
- </li>
1090
-
1091
- <li class="never" data-hits="" data-linenumber="109">
1092
-
1093
-
1094
- <code class="ruby"> end</code>
1095
- </li>
1096
-
1097
- <li class="never" data-hits="" data-linenumber="110">
1098
-
1099
-
1100
- <code class="ruby"></code>
1101
- </li>
1102
-
1103
- <li class="covered" data-hits="1" data-linenumber="111">
1104
- <span class="hits">1</span>
1105
-
1106
- <code class="ruby"> class &lt;&lt; self</code>
1107
- </li>
1108
-
1109
- <li class="covered" data-hits="1" data-linenumber="112">
1110
- <span class="hits">1</span>
1111
-
1112
- <code class="ruby"> def verify(data, options = {})</code>
1113
- </li>
1114
-
1115
- <li class="missed" data-hits="0" data-linenumber="113">
1116
-
1117
-
1118
- <code class="ruby"> verify!(data, options) rescue false</code>
1119
- </li>
1120
-
1121
- <li class="never" data-hits="" data-linenumber="114">
1122
-
1123
-
1124
- <code class="ruby"> end</code>
1125
- </li>
1126
-
1127
- <li class="never" data-hits="" data-linenumber="115">
1128
-
1129
-
1130
- <code class="ruby"></code>
1131
- </li>
1132
-
1133
- <li class="covered" data-hits="1" data-linenumber="116">
1134
- <span class="hits">1</span>
1135
-
1136
- <code class="ruby"> def verify!(data, options = {})</code>
1137
- </li>
1138
-
1139
- <li class="covered" data-hits="1" data-linenumber="117">
1140
- <span class="hits">1</span>
1141
-
1142
- <code class="ruby"> client = Client.production</code>
1143
- </li>
1144
-
1145
- <li class="never" data-hits="" data-linenumber="118">
1146
-
1147
-
1148
- <code class="ruby"></code>
1149
- </li>
1150
-
1151
- <li class="covered" data-hits="1" data-linenumber="119">
1152
- <span class="hits">1</span>
1153
-
1154
- <code class="ruby"> begin</code>
1155
- </li>
1156
-
1157
- <li class="covered" data-hits="2" data-linenumber="120">
1158
- <span class="hits">2</span>
1159
-
1160
- <code class="ruby"> json = client.verify!(data)</code>
1161
- </li>
1162
-
1163
- <li class="covered" data-hits="2" data-linenumber="121">
1164
- <span class="hits">2</span>
1165
-
1166
- <code class="ruby"> status, receipt_attributes = json['status'].to_i, json['receipt']</code>
1167
- </li>
1168
-
1169
- <li class="never" data-hits="" data-linenumber="122">
1170
-
1171
-
1172
- <code class="ruby"></code>
1173
- </li>
1174
-
1175
- <li class="covered" data-hits="2" data-linenumber="123">
1176
- <span class="hits">2</span>
1177
-
1178
- <code class="ruby"> case status</code>
1179
- </li>
1180
-
1181
- <li class="never" data-hits="" data-linenumber="124">
1182
-
1183
-
1184
- <code class="ruby"> when 0, 21006</code>
1185
- </li>
1186
-
1187
- <li class="covered" data-hits="1" data-linenumber="125">
1188
- <span class="hits">1</span>
1189
-
1190
- <code class="ruby"> receipt = Receipt.new(receipt_attributes)</code>
1191
- </li>
1192
-
1193
- <li class="never" data-hits="" data-linenumber="126">
1194
-
1195
-
1196
- <code class="ruby"></code>
1197
- </li>
1198
-
1199
- <li class="covered" data-hits="1" data-linenumber="127">
1200
- <span class="hits">1</span>
1201
-
1202
- <code class="ruby"> if latest_receipt_attributes = json['latest_receipt_info']</code>
1203
- </li>
1204
-
1205
- <li class="missed" data-hits="0" data-linenumber="128">
1206
-
1207
-
1208
- <code class="ruby"> receipt.latest = Receipt.new(latest_receipt_attributes)</code>
1209
- </li>
1210
-
1211
- <li class="never" data-hits="" data-linenumber="129">
1212
-
1213
-
1214
- <code class="ruby"> end</code>
1215
- </li>
1216
-
1217
- <li class="never" data-hits="" data-linenumber="130">
1218
-
1219
-
1220
- <code class="ruby"></code>
1221
- </li>
1222
-
1223
- <li class="covered" data-hits="1" data-linenumber="131">
1224
- <span class="hits">1</span>
1225
-
1226
- <code class="ruby"> return receipt</code>
1227
- </li>
1228
-
1229
- <li class="never" data-hits="" data-linenumber="132">
1230
-
1231
-
1232
- <code class="ruby"> else</code>
1233
- </li>
1234
-
1235
- <li class="covered" data-hits="1" data-linenumber="133">
1236
- <span class="hits">1</span>
1237
-
1238
- <code class="ruby"> raise (RECEIPT_VERIFICATION_ERRORS_BY_STATUS_CODE[status] || ReceiptVerificationError), &quot;#{status}&quot;</code>
1239
- </li>
1240
-
1241
- <li class="never" data-hits="" data-linenumber="134">
1242
-
1243
-
1244
- <code class="ruby"> end</code>
1245
- </li>
1246
-
1247
- <li class="never" data-hits="" data-linenumber="135">
1248
-
1249
-
1250
- <code class="ruby"></code>
1251
- </li>
1252
-
1253
- <li class="covered" data-hits="1" data-linenumber="136">
1254
- <span class="hits">1</span>
1255
-
1256
- <code class="ruby"> rescue =&gt; error</code>
1257
- </li>
1258
-
1259
- <li class="covered" data-hits="1" data-linenumber="137">
1260
- <span class="hits">1</span>
1261
-
1262
- <code class="ruby"> case error</code>
1263
- </li>
1264
-
1265
- <li class="never" data-hits="" data-linenumber="138">
1266
-
1267
-
1268
- <code class="ruby"> when SandboxReceiptSentToProductionError</code>
1269
- </li>
1270
-
1271
- <li class="covered" data-hits="1" data-linenumber="139">
1272
- <span class="hits">1</span>
1273
-
1274
- <code class="ruby"> client = Client.development</code>
1275
- </li>
1276
-
1277
- <li class="covered" data-hits="1" data-linenumber="140">
1278
- <span class="hits">1</span>
1279
-
1280
- <code class="ruby"> retry</code>
1281
- </li>
1282
-
1283
- <li class="never" data-hits="" data-linenumber="141">
1284
-
1285
-
1286
- <code class="ruby"> when ProductionReceiptSentToSandboxError</code>
1287
- </li>
1288
-
1289
- <li class="missed" data-hits="0" data-linenumber="142">
1290
-
1291
-
1292
- <code class="ruby"> client = Client.production</code>
1293
- </li>
1294
-
1295
- <li class="missed" data-hits="0" data-linenumber="143">
1296
-
1297
-
1298
- <code class="ruby"> retry</code>
1299
- </li>
1300
-
1301
- <li class="never" data-hits="" data-linenumber="144">
1302
-
1303
-
1304
- <code class="ruby"> else</code>
1305
- </li>
1306
-
1307
- <li class="missed" data-hits="0" data-linenumber="145">
1308
-
1309
-
1310
- <code class="ruby"> raise error</code>
1311
- </li>
1312
-
1313
- <li class="never" data-hits="" data-linenumber="146">
1314
-
1315
-
1316
- <code class="ruby"> end </code>
1317
- </li>
1318
-
1319
- <li class="never" data-hits="" data-linenumber="147">
1320
-
1321
-
1322
- <code class="ruby"> end</code>
1323
- </li>
1324
-
1325
- <li class="never" data-hits="" data-linenumber="148">
1326
-
1327
-
1328
- <code class="ruby"> end</code>
1329
- </li>
1330
-
1331
- <li class="never" data-hits="" data-linenumber="149">
1332
-
1333
-
1334
- <code class="ruby"></code>
1335
- </li>
1336
-
1337
- <li class="covered" data-hits="1" data-linenumber="150">
1338
- <span class="hits">1</span>
1339
-
1340
- <code class="ruby"> alias :validate :verify</code>
1341
- </li>
1342
-
1343
- <li class="covered" data-hits="1" data-linenumber="151">
1344
- <span class="hits">1</span>
1345
-
1346
- <code class="ruby"> alias :validate! :verify!</code>
1347
- </li>
1348
-
1349
- <li class="never" data-hits="" data-linenumber="152">
1350
-
1351
-
1352
- <code class="ruby"> end</code>
1353
- </li>
1354
-
1355
- <li class="never" data-hits="" data-linenumber="153">
1356
-
1357
-
1358
- <code class="ruby"> end</code>
1359
- </li>
1360
-
1361
- <li class="never" data-hits="" data-linenumber="154">
1362
-
1363
-
1364
- <code class="ruby">end</code>
1365
- </li>
1366
-
1367
- </ol>
1368
- </pre>
1369
- </div>
1370
-
1371
- </div>
1372
- </div>
1373
- </body>
1374
- </html>