hrk 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +44 -15
- data/lib/hrk/execute/command.rb +17 -10
- data/lib/hrk/heroku.rb +4 -4
- data/spec/hrk/execute/command_spec.rb +13 -25
- data/spec/hrk/heroku_spec.rb +6 -6
- metadata +37 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a5606eeb5d8dc713063b4d76ef4633a60d0ba61
|
4
|
+
data.tar.gz: db35ff5cc2c2ea9445087056d1057a4a1db4100f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 425ecb4c9bb064204f13a074b1e3b21b1c066a754241a5d62bfa66ff6a01d9b2bd69736aa85f778e5d9996f50f697ec4b9514ad56f4b5d9ed8a431b62cca0eb9
|
7
|
+
data.tar.gz: c3d7d9ae715a2a0ba7846c6915b975bbf6e589dafd06b0554ca9f2e604491447fc1c2f8531a54b79fc6b6a07be1af6a5b147b048f4405182c82416284d2aed78
|
data/README.md
CHANGED
@@ -2,6 +2,25 @@
|
|
2
2
|
|
3
3
|
Hrk 2 swim like a dolphin in a sea of heroku commands
|
4
4
|
|
5
|
+
```
|
6
|
+
,|
|
7
|
+
/ ;
|
8
|
+
/ \
|
9
|
+
: ,'(
|
10
|
+
|( `.\
|
11
|
+
: \ `\ \.
|
12
|
+
\ `. | `.
|
13
|
+
\ `-._ ; \
|
14
|
+
\ ``-.'.. _ `._
|
15
|
+
`. `-. ```-...__
|
16
|
+
.'`. --.. ``-..____
|
17
|
+
,'.-'`,_-._ (((( <o. ,'
|
18
|
+
`' `-.)``-._-...__```` ____.-'
|
19
|
+
,' _,'.--,---------'
|
20
|
+
_.-' _..-' ),'
|
21
|
+
``--'' `
|
22
|
+
```
|
23
|
+
|
5
24
|
## Getting started
|
6
25
|
|
7
26
|
You can install the Hrk gem using the gem command:
|
@@ -21,7 +40,7 @@ $ bundle install
|
|
21
40
|
|
22
41
|
And enjoy the hrk command awesome power:
|
23
42
|
```
|
24
|
-
$ hrk your-heroku-remote-name
|
43
|
+
$ hrk logs -r your-heroku-remote-name && hrk run console
|
25
44
|
```
|
26
45
|
|
27
46
|
|
@@ -69,9 +88,9 @@ Yup. Now It doesn't look really that better now does it?
|
|
69
88
|
Hrk remembers the previous remote you've used. So you can do:
|
70
89
|
|
71
90
|
```bash
|
72
|
-
$ hrk this-relly-long-remote-name
|
73
|
-
hrk
|
74
|
-
hrk
|
91
|
+
$ hrk -r this-relly-long-remote-name run rake do:some:work && \
|
92
|
+
hrk run rake arrange:stuff && \
|
93
|
+
hrk run rake test:some:thingy
|
75
94
|
```
|
76
95
|
|
77
96
|
Isn't it more fun?
|
@@ -85,9 +104,9 @@ close your terminal.
|
|
85
104
|
|
86
105
|
```bash
|
87
106
|
$ git push demo && \
|
88
|
-
hrk demo
|
107
|
+
hrk -r demo run rake set-this-once && \ # happens on demo
|
89
108
|
git push -f demo HEAD^ && \
|
90
|
-
hrk
|
109
|
+
hrk restart # also on demo
|
91
110
|
```
|
92
111
|
|
93
112
|
**...I chain hrk commands on concurrent terminals for different remotes?**
|
@@ -97,11 +116,11 @@ Then:
|
|
97
116
|
|
98
117
|
```bash
|
99
118
|
# on terminal 1
|
100
|
-
$ hrk demo
|
101
|
-
hrk
|
119
|
+
$ hrk -r demo run rake db:migrate && \ # happens on demo
|
120
|
+
hrk restart # still on demo
|
102
121
|
# on terminal 2
|
103
|
-
$ hrk prod
|
104
|
-
hrk
|
122
|
+
$ hrk -r prod run rake db:migrate && \ # happens on prod
|
123
|
+
hrk restart # still on prod
|
105
124
|
```
|
106
125
|
|
107
126
|
**...I set another remote after completing a bunch of commands?**
|
@@ -109,11 +128,21 @@ $ hrk prod: run rake db:migrate && \ # happens on prod
|
|
109
128
|
The last remote set is the one used by default for subsequent commands. So:
|
110
129
|
|
111
130
|
```bash
|
112
|
-
$ hrk demo
|
113
|
-
hrk
|
114
|
-
hrk prod
|
115
|
-
hrk
|
116
|
-
hrk
|
131
|
+
$ hrk -r demo run rake db:migrate && \ # happens on demo
|
132
|
+
hrk restart && \ # also on demo
|
133
|
+
hrk -r prod maintenance:on && \ # happens on prod
|
134
|
+
hrk run rake db:migrate && \ # also on prod
|
135
|
+
hrk maintenance:off # still on prod
|
136
|
+
```
|
137
|
+
|
138
|
+
**...I place the "-r remote" argument at the end of the command, the heroku way**
|
139
|
+
|
140
|
+
It just works.
|
141
|
+
```bash
|
142
|
+
# this command
|
143
|
+
$ hrk run console -r demo
|
144
|
+
# is the same as
|
145
|
+
$ hrk -r demo run console
|
117
146
|
```
|
118
147
|
|
119
148
|
## Do I still need the heroku toolbelt?
|
data/lib/hrk/execute/command.rb
CHANGED
@@ -1,25 +1,32 @@
|
|
1
1
|
module Hrk
|
2
2
|
module Execute
|
3
3
|
class Command
|
4
|
-
REMOTE_MATCHER = %r{\A(.+):\Z}
|
5
|
-
|
6
4
|
attr_reader :env
|
7
5
|
|
8
6
|
def initialize
|
9
7
|
@env = Hrk::Env.new
|
10
8
|
end
|
11
9
|
|
12
|
-
def call
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
def call *args
|
11
|
+
remote = remote_name args
|
12
|
+
if remote
|
13
|
+
@env.remote = remote
|
14
|
+
Hrk::Heroku.new(remote).call(remoteless_command(remote, args))
|
16
15
|
else
|
17
|
-
raise ArgumentError.new("
|
18
|
-
|
19
|
-
@env.remote = remote_name
|
20
|
-
Hrk::Heroku.new(remote_name).call(args.join(' '))
|
16
|
+
raise ArgumentError.new("No remote has been previously defined and the command does not explicitely mention a remote") unless @env.remote?
|
17
|
+
Hrk::Heroku.new(@env.remote).call(args.join(' '))
|
21
18
|
end
|
22
19
|
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def remote_name args
|
24
|
+
args.each_cons(2).detect { |(parameter, _)| parameter == '-r' }.join ' ' rescue nil
|
25
|
+
end
|
26
|
+
|
27
|
+
def remoteless_command remote, args
|
28
|
+
args.join(' ').gsub(%r{\s*#{remote}\s*}, ' ').strip
|
29
|
+
end
|
23
30
|
end
|
24
31
|
end
|
25
32
|
end
|
data/lib/hrk/heroku.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
module Hrk
|
2
2
|
class Heroku
|
3
|
-
def initialize
|
4
|
-
@
|
3
|
+
def initialize remote
|
4
|
+
@remote = remote
|
5
5
|
end
|
6
6
|
|
7
7
|
def call command
|
8
8
|
validate! command
|
9
|
-
system %Q(heroku #{command}
|
9
|
+
system %Q(heroku #{command} #{@remote})
|
10
10
|
end
|
11
11
|
|
12
12
|
private
|
13
13
|
|
14
14
|
def validate! command
|
15
|
-
raise ExplicitApplicationError.new, "You're calling a command on remote #{@
|
15
|
+
raise ExplicitApplicationError.new, "You're calling a command on remote #{@remote} yet the command explicitly references #{command[%r{-[ar]\s+\S+}]}" if command =~ %r{ -[ra]\b}
|
16
16
|
end
|
17
17
|
|
18
18
|
class ExplicitApplicationError < Exception
|
@@ -21,16 +21,16 @@ RSpec.describe Hrk::Execute::Command do
|
|
21
21
|
describe "when the command returns #{result}" do
|
22
22
|
before { allow(heroku).to receive(:call).and_return(result) }
|
23
23
|
|
24
|
-
it { expect(command.call(
|
24
|
+
it { expect(command.call('-r', remote, *args)).to eq result }
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
describe 'interactions' do
|
29
|
-
before { command.call
|
29
|
+
before { command.call '-r', remote, *args }
|
30
30
|
|
31
|
-
it { expect(Hrk::Heroku).to have_received(:new).with(remote) }
|
31
|
+
it { expect(Hrk::Heroku).to have_received(:new).with("-r #{remote}") }
|
32
32
|
it { expect(heroku).to have_received(:call).with("whatever that:may -b") }
|
33
|
-
it { expect(command.env).to have_received(:remote=).with(remote) }
|
33
|
+
it { expect(command.env).to have_received(:remote=).with("-r #{remote}") }
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -41,14 +41,13 @@ RSpec.describe Hrk::Execute::Command do
|
|
41
41
|
before { expect(command.env).not_to receive(:remote=) }
|
42
42
|
|
43
43
|
it { expect { command.call }.to raise_error ArgumentError }
|
44
|
-
it { expect { command.call "
|
45
|
-
it { expect { command.call
|
46
|
-
it { expect { command.call ":", *other_args }.to raise_error ArgumentError }
|
44
|
+
it { expect { command.call "parameterless-remote", *other_args }.to raise_error ArgumentError }
|
45
|
+
it { expect { command.call *other_args, '-r' }.to raise_error ArgumentError }
|
47
46
|
end
|
48
47
|
end
|
49
48
|
|
50
49
|
context 'a remote was previously memorized' do
|
51
|
-
let(:previous_remote) { "ye-olde-remote#{rand(1..9)}" }
|
50
|
+
let(:previous_remote) { "-r ye-olde-remote#{rand(1..9)}" }
|
52
51
|
before { allow(command.env).to receive(:remote).and_return(previous_remote) }
|
53
52
|
before { allow(command.env).to receive(:remote?).and_return(true) }
|
54
53
|
|
@@ -60,16 +59,16 @@ RSpec.describe Hrk::Execute::Command do
|
|
60
59
|
describe "when the command returns #{result}" do
|
61
60
|
before { allow(heroku).to receive(:call).and_return(result) }
|
62
61
|
|
63
|
-
it { expect(command.call(
|
62
|
+
it { expect(command.call('-r', remote, *args)).to eq result }
|
64
63
|
end
|
65
64
|
end
|
66
65
|
|
67
66
|
describe 'interactions' do
|
68
|
-
before { command.call
|
67
|
+
before { command.call '-r', remote, *args }
|
69
68
|
|
70
|
-
it { expect(Hrk::Heroku).to have_received(:new).with(remote) }
|
69
|
+
it { expect(Hrk::Heroku).to have_received(:new).with("-r #{remote}") }
|
71
70
|
it { expect(heroku).to have_received(:call).with("whatever that:may -b") }
|
72
|
-
it { expect(command.env).to have_received(:remote=).with(remote) }
|
71
|
+
it { expect(command.env).to have_received(:remote=).with("-r #{remote}") }
|
73
72
|
end
|
74
73
|
end
|
75
74
|
|
@@ -80,28 +79,17 @@ RSpec.describe Hrk::Execute::Command do
|
|
80
79
|
describe "when the command returns #{result}" do
|
81
80
|
before { allow(heroku).to receive(:call).and_return(result) }
|
82
81
|
|
83
|
-
it { expect(command.call(
|
82
|
+
it { expect(command.call(*args)).to eq result }
|
84
83
|
end
|
85
84
|
end
|
86
85
|
|
87
86
|
describe 'interactions' do
|
88
|
-
before { command.call
|
87
|
+
before { command.call *args }
|
89
88
|
|
90
89
|
it { expect(Hrk::Heroku).to have_received(:new).with(previous_remote) }
|
91
90
|
it { expect(heroku).to have_received(:call).with("whatever that:may -b") }
|
92
91
|
end
|
93
92
|
end
|
94
|
-
|
95
|
-
describe 'edge cases (no remote or improper remote)' do
|
96
|
-
let(:other_args) { %W(something-#{rand(1..9)} or-another) }
|
97
|
-
|
98
|
-
before { expect(heroku).not_to receive(:call) }
|
99
|
-
before { expect(command.env).not_to receive(:remote=) }
|
100
|
-
|
101
|
-
it { expect { command.call }.to raise_error ArgumentError }
|
102
|
-
it { expect { command.call "bad-remote", *other_args }.to raise_error ArgumentError }
|
103
|
-
it { expect { command.call ":misplaced-marker", *other_args }.to raise_error ArgumentError }
|
104
|
-
end
|
105
93
|
end
|
106
94
|
end
|
107
95
|
end
|
data/spec/hrk/heroku_spec.rb
CHANGED
@@ -16,11 +16,11 @@ RSpec.describe Hrk::Heroku do
|
|
16
16
|
before { allow(heroku).to receive(:system) }
|
17
17
|
|
18
18
|
describe '(standard case)' do
|
19
|
-
calling 'call rake db:rollback', on_remote: 'demo', starts: 'heroku call rake db:rollback -r demo'
|
20
|
-
calling 'call rake db:migrate', on_remote: 'prod', starts: 'heroku call rake db:migrate -r prod'
|
21
|
-
calling 'call console', on_remote: 'staging', starts: 'heroku call console -r staging'
|
22
|
-
calling 'logs -t', on_remote: 'prod', starts: 'heroku logs -t -r prod'
|
23
|
-
calling 'pgbackups:capture', on_remote: 'demo', starts: 'heroku pgbackups:capture -r demo'
|
19
|
+
calling 'call rake db:rollback', on_remote: '-r demo', starts: 'heroku call rake db:rollback -r demo'
|
20
|
+
calling 'call rake db:migrate', on_remote: '-r prod', starts: 'heroku call rake db:migrate -r prod'
|
21
|
+
calling 'call console', on_remote: '-r staging', starts: 'heroku call console -r staging'
|
22
|
+
calling 'logs -t', on_remote: '-r prod', starts: 'heroku logs -t -r prod'
|
23
|
+
calling 'pgbackups:capture', on_remote: '-r demo', starts: 'heroku pgbackups:capture -r demo'
|
24
24
|
end
|
25
25
|
|
26
26
|
describe '(edge case)' do
|
@@ -32,7 +32,7 @@ RSpec.describe Hrk::Heroku do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
describe 'the result of the command' do
|
35
|
-
subject(:heroku) { Hrk::Heroku.new('some-remote') }
|
35
|
+
subject(:heroku) { Hrk::Heroku.new('-r some-remote') }
|
36
36
|
before { allow(heroku).to receive(:system).with('heroku some command -r some-remote').and_return(system_returns) }
|
37
37
|
|
38
38
|
context 'the command result is truthy' do
|
metadata
CHANGED
@@ -1,58 +1,79 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hrk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michel Belleville
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 3.1.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 4.0.0
|
20
23
|
type: :development
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - '='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.1.0
|
30
|
+
- - "<"
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
32
|
+
version: 4.0.0
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: nyan-cat-formatter
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- -
|
37
|
+
- - '='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.11'
|
40
|
+
- - "<"
|
32
41
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
42
|
+
version: '1.0'
|
34
43
|
type: :development
|
35
44
|
prerelease: false
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
37
46
|
requirements:
|
38
|
-
- -
|
47
|
+
- - '='
|
39
48
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
49
|
+
version: '0.11'
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '1.0'
|
41
53
|
- !ruby/object:Gem::Dependency
|
42
54
|
name: guard-rspec
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
44
56
|
requirements:
|
45
|
-
- -
|
57
|
+
- - '='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 4.5.0
|
60
|
+
- - "<"
|
46
61
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
62
|
+
version: 5.0.0
|
48
63
|
type: :development
|
49
64
|
prerelease: false
|
50
65
|
version_requirements: !ruby/object:Gem::Requirement
|
51
66
|
requirements:
|
52
|
-
- -
|
67
|
+
- - '='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 4.5.0
|
70
|
+
- - "<"
|
53
71
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
55
|
-
description:
|
72
|
+
version: 5.0.0
|
73
|
+
description: |
|
74
|
+
Hrk gives you the hrk command that proxies commands to heroku, keeping track of
|
75
|
+
the latest remote you used so you don't have to keep on typing it on every
|
76
|
+
subsequent command.
|
56
77
|
email: michel.belleville@gmail.com
|
57
78
|
executables:
|
58
79
|
- hrk
|
@@ -95,5 +116,5 @@ rubyforge_project:
|
|
95
116
|
rubygems_version: 2.2.2
|
96
117
|
signing_key:
|
97
118
|
specification_version: 4
|
98
|
-
summary: Hrk
|
119
|
+
summary: Hrk remembers your heroku remotes
|
99
120
|
test_files: []
|