hrk 0.0.6 → 0.0.8
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/README.md +12 -0
- data/lib/hrk/env.rb +4 -4
- data/lib/hrk/execute/command.rb +15 -11
- data/lib/hrk/execute/help.rb +12 -4
- data/lib/hrk/heroku.rb +7 -6
- data/lib/hrk.rb +2 -0
- data/spec/hrk/execute/command_spec.rb +67 -22
- data/spec/hrk/heroku_spec.rb +20 -18
- metadata +63 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8df14c2ca4330a91a5cf758825844724e93a4b6
|
4
|
+
data.tar.gz: 4cf32f72933c72821c09b662ed07fbb62525e3bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbaf173a98a54834352a8bd0122d21561760f4a6d8f77922b44aac0a2d702b7ecac4a72ac51cdb4fd93c2669693b8a270c6bc91cb99a5940adf3a0f47e67032a
|
7
|
+
data.tar.gz: 98edc74b9c2f69ca20be31d9d3b84319da03046a02aff5bf55bb94d17c47103159482daa6f1ccc122b2e0291cfa7fe269780aa5c899de6eb272f63b971e61e3b
|
data/README.md
CHANGED
@@ -138,6 +138,7 @@ $ hrk -r demo run rake db:migrate && \ # happens on demo
|
|
138
138
|
**...I place the "-r remote" argument at the end of the command, the heroku way**
|
139
139
|
|
140
140
|
It just works.
|
141
|
+
|
141
142
|
```bash
|
142
143
|
# this command
|
143
144
|
$ hrk run console -r demo
|
@@ -145,6 +146,17 @@ $ hrk run console -r demo
|
|
145
146
|
$ hrk -r demo run console
|
146
147
|
```
|
147
148
|
|
149
|
+
**...I prefer naming my app instead of the remote?**
|
150
|
+
|
151
|
+
You can use either the -r or -a option, either will work as expected and the
|
152
|
+
latest option will be memorized for subsequent uses.
|
153
|
+
|
154
|
+
```bash
|
155
|
+
$ hrk maintenance:on -a my-super-duper-app && \ # happens on my-super-duper-app
|
156
|
+
hrk run console && \ # again on my-super-duper-app
|
157
|
+
hrk maintenance:off # aaand on my-super-duper-app
|
158
|
+
```
|
159
|
+
|
148
160
|
## Do I still need the heroku toolbelt?
|
149
161
|
|
150
162
|
Yes. The hrk command calls the heroku command for you, it does not replace it.
|
data/lib/hrk/env.rb
CHANGED
@@ -5,16 +5,16 @@ require 'tmpdir'
|
|
5
5
|
|
6
6
|
module Hrk
|
7
7
|
class Env
|
8
|
-
def remote=
|
9
|
-
if
|
10
|
-
socket_path.write
|
8
|
+
def remote= *args
|
9
|
+
if args
|
10
|
+
socket_path.write args.join(' ') unless remote == args
|
11
11
|
else
|
12
12
|
socket_path.delete if remote?
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
def remote
|
17
|
-
socket_path.read if remote?
|
17
|
+
socket_path.read.split(' ', 2) if remote?
|
18
18
|
end
|
19
19
|
|
20
20
|
def remote?
|
data/lib/hrk/execute/command.rb
CHANGED
@@ -3,29 +3,33 @@ module Hrk
|
|
3
3
|
class Command
|
4
4
|
attr_reader :env
|
5
5
|
|
6
|
+
ARG = /\A-[ar]\Z/
|
7
|
+
|
6
8
|
def initialize
|
7
9
|
@env = Hrk::Env.new
|
8
10
|
end
|
9
11
|
|
10
12
|
def call *args
|
11
|
-
remote =
|
13
|
+
remote, command = remote_and_command args
|
12
14
|
if remote
|
13
15
|
@env.remote = remote
|
14
|
-
Hrk::Heroku.new(remote).call(
|
16
|
+
Hrk::Heroku.new(*remote).call(*command)
|
15
17
|
else
|
16
18
|
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(
|
19
|
+
Hrk::Heroku.new(*@env.remote).call(*command)
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
def remote_and_command args
|
24
|
+
args.slice_before { |arg| arg =~ ARG }.inject([nil, []]) do |r, slice|
|
25
|
+
if slice.first =~ ARG
|
26
|
+
raise ArgumentError.new('Remote option without value') if slice.length < 2
|
27
|
+
raise ArgumentError.new('Too many remotes mentionned') if r.first
|
28
|
+
[slice.take(2), r.last + slice.drop(2)]
|
29
|
+
else
|
30
|
+
[r.first, r.last + slice]
|
31
|
+
end
|
32
|
+
end
|
29
33
|
end
|
30
34
|
end
|
31
35
|
end
|
data/lib/hrk/execute/help.rb
CHANGED
@@ -16,17 +16,25 @@ module Hrk
|
|
16
16
|
def display
|
17
17
|
puts <<-eos
|
18
18
|
Usage:
|
19
|
-
hrk [remote]
|
19
|
+
hrk command [(-r remote | -a appname)]...
|
20
20
|
hrk [h | help | -h | --help]
|
21
21
|
|
22
|
-
hrk remembers the last
|
23
|
-
|
22
|
+
The hrk command remembers the last app you've send a command to on a terminal
|
23
|
+
to use it when you omit the optional -r or -a option on subsequent calls.
|
24
24
|
|
25
25
|
The command is whatever you would give heroku, except (obviously) for the
|
26
26
|
-r or -a argument.
|
27
27
|
|
28
|
+
Note that whatever argument and/or options the command is composed of should not
|
29
|
+
be tampered with and passed as is to the heroku toolbelt command.
|
30
|
+
|
28
31
|
Options:
|
29
|
-
-h --help
|
32
|
+
-h --help Display this screen.
|
33
|
+
-r remote Sets the remote for this command and the following
|
34
|
+
-a appname Sets the heroku app name for this command and the following
|
35
|
+
|
36
|
+
More on the hrk command on the gem's website:
|
37
|
+
https://github.com/Bastes/hrk
|
30
38
|
eos
|
31
39
|
end
|
32
40
|
|
data/lib/hrk/heroku.rb
CHANGED
@@ -1,18 +1,19 @@
|
|
1
1
|
module Hrk
|
2
2
|
class Heroku
|
3
|
-
def initialize remote
|
3
|
+
def initialize *remote
|
4
4
|
@remote = remote
|
5
5
|
end
|
6
6
|
|
7
|
-
def call command
|
8
|
-
validate! command
|
9
|
-
system
|
7
|
+
def call *command
|
8
|
+
validate! *command
|
9
|
+
system 'heroku', *(command + @remote)
|
10
10
|
end
|
11
11
|
|
12
12
|
private
|
13
13
|
|
14
|
-
def validate! command
|
15
|
-
|
14
|
+
def validate! *command
|
15
|
+
remote = (command.each_cons(2).detect { |(parameter, _)| parameter =~ %r{\A-[ar]\Z} }.join ' ' rescue nil)
|
16
|
+
raise ExplicitApplicationError.new, "You're calling a command on remote #{@remote.join " "} yet the command explicitly references #{remote}" if remote
|
16
17
|
end
|
17
18
|
|
18
19
|
class ExplicitApplicationError < Exception
|
data/lib/hrk.rb
CHANGED
@@ -17,38 +17,48 @@ RSpec.describe Hrk::Execute::Command do
|
|
17
17
|
let(:remote) { "remote-#{rand(1..9)}" }
|
18
18
|
let(:args) { %w(whatever that:may -b) }
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
%w(-a -r).each do |opt|
|
21
|
+
context "using #{opt}" do
|
22
|
+
[true, false].each do |result|
|
23
|
+
context "when the command returns #{result}" do
|
24
|
+
before { allow(heroku).to receive(:call).and_return(result) }
|
25
|
+
|
26
|
+
it { expect(command.call(opt, remote, *args)).to eq result }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'interactions' do
|
31
|
+
before { command.call opt, remote, *args }
|
32
|
+
|
33
|
+
it { expect(Hrk::Heroku).to have_received(:new).with(opt, remote) }
|
34
|
+
it { expect(heroku).to have_received(:call).with(*%w{whatever that:may -b}) }
|
35
|
+
it { expect(command.env).to have_received(:remote=).with([opt, remote]) }
|
36
|
+
end
|
25
37
|
end
|
26
38
|
end
|
27
|
-
|
28
|
-
describe 'interactions' do
|
29
|
-
before { command.call '-r', remote, *args }
|
30
|
-
|
31
|
-
it { expect(Hrk::Heroku).to have_received(:new).with("-r #{remote}") }
|
32
|
-
it { expect(heroku).to have_received(:call).with("whatever that:may -b") }
|
33
|
-
it { expect(command.env).to have_received(:remote=).with("-r #{remote}") }
|
34
|
-
end
|
35
39
|
end
|
36
40
|
|
37
|
-
describe 'edge cases (no remote
|
38
|
-
let(:other_args) { %W(something-#{rand(1..9)}
|
41
|
+
describe 'edge cases (no remote, improper remote, too many remotes...)' do
|
42
|
+
let(:other_args) { %W(something-#{rand(1..9)} -o r --another) }
|
39
43
|
|
40
44
|
before { expect(heroku).not_to receive(:call) }
|
41
45
|
before { expect(command.env).not_to receive(:remote=) }
|
42
46
|
|
43
47
|
it { expect { command.call }.to raise_error ArgumentError }
|
44
48
|
it { expect { command.call "parameterless-remote", *other_args }.to raise_error ArgumentError }
|
49
|
+
it { expect { command.call *other_args }.to raise_error ArgumentError }
|
45
50
|
it { expect { command.call *other_args, '-r' }.to raise_error ArgumentError }
|
51
|
+
it { expect { command.call *other_args, '-a' }.to raise_error ArgumentError }
|
52
|
+
it { expect { command.call '-r', 'remote', *other_args, '-r', 'other-remote' }.to raise_error ArgumentError }
|
53
|
+
it { expect { command.call '-r', 'remote', *other_args, '-a', 'app' }.to raise_error ArgumentError }
|
54
|
+
it { expect { command.call '-a', 'app', *other_args, '-a', 'other-app' }.to raise_error ArgumentError }
|
55
|
+
it { expect { command.call '-r', 'something', *other_args, '-a', 'something-else' }.to raise_error ArgumentError }
|
46
56
|
end
|
47
57
|
end
|
48
58
|
|
49
59
|
context 'a remote was previously memorized' do
|
50
|
-
let(:previous_remote) { "
|
51
|
-
before { allow(command.env).to receive(:remote).and_return(previous_remote) }
|
60
|
+
let(:previous_remote) { "ye-olde-remote#{rand(1..9)}" }
|
61
|
+
before { allow(command.env).to receive(:remote).and_return(['-r', previous_remote]) }
|
52
62
|
before { allow(command.env).to receive(:remote?).and_return(true) }
|
53
63
|
|
54
64
|
describe 'standard case (a remote, a command)' do
|
@@ -66,9 +76,9 @@ RSpec.describe Hrk::Execute::Command do
|
|
66
76
|
describe 'interactions' do
|
67
77
|
before { command.call '-r', remote, *args }
|
68
78
|
|
69
|
-
it { expect(Hrk::Heroku).to have_received(:new).with(
|
70
|
-
it { expect(heroku).to have_received(:call).with(
|
71
|
-
it { expect(command.env).to have_received(:remote=).with(
|
79
|
+
it { expect(Hrk::Heroku).to have_received(:new).with('-r', remote) }
|
80
|
+
it { expect(heroku).to have_received(:call).with(*%w{whatever that:may -b}) }
|
81
|
+
it { expect(command.env).to have_received(:remote=).with(['-r', remote]) }
|
72
82
|
end
|
73
83
|
end
|
74
84
|
|
@@ -86,10 +96,45 @@ RSpec.describe Hrk::Execute::Command do
|
|
86
96
|
describe 'interactions' do
|
87
97
|
before { command.call *args }
|
88
98
|
|
89
|
-
it { expect(Hrk::Heroku).to have_received(:new).with(previous_remote) }
|
90
|
-
it { expect(heroku).to have_received(:call).with(
|
99
|
+
it { expect(Hrk::Heroku).to have_received(:new).with('-r', previous_remote) }
|
100
|
+
it { expect(heroku).to have_received(:call).with(*%w{whatever that:may -b}) }
|
91
101
|
end
|
92
102
|
end
|
103
|
+
|
104
|
+
describe 'edge cases (improper remote, too many remotes...)' do
|
105
|
+
let(:other_args) { %W(--whatever#{rand(1..9)} dude) }
|
106
|
+
|
107
|
+
before { expect(heroku).not_to receive(:call) }
|
108
|
+
before { expect(command.env).not_to receive(:remote=) }
|
109
|
+
|
110
|
+
it { expect { command.call *other_args, '-r' }.to raise_error ArgumentError }
|
111
|
+
it { expect { command.call *other_args, '-a' }.to raise_error ArgumentError }
|
112
|
+
it { expect { command.call '-r', 'remote', *other_args, '-r', 'other-remote' }.to raise_error ArgumentError }
|
113
|
+
it { expect { command.call '-r', 'remote', *other_args, '-a', 'app' }.to raise_error ArgumentError }
|
114
|
+
it { expect { command.call '-a', 'app', *other_args, '-a', 'other-app' }.to raise_error ArgumentError }
|
115
|
+
it { expect { command.call '-r', 'something', *other_args, '-a', 'something-else' }.to raise_error ArgumentError }
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe '#remote_and_command' do
|
121
|
+
subject(:command) { Hrk::Execute::Command.new }
|
122
|
+
|
123
|
+
context '(standard cases, arguments parsed)' do
|
124
|
+
it { expect(command.remote_and_command(%w(run rake db:migrate))).to eq [nil, %w(run rake db:migrate)] }
|
125
|
+
it { expect(command.remote_and_command(%w(restart))).to eq [nil, %w(restart)] }
|
126
|
+
it { expect(command.remote_and_command(%w(-r demo restart))).to eq [%w(-r demo), %w(restart)] }
|
127
|
+
it { expect(command.remote_and_command(%w(run rake db:migrate -r prod))).to eq [%w(-r prod), %w(run rake db:migrate)] }
|
128
|
+
it { expect(command.remote_and_command(%w(some command -r test -i dont know --about))).to eq [%w(-r test), %w(some command -i dont know --about)] }
|
129
|
+
end
|
130
|
+
|
131
|
+
context '(edge cases, argument errors)' do
|
132
|
+
it { expect { command.remote_and_command(%w(-r staging logs -t -r test)) }.to raise_error ArgumentError }
|
133
|
+
it { expect { command.remote_and_command(%w(-a prod run rake db:migrate -r echo)) }.to raise_error ArgumentError }
|
134
|
+
it { expect { command.remote_and_command(%w(run console -r demo -a app)) }.to raise_error ArgumentError }
|
135
|
+
it { expect { command.remote_and_command(%w(-a one -a other maintenance:on)) }.to raise_error ArgumentError }
|
136
|
+
it { expect { command.remote_and_command(%w(maintenance:off -a)) }.to raise_error ArgumentError }
|
137
|
+
it { expect { command.remote_and_command(%w(restart -r)) }.to raise_error ArgumentError }
|
93
138
|
end
|
94
139
|
end
|
95
140
|
end
|
data/spec/hrk/heroku_spec.rb
CHANGED
@@ -3,48 +3,50 @@ require 'spec_helper'
|
|
3
3
|
RSpec.describe Hrk::Heroku do
|
4
4
|
describe '#call' do
|
5
5
|
describe 'the system command ran' do
|
6
|
-
def self.calling command, on_remote:
|
7
|
-
describe "calling '#{command}' on remote '#{on_remote}', system" do
|
8
|
-
subject(:heroku) { Hrk::Heroku.new(on_remote) }
|
6
|
+
def self.calling command, on_remote: %W(-r whatever-app), starts: ''
|
7
|
+
describe "calling '#{command.join ' '}' on remote '#{on_remote}', system" do
|
8
|
+
subject(:heroku) { Hrk::Heroku.new(*on_remote) }
|
9
9
|
|
10
|
-
before { heroku.call command }
|
10
|
+
before { heroku.call *command }
|
11
11
|
|
12
|
-
it { expect(heroku).to have_received(:system).with(starts) }
|
12
|
+
it { expect(heroku).to have_received(:system).with(*starts) }
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
before { allow(heroku).to receive(:system) }
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
%w(-a -r).each do |opt|
|
19
|
+
describe "(standard case, using #{opt})" do
|
20
|
+
calling %w(call rake db:rollback), on_remote: %W(#{opt} demo), starts: %W(heroku call rake db:rollback #{opt} demo)
|
21
|
+
calling %w(call rake db:migrate), on_remote: %W(#{opt} prod), starts: %W(heroku call rake db:migrate #{opt} prod)
|
22
|
+
calling %w(call console), on_remote: %W(#{opt} staging), starts: %W(heroku call console #{opt} staging)
|
23
|
+
calling %w(logs -t), on_remote: %W(#{opt} prod), starts: %W(heroku logs -t #{opt} prod)
|
24
|
+
calling %w(pgbackups:capture), on_remote: %W(#{opt} demo), starts: %W(heroku pgbackups:capture #{opt} demo)
|
25
|
+
end
|
24
26
|
end
|
25
27
|
|
26
28
|
describe '(edge case)' do
|
27
|
-
subject(:heroku) { Hrk::Heroku.new(
|
29
|
+
subject(:heroku) { Hrk::Heroku.new(*%w(-r some-remote)) }
|
28
30
|
|
29
|
-
it { expect { heroku.call(
|
30
|
-
it { expect { heroku.call(
|
31
|
+
it { expect { heroku.call(*%w(run rake rake:db:migrate -r some-other-remote)) }.to raise_exception(Hrk::Heroku::ExplicitApplicationError) }
|
32
|
+
it { expect { heroku.call(*%w(run rake rake:db:migrate -a different-app)) }.to raise_exception(Hrk::Heroku::ExplicitApplicationError) }
|
31
33
|
end
|
32
34
|
end
|
33
35
|
|
34
36
|
describe 'the result of the command' do
|
35
|
-
subject(:heroku) { Hrk::Heroku.new(
|
36
|
-
before { allow(heroku).to receive(:system).with(
|
37
|
+
subject(:heroku) { Hrk::Heroku.new(*%w(-r some-remote)) }
|
38
|
+
before { allow(heroku).to receive(:system).with(*%W(heroku some command -r some-remote)).and_return(system_returns) }
|
37
39
|
|
38
40
|
context 'the command result is truthy' do
|
39
41
|
let(:system_returns) { true }
|
40
42
|
|
41
|
-
it { expect(heroku.call(
|
43
|
+
it { expect(heroku.call(*%w(some command))).to be_truthy }
|
42
44
|
end
|
43
45
|
|
44
46
|
context 'the command result is falsy' do
|
45
47
|
let(:system_returns) { false }
|
46
48
|
|
47
|
-
it { expect(heroku.call(
|
49
|
+
it { expect(heroku.call(*%w(some command))).to be_falsy }
|
48
50
|
end
|
49
51
|
end
|
50
52
|
end
|
metadata
CHANGED
@@ -1,75 +1,115 @@
|
|
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.8
|
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-07 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: 3.1
|
20
|
-
- - "
|
19
|
+
version: '3.1'
|
20
|
+
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: 3.1.0
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 3.1
|
30
|
-
- - "
|
29
|
+
version: '3.1'
|
30
|
+
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 3.1.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: nyan-cat-formatter
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- -
|
37
|
+
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '0.11'
|
40
|
-
- - "
|
40
|
+
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
42
|
+
version: '0.11'
|
43
43
|
type: :development
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- -
|
47
|
+
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: '0.11'
|
50
|
-
- - "
|
50
|
+
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: '
|
52
|
+
version: '0.11'
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: guard-rspec
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
|
-
- -
|
57
|
+
- - "~>"
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 4.5
|
60
|
-
- - "
|
59
|
+
version: '4.5'
|
60
|
+
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 5.0
|
62
|
+
version: 4.5.0
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '4.5'
|
70
|
+
- - ">="
|
68
71
|
- !ruby/object:Gem::Version
|
69
72
|
version: 4.5.0
|
70
|
-
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: rake
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '10.1'
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 10.1.0
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '10.1'
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 10.1.0
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: rubygems-tasks
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0.2'
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.2.4
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.2'
|
110
|
+
- - ">="
|
71
111
|
- !ruby/object:Gem::Version
|
72
|
-
version:
|
112
|
+
version: 0.2.4
|
73
113
|
description: |
|
74
114
|
Hrk gives you the hrk command that proxies commands to heroku, keeping track of
|
75
115
|
the latest remote you used so you don't have to keep on typing it on every
|