candy_check 0.1.0.pre → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +23 -0
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +7 -8
  5. data/Guardfile +42 -0
  6. data/MIGRATION_GUIDE_0_2_0.md +141 -0
  7. data/README.md +86 -26
  8. data/Rakefile +1 -1
  9. data/candy_check.gemspec +33 -25
  10. data/lib/candy_check/app_store/receipt_collection.rb +5 -3
  11. data/lib/candy_check/app_store/subscription_verification.rb +25 -1
  12. data/lib/candy_check/app_store/verification.rb +1 -1
  13. data/lib/candy_check/app_store/verifier.rb +11 -11
  14. data/lib/candy_check/cli/app.rb +16 -33
  15. data/lib/candy_check/cli/commands/play_store.rb +12 -13
  16. data/lib/candy_check/play_store.rb +20 -10
  17. data/lib/candy_check/play_store/acknowledger.rb +19 -0
  18. data/lib/candy_check/play_store/android_publisher_service.rb +6 -0
  19. data/lib/candy_check/play_store/product_acknowledgements/acknowledgement.rb +45 -0
  20. data/lib/candy_check/play_store/product_acknowledgements/response.rb +24 -0
  21. data/lib/candy_check/play_store/product_purchases/product_purchase.rb +90 -0
  22. data/lib/candy_check/play_store/product_purchases/product_verification.rb +53 -0
  23. data/lib/candy_check/play_store/subscription_purchases/subscription_purchase.rb +154 -0
  24. data/lib/candy_check/play_store/subscription_purchases/subscription_verification.rb +55 -0
  25. data/lib/candy_check/play_store/verification_failure.rb +8 -6
  26. data/lib/candy_check/play_store/verifier.rb +24 -49
  27. data/lib/candy_check/utils/config.rb +5 -3
  28. data/lib/candy_check/version.rb +1 -1
  29. data/spec/app_store/receipt_collection_spec.rb +33 -0
  30. data/spec/app_store/subscription_verification_spec.rb +35 -2
  31. data/spec/app_store/verifier_spec.rb +24 -5
  32. data/spec/candy_check_spec.rb +2 -2
  33. data/spec/cli/commands/play_store_spec.rb +10 -43
  34. data/spec/fixtures/play_store/random_dummy_key.json +12 -0
  35. data/spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/acknowledged.yml +105 -0
  36. data/spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/already_acknowledged.yml +124 -0
  37. data/spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/refunded.yml +122 -0
  38. data/spec/fixtures/vcr_cassettes/play_store/product_purchases/permission_denied.yml +196 -0
  39. data/spec/fixtures/vcr_cassettes/play_store/product_purchases/response_with_empty_body.yml +183 -0
  40. data/spec/fixtures/vcr_cassettes/play_store/product_purchases/valid_but_not_consumed.yml +122 -0
  41. data/spec/fixtures/vcr_cassettes/play_store/subscription_purchases/permission_denied.yml +196 -0
  42. data/spec/fixtures/vcr_cassettes/play_store/subscription_purchases/valid_but_expired.yml +127 -0
  43. data/spec/play_store/acknowledger_spec.rb +48 -0
  44. data/spec/play_store/product_acknowledgements/acknowledgement_spec.rb +54 -0
  45. data/spec/play_store/product_acknowledgements/response_spec.rb +66 -0
  46. data/spec/play_store/product_purchases/product_purchase_spec.rb +110 -0
  47. data/spec/play_store/product_purchases/product_verification_spec.rb +49 -0
  48. data/spec/play_store/subscription_purchases/subscription_purchase_spec.rb +237 -0
  49. data/spec/play_store/subscription_purchases/subscription_verification_spec.rb +65 -0
  50. data/spec/play_store/verification_failure_spec.rb +18 -18
  51. data/spec/play_store/verifier_spec.rb +32 -96
  52. data/spec/spec_helper.rb +32 -10
  53. metadata +175 -75
  54. data/lib/candy_check/play_store/client.rb +0 -126
  55. data/lib/candy_check/play_store/config.rb +0 -51
  56. data/lib/candy_check/play_store/discovery_repository.rb +0 -33
  57. data/lib/candy_check/play_store/receipt.rb +0 -81
  58. data/lib/candy_check/play_store/subscription.rb +0 -138
  59. data/lib/candy_check/play_store/subscription_verification.rb +0 -30
  60. data/lib/candy_check/play_store/verification.rb +0 -48
  61. data/spec/fixtures/api_cache.dump +0 -1
  62. data/spec/fixtures/play_store/api_cache.dump +0 -1
  63. data/spec/fixtures/play_store/auth_failure.txt +0 -18
  64. data/spec/fixtures/play_store/auth_success.txt +0 -20
  65. data/spec/fixtures/play_store/discovery.txt +0 -2841
  66. data/spec/fixtures/play_store/dummy.p12 +0 -0
  67. data/spec/fixtures/play_store/empty.txt +0 -17
  68. data/spec/fixtures/play_store/products_failure.txt +0 -29
  69. data/spec/fixtures/play_store/products_success.txt +0 -22
  70. data/spec/play_store/client_spec.rb +0 -125
  71. data/spec/play_store/config_spec.rb +0 -96
  72. data/spec/play_store/discovery_respository_spec.rb +0 -31
  73. data/spec/play_store/receipt_spec.rb +0 -88
  74. data/spec/play_store/subscription_spec.rb +0 -138
  75. data/spec/play_store/subscription_verification_spec.rb +0 -98
  76. data/spec/play_store/verification_spec.rb +0 -82
