candy_check 0.1.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -1
  3. data/.rubocop.yml +6 -0
  4. data/.ruby-version +1 -1
  5. data/.travis.yml +7 -10
  6. data/Guardfile +42 -0
  7. data/MIGRATION_GUIDE_0_2_0.md +141 -0
  8. data/README.md +85 -27
  9. data/Rakefile +1 -1
  10. data/candy_check.gemspec +32 -26
  11. data/lib/candy_check/app_store/receipt_collection.rb +4 -2
  12. data/lib/candy_check/app_store/subscription_verification.rb +25 -1
  13. data/lib/candy_check/app_store/verification.rb +1 -1
  14. data/lib/candy_check/app_store/verifier.rb +11 -11
  15. data/lib/candy_check/cli/app.rb +20 -33
  16. data/lib/candy_check/cli/commands/play_store.rb +12 -13
  17. data/lib/candy_check/play_store.rb +20 -10
  18. data/lib/candy_check/play_store/acknowledger.rb +19 -0
  19. data/lib/candy_check/play_store/android_publisher_service.rb +6 -0
  20. data/lib/candy_check/play_store/product_acknowledgements/acknowledgement.rb +45 -0
  21. data/lib/candy_check/play_store/product_acknowledgements/response.rb +24 -0
  22. data/lib/candy_check/play_store/product_purchases/product_purchase.rb +90 -0
  23. data/lib/candy_check/play_store/product_purchases/product_verification.rb +53 -0
  24. data/lib/candy_check/play_store/subscription_purchases/subscription_purchase.rb +154 -0
  25. data/lib/candy_check/play_store/subscription_purchases/subscription_verification.rb +55 -0
  26. data/lib/candy_check/play_store/verification_failure.rb +8 -6
  27. data/lib/candy_check/play_store/verifier.rb +24 -49
  28. data/lib/candy_check/version.rb +1 -1
  29. data/spec/app_store/client_spec.rb +2 -2
  30. data/spec/app_store/config_spec.rb +5 -5
  31. data/spec/app_store/receipt_collection_spec.rb +35 -8
  32. data/spec/app_store/receipt_spec.rb +16 -16
  33. data/spec/app_store/subscription_verification_spec.rb +49 -16
  34. data/spec/app_store/verifcation_failure_spec.rb +6 -6
  35. data/spec/app_store/verification_spec.rb +12 -12
  36. data/spec/app_store/verifier_spec.rb +36 -17
  37. data/spec/candy_check_spec.rb +3 -3
  38. data/spec/cli/app_spec.rb +10 -6
  39. data/spec/cli/commands/app_store_spec.rb +6 -6
  40. data/spec/cli/commands/play_store_spec.rb +10 -43
  41. data/spec/cli/commands/version_spec.rb +1 -1
  42. data/spec/cli/out_spec.rb +4 -4
  43. data/spec/fixtures/play_store/random_dummy_key.json +12 -0
  44. data/spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/acknowledged.yml +105 -0
  45. data/spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/already_acknowledged.yml +124 -0
  46. data/spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/refunded.yml +122 -0
  47. data/spec/fixtures/vcr_cassettes/play_store/product_purchases/permission_denied.yml +196 -0
  48. data/spec/fixtures/vcr_cassettes/play_store/product_purchases/response_with_empty_body.yml +183 -0
  49. data/spec/fixtures/vcr_cassettes/play_store/product_purchases/valid_but_not_consumed.yml +122 -0
  50. data/spec/fixtures/vcr_cassettes/play_store/subscription_purchases/permission_denied.yml +196 -0
  51. data/spec/fixtures/vcr_cassettes/play_store/subscription_purchases/valid_but_expired.yml +127 -0
  52. data/spec/play_store/acknowledger_spec.rb +48 -0
  53. data/spec/play_store/product_acknowledgements/acknowledgement_spec.rb +54 -0
  54. data/spec/play_store/product_acknowledgements/response_spec.rb +66 -0
  55. data/spec/play_store/product_purchases/product_purchase_spec.rb +110 -0
  56. data/spec/play_store/product_purchases/product_verification_spec.rb +49 -0
  57. data/spec/play_store/subscription_purchases/subscription_purchase_spec.rb +237 -0
  58. data/spec/play_store/subscription_purchases/subscription_verification_spec.rb +65 -0
  59. data/spec/play_store/verification_failure_spec.rb +20 -20
  60. data/spec/play_store/verifier_spec.rb +32 -96
  61. data/spec/spec_helper.rb +31 -11
  62. data/spec/support/with_command.rb +0 -3
  63. metadata +167 -81
  64. data/lib/candy_check/play_store/client.rb +0 -126
  65. data/lib/candy_check/play_store/config.rb +0 -51
  66. data/lib/candy_check/play_store/discovery_repository.rb +0 -33
  67. data/lib/candy_check/play_store/receipt.rb +0 -81
  68. data/lib/candy_check/play_store/subscription.rb +0 -139
  69. data/lib/candy_check/play_store/subscription_verification.rb +0 -30
  70. data/lib/candy_check/play_store/verification.rb +0 -48
  71. data/spec/fixtures/api_cache.dump +0 -1
  72. data/spec/fixtures/play_store/api_cache.dump +0 -1
  73. data/spec/fixtures/play_store/auth_failure.txt +0 -18
  74. data/spec/fixtures/play_store/auth_success.txt +0 -20
  75. data/spec/fixtures/play_store/discovery.txt +0 -2841
  76. data/spec/fixtures/play_store/dummy.p12 +0 -0
  77. data/spec/fixtures/play_store/empty.txt +0 -17
  78. data/spec/fixtures/play_store/products_failure.txt +0 -29
  79. data/spec/fixtures/play_store/products_success.txt +0 -22
  80. data/spec/play_store/client_spec.rb +0 -125
  81. data/spec/play_store/config_spec.rb +0 -96
  82. data/spec/play_store/discovery_respository_spec.rb +0 -31
  83. data/spec/play_store/receipt_spec.rb +0 -88
  84. data/spec/play_store/subscription_spec.rb +0 -138
  85. data/spec/play_store/subscription_verification_spec.rb +0 -97
  86. data/spec/play_store/verification_spec.rb +0 -81
