venice 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +10 -10
  4. data/README.md +6 -5
  5. data/bin/iap +6 -9
  6. data/lib/venice/client.rb +2 -0
  7. data/lib/venice/in_app_receipt.rb +17 -1
  8. data/lib/venice/pending_renewal_info.rb +1 -1
  9. data/lib/venice/receipt.rb +4 -1
  10. data/lib/venice/version.rb +1 -1
  11. data/spec/client_spec.rb +13 -5
  12. data/spec/in_app_receipt_spec.rb +9 -0
  13. data/spec/receipt_spec.rb +5 -0
  14. metadata +3 -28
  15. data/coverage/assets/0.10.2/application.css +0 -799
  16. data/coverage/assets/0.10.2/application.js +0 -1707
  17. data/coverage/assets/0.10.2/colorbox/border.png +0 -0
  18. data/coverage/assets/0.10.2/colorbox/controls.png +0 -0
  19. data/coverage/assets/0.10.2/colorbox/loading.gif +0 -0
  20. data/coverage/assets/0.10.2/colorbox/loading_background.png +0 -0
  21. data/coverage/assets/0.10.2/favicon_green.png +0 -0
  22. data/coverage/assets/0.10.2/favicon_red.png +0 -0
  23. data/coverage/assets/0.10.2/favicon_yellow.png +0 -0
  24. data/coverage/assets/0.10.2/loading.gif +0 -0
  25. data/coverage/assets/0.10.2/magnify.png +0 -0
  26. data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  27. data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  28. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  29. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  30. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  31. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  32. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  33. data/coverage/assets/0.10.2/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  34. data/coverage/assets/0.10.2/smoothness/images/ui-icons_222222_256x240.png +0 -0
  35. data/coverage/assets/0.10.2/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  36. data/coverage/assets/0.10.2/smoothness/images/ui-icons_454545_256x240.png +0 -0
  37. data/coverage/assets/0.10.2/smoothness/images/ui-icons_888888_256x240.png +0 -0
  38. data/coverage/assets/0.10.2/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  39. data/coverage/index.html +0 -2826
@@ -1,2826 +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.10.2/application.js' type='text/javascript'></script>
7
- <link href='./assets/0.10.2/application.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
8
- <link rel="shortcut icon" type="image/png" href="./assets/0.10.2/favicon_yellow.png" />
9
- <link rel="icon" type="image/png" href="./assets/0.10.2/favicon.png" />
10
- </head>
11
-
12
- <body>
13
- <div id="loading">
14
- <img src="./assets/0.10.2/loading.gif" alt="loading"/>
15
- </div>
16
- <div id="wrapper" style="display:none;">
17
- <div class="timestamp">Generated <abbr class="timeago" title="2017-12-21T16:29:38+01:00">2017-12-21T16:29:38+01: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">86.34%</span></span>
25
- covered at
26
- <span class="covered_strength">
27
- <span class="green">
28
- 3.39
29
- </span>
30
- </span> hits/line)
31
- </h2>
32
- <a name="AllFiles"></a>
33
- <div>
34
- <b>6</b> files in total.
35
- <b>205</b> relevant lines.
36
- <span class="green"><b>177</b> lines covered</span> and
37
- <span class="red"><b>28</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="#175f5aad0793e9750ae8298148ee6c32946b63ae" class="src_link" title="lib/venice.rb">lib/venice.rb</a></td>
55
- <td class="green strong">100.0 %</td>
56
- <td>5</td>
57
- <td>5</td>
58
- <td>5</td>
59
- <td>0</td>
60
- <td>1.0</td>
61
- </tr>
62
-
63
- <tr>
64
- <td class="strong"><a href="#d79fadfe1306623a10822709e775b8c021f4fc4e" class="src_link" title="lib/venice/client.rb">lib/venice/client.rb</a></td>
65
- <td class="green strong">91.38 %</td>
66
- <td>101</td>
67
- <td>58</td>
68
- <td>53</td>
69
- <td>5</td>
70
- <td>2.7</td>
71
- </tr>
72
-
73
- <tr>
74
- <td class="strong"><a href="#080477ce0f6d0348fc87b2c6eb5ce94e3b5da4cd" class="src_link" title="lib/venice/in_app_receipt.rb">lib/venice/in_app_receipt.rb</a></td>
75
- <td class="green strong">97.06 %</td>
76
- <td>89</td>
77
- <td>34</td>
78
- <td>33</td>
79
- <td>1</td>
80
- <td>7.9</td>
81
- </tr>
82
-
83
- <tr>
84
- <td class="strong"><a href="#17a12c36d26ef47e82b8c4a1684d8e945c9a9e89" class="src_link" title="lib/venice/pending_renewal_info.rb">lib/venice/pending_renewal_info.rb</a></td>
85
- <td class="green strong">95.65 %</td>
86
- <td>64</td>
87
- <td>23</td>
88
- <td>22</td>
89
- <td>1</td>
90
- <td>3.1</td>
91
- </tr>
92
-
93
- <tr>
94
- <td class="strong"><a href="#10dfdb14e321a7bb364075307e5a80a2a62317af" class="src_link" title="lib/venice/receipt.rb">lib/venice/receipt.rb</a></td>
95
- <td class="red strong">74.7 %</td>
96
- <td>168</td>
97
- <td>83</td>
98
- <td>62</td>
99
- <td>21</td>
100
- <td>2.3</td>
101
- </tr>
102
-
103
- <tr>
104
- <td class="strong"><a href="#cb684cfb744e20e9f55e0ef69140ba65fee90e3b" class="src_link" title="lib/venice/version.rb">lib/venice/version.rb</a></td>
105
- <td class="green strong">100.0 %</td>
106
- <td>3</td>
107
- <td>2</td>
108
- <td>2</td>
109
- <td>0</td>
110
- <td>1.0</td>
111
- </tr>
112
-
113
- </tbody>
114
- </table>
115
- </div>
116
-
117
-
118
-
119
- </div>
120
-
121
- <div id="footer">
122
- Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.15.1
123
- and simplecov-html v0.10.2<br/>
124
- using RSpec
125
- </div>
126
-
127
- <div class="source_files">
128
-
129
- <div class="source_table" id="175f5aad0793e9750ae8298148ee6c32946b63ae">
130
- <div class="header">
131
- <h3>lib/venice.rb</h3>
132
- <h4><span class="green">100.0 %</span> covered</h4>
133
- <div>
134
- <b>5</b> relevant lines.
135
- <span class="green"><b>5</b> lines covered</span> and
136
- <span class="red"><b>0</b> lines missed.</span>
137
- </div>
138
- </div>
139
-
140
- <pre>
141
- <ol>
142
-
143
- <li class="covered" data-hits="1" data-linenumber="1">
144
- <span class="hits">1</span>
145
-
146
- <code class="ruby">require &#39;venice/version&#39;</code>
147
- </li>
148
-
149
- <li class="covered" data-hits="1" data-linenumber="2">
150
- <span class="hits">1</span>
151
-
152
- <code class="ruby">require &#39;venice/client&#39;</code>
153
- </li>
154
-
155
- <li class="covered" data-hits="1" data-linenumber="3">
156
- <span class="hits">1</span>
157
-
158
- <code class="ruby">require &#39;venice/in_app_receipt&#39;</code>
159
- </li>
160
-
161
- <li class="covered" data-hits="1" data-linenumber="4">
162
- <span class="hits">1</span>
163
-
164
- <code class="ruby">require &#39;venice/receipt&#39;</code>
165
- </li>
166
-
167
- <li class="covered" data-hits="1" data-linenumber="5">
168
- <span class="hits">1</span>
169
-
170
- <code class="ruby">require &#39;venice/pending_renewal_info&#39;</code>
171
- </li>
172
-
173
- </ol>
174
- </pre>
175
- </div>
176
-
177
-
178
- <div class="source_table" id="d79fadfe1306623a10822709e775b8c021f4fc4e">
179
- <div class="header">
180
- <h3>lib/venice/client.rb</h3>
181
- <h4><span class="green">91.38 %</span> covered</h4>
182
- <div>
183
- <b>58</b> relevant lines.
184
- <span class="green"><b>53</b> lines covered</span> and
185
- <span class="red"><b>5</b> lines missed.</span>
186
- </div>
187
- </div>
188
-
189
- <pre>
190
- <ol>
191
-
192
- <li class="covered" data-hits="1" data-linenumber="1">
193
- <span class="hits">1</span>
194
-
195
- <code class="ruby">require &#39;json&#39;</code>
196
- </li>
197
-
198
- <li class="covered" data-hits="1" data-linenumber="2">
199
- <span class="hits">1</span>
200
-
201
- <code class="ruby">require &#39;net/https&#39;</code>
202
- </li>
203
-
204
- <li class="covered" data-hits="1" data-linenumber="3">
205
- <span class="hits">1</span>
206
-
207
- <code class="ruby">require &#39;uri&#39;</code>
208
- </li>
209
-
210
- <li class="never" data-hits="" data-linenumber="4">
211
-
212
-
213
- <code class="ruby"></code>
214
- </li>
215
-
216
- <li class="covered" data-hits="1" data-linenumber="5">
217
- <span class="hits">1</span>
218
-
219
- <code class="ruby">module Venice</code>
220
- </li>
221
-
222
- <li class="covered" data-hits="1" data-linenumber="6">
223
- <span class="hits">1</span>
224
-
225
- <code class="ruby"> ITUNES_PRODUCTION_RECEIPT_VERIFICATION_ENDPOINT = &#39;https://buy.itunes.apple.com/verifyReceipt&#39;</code>
226
- </li>
227
-
228
- <li class="covered" data-hits="1" data-linenumber="7">
229
- <span class="hits">1</span>
230
-
231
- <code class="ruby"> ITUNES_DEVELOPMENT_RECEIPT_VERIFICATION_ENDPOINT = &#39;https://sandbox.itunes.apple.com/verifyReceipt&#39;</code>
232
- </li>
233
-
234
- <li class="never" data-hits="" data-linenumber="8">
235
-
236
-
237
- <code class="ruby"></code>
238
- </li>
239
-
240
- <li class="covered" data-hits="1" data-linenumber="9">
241
- <span class="hits">1</span>
242
-
243
- <code class="ruby"> class Client</code>
244
- </li>
245
-
246
- <li class="covered" data-hits="1" data-linenumber="10">
247
- <span class="hits">1</span>
248
-
249
- <code class="ruby"> attr_accessor :verification_url</code>
250
- </li>
251
-
252
- <li class="covered" data-hits="1" data-linenumber="11">
253
- <span class="hits">1</span>
254
-
255
- <code class="ruby"> attr_writer :shared_secret</code>
256
- </li>
257
-
258
- <li class="covered" data-hits="1" data-linenumber="12">
259
- <span class="hits">1</span>
260
-
261
- <code class="ruby"> attr_writer :exclude_old_transactions</code>
262
- </li>
263
-
264
- <li class="never" data-hits="" data-linenumber="13">
265
-
266
-
267
- <code class="ruby"></code>
268
- </li>
269
-
270
- <li class="covered" data-hits="1" data-linenumber="14">
271
- <span class="hits">1</span>
272
-
273
- <code class="ruby"> class &lt;&lt; self</code>
274
- </li>
275
-
276
- <li class="covered" data-hits="1" data-linenumber="15">
277
- <span class="hits">1</span>
278
-
279
- <code class="ruby"> def development</code>
280
- </li>
281
-
282
- <li class="missed" data-hits="0" data-linenumber="16">
283
-
284
-
285
- <code class="ruby"> client = new</code>
286
- </li>
287
-
288
- <li class="missed" data-hits="0" data-linenumber="17">
289
-
290
-
291
- <code class="ruby"> client.verification_url = ITUNES_DEVELOPMENT_RECEIPT_VERIFICATION_ENDPOINT</code>
292
- </li>
293
-
294
- <li class="missed" data-hits="0" data-linenumber="18">
295
-
296
-
297
- <code class="ruby"> client</code>
298
- </li>
299
-
300
- <li class="never" data-hits="" data-linenumber="19">
301
-
302
-
303
- <code class="ruby"> end</code>
304
- </li>
305
-
306
- <li class="never" data-hits="" data-linenumber="20">
307
-
308
-
309
- <code class="ruby"></code>
310
- </li>
311
-
312
- <li class="covered" data-hits="1" data-linenumber="21">
313
- <span class="hits">1</span>
314
-
315
- <code class="ruby"> def production</code>
316
- </li>
317
-
318
- <li class="covered" data-hits="1" data-linenumber="22">
319
- <span class="hits">1</span>
320
-
321
- <code class="ruby"> client = new</code>
322
- </li>
323
-
324
- <li class="covered" data-hits="1" data-linenumber="23">
325
- <span class="hits">1</span>
326
-
327
- <code class="ruby"> client.verification_url = ITUNES_PRODUCTION_RECEIPT_VERIFICATION_ENDPOINT</code>
328
- </li>
329
-
330
- <li class="covered" data-hits="1" data-linenumber="24">
331
- <span class="hits">1</span>
332
-
333
- <code class="ruby"> client</code>
334
- </li>
335
-
336
- <li class="never" data-hits="" data-linenumber="25">
337
-
338
-
339
- <code class="ruby"> end</code>
340
- </li>
341
-
342
- <li class="never" data-hits="" data-linenumber="26">
343
-
344
-
345
- <code class="ruby"> end</code>
346
- </li>
347
-
348
- <li class="never" data-hits="" data-linenumber="27">
349
-
350
-
351
- <code class="ruby"></code>
352
- </li>
353
-
354
- <li class="covered" data-hits="1" data-linenumber="28">
355
- <span class="hits">1</span>
356
-
357
- <code class="ruby"> def initialize</code>
358
- </li>
359
-
360
- <li class="covered" data-hits="8" data-linenumber="29">
361
- <span class="hits">8</span>
362
-
363
- <code class="ruby"> @verification_url = ENV[&#39;IAP_VERIFICATION_ENDPOINT&#39;]</code>
364
- </li>
365
-
366
- <li class="never" data-hits="" data-linenumber="30">
367
-
368
-
369
- <code class="ruby"> end</code>
370
- </li>
371
-
372
- <li class="never" data-hits="" data-linenumber="31">
373
-
374
-
375
- <code class="ruby"></code>
376
- </li>
377
-
378
- <li class="covered" data-hits="1" data-linenumber="32">
379
- <span class="hits">1</span>
380
-
381
- <code class="ruby"> def verify!(data, options = {})</code>
382
- </li>
383
-
384
- <li class="covered" data-hits="8" data-linenumber="33">
385
- <span class="hits">8</span>
386
-
387
- <code class="ruby"> @verification_url ||= ITUNES_DEVELOPMENT_RECEIPT_VERIFICATION_ENDPOINT</code>
388
- </li>
389
-
390
- <li class="covered" data-hits="8" data-linenumber="34">
391
- <span class="hits">8</span>
392
-
393
- <code class="ruby"> @shared_secret = options[:shared_secret] if options[:shared_secret]</code>
394
- </li>
395
-
396
- <li class="covered" data-hits="8" data-linenumber="35">
397
- <span class="hits">8</span>
398
-
399
- <code class="ruby"> @exclude_old_transactions = options[:exclude_old_transactions] if options[:exclude_old_transactions]</code>
400
- </li>
401
-
402
- <li class="never" data-hits="" data-linenumber="36">
403
-
404
-
405
- <code class="ruby"></code>
406
- </li>
407
-
408
- <li class="covered" data-hits="8" data-linenumber="37">
409
- <span class="hits">8</span>
410
-
411
- <code class="ruby"> json = json_response_from_verifying_data(data, options)</code>
412
- </li>
413
-
414
- <li class="covered" data-hits="8" data-linenumber="38">
415
- <span class="hits">8</span>
416
-
417
- <code class="ruby"> receipt_attributes = json[&#39;receipt&#39;].dup if json[&#39;receipt&#39;]</code>
418
- </li>
419
-
420
- <li class="covered" data-hits="8" data-linenumber="39">
421
- <span class="hits">8</span>
422
-
423
- <code class="ruby"> receipt_attributes[&#39;original_json_response&#39;] = json if receipt_attributes</code>
424
- </li>
425
-
426
- <li class="never" data-hits="" data-linenumber="40">
427
-
428
-
429
- <code class="ruby"></code>
430
- </li>
431
-
432
- <li class="covered" data-hits="8" data-linenumber="41">
433
- <span class="hits">8</span>
434
-
435
- <code class="ruby"> case json[&#39;status&#39;].to_i</code>
436
- </li>
437
-
438
- <li class="never" data-hits="" data-linenumber="42">
439
-
440
-
441
- <code class="ruby"> when 0, 21006</code>
442
- </li>
443
-
444
- <li class="covered" data-hits="6" data-linenumber="43">
445
- <span class="hits">6</span>
446
-
447
- <code class="ruby"> receipt = Receipt.new(receipt_attributes)</code>
448
- </li>
449
-
450
- <li class="never" data-hits="" data-linenumber="44">
451
-
452
-
453
- <code class="ruby"></code>
454
- </li>
455
-
456
- <li class="never" data-hits="" data-linenumber="45">
457
-
458
-
459
- <code class="ruby"> # From Apple docs:</code>
460
- </li>
461
-
462
- <li class="never" data-hits="" data-linenumber="46">
463
-
464
-
465
- <code class="ruby"> # &gt; Only returned for iOS 6 style transaction receipts for auto-renewable subscriptions.</code>
466
- </li>
467
-
468
- <li class="never" data-hits="" data-linenumber="47">
469
-
470
-
471
- <code class="ruby"> # &gt; The JSON representation of the receipt for the most recent renewal</code>
472
- </li>
473
-
474
- <li class="covered" data-hits="6" data-linenumber="48">
475
- <span class="hits">6</span>
476
-
477
- <code class="ruby"> if latest_receipt_info_attributes = json[&#39;latest_receipt_info&#39;]</code>
478
- </li>
479
-
480
- <li class="never" data-hits="" data-linenumber="49">
481
-
482
-
483
- <code class="ruby"> # AppStore returns &#39;latest_receipt_info&#39; even if we use over iOS 6. Besides, its format is an Array.</code>
484
- </li>
485
-
486
- <li class="covered" data-hits="1" data-linenumber="50">
487
- <span class="hits">1</span>
488
-
489
- <code class="ruby"> receipt.latest_receipt_info = []</code>
490
- </li>
491
-
492
- <li class="covered" data-hits="1" data-linenumber="51">
493
- <span class="hits">1</span>
494
-
495
- <code class="ruby"> latest_receipt_info_attributes.each do |latest_receipt_info_attribute|</code>
496
- </li>
497
-
498
- <li class="never" data-hits="" data-linenumber="52">
499
-
500
-
501
- <code class="ruby"> # latest_receipt_info format is identical with in_app</code>
502
- </li>
503
-
504
- <li class="covered" data-hits="1" data-linenumber="53">
505
- <span class="hits">1</span>
506
-
507
- <code class="ruby"> receipt.latest_receipt_info &lt;&lt; InAppReceipt.new(latest_receipt_info_attribute)</code>
508
- </li>
509
-
510
- <li class="never" data-hits="" data-linenumber="54">
511
-
512
-
513
- <code class="ruby"> end</code>
514
- </li>
515
-
516
- <li class="never" data-hits="" data-linenumber="55">
517
-
518
-
519
- <code class="ruby"> end</code>
520
- </li>
521
-
522
- <li class="never" data-hits="" data-linenumber="56">
523
-
524
-
525
- <code class="ruby"></code>
526
- </li>
527
-
528
- <li class="covered" data-hits="6" data-linenumber="57">
529
- <span class="hits">6</span>
530
-
531
- <code class="ruby"> return receipt</code>
532
- </li>
533
-
534
- <li class="never" data-hits="" data-linenumber="58">
535
-
536
-
537
- <code class="ruby"> else</code>
538
- </li>
539
-
540
- <li class="covered" data-hits="2" data-linenumber="59">
541
- <span class="hits">2</span>
542
-
543
- <code class="ruby"> raise Receipt::VerificationError, json</code>
544
- </li>
545
-
546
- <li class="never" data-hits="" data-linenumber="60">
547
-
548
-
549
- <code class="ruby"> end</code>
550
- </li>
551
-
552
- <li class="never" data-hits="" data-linenumber="61">
553
-
554
-
555
- <code class="ruby"> end</code>
556
- </li>
557
-
558
- <li class="never" data-hits="" data-linenumber="62">
559
-
560
-
561
- <code class="ruby"></code>
562
- </li>
563
-
564
- <li class="covered" data-hits="1" data-linenumber="63">
565
- <span class="hits">1</span>
566
-
567
- <code class="ruby"> private</code>
568
- </li>
569
-
570
- <li class="never" data-hits="" data-linenumber="64">
571
-
572
-
573
- <code class="ruby"></code>
574
- </li>
575
-
576
- <li class="covered" data-hits="1" data-linenumber="65">
577
- <span class="hits">1</span>
578
-
579
- <code class="ruby"> def json_response_from_verifying_data(data, options = {})</code>
580
- </li>
581
-
582
- <li class="covered" data-hits="3" data-linenumber="66">
583
- <span class="hits">3</span>
584
-
585
- <code class="ruby"> parameters = {</code>
586
- </li>
587
-
588
- <li class="never" data-hits="" data-linenumber="67">
589
-
590
-
591
- <code class="ruby"> &#39;receipt-data&#39; =&gt; data</code>
592
- </li>
593
-
594
- <li class="never" data-hits="" data-linenumber="68">
595
-
596
-
597
- <code class="ruby"> }</code>
598
- </li>
599
-
600
- <li class="never" data-hits="" data-linenumber="69">
601
-
602
-
603
- <code class="ruby"></code>
604
- </li>
605
-
606
- <li class="covered" data-hits="3" data-linenumber="70">
607
- <span class="hits">3</span>
608
-
609
- <code class="ruby"> parameters[&#39;password&#39;] = @shared_secret if @shared_secret</code>
610
- </li>
611
-
612
- <li class="covered" data-hits="3" data-linenumber="71">
613
- <span class="hits">3</span>
614
-
615
- <code class="ruby"> parameters[&#39;exclude-old-transactions&#39;] = @exclude_old_transactions if @exclude_old_transactions</code>
616
- </li>
617
-
618
- <li class="never" data-hits="" data-linenumber="72">
619
-
620
-
621
- <code class="ruby"></code>
622
- </li>
623
-
624
- <li class="covered" data-hits="3" data-linenumber="73">
625
- <span class="hits">3</span>
626
-
627
- <code class="ruby"> uri = URI(@verification_url)</code>
628
- </li>
629
-
630
- <li class="covered" data-hits="3" data-linenumber="74">
631
- <span class="hits">3</span>
632
-
633
- <code class="ruby"> http = Net::HTTP.new(uri.host, uri.port)</code>
634
- </li>
635
-
636
- <li class="covered" data-hits="3" data-linenumber="75">
637
- <span class="hits">3</span>
638
-
639
- <code class="ruby"> http.use_ssl = true</code>
640
- </li>
641
-
642
- <li class="covered" data-hits="3" data-linenumber="76">
643
- <span class="hits">3</span>
644
-
645
- <code class="ruby"> http.verify_mode = OpenSSL::SSL::VERIFY_PEER</code>
646
- </li>
647
-
648
- <li class="never" data-hits="" data-linenumber="77">
649
-
650
-
651
- <code class="ruby"></code>
652
- </li>
653
-
654
- <li class="covered" data-hits="3" data-linenumber="78">
655
- <span class="hits">3</span>
656
-
657
- <code class="ruby"> http.open_timeout = options[:open_timeout] if options[:open_timeout]</code>
658
- </li>
659
-
660
- <li class="covered" data-hits="3" data-linenumber="79">
661
- <span class="hits">3</span>
662
-
663
- <code class="ruby"> http.read_timeout = options[:read_timeout] if options[:read_timeout]</code>
664
- </li>
665
-
666
- <li class="never" data-hits="" data-linenumber="80">
667
-
668
-
669
- <code class="ruby"></code>
670
- </li>
671
-
672
- <li class="covered" data-hits="3" data-linenumber="81">
673
- <span class="hits">3</span>
674
-
675
- <code class="ruby"> request = Net::HTTP::Post.new(uri.request_uri)</code>
676
- </li>
677
-
678
- <li class="covered" data-hits="3" data-linenumber="82">
679
- <span class="hits">3</span>
680
-
681
- <code class="ruby"> request[&#39;Accept&#39;] = &#39;application/json&#39;</code>
682
- </li>
683
-
684
- <li class="covered" data-hits="3" data-linenumber="83">
685
- <span class="hits">3</span>
686
-
687
- <code class="ruby"> request[&#39;Content-Type&#39;] = &#39;application/json&#39;</code>
688
- </li>
689
-
690
- <li class="covered" data-hits="3" data-linenumber="84">
691
- <span class="hits">3</span>
692
-
693
- <code class="ruby"> request.body = parameters.to_json</code>
694
- </li>
695
-
696
- <li class="never" data-hits="" data-linenumber="85">
697
-
698
-
699
- <code class="ruby"></code>
700
- </li>
701
-
702
- <li class="covered" data-hits="3" data-linenumber="86">
703
- <span class="hits">3</span>
704
-
705
- <code class="ruby"> begin</code>
706
- </li>
707
-
708
- <li class="covered" data-hits="3" data-linenumber="87">
709
- <span class="hits">3</span>
710
-
711
- <code class="ruby"> response = http.request(request)</code>
712
- </li>
713
-
714
- <li class="never" data-hits="" data-linenumber="88">
715
-
716
-
717
- <code class="ruby"> rescue Timeout::Error</code>
718
- </li>
719
-
720
- <li class="missed" data-hits="0" data-linenumber="89">
721
-
722
-
723
- <code class="ruby"> raise TimeoutError</code>
724
- </li>
725
-
726
- <li class="never" data-hits="" data-linenumber="90">
727
-
728
-
729
- <code class="ruby"> end</code>
730
- </li>
731
-
732
- <li class="never" data-hits="" data-linenumber="91">
733
-
734
-
735
- <code class="ruby"></code>
736
- </li>
737
-
738
- <li class="covered" data-hits="3" data-linenumber="92">
739
- <span class="hits">3</span>
740
-
741
- <code class="ruby"> JSON.parse(response.body)</code>
742
- </li>
743
-
744
- <li class="never" data-hits="" data-linenumber="93">
745
-
746
-
747
- <code class="ruby"> end</code>
748
- </li>
749
-
750
- <li class="never" data-hits="" data-linenumber="94">
751
-
752
-
753
- <code class="ruby"> end</code>
754
- </li>
755
-
756
- <li class="never" data-hits="" data-linenumber="95">
757
-
758
-
759
- <code class="ruby"></code>
760
- </li>
761
-
762
- <li class="covered" data-hits="1" data-linenumber="96">
763
- <span class="hits">1</span>
764
-
765
- <code class="ruby"> class Client::TimeoutError &lt; Timeout::Error</code>
766
- </li>
767
-
768
- <li class="covered" data-hits="1" data-linenumber="97">
769
- <span class="hits">1</span>
770
-
771
- <code class="ruby"> def message</code>
772
- </li>
773
-
774
- <li class="missed" data-hits="0" data-linenumber="98">
775
-
776
-
777
- <code class="ruby"> &#39;The App Store timed out.&#39;</code>
778
- </li>
779
-
780
- <li class="never" data-hits="" data-linenumber="99">
781
-
782
-
783
- <code class="ruby"> end</code>
784
- </li>
785
-
786
- <li class="never" data-hits="" data-linenumber="100">
787
-
788
-
789
- <code class="ruby"> end</code>
790
- </li>
791
-
792
- <li class="never" data-hits="" data-linenumber="101">
793
-
794
-
795
- <code class="ruby">end</code>
796
- </li>
797
-
798
- </ol>
799
- </pre>
800
- </div>
801
-
802
-
803
- <div class="source_table" id="080477ce0f6d0348fc87b2c6eb5ce94e3b5da4cd">
804
- <div class="header">
805
- <h3>lib/venice/in_app_receipt.rb</h3>
806
- <h4><span class="green">97.06 %</span> covered</h4>
807
- <div>
808
- <b>34</b> relevant lines.
809
- <span class="green"><b>33</b> lines covered</span> and
810
- <span class="red"><b>1</b> lines missed.</span>
811
- </div>
812
- </div>
813
-
814
- <pre>
815
- <ol>
816
-
817
- <li class="covered" data-hits="1" data-linenumber="1">
818
- <span class="hits">1</span>
819
-
820
- <code class="ruby">require &#39;time&#39;</code>
821
- </li>
822
-
823
- <li class="never" data-hits="" data-linenumber="2">
824
-
825
-
826
- <code class="ruby"></code>
827
- </li>
828
-
829
- <li class="covered" data-hits="1" data-linenumber="3">
830
- <span class="hits">1</span>
831
-
832
- <code class="ruby">module Venice</code>
833
- </li>
834
-
835
- <li class="covered" data-hits="1" data-linenumber="4">
836
- <span class="hits">1</span>
837
-
838
- <code class="ruby"> class InAppReceipt</code>
839
- </li>
840
-
841
- <li class="never" data-hits="" data-linenumber="5">
842
-
843
-
844
- <code class="ruby"> # For detailed explanations on these keys/values, see</code>
845
- </li>
846
-
847
- <li class="never" data-hits="" data-linenumber="6">
848
-
849
-
850
- <code class="ruby"> # https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html#//apple_ref/doc/uid/TP40010573-CH106-SW12</code>
851
- </li>
852
-
853
- <li class="never" data-hits="" data-linenumber="7">
854
-
855
-
856
- <code class="ruby"></code>
857
- </li>
858
-
859
- <li class="never" data-hits="" data-linenumber="8">
860
-
861
-
862
- <code class="ruby"> # The number of items purchased. This value corresponds to the quantity property of</code>
863
- </li>
864
-
865
- <li class="never" data-hits="" data-linenumber="9">
866
-
867
-
868
- <code class="ruby"> # the SKPayment object stored in the transaction’s payment property.</code>
869
- </li>
870
-
871
- <li class="covered" data-hits="1" data-linenumber="10">
872
- <span class="hits">1</span>
873
-
874
- <code class="ruby"> attr_reader :quantity</code>
875
- </li>
876
-
877
- <li class="never" data-hits="" data-linenumber="11">
878
-
879
-
880
- <code class="ruby"></code>
881
- </li>
882
-
883
- <li class="never" data-hits="" data-linenumber="12">
884
-
885
-
886
- <code class="ruby"> # The product identifier of the item that was purchased. This value corresponds to</code>
887
- </li>
888
-
889
- <li class="never" data-hits="" data-linenumber="13">
890
-
891
-
892
- <code class="ruby"> # the productIdentifier property of the SKPayment object stored in the transaction’s</code>
893
- </li>
894
-
895
- <li class="never" data-hits="" data-linenumber="14">
896
-
897
-
898
- <code class="ruby"> # payment property.</code>
899
- </li>
900
-
901
- <li class="covered" data-hits="1" data-linenumber="15">
902
- <span class="hits">1</span>
903
-
904
- <code class="ruby"> attr_reader :product_id</code>
905
- </li>
906
-
907
- <li class="never" data-hits="" data-linenumber="16">
908
-
909
-
910
- <code class="ruby"></code>
911
- </li>
912
-
913
- <li class="never" data-hits="" data-linenumber="17">
914
-
915
-
916
- <code class="ruby"> # The transaction identifier of the item that was purchased. This value corresponds</code>
917
- </li>
918
-
919
- <li class="never" data-hits="" data-linenumber="18">
920
-
921
-
922
- <code class="ruby"> # to the transaction’s transactionIdentifier property.</code>
923
- </li>
924
-
925
- <li class="covered" data-hits="1" data-linenumber="19">
926
- <span class="hits">1</span>
927
-
928
- <code class="ruby"> attr_reader :transaction_id</code>
929
- </li>
930
-
931
- <li class="never" data-hits="" data-linenumber="20">
932
-
933
-
934
- <code class="ruby"></code>
935
- </li>
936
-
937
- <li class="never" data-hits="" data-linenumber="21">
938
-
939
-
940
- <code class="ruby"> # The date and time this transaction occurred. This value corresponds to the</code>
941
- </li>
942
-
943
- <li class="never" data-hits="" data-linenumber="22">
944
-
945
-
946
- <code class="ruby"> # transaction’s transactionDate property.</code>
947
- </li>
948
-
949
- <li class="covered" data-hits="1" data-linenumber="23">
950
- <span class="hits">1</span>
951
-
952
- <code class="ruby"> attr_reader :purchased_at</code>
953
- </li>
954
-
955
- <li class="never" data-hits="" data-linenumber="24">
956
-
957
-
958
- <code class="ruby"></code>
959
- </li>
960
-
961
- <li class="never" data-hits="" data-linenumber="25">
962
-
963
-
964
- <code class="ruby"> # A string that the App Store uses to uniquely identify the application that created</code>
965
- </li>
966
-
967
- <li class="never" data-hits="" data-linenumber="26">
968
-
969
-
970
- <code class="ruby"> # the payment transaction. If your server supports multiple applications, you can use</code>
971
- </li>
972
-
973
- <li class="never" data-hits="" data-linenumber="27">
974
-
975
-
976
- <code class="ruby"> # this value to differentiate between them. Applications that are executing in the</code>
977
- </li>
978
-
979
- <li class="never" data-hits="" data-linenumber="28">
980
-
981
-
982
- <code class="ruby"> # sandbox do not yet have an app-item-id assigned to them, so this key is missing from</code>
983
- </li>
984
-
985
- <li class="never" data-hits="" data-linenumber="29">
986
-
987
-
988
- <code class="ruby"> # receipts created by the sandbox.</code>
989
- </li>
990
-
991
- <li class="covered" data-hits="1" data-linenumber="30">
992
- <span class="hits">1</span>
993
-
994
- <code class="ruby"> attr_reader :app_item_id</code>
995
- </li>
996
-
997
- <li class="never" data-hits="" data-linenumber="31">
998
-
999
-
1000
- <code class="ruby"></code>
1001
- </li>
1002
-
1003
- <li class="never" data-hits="" data-linenumber="32">
1004
-
1005
-
1006
- <code class="ruby"> # An arbitrary number that uniquely identifies a revision of your application. This key</code>
1007
- </li>
1008
-
1009
- <li class="never" data-hits="" data-linenumber="33">
1010
-
1011
-
1012
- <code class="ruby"> # is missing in receipts created by the sandbox.</code>
1013
- </li>
1014
-
1015
- <li class="covered" data-hits="1" data-linenumber="34">
1016
- <span class="hits">1</span>
1017
-
1018
- <code class="ruby"> attr_reader :version_external_identifier</code>
1019
- </li>
1020
-
1021
- <li class="never" data-hits="" data-linenumber="35">
1022
-
1023
-
1024
- <code class="ruby"></code>
1025
- </li>
1026
-
1027
- <li class="never" data-hits="" data-linenumber="36">
1028
-
1029
-
1030
- <code class="ruby"> # For a transaction that restores a previous transaction, this is the original receipt</code>
1031
- </li>
1032
-
1033
- <li class="covered" data-hits="1" data-linenumber="37">
1034
- <span class="hits">1</span>
1035
-
1036
- <code class="ruby"> attr_accessor :original</code>
1037
- </li>
1038
-
1039
- <li class="never" data-hits="" data-linenumber="38">
1040
-
1041
-
1042
- <code class="ruby"></code>
1043
- </li>
1044
-
1045
- <li class="never" data-hits="" data-linenumber="39">
1046
-
1047
-
1048
- <code class="ruby"> # For auto-renewable subscriptions, returns the date the subscription will expire</code>
1049
- </li>
1050
-
1051
- <li class="covered" data-hits="1" data-linenumber="40">
1052
- <span class="hits">1</span>
1053
-
1054
- <code class="ruby"> attr_reader :expires_at</code>
1055
- </li>
1056
-
1057
- <li class="never" data-hits="" data-linenumber="41">
1058
-
1059
-
1060
- <code class="ruby"></code>
1061
- </li>
1062
-
1063
- <li class="never" data-hits="" data-linenumber="42">
1064
-
1065
-
1066
- <code class="ruby"> # For a transaction that was canceled by Apple customer support, the time and date of the cancellation.</code>
1067
- </li>
1068
-
1069
- <li class="covered" data-hits="1" data-linenumber="43">
1070
- <span class="hits">1</span>
1071
-
1072
- <code class="ruby"> attr_reader :cancellation_at</code>
1073
- </li>
1074
-
1075
- <li class="never" data-hits="" data-linenumber="44">
1076
-
1077
-
1078
- <code class="ruby"></code>
1079
- </li>
1080
-
1081
- <li class="covered" data-hits="1" data-linenumber="45">
1082
- <span class="hits">1</span>
1083
-
1084
- <code class="ruby"> def initialize(attributes = {})</code>
1085
- </li>
1086
-
1087
- <li class="covered" data-hits="24" data-linenumber="46">
1088
- <span class="hits">24</span>
1089
-
1090
- <code class="ruby"> @quantity = Integer(attributes[&#39;quantity&#39;]) if attributes[&#39;quantity&#39;]</code>
1091
- </li>
1092
-
1093
- <li class="covered" data-hits="24" data-linenumber="47">
1094
- <span class="hits">24</span>
1095
-
1096
- <code class="ruby"> @product_id = attributes[&#39;product_id&#39;]</code>
1097
- </li>
1098
-
1099
- <li class="covered" data-hits="24" data-linenumber="48">
1100
- <span class="hits">24</span>
1101
-
1102
- <code class="ruby"> @transaction_id = attributes[&#39;transaction_id&#39;]</code>
1103
- </li>
1104
-
1105
- <li class="covered" data-hits="24" data-linenumber="49">
1106
- <span class="hits">24</span>
1107
-
1108
- <code class="ruby"> @purchased_at = DateTime.parse(attributes[&#39;purchase_date&#39;]) if attributes[&#39;purchase_date&#39;]</code>
1109
- </li>
1110
-
1111
- <li class="covered" data-hits="24" data-linenumber="50">
1112
- <span class="hits">24</span>
1113
-
1114
- <code class="ruby"> @app_item_id = attributes[&#39;app_item_id&#39;]</code>
1115
- </li>
1116
-
1117
- <li class="covered" data-hits="24" data-linenumber="51">
1118
- <span class="hits">24</span>
1119
-
1120
- <code class="ruby"> @version_external_identifier = attributes[&#39;version_external_identifier&#39;]</code>
1121
- </li>
1122
-
1123
- <li class="never" data-hits="" data-linenumber="52">
1124
-
1125
-
1126
- <code class="ruby"></code>
1127
- </li>
1128
-
1129
- <li class="never" data-hits="" data-linenumber="53">
1130
-
1131
-
1132
- <code class="ruby"> # expires_date is in ms since the Epoch, Time.at expects seconds</code>
1133
- </li>
1134
-
1135
- <li class="covered" data-hits="24" data-linenumber="54">
1136
- <span class="hits">24</span>
1137
-
1138
- <code class="ruby"> @expires_at = Time.at(attributes[&#39;expires_date_ms&#39;].to_i / 1000) if attributes[&#39;expires_date_ms&#39;]</code>
1139
- </li>
1140
-
1141
- <li class="never" data-hits="" data-linenumber="55">
1142
-
1143
-
1144
- <code class="ruby"></code>
1145
- </li>
1146
-
1147
- <li class="never" data-hits="" data-linenumber="56">
1148
-
1149
-
1150
- <code class="ruby"> # cancellation_date is in ms since the Epoch, Time.at expects seconds</code>
1151
- </li>
1152
-
1153
- <li class="covered" data-hits="24" data-linenumber="57">
1154
- <span class="hits">24</span>
1155
-
1156
- <code class="ruby"> @cancellation_at = Time.at(attributes[&#39;cancellation_date_ms&#39;].to_i / 1000) if attributes[&#39;cancellation_date_ms&#39;]</code>
1157
- </li>
1158
-
1159
- <li class="never" data-hits="" data-linenumber="58">
1160
-
1161
-
1162
- <code class="ruby"></code>
1163
- </li>
1164
-
1165
- <li class="covered" data-hits="24" data-linenumber="59">
1166
- <span class="hits">24</span>
1167
-
1168
- <code class="ruby"> if attributes[&#39;original_transaction_id&#39;] || attributes[&#39;original_purchase_date&#39;]</code>
1169
- </li>
1170
-
1171
- <li class="covered" data-hits="12" data-linenumber="60">
1172
- <span class="hits">12</span>
1173
-
1174
- <code class="ruby"> original_attributes = {</code>
1175
- </li>
1176
-
1177
- <li class="never" data-hits="" data-linenumber="61">
1178
-
1179
-
1180
- <code class="ruby"> &#39;transaction_id&#39; =&gt; attributes[&#39;original_transaction_id&#39;],</code>
1181
- </li>
1182
-
1183
- <li class="never" data-hits="" data-linenumber="62">
1184
-
1185
-
1186
- <code class="ruby"> &#39;purchase_date&#39; =&gt; attributes[&#39;original_purchase_date&#39;]</code>
1187
- </li>
1188
-
1189
- <li class="never" data-hits="" data-linenumber="63">
1190
-
1191
-
1192
- <code class="ruby"> }</code>
1193
- </li>
1194
-
1195
- <li class="never" data-hits="" data-linenumber="64">
1196
-
1197
-
1198
- <code class="ruby"></code>
1199
- </li>
1200
-
1201
- <li class="covered" data-hits="12" data-linenumber="65">
1202
- <span class="hits">12</span>
1203
-
1204
- <code class="ruby"> self.original = InAppReceipt.new(original_attributes)</code>
1205
- </li>
1206
-
1207
- <li class="never" data-hits="" data-linenumber="66">
1208
-
1209
-
1210
- <code class="ruby"> end</code>
1211
- </li>
1212
-
1213
- <li class="never" data-hits="" data-linenumber="67">
1214
-
1215
-
1216
- <code class="ruby"> end</code>
1217
- </li>
1218
-
1219
- <li class="never" data-hits="" data-linenumber="68">
1220
-
1221
-
1222
- <code class="ruby"></code>
1223
- </li>
1224
-
1225
- <li class="covered" data-hits="1" data-linenumber="69">
1226
- <span class="hits">1</span>
1227
-
1228
- <code class="ruby"> def to_hash</code>
1229
- </li>
1230
-
1231
- <li class="never" data-hits="" data-linenumber="70">
1232
-
1233
-
1234
- <code class="ruby"> {</code>
1235
- </li>
1236
-
1237
- <li class="never" data-hits="" data-linenumber="71">
1238
-
1239
-
1240
- <code class="ruby"> quantity: @quantity,</code>
1241
- </li>
1242
-
1243
- <li class="never" data-hits="" data-linenumber="72">
1244
-
1245
-
1246
- <code class="ruby"> product_id: @product_id,</code>
1247
- </li>
1248
-
1249
- <li class="never" data-hits="" data-linenumber="73">
1250
-
1251
-
1252
- <code class="ruby"> transaction_id: @transaction_id,</code>
1253
- </li>
1254
-
1255
- <li class="covered" data-hits="2" data-linenumber="74">
1256
- <span class="hits">2</span>
1257
-
1258
- <code class="ruby"> purchase_date: (@purchased_at.httpdate rescue nil),</code>
1259
- </li>
1260
-
1261
- <li class="covered" data-hits="2" data-linenumber="75">
1262
- <span class="hits">2</span>
1263
-
1264
- <code class="ruby"> original_transaction_id: (@original.transaction_id rescue nil),</code>
1265
- </li>
1266
-
1267
- <li class="covered" data-hits="2" data-linenumber="76">
1268
- <span class="hits">2</span>
1269
-
1270
- <code class="ruby"> original_purchase_date: (@original.purchased_at.httpdate rescue nil),</code>
1271
- </li>
1272
-
1273
- <li class="never" data-hits="" data-linenumber="77">
1274
-
1275
-
1276
- <code class="ruby"> app_item_id: @app_item_id,</code>
1277
- </li>
1278
-
1279
- <li class="never" data-hits="" data-linenumber="78">
1280
-
1281
-
1282
- <code class="ruby"> version_external_identifier: @version_external_identifier,</code>
1283
- </li>
1284
-
1285
- <li class="covered" data-hits="2" data-linenumber="79">
1286
- <span class="hits">2</span>
1287
-
1288
- <code class="ruby"> expires_at: (@expires_at.httpdate rescue nil),</code>
1289
- </li>
1290
-
1291
- <li class="covered" data-hits="2" data-linenumber="80">
1292
- <span class="hits">2</span>
1293
-
1294
- <code class="ruby"> cancellation_at: (@cancellation_at.httpdate rescue nil)</code>
1295
- </li>
1296
-
1297
- <li class="covered" data-hits="2" data-linenumber="81">
1298
- <span class="hits">2</span>
1299
-
1300
- <code class="ruby"> }</code>
1301
- </li>
1302
-
1303
- <li class="never" data-hits="" data-linenumber="82">
1304
-
1305
-
1306
- <code class="ruby"> end</code>
1307
- </li>
1308
-
1309
- <li class="covered" data-hits="1" data-linenumber="83">
1310
- <span class="hits">1</span>
1311
-
1312
- <code class="ruby"> alias_method :to_h, :to_hash</code>
1313
- </li>
1314
-
1315
- <li class="never" data-hits="" data-linenumber="84">
1316
-
1317
-
1318
- <code class="ruby"></code>
1319
- </li>
1320
-
1321
- <li class="covered" data-hits="1" data-linenumber="85">
1322
- <span class="hits">1</span>
1323
-
1324
- <code class="ruby"> def to_json</code>
1325
- </li>
1326
-
1327
- <li class="missed" data-hits="0" data-linenumber="86">
1328
-
1329
-
1330
- <code class="ruby"> to_hash.to_json</code>
1331
- </li>
1332
-
1333
- <li class="never" data-hits="" data-linenumber="87">
1334
-
1335
-
1336
- <code class="ruby"> end</code>
1337
- </li>
1338
-
1339
- <li class="never" data-hits="" data-linenumber="88">
1340
-
1341
-
1342
- <code class="ruby"> end</code>
1343
- </li>
1344
-
1345
- <li class="never" data-hits="" data-linenumber="89">
1346
-
1347
-
1348
- <code class="ruby">end</code>
1349
- </li>
1350
-
1351
- </ol>
1352
- </pre>
1353
- </div>
1354
-
1355
-
1356
- <div class="source_table" id="17a12c36d26ef47e82b8c4a1684d8e945c9a9e89">
1357
- <div class="header">
1358
- <h3>lib/venice/pending_renewal_info.rb</h3>
1359
- <h4><span class="green">95.65 %</span> covered</h4>
1360
- <div>
1361
- <b>23</b> relevant lines.
1362
- <span class="green"><b>22</b> lines covered</span> and
1363
- <span class="red"><b>1</b> lines missed.</span>
1364
- </div>
1365
- </div>
1366
-
1367
- <pre>
1368
- <ol>
1369
-
1370
- <li class="covered" data-hits="1" data-linenumber="1">
1371
- <span class="hits">1</span>
1372
-
1373
- <code class="ruby">module Venice</code>
1374
- </li>
1375
-
1376
- <li class="covered" data-hits="1" data-linenumber="2">
1377
- <span class="hits">1</span>
1378
-
1379
- <code class="ruby"> class PendingRenewalInfo</code>
1380
- </li>
1381
-
1382
- <li class="never" data-hits="" data-linenumber="3">
1383
-
1384
-
1385
- <code class="ruby"> # For an expired subscription, the reason for the subscription expiration.</code>
1386
- </li>
1387
-
1388
- <li class="never" data-hits="" data-linenumber="4">
1389
-
1390
-
1391
- <code class="ruby"> # This key is only present for a receipt containing an expired auto-renewable subscription.</code>
1392
- </li>
1393
-
1394
- <li class="covered" data-hits="1" data-linenumber="5">
1395
- <span class="hits">1</span>
1396
-
1397
- <code class="ruby"> attr_reader :expiration_intent</code>
1398
- </li>
1399
-
1400
- <li class="never" data-hits="" data-linenumber="6">
1401
-
1402
-
1403
- <code class="ruby"></code>
1404
- </li>
1405
-
1406
- <li class="never" data-hits="" data-linenumber="7">
1407
-
1408
-
1409
- <code class="ruby"> # The current renewal status for the auto-renewable subscription.</code>
1410
- </li>
1411
-
1412
- <li class="never" data-hits="" data-linenumber="8">
1413
-
1414
-
1415
- <code class="ruby"> # This key is only present for auto-renewable subscription receipts, for active or expired subscriptions</code>
1416
- </li>
1417
-
1418
- <li class="covered" data-hits="1" data-linenumber="9">
1419
- <span class="hits">1</span>
1420
-
1421
- <code class="ruby"> attr_reader :auto_renew_status</code>
1422
- </li>
1423
-
1424
- <li class="never" data-hits="" data-linenumber="10">
1425
-
1426
-
1427
- <code class="ruby"></code>
1428
- </li>
1429
-
1430
- <li class="never" data-hits="" data-linenumber="11">
1431
-
1432
-
1433
- <code class="ruby"> # The current renewal preference for the auto-renewable subscription.</code>
1434
- </li>
1435
-
1436
- <li class="never" data-hits="" data-linenumber="12">
1437
-
1438
-
1439
- <code class="ruby"> # The value for this key corresponds to the productIdentifier property of the product that the customer’s subscription renews.</code>
1440
- </li>
1441
-
1442
- <li class="covered" data-hits="1" data-linenumber="13">
1443
- <span class="hits">1</span>
1444
-
1445
- <code class="ruby"> attr_reader :auto_renew_product_id</code>
1446
- </li>
1447
-
1448
- <li class="never" data-hits="" data-linenumber="14">
1449
-
1450
-
1451
- <code class="ruby"></code>
1452
- </li>
1453
-
1454
- <li class="never" data-hits="" data-linenumber="15">
1455
-
1456
-
1457
- <code class="ruby"> # For an expired subscription, whether or not Apple is still attempting to automatically renew the subscription.</code>
1458
- </li>
1459
-
1460
- <li class="never" data-hits="" data-linenumber="16">
1461
-
1462
-
1463
- <code class="ruby"> # If the customer’s subscription failed to renew because the App Store was unable to complete the transaction, this value will reflect whether or not the App Store is still trying to renew the subscription.</code>
1464
- </li>
1465
-
1466
- <li class="covered" data-hits="1" data-linenumber="17">
1467
- <span class="hits">1</span>
1468
-
1469
- <code class="ruby"> attr_reader :is_in_billing_retry_period</code>
1470
- </li>
1471
-
1472
- <li class="never" data-hits="" data-linenumber="18">
1473
-
1474
-
1475
- <code class="ruby"></code>
1476
- </li>
1477
-
1478
- <li class="never" data-hits="" data-linenumber="19">
1479
-
1480
-
1481
- <code class="ruby"> # The product identifier of the item that was purchased.</code>
1482
- </li>
1483
-
1484
- <li class="never" data-hits="" data-linenumber="20">
1485
-
1486
-
1487
- <code class="ruby"> # This value corresponds to the productIdentifier property of the SKPayment object stored in the transaction’s payment property.</code>
1488
- </li>
1489
-
1490
- <li class="covered" data-hits="1" data-linenumber="21">
1491
- <span class="hits">1</span>
1492
-
1493
- <code class="ruby"> attr_reader :product_id</code>
1494
- </li>
1495
-
1496
- <li class="never" data-hits="" data-linenumber="22">
1497
-
1498
-
1499
- <code class="ruby"></code>
1500
- </li>
1501
-
1502
- <li class="never" data-hits="" data-linenumber="23">
1503
-
1504
-
1505
- <code class="ruby"> # The current price consent status for a subscription price increase</code>
1506
- </li>
1507
-
1508
- <li class="never" data-hits="" data-linenumber="24">
1509
-
1510
-
1511
- <code class="ruby"> # This key is only present for auto-renewable subscription receipts if the subscription price was increased without keeping the existing price for active subscribers</code>
1512
- </li>
1513
-
1514
- <li class="covered" data-hits="1" data-linenumber="25">
1515
- <span class="hits">1</span>
1516
-
1517
- <code class="ruby"> attr_reader :price_consent_status</code>
1518
- </li>
1519
-
1520
- <li class="never" data-hits="" data-linenumber="26">
1521
-
1522
-
1523
- <code class="ruby"></code>
1524
- </li>
1525
-
1526
- <li class="never" data-hits="" data-linenumber="27">
1527
-
1528
-
1529
- <code class="ruby"> # For a transaction that was cancelled, the reason for cancellation.</code>
1530
- </li>
1531
-
1532
- <li class="never" data-hits="" data-linenumber="28">
1533
-
1534
-
1535
- <code class="ruby"> # Use this value along with the cancellation date to identify possible issues in your app that may lead customers to contact Apple customer support.</code>
1536
- </li>
1537
-
1538
- <li class="covered" data-hits="1" data-linenumber="29">
1539
- <span class="hits">1</span>
1540
-
1541
- <code class="ruby"> attr_reader :cancellation_reason</code>
1542
- </li>
1543
-
1544
- <li class="never" data-hits="" data-linenumber="30">
1545
-
1546
-
1547
- <code class="ruby"></code>
1548
- </li>
1549
-
1550
- <li class="covered" data-hits="1" data-linenumber="31">
1551
- <span class="hits">1</span>
1552
-
1553
- <code class="ruby"> def initialize(attributes)</code>
1554
- </li>
1555
-
1556
- <li class="covered" data-hits="7" data-linenumber="32">
1557
- <span class="hits">7</span>
1558
-
1559
- <code class="ruby"> @expiration_intent = Integer(attributes[&#39;expiration_intent&#39;]) if attributes[&#39;expiration_intent&#39;]</code>
1560
- </li>
1561
-
1562
- <li class="covered" data-hits="7" data-linenumber="33">
1563
- <span class="hits">7</span>
1564
-
1565
- <code class="ruby"> @auto_renew_status = Integer(attributes[&#39;auto_renew_status&#39;]) if attributes[&#39;auto_renew_status&#39;]</code>
1566
- </li>
1567
-
1568
- <li class="covered" data-hits="7" data-linenumber="34">
1569
- <span class="hits">7</span>
1570
-
1571
- <code class="ruby"> @auto_renew_product_id = attributes[&#39;auto_renew_product_id&#39;]</code>
1572
- </li>
1573
-
1574
- <li class="never" data-hits="" data-linenumber="35">
1575
-
1576
-
1577
- <code class="ruby"></code>
1578
- </li>
1579
-
1580
- <li class="covered" data-hits="7" data-linenumber="36">
1581
- <span class="hits">7</span>
1582
-
1583
- <code class="ruby"> if attributes[&#39;is_in_billing_retry_period&#39;]</code>
1584
- </li>
1585
-
1586
- <li class="covered" data-hits="7" data-linenumber="37">
1587
- <span class="hits">7</span>
1588
-
1589
- <code class="ruby"> @is_in_billing_retry_period = (attributes[is_in_billing_retry_period] == &#39;1&#39;)</code>
1590
- </li>
1591
-
1592
- <li class="never" data-hits="" data-linenumber="38">
1593
-
1594
-
1595
- <code class="ruby"> end</code>
1596
- </li>
1597
-
1598
- <li class="never" data-hits="" data-linenumber="39">
1599
-
1600
-
1601
- <code class="ruby"></code>
1602
- </li>
1603
-
1604
- <li class="covered" data-hits="7" data-linenumber="40">
1605
- <span class="hits">7</span>
1606
-
1607
- <code class="ruby"> @product_id = attributes[&#39;product_id&#39;]</code>
1608
- </li>
1609
-
1610
- <li class="never" data-hits="" data-linenumber="41">
1611
-
1612
-
1613
- <code class="ruby"></code>
1614
- </li>
1615
-
1616
- <li class="covered" data-hits="7" data-linenumber="42">
1617
- <span class="hits">7</span>
1618
-
1619
- <code class="ruby"> @price_consent_status = Integer(attributes[&#39;price_consent_status&#39;]) if attributes[&#39;price_consent_status&#39;]</code>
1620
- </li>
1621
-
1622
- <li class="covered" data-hits="7" data-linenumber="43">
1623
- <span class="hits">7</span>
1624
-
1625
- <code class="ruby"> @cancellation_reason = Integer(attributes[&#39;cancellation_reason&#39;]) if attributes[&#39;cancellation_reason&#39;]</code>
1626
- </li>
1627
-
1628
- <li class="never" data-hits="" data-linenumber="44">
1629
-
1630
-
1631
- <code class="ruby"> end</code>
1632
- </li>
1633
-
1634
- <li class="never" data-hits="" data-linenumber="45">
1635
-
1636
-
1637
- <code class="ruby"></code>
1638
- </li>
1639
-
1640
- <li class="covered" data-hits="1" data-linenumber="46">
1641
- <span class="hits">1</span>
1642
-
1643
- <code class="ruby"> def to_hash</code>
1644
- </li>
1645
-
1646
- <li class="never" data-hits="" data-linenumber="47">
1647
-
1648
-
1649
- <code class="ruby"> {</code>
1650
- </li>
1651
-
1652
- <li class="never" data-hits="" data-linenumber="48">
1653
-
1654
-
1655
- <code class="ruby"> expiration_intent: @expiration_intent,</code>
1656
- </li>
1657
-
1658
- <li class="never" data-hits="" data-linenumber="49">
1659
-
1660
-
1661
- <code class="ruby"> auto_renew_status: @auto_renew_status,</code>
1662
- </li>
1663
-
1664
- <li class="never" data-hits="" data-linenumber="50">
1665
-
1666
-
1667
- <code class="ruby"> auto_renew_product_id: @auto_renew_product_id,</code>
1668
- </li>
1669
-
1670
- <li class="never" data-hits="" data-linenumber="51">
1671
-
1672
-
1673
- <code class="ruby"> is_in_billing_retry_period: @is_in_billing_retry_period,</code>
1674
- </li>
1675
-
1676
- <li class="never" data-hits="" data-linenumber="52">
1677
-
1678
-
1679
- <code class="ruby"> product_id: @product_id,</code>
1680
- </li>
1681
-
1682
- <li class="never" data-hits="" data-linenumber="53">
1683
-
1684
-
1685
- <code class="ruby"> price_consent_status: @price_consent_status,</code>
1686
- </li>
1687
-
1688
- <li class="never" data-hits="" data-linenumber="54">
1689
-
1690
-
1691
- <code class="ruby"> cancellation_reason: @cancellation_reason</code>
1692
- </li>
1693
-
1694
- <li class="covered" data-hits="2" data-linenumber="55">
1695
- <span class="hits">2</span>
1696
-
1697
- <code class="ruby"> }</code>
1698
- </li>
1699
-
1700
- <li class="never" data-hits="" data-linenumber="56">
1701
-
1702
-
1703
- <code class="ruby"> end</code>
1704
- </li>
1705
-
1706
- <li class="never" data-hits="" data-linenumber="57">
1707
-
1708
-
1709
- <code class="ruby"></code>
1710
- </li>
1711
-
1712
- <li class="covered" data-hits="1" data-linenumber="58">
1713
- <span class="hits">1</span>
1714
-
1715
- <code class="ruby"> alias_method :to_h, :to_hash</code>
1716
- </li>
1717
-
1718
- <li class="never" data-hits="" data-linenumber="59">
1719
-
1720
-
1721
- <code class="ruby"></code>
1722
- </li>
1723
-
1724
- <li class="covered" data-hits="1" data-linenumber="60">
1725
- <span class="hits">1</span>
1726
-
1727
- <code class="ruby"> def to_json</code>
1728
- </li>
1729
-
1730
- <li class="missed" data-hits="0" data-linenumber="61">
1731
-
1732
-
1733
- <code class="ruby"> to_hash.to_json</code>
1734
- </li>
1735
-
1736
- <li class="never" data-hits="" data-linenumber="62">
1737
-
1738
-
1739
- <code class="ruby"> end</code>
1740
- </li>
1741
-
1742
- <li class="never" data-hits="" data-linenumber="63">
1743
-
1744
-
1745
- <code class="ruby"> end</code>
1746
- </li>
1747
-
1748
- <li class="never" data-hits="" data-linenumber="64">
1749
-
1750
-
1751
- <code class="ruby">end</code>
1752
- </li>
1753
-
1754
- </ol>
1755
- </pre>
1756
- </div>
1757
-
1758
-
1759
- <div class="source_table" id="10dfdb14e321a7bb364075307e5a80a2a62317af">
1760
- <div class="header">
1761
- <h3>lib/venice/receipt.rb</h3>
1762
- <h4><span class="red">74.7 %</span> covered</h4>
1763
- <div>
1764
- <b>83</b> relevant lines.
1765
- <span class="green"><b>62</b> lines covered</span> and
1766
- <span class="red"><b>21</b> lines missed.</span>
1767
- </div>
1768
- </div>
1769
-
1770
- <pre>
1771
- <ol>
1772
-
1773
- <li class="covered" data-hits="1" data-linenumber="1">
1774
- <span class="hits">1</span>
1775
-
1776
- <code class="ruby">require &#39;time&#39;</code>
1777
- </li>
1778
-
1779
- <li class="never" data-hits="" data-linenumber="2">
1780
-
1781
-
1782
- <code class="ruby"></code>
1783
- </li>
1784
-
1785
- <li class="covered" data-hits="1" data-linenumber="3">
1786
- <span class="hits">1</span>
1787
-
1788
- <code class="ruby">module Venice</code>
1789
- </li>
1790
-
1791
- <li class="covered" data-hits="1" data-linenumber="4">
1792
- <span class="hits">1</span>
1793
-
1794
- <code class="ruby"> class Receipt</code>
1795
- </li>
1796
-
1797
- <li class="never" data-hits="" data-linenumber="5">
1798
-
1799
-
1800
- <code class="ruby"> # For detailed explanations on these keys/values, see</code>
1801
- </li>
1802
-
1803
- <li class="never" data-hits="" data-linenumber="6">
1804
-
1805
-
1806
- <code class="ruby"> # https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html#//apple_ref/doc/uid/TP40010573-CH106-SW1</code>
1807
- </li>
1808
-
1809
- <li class="never" data-hits="" data-linenumber="7">
1810
-
1811
-
1812
- <code class="ruby"></code>
1813
- </li>
1814
-
1815
- <li class="never" data-hits="" data-linenumber="8">
1816
-
1817
-
1818
- <code class="ruby"> # The app’s bundle identifier.</code>
1819
- </li>
1820
-
1821
- <li class="covered" data-hits="1" data-linenumber="9">
1822
- <span class="hits">1</span>
1823
-
1824
- <code class="ruby"> attr_reader :bundle_id</code>
1825
- </li>
1826
-
1827
- <li class="never" data-hits="" data-linenumber="10">
1828
-
1829
-
1830
- <code class="ruby"></code>
1831
- </li>
1832
-
1833
- <li class="never" data-hits="" data-linenumber="11">
1834
-
1835
-
1836
- <code class="ruby"> # The app’s version number.</code>
1837
- </li>
1838
-
1839
- <li class="covered" data-hits="1" data-linenumber="12">
1840
- <span class="hits">1</span>
1841
-
1842
- <code class="ruby"> attr_reader :application_version</code>
1843
- </li>
1844
-
1845
- <li class="never" data-hits="" data-linenumber="13">
1846
-
1847
-
1848
- <code class="ruby"></code>
1849
- </li>
1850
-
1851
- <li class="never" data-hits="" data-linenumber="14">
1852
-
1853
-
1854
- <code class="ruby"> # The receipt for an in-app purchase.</code>
1855
- </li>
1856
-
1857
- <li class="covered" data-hits="1" data-linenumber="15">
1858
- <span class="hits">1</span>
1859
-
1860
- <code class="ruby"> attr_reader :in_app</code>
1861
- </li>
1862
-
1863
- <li class="never" data-hits="" data-linenumber="16">
1864
-
1865
-
1866
- <code class="ruby"></code>
1867
- </li>
1868
-
1869
- <li class="never" data-hits="" data-linenumber="17">
1870
-
1871
-
1872
- <code class="ruby"> # The version of the app that was originally purchased.</code>
1873
- </li>
1874
-
1875
- <li class="covered" data-hits="1" data-linenumber="18">
1876
- <span class="hits">1</span>
1877
-
1878
- <code class="ruby"> attr_reader :original_application_version</code>
1879
- </li>
1880
-
1881
- <li class="never" data-hits="" data-linenumber="19">
1882
-
1883
-
1884
- <code class="ruby"></code>
1885
- </li>
1886
-
1887
- <li class="never" data-hits="" data-linenumber="20">
1888
-
1889
-
1890
- <code class="ruby"> # The original purchase date</code>
1891
- </li>
1892
-
1893
- <li class="covered" data-hits="1" data-linenumber="21">
1894
- <span class="hits">1</span>
1895
-
1896
- <code class="ruby"> attr_reader :original_purchase_date</code>
1897
- </li>
1898
-
1899
- <li class="never" data-hits="" data-linenumber="22">
1900
-
1901
-
1902
- <code class="ruby"></code>
1903
- </li>
1904
-
1905
- <li class="never" data-hits="" data-linenumber="23">
1906
-
1907
-
1908
- <code class="ruby"> # The date that the app receipt expires.</code>
1909
- </li>
1910
-
1911
- <li class="covered" data-hits="1" data-linenumber="24">
1912
- <span class="hits">1</span>
1913
-
1914
- <code class="ruby"> attr_reader :expires_at</code>
1915
- </li>
1916
-
1917
- <li class="never" data-hits="" data-linenumber="25">
1918
-
1919
-
1920
- <code class="ruby"></code>
1921
- </li>
1922
-
1923
- <li class="never" data-hits="" data-linenumber="26">
1924
-
1925
-
1926
- <code class="ruby"> # Non-Documented receipt keys/values</code>
1927
- </li>
1928
-
1929
- <li class="covered" data-hits="1" data-linenumber="27">
1930
- <span class="hits">1</span>
1931
-
1932
- <code class="ruby"> attr_reader :receipt_type</code>
1933
- </li>
1934
-
1935
- <li class="covered" data-hits="1" data-linenumber="28">
1936
- <span class="hits">1</span>
1937
-
1938
- <code class="ruby"> attr_reader :adam_id</code>
1939
- </li>
1940
-
1941
- <li class="covered" data-hits="1" data-linenumber="29">
1942
- <span class="hits">1</span>
1943
-
1944
- <code class="ruby"> attr_reader :download_id</code>
1945
- </li>
1946
-
1947
- <li class="covered" data-hits="1" data-linenumber="30">
1948
- <span class="hits">1</span>
1949
-
1950
- <code class="ruby"> attr_reader :requested_at</code>
1951
- </li>
1952
-
1953
- <li class="never" data-hits="" data-linenumber="31">
1954
-
1955
-
1956
- <code class="ruby"></code>
1957
- </li>
1958
-
1959
- <li class="never" data-hits="" data-linenumber="32">
1960
-
1961
-
1962
- <code class="ruby"> # Original json response from AppStore</code>
1963
- </li>
1964
-
1965
- <li class="covered" data-hits="1" data-linenumber="33">
1966
- <span class="hits">1</span>
1967
-
1968
- <code class="ruby"> attr_reader :original_json_response</code>
1969
- </li>
1970
-
1971
- <li class="never" data-hits="" data-linenumber="34">
1972
-
1973
-
1974
- <code class="ruby"></code>
1975
- </li>
1976
-
1977
- <li class="covered" data-hits="1" data-linenumber="35">
1978
- <span class="hits">1</span>
1979
-
1980
- <code class="ruby"> attr_accessor :latest_receipt_info</code>
1981
- </li>
1982
-
1983
- <li class="never" data-hits="" data-linenumber="36">
1984
-
1985
-
1986
- <code class="ruby"></code>
1987
- </li>
1988
-
1989
- <li class="never" data-hits="" data-linenumber="37">
1990
-
1991
-
1992
- <code class="ruby"> # Information about the status of the customer&#39;s auto-renewable subscriptions</code>
1993
- </li>
1994
-
1995
- <li class="covered" data-hits="1" data-linenumber="38">
1996
- <span class="hits">1</span>
1997
-
1998
- <code class="ruby"> attr_reader :pending_renewal_info</code>
1999
- </li>
2000
-
2001
- <li class="never" data-hits="" data-linenumber="39">
2002
-
2003
-
2004
- <code class="ruby"></code>
2005
- </li>
2006
-
2007
- <li class="covered" data-hits="1" data-linenumber="40">
2008
- <span class="hits">1</span>
2009
-
2010
- <code class="ruby"> def initialize(attributes = {})</code>
2011
- </li>
2012
-
2013
- <li class="covered" data-hits="8" data-linenumber="41">
2014
- <span class="hits">8</span>
2015
-
2016
- <code class="ruby"> @original_json_response = attributes[&#39;original_json_response&#39;]</code>
2017
- </li>
2018
-
2019
- <li class="never" data-hits="" data-linenumber="42">
2020
-
2021
-
2022
- <code class="ruby"></code>
2023
- </li>
2024
-
2025
- <li class="covered" data-hits="8" data-linenumber="43">
2026
- <span class="hits">8</span>
2027
-
2028
- <code class="ruby"> @bundle_id = attributes[&#39;bundle_id&#39;]</code>
2029
- </li>
2030
-
2031
- <li class="covered" data-hits="8" data-linenumber="44">
2032
- <span class="hits">8</span>
2033
-
2034
- <code class="ruby"> @application_version = attributes[&#39;application_version&#39;]</code>
2035
- </li>
2036
-
2037
- <li class="covered" data-hits="8" data-linenumber="45">
2038
- <span class="hits">8</span>
2039
-
2040
- <code class="ruby"> @original_application_version = attributes[&#39;original_application_version&#39;]</code>
2041
- </li>
2042
-
2043
- <li class="covered" data-hits="8" data-linenumber="46">
2044
- <span class="hits">8</span>
2045
-
2046
- <code class="ruby"> if attributes[&#39;original_purchase_date&#39;]</code>
2047
- </li>
2048
-
2049
- <li class="covered" data-hits="6" data-linenumber="47">
2050
- <span class="hits">6</span>
2051
-
2052
- <code class="ruby"> @original_purchase_date = DateTime.parse(attributes[&#39;original_purchase_date&#39;])</code>
2053
- </li>
2054
-
2055
- <li class="never" data-hits="" data-linenumber="48">
2056
-
2057
-
2058
- <code class="ruby"> end</code>
2059
- </li>
2060
-
2061
- <li class="covered" data-hits="8" data-linenumber="49">
2062
- <span class="hits">8</span>
2063
-
2064
- <code class="ruby"> if attributes[&#39;expiration_date&#39;]</code>
2065
- </li>
2066
-
2067
- <li class="covered" data-hits="6" data-linenumber="50">
2068
- <span class="hits">6</span>
2069
-
2070
- <code class="ruby"> @expires_at = Time.at(attributes[&#39;expiration_date&#39;].to_i / 1000).to_datetime</code>
2071
- </li>
2072
-
2073
- <li class="never" data-hits="" data-linenumber="51">
2074
-
2075
-
2076
- <code class="ruby"> end</code>
2077
- </li>
2078
-
2079
- <li class="never" data-hits="" data-linenumber="52">
2080
-
2081
-
2082
- <code class="ruby"></code>
2083
- </li>
2084
-
2085
- <li class="covered" data-hits="8" data-linenumber="53">
2086
- <span class="hits">8</span>
2087
-
2088
- <code class="ruby"> @receipt_type = attributes[&#39;receipt_type&#39;]</code>
2089
- </li>
2090
-
2091
- <li class="covered" data-hits="8" data-linenumber="54">
2092
- <span class="hits">8</span>
2093
-
2094
- <code class="ruby"> @adam_id = attributes[&#39;adam_id&#39;]</code>
2095
- </li>
2096
-
2097
- <li class="covered" data-hits="8" data-linenumber="55">
2098
- <span class="hits">8</span>
2099
-
2100
- <code class="ruby"> @download_id = attributes[&#39;download_id&#39;]</code>
2101
- </li>
2102
-
2103
- <li class="covered" data-hits="8" data-linenumber="56">
2104
- <span class="hits">8</span>
2105
-
2106
- <code class="ruby"> @requested_at = DateTime.parse(attributes[&#39;request_date&#39;]) if attributes[&#39;request_date&#39;]</code>
2107
- </li>
2108
-
2109
- <li class="never" data-hits="" data-linenumber="57">
2110
-
2111
-
2112
- <code class="ruby"></code>
2113
- </li>
2114
-
2115
- <li class="covered" data-hits="8" data-linenumber="58">
2116
- <span class="hits">8</span>
2117
-
2118
- <code class="ruby"> @in_app = []</code>
2119
- </li>
2120
-
2121
- <li class="covered" data-hits="8" data-linenumber="59">
2122
- <span class="hits">8</span>
2123
-
2124
- <code class="ruby"> if attributes[&#39;in_app&#39;]</code>
2125
- </li>
2126
-
2127
- <li class="covered" data-hits="6" data-linenumber="60">
2128
- <span class="hits">6</span>
2129
-
2130
- <code class="ruby"> attributes[&#39;in_app&#39;].each do |in_app_purchase_attributes|</code>
2131
- </li>
2132
-
2133
- <li class="covered" data-hits="6" data-linenumber="61">
2134
- <span class="hits">6</span>
2135
-
2136
- <code class="ruby"> @in_app &lt;&lt; InAppReceipt.new(in_app_purchase_attributes)</code>
2137
- </li>
2138
-
2139
- <li class="never" data-hits="" data-linenumber="62">
2140
-
2141
-
2142
- <code class="ruby"> end</code>
2143
- </li>
2144
-
2145
- <li class="never" data-hits="" data-linenumber="63">
2146
-
2147
-
2148
- <code class="ruby"> end</code>
2149
- </li>
2150
-
2151
- <li class="never" data-hits="" data-linenumber="64">
2152
-
2153
-
2154
- <code class="ruby"></code>
2155
- </li>
2156
-
2157
- <li class="covered" data-hits="8" data-linenumber="65">
2158
- <span class="hits">8</span>
2159
-
2160
- <code class="ruby"> @pending_renewal_info = []</code>
2161
- </li>
2162
-
2163
- <li class="covered" data-hits="8" data-linenumber="66">
2164
- <span class="hits">8</span>
2165
-
2166
- <code class="ruby"> if original_json_response &amp;&amp; original_json_response[&#39;pending_renewal_info&#39;]</code>
2167
- </li>
2168
-
2169
- <li class="covered" data-hits="5" data-linenumber="67">
2170
- <span class="hits">5</span>
2171
-
2172
- <code class="ruby"> original_json_response[&#39;pending_renewal_info&#39;].each do |pending_renewal_attributes|</code>
2173
- </li>
2174
-
2175
- <li class="covered" data-hits="5" data-linenumber="68">
2176
- <span class="hits">5</span>
2177
-
2178
- <code class="ruby"> @pending_renewal_info &lt;&lt; PendingRenewalInfo.new(pending_renewal_attributes)</code>
2179
- </li>
2180
-
2181
- <li class="never" data-hits="" data-linenumber="69">
2182
-
2183
-
2184
- <code class="ruby"> end</code>
2185
- </li>
2186
-
2187
- <li class="never" data-hits="" data-linenumber="70">
2188
-
2189
-
2190
- <code class="ruby"> end</code>
2191
- </li>
2192
-
2193
- <li class="never" data-hits="" data-linenumber="71">
2194
-
2195
-
2196
- <code class="ruby"> end</code>
2197
- </li>
2198
-
2199
- <li class="never" data-hits="" data-linenumber="72">
2200
-
2201
-
2202
- <code class="ruby"></code>
2203
- </li>
2204
-
2205
- <li class="covered" data-hits="1" data-linenumber="73">
2206
- <span class="hits">1</span>
2207
-
2208
- <code class="ruby"> def to_hash</code>
2209
- </li>
2210
-
2211
- <li class="never" data-hits="" data-linenumber="74">
2212
-
2213
-
2214
- <code class="ruby"> {</code>
2215
- </li>
2216
-
2217
- <li class="never" data-hits="" data-linenumber="75">
2218
-
2219
-
2220
- <code class="ruby"> bundle_id: @bundle_id,</code>
2221
- </li>
2222
-
2223
- <li class="never" data-hits="" data-linenumber="76">
2224
-
2225
-
2226
- <code class="ruby"> application_version: @application_version,</code>
2227
- </li>
2228
-
2229
- <li class="never" data-hits="" data-linenumber="77">
2230
-
2231
-
2232
- <code class="ruby"> original_application_version: @original_application_version,</code>
2233
- </li>
2234
-
2235
- <li class="covered" data-hits="1" data-linenumber="78">
2236
- <span class="hits">1</span>
2237
-
2238
- <code class="ruby"> original_purchase_date: (@original_purchase_date.httpdate rescue nil),</code>
2239
- </li>
2240
-
2241
- <li class="covered" data-hits="1" data-linenumber="79">
2242
- <span class="hits">1</span>
2243
-
2244
- <code class="ruby"> expires_at: (@expires_at.httpdate rescue nil),</code>
2245
- </li>
2246
-
2247
- <li class="never" data-hits="" data-linenumber="80">
2248
-
2249
-
2250
- <code class="ruby"> receipt_type: @receipt_type,</code>
2251
- </li>
2252
-
2253
- <li class="never" data-hits="" data-linenumber="81">
2254
-
2255
-
2256
- <code class="ruby"> adam_id: @adam_id,</code>
2257
- </li>
2258
-
2259
- <li class="never" data-hits="" data-linenumber="82">
2260
-
2261
-
2262
- <code class="ruby"> download_id: @download_id,</code>
2263
- </li>
2264
-
2265
- <li class="covered" data-hits="1" data-linenumber="83">
2266
- <span class="hits">1</span>
2267
-
2268
- <code class="ruby"> requested_at: (@requested_at.httpdate rescue nil),</code>
2269
- </li>
2270
-
2271
- <li class="never" data-hits="" data-linenumber="84">
2272
-
2273
-
2274
- <code class="ruby"> in_app: @in_app.map(&amp;:to_h),</code>
2275
- </li>
2276
-
2277
- <li class="never" data-hits="" data-linenumber="85">
2278
-
2279
-
2280
- <code class="ruby"> pending_renewal_info: @pending_renewal_info.map(&amp;:to_h),</code>
2281
- </li>
2282
-
2283
- <li class="never" data-hits="" data-linenumber="86">
2284
-
2285
-
2286
- <code class="ruby"> latest_receipt_info: @latest_receipt_info</code>
2287
- </li>
2288
-
2289
- <li class="covered" data-hits="1" data-linenumber="87">
2290
- <span class="hits">1</span>
2291
-
2292
- <code class="ruby"> }</code>
2293
- </li>
2294
-
2295
- <li class="never" data-hits="" data-linenumber="88">
2296
-
2297
-
2298
- <code class="ruby"> end</code>
2299
- </li>
2300
-
2301
- <li class="covered" data-hits="1" data-linenumber="89">
2302
- <span class="hits">1</span>
2303
-
2304
- <code class="ruby"> alias_method :to_h, :to_hash</code>
2305
- </li>
2306
-
2307
- <li class="never" data-hits="" data-linenumber="90">
2308
-
2309
-
2310
- <code class="ruby"></code>
2311
- </li>
2312
-
2313
- <li class="covered" data-hits="1" data-linenumber="91">
2314
- <span class="hits">1</span>
2315
-
2316
- <code class="ruby"> def to_json</code>
2317
- </li>
2318
-
2319
- <li class="missed" data-hits="0" data-linenumber="92">
2320
-
2321
-
2322
- <code class="ruby"> to_hash.to_json</code>
2323
- </li>
2324
-
2325
- <li class="never" data-hits="" data-linenumber="93">
2326
-
2327
-
2328
- <code class="ruby"> end</code>
2329
- </li>
2330
-
2331
- <li class="never" data-hits="" data-linenumber="94">
2332
-
2333
-
2334
- <code class="ruby"></code>
2335
- </li>
2336
-
2337
- <li class="covered" data-hits="1" data-linenumber="95">
2338
- <span class="hits">1</span>
2339
-
2340
- <code class="ruby"> class &lt;&lt; self</code>
2341
- </li>
2342
-
2343
- <li class="covered" data-hits="1" data-linenumber="96">
2344
- <span class="hits">1</span>
2345
-
2346
- <code class="ruby"> def verify(data, options = {})</code>
2347
- </li>
2348
-
2349
- <li class="covered" data-hits="1" data-linenumber="97">
2350
- <span class="hits">1</span>
2351
-
2352
- <code class="ruby"> verify!(data, options)</code>
2353
- </li>
2354
-
2355
- <li class="never" data-hits="" data-linenumber="98">
2356
-
2357
-
2358
- <code class="ruby"> rescue VerificationError, Client::TimeoutError</code>
2359
- </li>
2360
-
2361
- <li class="missed" data-hits="0" data-linenumber="99">
2362
-
2363
-
2364
- <code class="ruby"> false</code>
2365
- </li>
2366
-
2367
- <li class="never" data-hits="" data-linenumber="100">
2368
-
2369
-
2370
- <code class="ruby"> end</code>
2371
- </li>
2372
-
2373
- <li class="never" data-hits="" data-linenumber="101">
2374
-
2375
-
2376
- <code class="ruby"></code>
2377
- </li>
2378
-
2379
- <li class="covered" data-hits="1" data-linenumber="102">
2380
- <span class="hits">1</span>
2381
-
2382
- <code class="ruby"> def verify!(data, options = {})</code>
2383
- </li>
2384
-
2385
- <li class="covered" data-hits="1" data-linenumber="103">
2386
- <span class="hits">1</span>
2387
-
2388
- <code class="ruby"> client = Client.production</code>
2389
- </li>
2390
-
2391
- <li class="never" data-hits="" data-linenumber="104">
2392
-
2393
-
2394
- <code class="ruby"></code>
2395
- </li>
2396
-
2397
- <li class="covered" data-hits="1" data-linenumber="105">
2398
- <span class="hits">1</span>
2399
-
2400
- <code class="ruby"> begin</code>
2401
- </li>
2402
-
2403
- <li class="covered" data-hits="1" data-linenumber="106">
2404
- <span class="hits">1</span>
2405
-
2406
- <code class="ruby"> client.verify!(data, options)</code>
2407
- </li>
2408
-
2409
- <li class="missed" data-hits="0" data-linenumber="107">
2410
-
2411
-
2412
- <code class="ruby"> rescue VerificationError =&gt; error</code>
2413
- </li>
2414
-
2415
- <li class="missed" data-hits="0" data-linenumber="108">
2416
-
2417
-
2418
- <code class="ruby"> case error.code</code>
2419
- </li>
2420
-
2421
- <li class="never" data-hits="" data-linenumber="109">
2422
-
2423
-
2424
- <code class="ruby"> when 21007</code>
2425
- </li>
2426
-
2427
- <li class="missed" data-hits="0" data-linenumber="110">
2428
-
2429
-
2430
- <code class="ruby"> client = Client.development</code>
2431
- </li>
2432
-
2433
- <li class="missed" data-hits="0" data-linenumber="111">
2434
-
2435
-
2436
- <code class="ruby"> retry</code>
2437
- </li>
2438
-
2439
- <li class="never" data-hits="" data-linenumber="112">
2440
-
2441
-
2442
- <code class="ruby"> when 21008</code>
2443
- </li>
2444
-
2445
- <li class="missed" data-hits="0" data-linenumber="113">
2446
-
2447
-
2448
- <code class="ruby"> client = Client.production</code>
2449
- </li>
2450
-
2451
- <li class="missed" data-hits="0" data-linenumber="114">
2452
-
2453
-
2454
- <code class="ruby"> retry</code>
2455
- </li>
2456
-
2457
- <li class="never" data-hits="" data-linenumber="115">
2458
-
2459
-
2460
- <code class="ruby"> else</code>
2461
- </li>
2462
-
2463
- <li class="missed" data-hits="0" data-linenumber="116">
2464
-
2465
-
2466
- <code class="ruby"> raise error</code>
2467
- </li>
2468
-
2469
- <li class="never" data-hits="" data-linenumber="117">
2470
-
2471
-
2472
- <code class="ruby"> end</code>
2473
- </li>
2474
-
2475
- <li class="never" data-hits="" data-linenumber="118">
2476
-
2477
-
2478
- <code class="ruby"> end</code>
2479
- </li>
2480
-
2481
- <li class="never" data-hits="" data-linenumber="119">
2482
-
2483
-
2484
- <code class="ruby"> end</code>
2485
- </li>
2486
-
2487
- <li class="never" data-hits="" data-linenumber="120">
2488
-
2489
-
2490
- <code class="ruby"></code>
2491
- </li>
2492
-
2493
- <li class="covered" data-hits="1" data-linenumber="121">
2494
- <span class="hits">1</span>
2495
-
2496
- <code class="ruby"> alias :validate :verify</code>
2497
- </li>
2498
-
2499
- <li class="covered" data-hits="1" data-linenumber="122">
2500
- <span class="hits">1</span>
2501
-
2502
- <code class="ruby"> alias :validate! :verify!</code>
2503
- </li>
2504
-
2505
- <li class="never" data-hits="" data-linenumber="123">
2506
-
2507
-
2508
- <code class="ruby"> end</code>
2509
- </li>
2510
-
2511
- <li class="never" data-hits="" data-linenumber="124">
2512
-
2513
-
2514
- <code class="ruby"></code>
2515
- </li>
2516
-
2517
- <li class="covered" data-hits="1" data-linenumber="125">
2518
- <span class="hits">1</span>
2519
-
2520
- <code class="ruby"> class VerificationError &lt; StandardError</code>
2521
- </li>
2522
-
2523
- <li class="covered" data-hits="1" data-linenumber="126">
2524
- <span class="hits">1</span>
2525
-
2526
- <code class="ruby"> attr_accessor :json</code>
2527
- </li>
2528
-
2529
- <li class="never" data-hits="" data-linenumber="127">
2530
-
2531
-
2532
- <code class="ruby"></code>
2533
- </li>
2534
-
2535
- <li class="covered" data-hits="1" data-linenumber="128">
2536
- <span class="hits">1</span>
2537
-
2538
- <code class="ruby"> def initialize(json)</code>
2539
- </li>
2540
-
2541
- <li class="covered" data-hits="2" data-linenumber="129">
2542
- <span class="hits">2</span>
2543
-
2544
- <code class="ruby"> @json = json</code>
2545
- </li>
2546
-
2547
- <li class="never" data-hits="" data-linenumber="130">
2548
-
2549
-
2550
- <code class="ruby"> end</code>
2551
- </li>
2552
-
2553
- <li class="never" data-hits="" data-linenumber="131">
2554
-
2555
-
2556
- <code class="ruby"></code>
2557
- </li>
2558
-
2559
- <li class="covered" data-hits="1" data-linenumber="132">
2560
- <span class="hits">1</span>
2561
-
2562
- <code class="ruby"> def code</code>
2563
- </li>
2564
-
2565
- <li class="covered" data-hits="1" data-linenumber="133">
2566
- <span class="hits">1</span>
2567
-
2568
- <code class="ruby"> Integer(json[&#39;status&#39;])</code>
2569
- </li>
2570
-
2571
- <li class="never" data-hits="" data-linenumber="134">
2572
-
2573
-
2574
- <code class="ruby"> end</code>
2575
- </li>
2576
-
2577
- <li class="never" data-hits="" data-linenumber="135">
2578
-
2579
-
2580
- <code class="ruby"></code>
2581
- </li>
2582
-
2583
- <li class="covered" data-hits="1" data-linenumber="136">
2584
- <span class="hits">1</span>
2585
-
2586
- <code class="ruby"> def retryable?</code>
2587
- </li>
2588
-
2589
- <li class="covered" data-hits="2" data-linenumber="137">
2590
- <span class="hits">2</span>
2591
-
2592
- <code class="ruby"> json[&#39;is-retryable&#39;]</code>
2593
- </li>
2594
-
2595
- <li class="never" data-hits="" data-linenumber="138">
2596
-
2597
-
2598
- <code class="ruby"> end</code>
2599
- </li>
2600
-
2601
- <li class="never" data-hits="" data-linenumber="139">
2602
-
2603
-
2604
- <code class="ruby"></code>
2605
- </li>
2606
-
2607
- <li class="covered" data-hits="1" data-linenumber="140">
2608
- <span class="hits">1</span>
2609
-
2610
- <code class="ruby"> def message</code>
2611
- </li>
2612
-
2613
- <li class="missed" data-hits="0" data-linenumber="141">
2614
-
2615
-
2616
- <code class="ruby"> case code</code>
2617
- </li>
2618
-
2619
- <li class="never" data-hits="" data-linenumber="142">
2620
-
2621
-
2622
- <code class="ruby"> when 21000</code>
2623
- </li>
2624
-
2625
- <li class="missed" data-hits="0" data-linenumber="143">
2626
-
2627
-
2628
- <code class="ruby"> &#39;The App Store could not read the JSON object you provided.&#39;</code>
2629
- </li>
2630
-
2631
- <li class="never" data-hits="" data-linenumber="144">
2632
-
2633
-
2634
- <code class="ruby"> when 21002</code>
2635
- </li>
2636
-
2637
- <li class="missed" data-hits="0" data-linenumber="145">
2638
-
2639
-
2640
- <code class="ruby"> &#39;The data in the receipt-data property was malformed.&#39;</code>
2641
- </li>
2642
-
2643
- <li class="never" data-hits="" data-linenumber="146">
2644
-
2645
-
2646
- <code class="ruby"> when 21003</code>
2647
- </li>
2648
-
2649
- <li class="missed" data-hits="0" data-linenumber="147">
2650
-
2651
-
2652
- <code class="ruby"> &#39;The receipt could not be authenticated.&#39;</code>
2653
- </li>
2654
-
2655
- <li class="never" data-hits="" data-linenumber="148">
2656
-
2657
-
2658
- <code class="ruby"> when 21004</code>
2659
- </li>
2660
-
2661
- <li class="missed" data-hits="0" data-linenumber="149">
2662
-
2663
-
2664
- <code class="ruby"> &#39;The shared secret you provided does not match the shared secret on file for your account.&#39;</code>
2665
- </li>
2666
-
2667
- <li class="never" data-hits="" data-linenumber="150">
2668
-
2669
-
2670
- <code class="ruby"> when 21005</code>
2671
- </li>
2672
-
2673
- <li class="missed" data-hits="0" data-linenumber="151">
2674
-
2675
-
2676
- <code class="ruby"> &#39;The receipt server is not currently available.&#39;</code>
2677
- </li>
2678
-
2679
- <li class="never" data-hits="" data-linenumber="152">
2680
-
2681
-
2682
- <code class="ruby"> when 21006</code>
2683
- </li>
2684
-
2685
- <li class="missed" data-hits="0" data-linenumber="153">
2686
-
2687
-
2688
- <code class="ruby"> &#39;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.&#39;</code>
2689
- </li>
2690
-
2691
- <li class="never" data-hits="" data-linenumber="154">
2692
-
2693
-
2694
- <code class="ruby"> when 21007</code>
2695
- </li>
2696
-
2697
- <li class="missed" data-hits="0" data-linenumber="155">
2698
-
2699
-
2700
- <code class="ruby"> &#39;This receipt is a sandbox receipt, but it was sent to the production service for verification.&#39;</code>
2701
- </li>
2702
-
2703
- <li class="never" data-hits="" data-linenumber="156">
2704
-
2705
-
2706
- <code class="ruby"> when 21008</code>
2707
- </li>
2708
-
2709
- <li class="missed" data-hits="0" data-linenumber="157">
2710
-
2711
-
2712
- <code class="ruby"> &#39;This receipt is a production receipt, but it was sent to the sandbox service for verification.&#39;</code>
2713
- </li>
2714
-
2715
- <li class="never" data-hits="" data-linenumber="158">
2716
-
2717
-
2718
- <code class="ruby"> when 21010</code>
2719
- </li>
2720
-
2721
- <li class="missed" data-hits="0" data-linenumber="159">
2722
-
2723
-
2724
- <code class="ruby"> &#39;This receipt could not be authorized. Treat this the same as if a purchase was never made.&#39;</code>
2725
- </li>
2726
-
2727
- <li class="never" data-hits="" data-linenumber="160">
2728
-
2729
-
2730
- <code class="ruby"> when 21100..21199</code>
2731
- </li>
2732
-
2733
- <li class="missed" data-hits="0" data-linenumber="161">
2734
-
2735
-
2736
- <code class="ruby"> &#39;Internal data access error.&#39;</code>
2737
- </li>
2738
-
2739
- <li class="never" data-hits="" data-linenumber="162">
2740
-
2741
-
2742
- <code class="ruby"> else</code>
2743
- </li>
2744
-
2745
- <li class="missed" data-hits="0" data-linenumber="163">
2746
-
2747
-
2748
- <code class="ruby"> &quot;Unknown Error: #{code}&quot;</code>
2749
- </li>
2750
-
2751
- <li class="never" data-hits="" data-linenumber="164">
2752
-
2753
-
2754
- <code class="ruby"> end</code>
2755
- </li>
2756
-
2757
- <li class="never" data-hits="" data-linenumber="165">
2758
-
2759
-
2760
- <code class="ruby"> end</code>
2761
- </li>
2762
-
2763
- <li class="never" data-hits="" data-linenumber="166">
2764
-
2765
-
2766
- <code class="ruby"> end</code>
2767
- </li>
2768
-
2769
- <li class="never" data-hits="" data-linenumber="167">
2770
-
2771
-
2772
- <code class="ruby"> end</code>
2773
- </li>
2774
-
2775
- <li class="never" data-hits="" data-linenumber="168">
2776
-
2777
-
2778
- <code class="ruby">end</code>
2779
- </li>
2780
-
2781
- </ol>
2782
- </pre>
2783
- </div>
2784
-
2785
-
2786
- <div class="source_table" id="cb684cfb744e20e9f55e0ef69140ba65fee90e3b">
2787
- <div class="header">
2788
- <h3>lib/venice/version.rb</h3>
2789
- <h4><span class="green">100.0 %</span> covered</h4>
2790
- <div>
2791
- <b>2</b> relevant lines.
2792
- <span class="green"><b>2</b> lines covered</span> and
2793
- <span class="red"><b>0</b> lines missed.</span>
2794
- </div>
2795
- </div>
2796
-
2797
- <pre>
2798
- <ol>
2799
-
2800
- <li class="covered" data-hits="1" data-linenumber="1">
2801
- <span class="hits">1</span>
2802
-
2803
- <code class="ruby">module Venice</code>
2804
- </li>
2805
-
2806
- <li class="covered" data-hits="1" data-linenumber="2">
2807
- <span class="hits">1</span>
2808
-
2809
- <code class="ruby"> VERSION = &#39;0.4.1&#39;</code>
2810
- </li>
2811
-
2812
- <li class="never" data-hits="" data-linenumber="3">
2813
-
2814
-
2815
- <code class="ruby">end</code>
2816
- </li>
2817
-
2818
- </ol>
2819
- </pre>
2820
- </div>
2821
-
2822
-
2823
- </div>
2824
- </div>
2825
- </body>
2826
- </html>