@@ -1,35 +1,35 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe CandyCheck::PlayStore::VerificationFailure do
4
- subject { CandyCheck::PlayStore::VerificationFailure.new(attributes) }
5
-
6
- describe 'denied' do
7
- let(:attributes) do
8
- {
9
- 'errors' => [],
10
- 'code' => 401,
11
- 'message' => 'The current user has insufficient permissions'
12
- }
4
+ subject { CandyCheck::PlayStore::VerificationFailure.new(fake_error) }
5
+
6
+ describe "denied" do
7
+ let(:fake_error) do
8
+ FakeError.new("401", "The current user has insufficient permissions")
13
9
  end
14
10
 
15
- it 'returns the code' do
11
+ it "returns the code" do
16
12
  subject.code.must_equal 401
17
13
  end
18
14
 
19
- it 'returns the message' do
20
- subject.message.must_equal 'The current user has insufficient permissions'
15
+ it "returns the message" do
16
+ subject.message.must_equal "The current user has insufficient permissions"
21
17
  end
22
18
  end
23
19
 
24
- describe 'empty' do
25
- let(:attributes) { nil }
20
+ describe "empty" do
21
+ let(:fake_error) do
22
+ FakeError.new(nil, nil)
23
+ end
26
24
 
27
- it 'returns an unknown code' do
25
+ it "returns an unknown code" do
28
26
  subject.code.must_equal(-1)
29
27
  end
30
28
 
31
- it 'returns an unknown message' do
32
- subject.message.must_equal 'Unknown error'
29
+ it "returns an unknown message" do
30
+ subject.message.must_equal "Unknown error"
33
31
  end
34
32
  end
33
+
34
+ FakeError = Struct.new(:status_code, :message)
35
35
  end
@@ -1,111 +1,47 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe CandyCheck::PlayStore::Verifier do
4
- subject { CandyCheck::PlayStore::Verifier.new(config) }
5
- let(:config) do
6
- CandyCheck::PlayStore::Config
7
- .new(
8
- application_name: 'YourApplication',
9
- application_version: '1.0',
10
- issuer: 'abcdefg@developer.gserviceaccount.com',
11
- key_file: 'local/google.p12',
12
- key_secret: 'notasecret'
13
- )
14
- end
15
- let(:package) { 'the_package' }
16
- let(:product_id) { 'the_product' }
17
- let(:token) { 'the_token' }
18
-
19
- it 'holds the config' do
20
- subject.config.must_be_same_as config
21
- end
22
-
23
- it 'requires a boot before verification' do
24
- proc do
25
- subject.verify(package, product_id, token)
26
- end.must_raise CandyCheck::PlayStore::Verifier::BootRequiredError
27
- end
28
-
29
- it 'it configures and boots a client but raises on second boot!' do
30
- with_mocked_client do
31
- subject.boot!
32
- @client.config.must_be_same_as config
33
- @client.booted.must_be_true
34
- end
35
-
36
- proc do
37
- subject.boot!
38
- end.must_raise CandyCheck::PlayStore::Verifier::BootRequiredError
39
- end
40
-
41
- it 'uses a verifier when booted' do
42
- result = :stubbed
43
- with_mocked_client do
44
- subject.boot!
45
- end
46
- with_mocked_verifier(result) do
47
- subject.verify(package, product_id, token).must_be_same_as result
48
-
49
- assert_recorded(
50
- [@client, package, product_id, token]
51
- )
52
- end
53
- end
54
-
55
- it 'uses a subscription verifier when booted' do
56
- result = :stubbed
57
- with_mocked_client do
58
- subject.boot!
59
- end
60
- with_mocked_verifier(result) do
61
- subject.verify_subscription(
62
- package, product_id, token
63
- ).must_be_same_as result
4
+ subject { CandyCheck::PlayStore::Verifier.new(authorization: authorization) }
64
5
 