@@ -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
16
- subject.code.must_equal 401
11
+ it "returns the code" do
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
28
- subject.code.must_equal(-1)
25
+ it "returns an unknown code" do
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,21 +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"
9
17
 
10
- require 'webmock/minitest'
18
+ require "timecop"
11
19
 
12
- require 'timecop'
20
+ require "pry"
13
21
 
14
- require_relative 'support/with_fixtures'
15
- require_relative 'support/with_temp_file'
16
- require_relative 'support/with_command'
22
+ require_relative "support/with_fixtures"
23
+ require_relative "support/with_temp_file"
24
+ require_relative "support/with_command"
25
+
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
17
33
 
18
- ENV['DEBUG'] && Google::APIClient.logger.level = Logger::DEBUG
19
34
 
20
35
  module MiniTest
21
36
  module Assertions
@@ -37,3 +52,8 @@ module MiniTest
37
52
  infect_an_assertion :assert_false, :must_be_false, :unary
38
53
  end
39
54
  end
55
+
56
+ VCR.configure do |config|
57
+ config.cassette_library_dir = "spec/fixtures/vcr_cassettes"
58
+ config.hook_into :webmock
59
+ end
@@ -26,8 +26,5 @@ module WithCommand
26
26
  lines << object
27
27
  end
28
28
 
29
- def must_be(*expected)
30
- lines.must_equal expected
31
- end
32
29
  end
33
30
  end
metadata CHANGED
@@ -1,71 +1,86 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: candy_check
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Thiel
8
- autorequire:
8
+ - Christoph Weegen
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2017-04-20 00:00:00.000000000 Z
12
+ date: 2021-01-11 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
44
45
  requirements:
45
- - - "~>"
46
+ - - "<"
46
47
  - !ruby/object:Gem::Version
47
- version: '0.19'
48
+ version: '2.0'
48
49
  type: :runtime
49
50
  prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "<"
54
+ - !ruby/object:Gem::Version
55
+ version: '2.0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: bundler
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '2.0'
63
+ type: :development
64
+ prerelease: false
50
65
  version_requirements: !ruby/object:Gem::Requirement
51
66
  requirements:
52
67
  - - "~>"
53
68
  - !ruby/object:Gem::Version
54
- version: '0.19'
69
+ version: '2.0'
55
70
  - !ruby/object:Gem::Dependency
56
- name: rubocop
71
+ name: coveralls
57
72
  requirement: !ruby/object:Gem::Requirement
58
73
  requirements:
59
74
  - - "~>"
60
75
  - !ruby/object:Gem::Version
61
- version: '0.48'
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.48'
83
+ version: '0.8'
69
84
  - !ruby/object:Gem::Dependency
70
85
  name: inch
71
86
  requirement: !ruby/object:Gem::Requirement
@@ -81,75 +96,89 @@ dependencies:
81
96
  - !ruby/object:Gem::Version
82
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.14'
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.14'
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: '12.0'
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: '12.0'
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.10'
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.10'
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.4'
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.4'
181
+ version: '0.8'
153
182
  - !ruby/object:Gem::Dependency
154
183
  name: webmock
155
184
  requirement: !ruby/object:Gem::Requirement
@@ -165,20 +194,76 @@ dependencies:
165
194
  - !ruby/object:Gem::Version
166
195
  version: '3.0'
167
196
  - !ruby/object:Gem::Dependency
168
- name: timecop
197
+ name: vcr
169
198
  requirement: !ruby/object:Gem::Requirement
170
199
  requirements:
171
- - - "~>"
200
+ - - ">="
172
201
  - !ruby/object:Gem::Version
173
- version: '0.8'
202
+ version: '0'
174
203
  type: :development
175
204
  prerelease: false
176
205
  version_requirements: !ruby/object:Gem::Requirement
177
206
  requirements:
178
- - - "~>"
207
+ - - ">="
179
208
  - !ruby/object:Gem::Version
180
- version: '0.8'
181
- description:
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'
266
+ description:
182
267
  email:
183
268
  - jonas@thiel.io
184
269
  executables:
@@ -191,7 +276,9 @@ files:
191
276
  - ".ruby-version"
192
277
  - ".travis.yml"
193
278
  - Gemfile
279
+ - Guardfile
194
280
  - LICENSE.txt
281
+ - MIGRATION_GUIDE_0_2_0.md
195
282
  - README.md
196
283
  - Rakefile
197
284
  - bin/candy_check
@@ -215,13 +302,14 @@ files:
215
302
  - lib/candy_check/cli/commands/version.rb
216
303
  - lib/candy_check/cli/out.rb
217
304
  - lib/candy_check/play_store.rb
218
- - lib/candy_check/play_store/client.rb
219
- - lib/candy_check/play_store/config.rb
220
- - lib/candy_check/play_store/discovery_repository.rb
221
- - lib/candy_check/play_store/receipt.rb
222
- - lib/candy_check/play_store/subscription.rb
223
- - lib/candy_check/play_store/subscription_verification.rb
224
- - 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
225
313
  - lib/candy_check/play_store/verification_failure.rb
226
314
  - lib/candy_check/play_store/verifier.rb
227
315
  - lib/candy_check/utils.rb
@@ -242,23 +330,23 @@ files:
242
330
  - spec/cli/commands/play_store_spec.rb
243
331
  - spec/cli/commands/version_spec.rb
244
332
  - spec/cli/out_spec.rb
245
- - spec/fixtures/api_cache.dump
246
- - spec/fixtures/play_store/api_cache.dump
247
- - spec/fixtures/play_store/auth_failure.txt
248
- - spec/fixtures/play_store/auth_success.txt
249
- - spec/fixtures/play_store/discovery.txt
250
- - spec/fixtures/play_store/dummy.p12
251
- - spec/fixtures/play_store/empty.txt
252
- - spec/fixtures/play_store/products_failure.txt
253
- - spec/fixtures/play_store/products_success.txt
254
- - spec/play_store/client_spec.rb
255
- - spec/play_store/config_spec.rb
256
- - spec/play_store/discovery_respository_spec.rb
257
- - spec/play_store/receipt_spec.rb
258
- - spec/play_store/subscription_spec.rb
259
- - 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
260
349
  - spec/play_store/verification_failure_spec.rb
261
- - spec/play_store/verification_spec.rb
262
350
  - spec/play_store/verifier_spec.rb
263
351
  - spec/spec_helper.rb
264
352
  - spec/support/with_command.rb
@@ -268,7 +356,7 @@ homepage: https://github.com/jnbt/candy_check
268
356
  licenses:
269
357
  - MIT
270
358
  metadata: {}
271
- post_install_message:
359
+ post_install_message:
272
360
  rdoc_options: []
273
361
  require_paths:
274
362
  - lib
@@ -276,16 +364,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
276
364
  requirements:
277
365
  - - ">="
278
366
  - !ruby/object:Gem::Version
279
- version: '2.0'
367
+ version: '2.4'
280
368
  required_rubygems_version: !ruby/object:Gem::Requirement
281
369
  requirements:
282
370
  - - ">="
283
371
  - !ruby/object:Gem::Version
284
372
  version: '0'
285
373
  requirements: []
286
- rubyforge_project:
287
- rubygems_version: 2.6.11
288
- signing_key:
374
+ rubygems_version: 3.1.4
375
+ signing_key:
289
376
  specification_version: 4
290
377
  summary: Check and verify in-app receipts
291
378
  test_files:
@@ -303,26 +390,25 @@ test_files:
303
390
  - spec/cli/commands/play_store_spec.rb
304
391
  - spec/cli/commands/version_spec.rb
305
392
  - spec/cli/out_spec.rb
306
- - spec/fixtures/api_cache.dump
307
- - spec/fixtures/play_store/api_cache.dump
308
- - spec/fixtures/play_store/auth_failure.txt
309
- - spec/fixtures/play_store/auth_success.txt
310
- - spec/fixtures/play_store/discovery.txt
311
- - spec/fixtures/play_store/dummy.p12
312
- - spec/fixtures/play_store/empty.txt
313
- - spec/fixtures/play_store/products_failure.txt
314
- - spec/fixtures/play_store/products_success.txt
315
- - spec/play_store/client_spec.rb
316
- - spec/play_store/config_spec.rb
317
- - spec/play_store/discovery_respository_spec.rb
318
- - spec/play_store/receipt_spec.rb
319
- - spec/play_store/subscription_spec.rb
320
- - 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
321
409
  - spec/play_store/verification_failure_spec.rb
322
- - spec/play_store/verification_spec.rb
323
410
  - spec/play_store/verifier_spec.rb
324
411
  - spec/spec_helper.rb
325
412
  - spec/support/with_command.rb
326
413
  - spec/support/with_fixtures.rb
327
414
  - spec/support/with_temp_file.rb
328
- has_rdoc: