play_time 0.0.3 → 0.1.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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -0
- data/README.md +2 -0
- data/lib/play_time/client.rb +26 -6
- data/lib/play_time/configuration.rb +12 -0
- data/lib/play_time/promote.rb +22 -0
- data/lib/play_time/tasks.rb +27 -0
- data/lib/play_time/templates/play_time.yml +7 -0
- data/lib/play_time/track.rb +2 -0
- data/lib/play_time/upload.rb +1 -2
- data/lib/play_time/version.rb +1 -1
- data/lib/play_time.rb +24 -8
- data/spec/{apk_spec.rb → lib/apk_spec.rb} +0 -0
- data/spec/{client_spec.rb → lib/client_spec.rb} +109 -0
- data/spec/lib/configuration_spec.rb +69 -0
- data/spec/lib/promote_spec.rb +53 -0
- data/spec/{runner_spec.rb → lib/runner_spec.rb} +0 -0
- data/spec/lib/tasks_spec.rb +76 -0
- data/spec/{track_spec.rb → lib/track_spec.rb} +0 -0
- data/spec/{upload_spec.rb → lib/upload_spec.rb} +0 -0
- data/spec/play_time_spec.rb +48 -1
- metadata +21 -13
- data/spec/configuration_spec.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e23c57d7102a28cbe8b3554651891b0a5b6bff67
|
4
|
+
data.tar.gz: 813f6b865d38e05b6998991d307c8fa8c973a0e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90cd9ec3380d972328fef4105a8729b57fd39aabc9c71269ecac47ed51938b3b18daba3b30adb24545a9fe5d7679dd633999f17ad8fcb848962aa2ac0325d7df
|
7
|
+
data.tar.gz: 841c881c775d74055937b3e3be0d96ce9dc68a883dae45440023ea01f51d9664a67297c5c383a23db913ab8df5af08383d83db93278a2346e8fb7ff696f825ac
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.1.3
|
data/README.md
CHANGED
data/lib/play_time/client.rb
CHANGED
@@ -5,6 +5,8 @@ require 'play_time/apk'
|
|
5
5
|
|
6
6
|
module PlayTime
|
7
7
|
class Client
|
8
|
+
class VersionCodeNotFound < StandardError; end
|
9
|
+
|
8
10
|
TOKEN_URI = 'https://accounts.google.com/o/oauth2/token'.freeze
|
9
11
|
SCOPE = 'https://www.googleapis.com/auth/androidpublisher'.freeze
|
10
12
|
API = 'androidpublisher'.freeze
|
@@ -17,27 +19,45 @@ module PlayTime
|
|
17
19
|
|
18
20
|
def commit(track)
|
19
21
|
create_insert
|
20
|
-
upload_apk
|
21
|
-
update_track(track)
|
22
|
+
version_code = upload_apk
|
23
|
+
update_track(track, version_code)
|
24
|
+
save
|
25
|
+
end
|
26
|
+
|
27
|
+
def update(track, version_code)
|
28
|
+
create_insert
|
29
|
+
old_track = get_old_track! version_code
|
30
|
+
update_track(old_track.track, *old_track.versionCodes - [version_code])
|
31
|
+
update_track(track, version_code)
|
22
32
|
save
|
23
33
|
end
|
24
34
|
|
25
35
|
private
|
26
36
|
|
27
|
-
attr_reader :edit_id
|
37
|
+
attr_reader :edit_id
|
28
38
|
|
29
39
|
def create_insert
|
30
40
|
@edit_id = run!(api_method: service.edits.insert, parameters: parameters).data.id
|
31
41
|
end
|
32
42
|
|
43
|
+
def get_old_track!(version_code)
|
44
|
+
old_track = get_tracks.find { |track| track.versionCodes.include? version_code }
|
45
|
+
|
46
|
+
old_track || raise(VersionCodeNotFound, version_code)
|
47
|
+
end
|
48
|
+
|
49
|
+
def get_tracks
|
50
|
+
run!(api_method: service.edits.tracks.list, parameters: parameters.merge(editId: edit_id)).data.tracks
|
51
|
+
end
|
52
|
+
|
33
53
|
def upload_apk
|
34
54
|
upload_params = parameters.merge(editId: edit_id, uploadType: 'media')
|
35
|
-
|
55
|
+
run!(api_method: service.edits.apks.upload, parameters: upload_params, media: Apk.load).data.versionCode
|
36
56
|
end
|
37
57
|
|
38
|
-
def update_track(track)
|
58
|
+
def update_track(track, *version_codes)
|
39
59
|
update_params = parameters.merge(editId: edit_id, track: track)
|
40
|
-
run! api_method: service.edits.tracks.update, parameters: update_params, body_object: { versionCodes:
|
60
|
+
run! api_method: service.edits.tracks.update, parameters: update_params, body_object: { versionCodes: version_codes }
|
41
61
|
end
|
42
62
|
|
43
63
|
def save
|
@@ -13,6 +13,18 @@ module PlayTime
|
|
13
13
|
package_name
|
14
14
|
).freeze
|
15
15
|
|
16
|
+
def self.exists?
|
17
|
+
File.exist? PlayTime.config_path
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.create_config(config_dir, config_path)
|
21
|
+
unless File.exist?(config_dir)
|
22
|
+
FileUtils.mkdir_p(config_dir)
|
23
|
+
end
|
24
|
+
|
25
|
+
FileUtils.cp("#{__dir__}/templates/play_time.yml", config_path)
|
26
|
+
end
|
27
|
+
|
16
28
|
def initialize(config)
|
17
29
|
@config = config
|
18
30
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'play_time/client'
|
2
|
+
|
3
|
+
module PlayTime
|
4
|
+
class Promote
|
5
|
+
class << self
|
6
|
+
def promote(version_code, track)
|
7
|
+
new(Client.new).promote(version_code, track)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :client
|
12
|
+
|
13
|
+
def initialize(client)
|
14
|
+
@client = client
|
15
|
+
end
|
16
|
+
|
17
|
+
def promote(version_code, track)
|
18
|
+
client.authorize!
|
19
|
+
client.update(track, version_code)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'play_time'
|
3
|
+
|
4
|
+
namespace :play_time do
|
5
|
+
namespace :upload do
|
6
|
+
PlayTime::Track::TRACKS.each do |track|
|
7
|
+
desc "Uploads apk to #{track}"
|
8
|
+
task(track) do |task|
|
9
|
+
PlayTime.upload(track)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
namespace :promote do
|
15
|
+
PlayTime::Track::TRACKS.each do |track|
|
16
|
+
desc "Promote apk version code to #{track}"
|
17
|
+
task(track, :version_code) do |task, args|
|
18
|
+
PlayTime.promote(track, args[:version_code].to_i)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
desc 'Creates a config file in config/play_time.yml'
|
24
|
+
task :install do
|
25
|
+
PlayTime.install
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
package_name: # package name
|
2
|
+
secret_path: # path to secret.p12
|
3
|
+
secret_passphrase: # secret.p12 passphrase
|
4
|
+
apk_path: # path to apk
|
5
|
+
client_name: # Google developer client application name
|
6
|
+
client_version: # Google developer client application version
|
7
|
+
issuer: # issuer for Google developer application
|
data/lib/play_time/track.rb
CHANGED
data/lib/play_time/upload.rb
CHANGED
data/lib/play_time/version.rb
CHANGED
data/lib/play_time.rb
CHANGED
@@ -3,17 +3,33 @@ require 'play_time/version'
|
|
3
3
|
require 'play_time/track'
|
4
4
|
require 'play_time/configuration'
|
5
5
|
require 'play_time/upload'
|
6
|
+
require 'play_time/promote'
|
6
7
|
|
7
8
|
module PlayTime
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
class << self
|
10
|
+
def config_path
|
11
|
+
ENV['PLAY_TIME_CONFIG_PATH'] || Configuration::DEFAULT_CONFIG
|
12
|
+
end
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
14
|
+
def configuration
|
15
|
+
@configuration ||= Configuration.new(YAML.load(open(config_path).read))
|
16
|
+
end
|
17
|
+
|
18
|
+
def upload(track)
|
19
|
+
Upload.upload(track)
|
20
|
+
end
|
21
|
+
|
22
|
+
def promote(version_code, track)
|
23
|
+
Promote.promote(version_code, track)
|
24
|
+
end
|
15
25
|
|
16
|
-
|
17
|
-
|
26
|
+
def install
|
27
|
+
if Configuration.exists?
|
28
|
+
puts "You already have a config file in #{config_path}!"
|
29
|
+
else
|
30
|
+
puts "Generating a new config file: #{config_path}"
|
31
|
+
Configuration.create_config('config', config_path)
|
32
|
+
end
|
33
|
+
end
|
18
34
|
end
|
19
35
|
end
|
File without changes
|
@@ -129,4 +129,113 @@ describe PlayTime::Client do
|
|
129
129
|
)
|
130
130
|
end
|
131
131
|
end
|
132
|
+
|
133
|
+
describe '#update' do
|
134
|
+
let(:version_code) { 99 }
|
135
|
+
let(:track) { 'alpha' }
|
136
|
+
let(:service) { double(Google::APIClient::API) }
|
137
|
+
let(:data) { double(:data, id: 'id', tracks: tracks) }
|
138
|
+
let(:response) { double(:response, data: data) }
|
139
|
+
let(:tracks) { [double(:track, track: 'old track', versionCodes: [version_code])] }
|
140
|
+
|
141
|
+
subject { PlayTime::Client.new.update(track, version_code) }
|
142
|
+
|
143
|
+
before do
|
144
|
+
allow(PlayTime.configuration).to receive(:package_name).and_return('com.package.name')
|
145
|
+
allow(PlayTime::Runner).to receive(:run!).and_return(response)
|
146
|
+
allow(api_client).to receive(:discovered_api).and_return(service)
|
147
|
+
allow(service).to receive_message_chain('edits.insert').and_return('insert')
|
148
|
+
allow(service).to receive_message_chain('edits.tracks.update').and_return('track update')
|
149
|
+
allow(service).to receive_message_chain('edits.tracks.list').and_return('lists')
|
150
|
+
allow(service).to receive_message_chain('edits.commit').and_return('commit')
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
it 'creates a service' do
|
155
|
+
subject
|
156
|
+
|
157
|
+
expect(api_client).to have_received(:discovered_api).with('androidpublisher', 'v2')
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'creates an edit' do
|
161
|
+
subject
|
162
|
+
|
163
|
+
expect(PlayTime::Runner).to have_received(:run!).with(
|
164
|
+
api_client, api_method: 'insert', parameters: { packageName: 'com.package.name' })
|
165
|
+
end
|
166
|
+
|
167
|
+
context 'when the version code is in no other track' do
|
168
|
+
let(:tracks) { [double(:track, track: 'old track', versionCodes: [-23])] }
|
169
|
+
|
170
|
+
it 'raises an error' do
|
171
|
+
expect {
|
172
|
+
subject
|
173
|
+
}.to raise_error PlayTime::Client::VersionCodeNotFound, version_code.to_s
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
context 'when the version code is in another track' do
|
178
|
+
let(:tracks) { [double(:track, track: 'old track', versionCodes: [version_code])] }
|
179
|
+
|
180
|
+
context 'when it is the only version in that track' do
|
181
|
+
it 'removes everything from the old track' do
|
182
|
+
subject
|
183
|
+
|
184
|
+
expect(PlayTime::Runner).to have_received(:run!).with(
|
185
|
+
api_client,
|
186
|
+
api_method: 'track update',
|
187
|
+
parameters: { packageName: 'com.package.name', editId: 'id', track: 'old track' },
|
188
|
+
body_object: { versionCodes: [] }
|
189
|
+
)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
context 'when there are other versions in the track' do
|
194
|
+
let(:tracks) { [double(:track, track: 'old track', versionCodes: [version_code, 100])] }
|
195
|
+
|
196
|
+
it 'only removes itself from the track' do
|
197
|
+
subject
|
198
|
+
|
199
|
+
expect(PlayTime::Runner).to have_received(:run!).with(
|
200
|
+
api_client,
|
201
|
+
api_method: 'track update',
|
202
|
+
parameters: { packageName: 'com.package.name', editId: 'id', track: 'old track' },
|
203
|
+
body_object: { versionCodes: [100] }
|
204
|
+
)
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'updates a track with the new version code' do
|
210
|
+
subject
|
211
|
+
|
212
|
+
expect(PlayTime::Runner).to have_received(:run!).with(
|
213
|
+
api_client,
|
214
|
+
api_method: 'track update',
|
215
|
+
parameters: { packageName: 'com.package.name', editId: 'id', track: track },
|
216
|
+
body_object: { versionCodes: [version_code] }
|
217
|
+
)
|
218
|
+
end
|
219
|
+
|
220
|
+
it 'updates a track with the new version code' do
|
221
|
+
subject
|
222
|
+
|
223
|
+
expect(PlayTime::Runner).to have_received(:run!).with(
|
224
|
+
api_client,
|
225
|
+
api_method: 'track update',
|
226
|
+
parameters: { packageName: 'com.package.name', editId: 'id', track: track },
|
227
|
+
body_object: { versionCodes: [version_code] }
|
228
|
+
)
|
229
|
+
end
|
230
|
+
|
231
|
+
it 'commits the changes' do
|
232
|
+
subject
|
233
|
+
|
234
|
+
expect(PlayTime::Runner).to have_received(:run!).with(
|
235
|
+
api_client,
|
236
|
+
api_method: 'commit',
|
237
|
+
parameters: { packageName: 'com.package.name', editId: 'id' }
|
238
|
+
)
|
239
|
+
end
|
240
|
+
end
|
132
241
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
describe PlayTime::Configuration do
|
2
|
+
shared_examples_for 'configuration option' do
|
3
|
+
let(:configuration) { PlayTime::Configuration.new({option.to_s => option, 'foo' => 'bar'}) }
|
4
|
+
|
5
|
+
subject { configuration.send(option) }
|
6
|
+
|
7
|
+
it "fetchings the option from the config" do
|
8
|
+
expect(subject).to eq option
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'missing options' do
|
12
|
+
let(:configuration) { PlayTime::Configuration.new({'foo' => 'bar'}) }
|
13
|
+
|
14
|
+
it "raises an exception for each missing param" do
|
15
|
+
expect {
|
16
|
+
subject
|
17
|
+
}.to raise_error PlayTime::Configuration::MissingOption, "Missing #{option} in #{PlayTime.config_path}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
PlayTime::Configuration::OPTIONS.each do |option|
|
23
|
+
describe "##{option}" do
|
24
|
+
let(:option) { option }
|
25
|
+
|
26
|
+
it_behaves_like 'configuration option'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '.exists?' do
|
31
|
+
before do
|
32
|
+
allow(File).to receive(:exist?).and_return(true)
|
33
|
+
allow(PlayTime).to receive(:config_path).and_return('/path')
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'delegates to file' do
|
37
|
+
PlayTime::Configuration.exists?
|
38
|
+
|
39
|
+
expect(File).to have_received(:exist?).with('/path')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '.create_config' do
|
44
|
+
let(:config_path) { '/config/path.yml' }
|
45
|
+
let(:config_dir) { '/config/dir' }
|
46
|
+
|
47
|
+
subject { PlayTime::Configuration.create_config(config_dir, config_path) }
|
48
|
+
|
49
|
+
before do
|
50
|
+
allow(FileUtils).to receive(:mkdir_p)
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'when config dir exists' do
|
54
|
+
before do
|
55
|
+
allow(File).to receive(:exist?).and_return(true)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'does not create a config dir' do
|
59
|
+
expect(FileUtils).not_to have_received(:mkdir_p).with(config_dir)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when config dir does not exist' do
|
64
|
+
before do
|
65
|
+
allow(File).to receive(:exist?).and_return(false)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
describe PlayTime::Promote do
|
2
|
+
let(:version_code) { 99 }
|
3
|
+
let(:track) { 'alpha' }
|
4
|
+
|
5
|
+
describe '.promote' do
|
6
|
+
let(:promote) { instance_double(PlayTime::Promote) }
|
7
|
+
let(:client) { instance_double(PlayTime::Client) }
|
8
|
+
|
9
|
+
subject { PlayTime::Promote.promote(version_code, track) }
|
10
|
+
|
11
|
+
before do
|
12
|
+
allow(promote).to receive(:promote)
|
13
|
+
allow(PlayTime::Client).to receive(:new).and_return(client)
|
14
|
+
allow(PlayTime::Promote).to receive(:new).and_return(promote)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'promotes the track' do
|
18
|
+
subject
|
19
|
+
|
20
|
+
expect(promote).to have_received(:promote).with(version_code, track)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'instantiates upload with new authorization and client' do
|
24
|
+
subject
|
25
|
+
|
26
|
+
expect(PlayTime::Promote).to have_received(:new).with(client)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#promote' do
|
31
|
+
let(:client) { instance_double(PlayTime::Client) }
|
32
|
+
let(:promote) { PlayTime::Promote.new(client) }
|
33
|
+
|
34
|
+
subject { promote.promote(version_code, track) }
|
35
|
+
|
36
|
+
before do
|
37
|
+
allow(client).to receive(:authorize!)
|
38
|
+
allow(client).to receive(:update)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'authroizes the client' do
|
42
|
+
subject
|
43
|
+
|
44
|
+
expect(client).to have_received(:authorize!)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'updates the track with the version code' do
|
48
|
+
subject
|
49
|
+
|
50
|
+
expect(client).to have_received(:update).with(track, version_code)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
File without changes
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'play_time/tasks'
|
2
|
+
|
3
|
+
describe 'play_time tasks' do
|
4
|
+
describe 'upload' do
|
5
|
+
shared_examples_for 'upload task' do
|
6
|
+
it 'uploads an apk to production' do
|
7
|
+
allow(PlayTime).to receive(:upload)
|
8
|
+
|
9
|
+
Rake::Task["play_time:upload:#{track}"].invoke
|
10
|
+
|
11
|
+
expect(PlayTime).to have_received(:upload).with(track)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
PlayTime::Track::TRACKS.each do |track|
|
16
|
+
it_behaves_like 'upload task' do
|
17
|
+
let(:track) { track }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'promote' do
|
23
|
+
shared_examples_for 'promote task' do
|
24
|
+
it 'promotes the version number' do
|
25
|
+
allow(PlayTime).to receive(:promote)
|
26
|
+
|
27
|
+
Rake::Task["play_time:promote:#{track}"].invoke("232")
|
28
|
+
|
29
|
+
expect(PlayTime).to have_received(:promote).with(track, 232)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
PlayTime::Track::TRACKS.each do |track|
|
34
|
+
it_behaves_like 'promote task' do
|
35
|
+
let(:track) { track }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe 'install task' do
|
41
|
+
let(:config_file) { File.expand_path('config/play_time.yml') }
|
42
|
+
|
43
|
+
before do
|
44
|
+
allow(PlayTime).to receive(:config_path).and_return('config/play_time.yml')
|
45
|
+
Rake::Task['play_time:install'].reenable
|
46
|
+
end
|
47
|
+
|
48
|
+
after do
|
49
|
+
File.delete(config_file) if File.exist?(config_file)
|
50
|
+
end
|
51
|
+
|
52
|
+
context "when config file doesn't exist" do
|
53
|
+
it 'generates an exmaple config file' do
|
54
|
+
Rake::Task['play_time:install'].invoke
|
55
|
+
|
56
|
+
expect(File).to exist(config_file)
|
57
|
+
expect(open(File.expand_path("lib/play_time/templates/play_time.yml")).read). to eq(open(config_file).read)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "when config file already exists" do
|
62
|
+
before do
|
63
|
+
Rake::Task['play_time:install'].invoke
|
64
|
+
Rake::Task['play_time:install'].reenable
|
65
|
+
end
|
66
|
+
|
67
|
+
it "doesn't do anything" do
|
68
|
+
sleep(0.5)
|
69
|
+
|
70
|
+
expect do
|
71
|
+
Rake::Task['play_time:install'].invoke
|
72
|
+
end.not_to change { File.open(PlayTime.config_path).mtime }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
File without changes
|
File without changes
|
data/spec/play_time_spec.rb
CHANGED
@@ -8,7 +8,6 @@ describe PlayTime, if: PlayTime.config_path.end_with?('default.yml') do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
describe '.upload' do
|
11
|
-
let(:apk_path) { '/path/to/app.apk' }
|
12
11
|
let(:track) { PlayTime::Track::ALPHA }
|
13
12
|
|
14
13
|
subject { PlayTime.upload(track) }
|
@@ -21,4 +20,52 @@ describe PlayTime, if: PlayTime.config_path.end_with?('default.yml') do
|
|
21
20
|
expect(PlayTime::Upload).to have_received(:upload).with(track)
|
22
21
|
end
|
23
22
|
end
|
23
|
+
|
24
|
+
describe '.promote' do
|
25
|
+
let(:version_code) { 99 }
|
26
|
+
let(:track) { PlayTime::Track::BETA }
|
27
|
+
|
28
|
+
subject { PlayTime.promote(version_code, track) }
|
29
|
+
|
30
|
+
it 'promotes the version code' do
|
31
|
+
allow(PlayTime::Promote).to receive(:promote)
|
32
|
+
|
33
|
+
subject
|
34
|
+
|
35
|
+
expect(PlayTime::Promote).to have_received(:promote).with(version_code, track)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '.install' do
|
40
|
+
subject { PlayTime.install }
|
41
|
+
|
42
|
+
context 'when configuration exists' do
|
43
|
+
it 'outputs message' do
|
44
|
+
allow(PlayTime::Configuration).to receive(:exists?).and_return(true)
|
45
|
+
|
46
|
+
expect{
|
47
|
+
subject
|
48
|
+
}.to output("You already have a config file in #{PlayTime.config_path}!\n").to_stdout
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'when the configuration does not exist' do
|
53
|
+
|
54
|
+
before do
|
55
|
+
allow(PlayTime::Configuration).to receive(:create_config)
|
56
|
+
allow(PlayTime::Configuration).to receive(:exists?).and_return(false)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'outputs message' do
|
60
|
+
expect{
|
61
|
+
subject
|
62
|
+
}.to output("Generating a new config file: #{PlayTime.config_path}\n").to_stdout
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'creates the config' do
|
66
|
+
subject
|
67
|
+
expect(PlayTime::Configuration).to have_received(:create_config).with('config', PlayTime.config_path)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
24
71
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: play_time
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- IS Dev team
|
@@ -75,6 +75,7 @@ extra_rdoc_files: []
|
|
75
75
|
files:
|
76
76
|
- ".gitignore"
|
77
77
|
- ".rspec"
|
78
|
+
- ".ruby-version"
|
78
79
|
- Gemfile
|
79
80
|
- LICENSE.txt
|
80
81
|
- README.md
|
@@ -83,20 +84,25 @@ files:
|
|
83
84
|
- lib/play_time/apk.rb
|
84
85
|
- lib/play_time/client.rb
|
85
86
|
- lib/play_time/configuration.rb
|
87
|
+
- lib/play_time/promote.rb
|
86
88
|
- lib/play_time/runner.rb
|
89
|
+
- lib/play_time/tasks.rb
|
90
|
+
- lib/play_time/templates/play_time.yml
|
87
91
|
- lib/play_time/track.rb
|
88
92
|
- lib/play_time/upload.rb
|
89
93
|
- lib/play_time/version.rb
|
90
94
|
- play_time.gemspec
|
91
|
-
- spec/apk_spec.rb
|
92
|
-
- spec/client_spec.rb
|
93
|
-
- spec/configuration_spec.rb
|
95
|
+
- spec/lib/apk_spec.rb
|
96
|
+
- spec/lib/client_spec.rb
|
97
|
+
- spec/lib/configuration_spec.rb
|
98
|
+
- spec/lib/promote_spec.rb
|
99
|
+
- spec/lib/runner_spec.rb
|
100
|
+
- spec/lib/tasks_spec.rb
|
101
|
+
- spec/lib/track_spec.rb
|
102
|
+
- spec/lib/upload_spec.rb
|
94
103
|
- spec/play_time_spec.rb
|
95
|
-
- spec/runner_spec.rb
|
96
104
|
- spec/spec_helper.rb
|
97
105
|
- spec/support/config/default.yml
|
98
|
-
- spec/track_spec.rb
|
99
|
-
- spec/upload_spec.rb
|
100
106
|
homepage: https://github.com/is-devteam/play_time
|
101
107
|
licenses:
|
102
108
|
- MIT
|
@@ -122,12 +128,14 @@ signing_key:
|
|
122
128
|
specification_version: 4
|
123
129
|
summary: PlayTime is a gem for uploading apks to the Google Play Store
|
124
130
|
test_files:
|
125
|
-
- spec/apk_spec.rb
|
126
|
-
- spec/client_spec.rb
|
127
|
-
- spec/configuration_spec.rb
|
131
|
+
- spec/lib/apk_spec.rb
|
132
|
+
- spec/lib/client_spec.rb
|
133
|
+
- spec/lib/configuration_spec.rb
|
134
|
+
- spec/lib/promote_spec.rb
|
135
|
+
- spec/lib/runner_spec.rb
|
136
|
+
- spec/lib/tasks_spec.rb
|
137
|
+
- spec/lib/track_spec.rb
|
138
|
+
- spec/lib/upload_spec.rb
|
128
139
|
- spec/play_time_spec.rb
|
129
|
-
- spec/runner_spec.rb
|
130
140
|
- spec/spec_helper.rb
|
131
141
|
- spec/support/config/default.yml
|
132
|
-
- spec/track_spec.rb
|
133
|
-
- spec/upload_spec.rb
|
data/spec/configuration_spec.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
describe PlayTime::Configuration do
|
2
|
-
shared_examples_for 'configuration option' do
|
3
|
-
let(:configuration) { PlayTime::Configuration.new({option.to_s => option, 'foo' => 'bar'}) }
|
4
|
-
|
5
|
-
subject { configuration.send(option) }
|
6
|
-
|
7
|
-
it "fetchings the option from the config" do
|
8
|
-
expect(subject).to eq option
|
9
|
-
end
|
10
|
-
|
11
|
-
context 'missing options' do
|
12
|
-
let(:configuration) { PlayTime::Configuration.new({'foo' => 'bar'}) }
|
13
|
-
|
14
|
-
it "raises an exception for each missing param" do
|
15
|
-
expect {
|
16
|
-
subject
|
17
|
-
}.to raise_error PlayTime::Configuration::MissingOption, "Missing #{option} in #{PlayTime.config_path}"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
PlayTime::Configuration::OPTIONS.each do |option|
|
23
|
-
describe "##{option}" do
|
24
|
-
let(:option) { option }
|
25
|
-
|
26
|
-
it_behaves_like 'configuration option'
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|