65
- assert_recorded(
66
- [@client, package, product_id, token]
67
- )
68
- end
69
- end
6
+ let(:package_name) { "my_package_name" }
7
+ let(:product_id) { "my_product_id" }
8
+ let(:subscription_id) { "my_subscription_id" }
9
+ let(:token) { "my_token" }
70
10
 
71
- private
11
+ let(:json_key_file) { File.expand_path("../fixtures/play_store/random_dummy_key.json", __dir__) }
12
+ let(:authorization) { CandyCheck::PlayStore.authorization(json_key_file) }
72
13
 
73
- def with_mocked_verifier(*results)
74
- @recorded ||= []
75
- stub = proc do |*args|
76
- @recorded << args
77
- DummyPlayStoreVerification.new(*args).tap { |v| v.results = results }
14
+ describe "product purchases" do
15
+ it "verifies a product purchase" do
16
+ VCR.use_cassette("play_store/product_purchases/valid_but_not_consumed") do
17
+ result = subject.verify_product_purchase(package_name: package_name, product_id: product_id, token: token)
18
+ result.must_be_instance_of CandyCheck::PlayStore::ProductPurchases::ProductPurchase
19
+ result.valid?.must_be_true
20
+ result.consumed?.must_be_false
21
+ end
78
22
  end
79
- CandyCheck::PlayStore::Verification.stub :new, stub do
80
- yield
81
- end
82
- end
83
23
 
84
- def with_mocked_client
85
- stub = proc do |*args|
86
- @client = DummyPlayStoreClient.new(*args)
87
- end
88
- CandyCheck::PlayStore::Client.stub :new, stub do
89
- yield
24
+ it "can return a product purchase verification failure" do
25
+ VCR.use_cassette("play_store/product_purchases/permission_denied") do
26
+ result = subject.verify_product_purchase(package_name: package_name, product_id: product_id, token: token)
27
+ result.must_be_instance_of CandyCheck::PlayStore::VerificationFailure
28
+ end
90
29
  end
91
30
  end
92
31
 
93
- def assert_recorded(*calls)
94
- @recorded.must_equal calls
95
- end
96
-
97
- DummyPlayStoreVerification = Struct.new(:client, :package,
98
- :product_id, :token) do
99
- attr_accessor :results
100
- def call!
101
- results.shift
32
+ describe "subscription purchases" do
33
+ it "verifies a subscription purchase" do
34
+ VCR.use_cassette("play_store/subscription_purchases/valid_but_expired") do
35
+ result = subject.verify_subscription_purchase(package_name: package_name, subscription_id: subscription_id, token: token)
36
+ result.must_be_instance_of CandyCheck::PlayStore::SubscriptionPurchases::SubscriptionPurchase
37
+ end
102
38
  end
103
- end
104
39
 
105
- DummyPlayStoreClient = Struct.new(:config) do
106
- attr_reader :booted
107
- def boot!
108
- @booted = true
40
+ it "can return a subscription purchase verification failure" do
41
+ VCR.use_cassette("play_store/subscription_purchases/permission_denied") do
42
+ result = subject.verify_subscription_purchase(package_name: package_name, subscription_id: subscription_id, token: token)
43
+ result.must_be_instance_of CandyCheck::PlayStore::VerificationFailure
44
+ end
109
45
  end
110
46
  end
111
47
  end
@@ -1,19 +1,36 @@
1
- require 'coveralls'
1
+ require "coveralls"
2
2
  Coveralls.wear!
3
3
 
4
- require 'candy_check'
5
- require 'candy_check/cli'
4
+ require "candy_check"
5
+ require "candy_check/cli"
6
6
 
7
- require 'minitest/autorun'
8
- require 'minitest/around/spec'
7
+ def in_continuous_integration_environment?
8
+ ENV["CI"] || ENV["TRAVIS"] || ENV["CONTINUOUS_INTEGRATION"]
9
+ end
10
+
11
+ require "minitest/autorun"
12
+ require "minitest/around/spec"
13
+ require "minitest/focus" unless in_continuous_integration_environment?
14
+
15
+ require "webmock/minitest"
16
+ require "vcr"
17
+
18
+ require "timecop"
19
+
20
+ require "pry"
9
21
 
10
- require 'webmock/minitest'
22
+ require_relative "support/with_fixtures"
23
+ require_relative "support/with_temp_file"
24
+ require_relative "support/with_command"
11
25
 
12
- require_relative 'support/with_fixtures'
13
- require_relative 'support/with_temp_file'
14
- require_relative 'support/with_command'
26
+ ENV["DEBUG"] && Google::APIClient.logger.level = Logger::DEBUG
27
+
28
+ class MiniTest::Spec
29
+ class << self
30
+ alias :context :describe
31
+ end
32
+ end
15
33
 
16
- ENV['DEBUG'] && Google::APIClient.logger.level = Logger::DEBUG
17
34
 
18
35
  module MiniTest
19
36
  module Assertions
@@ -35,3 +52,8 @@ module MiniTest
35
52
  infect_an_assertion :assert_false, :must_be_false, :unary
36
53
  end
37
54
  end
55
+
56
+ VCR.configure do |config|
57
+ config.cassette_library_dir = "spec/fixtures/vcr_cassettes"
58
+ config.hook_into :webmock
59
+ end
metadata CHANGED
@@ -1,43 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: candy_check
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Thiel
8
+ - Christoph Weegen
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2016-10-25 00:00:00.000000000 Z
12
+ date: 2020-10-07 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
- name: multi_json
15
+ name: google-api-client
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
18
  - - "~>"
18
19
  - !ruby/object:Gem::Version
19
- version: '1.10'
20
+ version: 0.43.0
20
21
  type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
25
  - - "~>"
25
26
  - !ruby/object:Gem::Version
26
- version: '1.10'
27
+ version: 0.43.0
27
28
  - !ruby/object:Gem::Dependency
28
- name: google-api-client
29
+ name: multi_json
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
32
  - - "~>"
32
33
  - !ruby/object:Gem::Version
33
- version: 0.8.6
34
+ version: '1.10'
34
35
  type: :runtime
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
39
  - - "~>"
39
40
  - !ruby/object:Gem::Version
40
- version: 0.8.6
41
+ version: '1.10'
41
42
  - !ruby/object:Gem::Dependency
42
43
  name: thor
43
44
  requirement: !ruby/object:Gem::Requirement
@@ -53,117 +54,215 @@ dependencies:
53
54
  - !ruby/object:Gem::Version
54
55
  version: '0.19'
55
56
  - !ruby/object:Gem::Dependency
56
- name: rubocop
57
+ name: bundler
57
58
  requirement: !ruby/object:Gem::Requirement
58
59
  requirements:
59
60
  - - "~>"
60
61
  - !ruby/object:Gem::Version
61
- version: '0.39'
62
+ version: '2.0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '2.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: coveralls
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '0.8'
62
77
  type: :development
63
78
  prerelease: false
64
79
  version_requirements: !ruby/object:Gem::Requirement
65
80
  requirements:
66
81
  - - "~>"
67
82
  - !ruby/object:Gem::Version
68
- version: '0.39'
83
+ version: '0.8'
69
84
  - !ruby/object:Gem::Dependency
70
85
  name: inch
71
86
  requirement: !ruby/object:Gem::Requirement
72
87
  requirements:
73
88
  - - "~>"
74
89
  - !ruby/object:Gem::Version
75
- version: '0.5'
90
+ version: '0.7'
76
91
  type: :development
77
92
  prerelease: false
78
93
  version_requirements: !ruby/object:Gem::Requirement
79
94
  requirements:
80
95
  - - "~>"
81
96
  - !ruby/object:Gem::Version
82
- version: '0.5'
97
+ version: '0.7'
83
98
  - !ruby/object:Gem::Dependency
84
- name: bundler
99
+ name: minitest
85
100
  requirement: !ruby/object:Gem::Requirement
86
101
  requirements:
87
102
  - - "~>"
88
103
  - !ruby/object:Gem::Version
89
- version: '1.7'
104
+ version: '5.10'
90
105
  type: :development
91
106
  prerelease: false
92
107
  version_requirements: !ruby/object:Gem::Requirement
93
108
  requirements:
94
109
  - - "~>"
95
110
  - !ruby/object:Gem::Version
96
- version: '1.7'
111
+ version: '5.10'
97
112
  - !ruby/object:Gem::Dependency
98
- name: rake
113
+ name: minitest-around
99
114
  requirement: !ruby/object:Gem::Requirement
100
115
  requirements:
101
116
  - - "~>"
102
117
  - !ruby/object:Gem::Version
103
- version: '11.1'
118
+ version: '0.4'
104
119
  type: :development
105
120
  prerelease: false
106
121
  version_requirements: !ruby/object:Gem::Requirement
107
122
  requirements:
108
123
  - - "~>"
109
124
  - !ruby/object:Gem::Version
110
- version: '11.1'
125
+ version: '0.4'
111
126
  - !ruby/object:Gem::Dependency
112
- name: coveralls
127
+ name: minitest-focus
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: rake
113
142
  requirement: !ruby/object:Gem::Requirement
114
143
  requirements:
115
144
  - - "~>"
116
145
  - !ruby/object:Gem::Version
117
- version: '0.8'
146
+ version: '12.0'
118
147
  type: :development
119
148
  prerelease: false
120
149
  version_requirements: !ruby/object:Gem::Requirement
121
150
  requirements:
122
151
  - - "~>"
123
152
  - !ruby/object:Gem::Version
124
- version: '0.8'
153
+ version: '12.0'
125
154
  - !ruby/object:Gem::Dependency
126
- name: minitest
155
+ name: rubocop
127
156
  requirement: !ruby/object:Gem::Requirement
128
157
  requirements:
129
158
  - - "~>"
130
159
  - !ruby/object:Gem::Version
131
- version: '5.9'
160
+ version: '0.48'
132
161
  type: :development
133
162
  prerelease: false
134
163
  version_requirements: !ruby/object:Gem::Requirement
135
164
  requirements:
136
165
  - - "~>"
137
166
  - !ruby/object:Gem::Version
138
- version: '5.9'
167
+ version: '0.48'
139
168
  - !ruby/object:Gem::Dependency
140
- name: minitest-around
169
+ name: timecop
141
170
  requirement: !ruby/object:Gem::Requirement
142
171
  requirements:
143
172
  - - "~>"
144
173
  - !ruby/object:Gem::Version
145
- version: '0.3'
174
+ version: '0.8'
146
175
  type: :development
147
176
  prerelease: false
148
177
  version_requirements: !ruby/object:Gem::Requirement
149
178
  requirements:
150
179
  - - "~>"
151
180
  - !ruby/object:Gem::Version
152
- version: '0.3'
181
+ version: '0.8'
153
182
  - !ruby/object:Gem::Dependency
154
183
  name: webmock
155
184
  requirement: !ruby/object:Gem::Requirement
156
185
  requirements:
157
186
  - - "~>"
158
187
  - !ruby/object:Gem::Version
159
- version: '2.1'
188
+ version: '3.0'
160
189
  type: :development
161
190
  prerelease: false
162
191
  version_requirements: !ruby/object:Gem::Requirement
163
192
  requirements:
164
193
  - - "~>"
165
194
  - !ruby/object:Gem::Version
166
- version: '2.1'
195
+ version: '3.0'
196
+ - !ruby/object:Gem::Dependency
197
+ name: vcr
198
+ requirement: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ type: :development
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ - !ruby/object:Gem::Dependency
211
+ name: pry
212
+ requirement: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - ">="
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
217
+ type: :development
218
+ prerelease: false
219
+ version_requirements: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - ">="
222
+ - !ruby/object:Gem::Version
223
+ version: '0'
224
+ - !ruby/object:Gem::Dependency
225
+ name: awesome_print
226
+ requirement: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - ">="
229
+ - !ruby/object:Gem::Version
230
+ version: '0'
231
+ type: :development
232
+ prerelease: false
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ - !ruby/object:Gem::Dependency
239
+ name: guard
240
+ requirement: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ version: '0'
245
+ type: :development
246
+ prerelease: false
247
+ version_requirements: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - ">="
250
+ - !ruby/object:Gem::Version
251
+ version: '0'
252
+ - !ruby/object:Gem::Dependency
253
+ name: guard-minitest
254
+ requirement: !ruby/object:Gem::Requirement
255
+ requirements:
256
+ - - ">="
257
+ - !ruby/object:Gem::Version
258
+ version: '0'
259
+ type: :development
260
+ prerelease: false
261
+ version_requirements: !ruby/object:Gem::Requirement
262
+ requirements:
263
+ - - ">="
264
+ - !ruby/object:Gem::Version
265
+ version: '0'
167
266
  description:
168
267
  email:
169
268
  - jonas@thiel.io
@@ -177,7 +276,9 @@ files:
177
276
  - ".ruby-version"
178
277
  - ".travis.yml"
179
278
  - Gemfile
279
+ - Guardfile
180
280
  - LICENSE.txt
281
+ - MIGRATION_GUIDE_0_2_0.md
181
282
  - README.md
182
283
  - Rakefile
183
284
  - bin/candy_check
@@ -201,13 +302,14 @@ files:
201
302
  - lib/candy_check/cli/commands/version.rb
202
303
  - lib/candy_check/cli/out.rb
203
304
  - lib/candy_check/play_store.rb
204
- - lib/candy_check/play_store/client.rb
205
- - lib/candy_check/play_store/config.rb
206
- - lib/candy_check/play_store/discovery_repository.rb
207
- - lib/candy_check/play_store/receipt.rb
208
- - lib/candy_check/play_store/subscription.rb
209
- - lib/candy_check/play_store/subscription_verification.rb
210
- - lib/candy_check/play_store/verification.rb
305
+ - lib/candy_check/play_store/acknowledger.rb
306
+ - lib/candy_check/play_store/android_publisher_service.rb
307
+ - lib/candy_check/play_store/product_acknowledgements/acknowledgement.rb
308
+ - lib/candy_check/play_store/product_acknowledgements/response.rb
309
+ - lib/candy_check/play_store/product_purchases/product_purchase.rb
310
+ - lib/candy_check/play_store/product_purchases/product_verification.rb
311
+ - lib/candy_check/play_store/subscription_purchases/subscription_purchase.rb
312
+ - lib/candy_check/play_store/subscription_purchases/subscription_verification.rb
211
313
  - lib/candy_check/play_store/verification_failure.rb
212
314
  - lib/candy_check/play_store/verifier.rb
213
315
  - lib/candy_check/utils.rb
@@ -228,23 +330,23 @@ files:
228
330
  - spec/cli/commands/play_store_spec.rb
229
331
  - spec/cli/commands/version_spec.rb
230
332
  - spec/cli/out_spec.rb
231
- - spec/fixtures/api_cache.dump
232
- - spec/fixtures/play_store/api_cache.dump
233
- - spec/fixtures/play_store/auth_failure.txt
234
- - spec/fixtures/play_store/auth_success.txt
235
- - spec/fixtures/play_store/discovery.txt
236
- - spec/fixtures/play_store/dummy.p12
237
- - spec/fixtures/play_store/empty.txt
238
- - spec/fixtures/play_store/products_failure.txt
239
- - spec/fixtures/play_store/products_success.txt
240
- - spec/play_store/client_spec.rb
241
- - spec/play_store/config_spec.rb
242
- - spec/play_store/discovery_respository_spec.rb
243
- - spec/play_store/receipt_spec.rb
244
- - spec/play_store/subscription_spec.rb
245
- - spec/play_store/subscription_verification_spec.rb
333
+ - spec/fixtures/play_store/random_dummy_key.json
334
+ - spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/acknowledged.yml
335
+ - spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/already_acknowledged.yml
336
+ - spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/refunded.yml
337
+ - spec/fixtures/vcr_cassettes/play_store/product_purchases/permission_denied.yml
338
+ - spec/fixtures/vcr_cassettes/play_store/product_purchases/response_with_empty_body.yml
339
+ - spec/fixtures/vcr_cassettes/play_store/product_purchases/valid_but_not_consumed.yml
340
+ - spec/fixtures/vcr_cassettes/play_store/subscription_purchases/permission_denied.yml
341
+ - spec/fixtures/vcr_cassettes/play_store/subscription_purchases/valid_but_expired.yml
342
+ - spec/play_store/acknowledger_spec.rb
343
+ - spec/play_store/product_acknowledgements/acknowledgement_spec.rb
344
+ - spec/play_store/product_acknowledgements/response_spec.rb
345
+ - spec/play_store/product_purchases/product_purchase_spec.rb
346
+ - spec/play_store/product_purchases/product_verification_spec.rb
347
+ - spec/play_store/subscription_purchases/subscription_purchase_spec.rb
348
+ - spec/play_store/subscription_purchases/subscription_verification_spec.rb
246
349
  - spec/play_store/verification_failure_spec.rb
247
- - spec/play_store/verification_spec.rb
248
350
  - spec/play_store/verifier_spec.rb
249
351
  - spec/spec_helper.rb
250
352
  - spec/support/with_command.rb
@@ -262,15 +364,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
262
364
  requirements:
263
365
  - - ">="
264
366
  - !ruby/object:Gem::Version
265
- version: '2.0'
367
+ version: '2.4'
266
368
  required_rubygems_version: !ruby/object:Gem::Requirement
267
369
  requirements:
268
- - - ">"
370
+ - - ">="
269
371
  - !ruby/object:Gem::Version
270
- version: 1.3.1
372
+ version: '0'
271
373
  requirements: []
272
- rubyforge_project:
273
- rubygems_version: 2.5.1
374
+ rubygems_version: 3.1.2
274
375
  signing_key:
275
376
  specification_version: 4
276
377
  summary: Check and verify in-app receipts
@@ -289,26 +390,25 @@ test_files:
289
390
  - spec/cli/commands/play_store_spec.rb
290
391
  - spec/cli/commands/version_spec.rb
291
392
  - spec/cli/out_spec.rb
292
- - spec/fixtures/api_cache.dump
293
- - spec/fixtures/play_store/api_cache.dump
294
- - spec/fixtures/play_store/auth_failure.txt
295
- - spec/fixtures/play_store/auth_success.txt
296
- - spec/fixtures/play_store/discovery.txt
297
- - spec/fixtures/play_store/dummy.p12
298
- - spec/fixtures/play_store/empty.txt
299
- - spec/fixtures/play_store/products_failure.txt
300
- - spec/fixtures/play_store/products_success.txt
301
- - spec/play_store/client_spec.rb
302
- - spec/play_store/config_spec.rb
303
- - spec/play_store/discovery_respository_spec.rb
304
- - spec/play_store/receipt_spec.rb
305
- - spec/play_store/subscription_spec.rb
306
- - spec/play_store/subscription_verification_spec.rb
393
+ - spec/fixtures/play_store/random_dummy_key.json
394
+ - spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/acknowledged.yml
395
+ - spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/already_acknowledged.yml
396
+ - spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/refunded.yml
397
+ - spec/fixtures/vcr_cassettes/play_store/product_purchases/permission_denied.yml
398
+ - spec/fixtures/vcr_cassettes/play_store/product_purchases/response_with_empty_body.yml
399
+ - spec/fixtures/vcr_cassettes/play_store/product_purchases/valid_but_not_consumed.yml
400
+ - spec/fixtures/vcr_cassettes/play_store/subscription_purchases/permission_denied.yml
401
+ - spec/fixtures/vcr_cassettes/play_store/subscription_purchases/valid_but_expired.yml
402
+ - spec/play_store/acknowledger_spec.rb
403
+ - spec/play_store/product_acknowledgements/acknowledgement_spec.rb
404
+ - spec/play_store/product_acknowledgements/response_spec.rb
405
+ - spec/play_store/product_purchases/product_purchase_spec.rb
406
+ - spec/play_store/product_purchases/product_verification_spec.rb
407
+ - spec/play_store/subscription_purchases/subscription_purchase_spec.rb
408
+ - spec/play_store/subscription_purchases/subscription_verification_spec.rb
307
409
  - spec/play_store/verification_failure_spec.rb
308
- - spec/play_store/verification_spec.rb
309
410
  - spec/play_store/verifier_spec.rb
310
411
  - spec/spec_helper.rb
311
412
  - spec/support/with_command.rb
312
413
  - spec/support/with_fixtures.rb
313
414
  - spec/support/with_temp_file.rb
314
- has_rdoc: