hrk 1.0.6 → 1.0.7
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/lib/hrk/execute/ask_for_remote.rb +25 -0
- data/lib/hrk/execute/command.rb +11 -18
- data/lib/hrk/execute/error_trap.rb +4 -4
- data/lib/hrk/execute/help.rb +6 -6
- data/lib/hrk/execute/heroku_detector.rb +3 -3
- data/lib/hrk/execute/remember.rb +24 -0
- data/lib/hrk/execute/remote_display.rb +3 -3
- data/lib/hrk/execute/remote_last.rb +26 -0
- data/lib/hrk/execute.rb +16 -6
- data/lib/hrk/heroku.rb +4 -4
- data/lib/hrk/version.rb +1 -1
- data/spec/hrk/execute/ask_for_remote_spec.rb +34 -0
- data/spec/hrk/execute/command_spec.rb +37 -93
- data/spec/hrk/execute/error_trap_spec.rb +1 -1
- data/spec/hrk/execute/help_spec.rb +34 -30
- data/spec/hrk/execute/heroku_detector_spec.rb +1 -1
- data/spec/hrk/execute/remember_spec.rb +68 -0
- data/spec/hrk/execute/remote_display_spec.rb +10 -10
- data/spec/hrk/execute/remote_last_spec.rb +60 -0
- data/spec/hrk/execute_spec.rb +10 -4
- data/spec/hrk/heroku_spec.rb +22 -20
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a9d0caab344b968fe75fdf67544614eee7c8510
|
4
|
+
data.tar.gz: f6bf197cf5943045989c0ff77f0cc5a7174cb88f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ad9226be51959e0d073fe622e86e817536e5b59658451576bbc28b2a717b6b23d3caace733612939cd928aab3c4f84f9705bbbedbf7d7d15af5e2ef58387662
|
7
|
+
data.tar.gz: bd3fda9fe1058571c9b02f567c1440135bc0a2a54b2418d94979254c32703836af4268268b4407741c583d020fb2c6dfeea8261c86d700c35288cf95d0f5420a
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Hrk
|
2
|
+
module Execute
|
3
|
+
class AskForRemote
|
4
|
+
def initialize next_callee
|
5
|
+
@next_callee = next_callee
|
6
|
+
end
|
7
|
+
|
8
|
+
def call *args
|
9
|
+
@next_callee.call *insure_remote(args)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def insure_remote args
|
15
|
+
return args unless remoteless? args
|
16
|
+
puts "Please state the remote you want to run these commands on (ex: -r demo):"
|
17
|
+
args + STDIN.gets.split(/\s+/)
|
18
|
+
end
|
19
|
+
|
20
|
+
def remoteless? args
|
21
|
+
args.reverse.take(2).none? { |a| a =~ /\A-[ar]\Z/ }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/hrk/execute/command.rb
CHANGED
@@ -10,26 +10,19 @@ module Hrk
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def call *args
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
Hrk::Heroku.new(*remote).call(*command)
|
17
|
-
else
|
18
|
-
raise ArgumentError.new("No remote has been previously defined and the command does not explicitely mention a remote") unless @env.remote?
|
19
|
-
Hrk::Heroku.new(*@env.remote).call(*command)
|
20
|
-
end
|
13
|
+
command, remote = command_and_remote args
|
14
|
+
@env.remote = remote
|
15
|
+
Hrk::Heroku.new(*remote).call(*command)
|
21
16
|
end
|
22
17
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
end
|
32
|
-
end
|
18
|
+
private
|
19
|
+
|
20
|
+
def command_and_remote args
|
21
|
+
command, remote, *other_remotes = ([nil] + args).slice_before(ARG).to_a
|
22
|
+
raise ArgumentError.new "Too many remotes or app" if other_remotes.any?
|
23
|
+
raise ArgumentError.new "No remote is mentionned" unless remote
|
24
|
+
raise ArgumentError.new "Incomplete remote option #{remote.first}" if remote.length != 2
|
25
|
+
[command.compact, remote]
|
33
26
|
end
|
34
27
|
end
|
35
28
|
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
module Hrk
|
2
2
|
module Execute
|
3
3
|
class ErrorTrap
|
4
|
-
def initialize
|
5
|
-
@
|
4
|
+
def initialize next_callee
|
5
|
+
@next_callee = next_callee
|
6
6
|
end
|
7
7
|
|
8
8
|
def call *args
|
9
9
|
if args.include? '--hrk-testing'
|
10
|
-
@
|
10
|
+
@next_callee.call(*(args - ['--hrk-testing']))
|
11
11
|
else
|
12
12
|
begin
|
13
|
-
@
|
13
|
+
@next_callee.call(*args)
|
14
14
|
rescue
|
15
15
|
puts "Error: #{$!.message}"
|
16
16
|
false
|
data/lib/hrk/execute/help.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
module Hrk
|
2
2
|
module Execute
|
3
3
|
class Help
|
4
|
-
def initialize
|
5
|
-
@
|
4
|
+
def initialize next_callee = nil
|
5
|
+
@next_callee = next_callee
|
6
6
|
end
|
7
7
|
|
8
8
|
def call *args
|
9
9
|
if args.empty? || args.first =~ %r(\A(?:(?:(?:-)?h)|(?:(?:--)?help))\Z)
|
10
10
|
display || true
|
11
11
|
else
|
12
|
-
|
12
|
+
next_callee(*args)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -44,9 +44,9 @@ https://github.com/Bastes/hrk
|
|
44
44
|
eos
|
45
45
|
end
|
46
46
|
|
47
|
-
def
|
48
|
-
if @
|
49
|
-
@
|
47
|
+
def next_callee *args
|
48
|
+
if @next_callee
|
49
|
+
@next_callee.call(*args)
|
50
50
|
else
|
51
51
|
raise ArgumentError.new
|
52
52
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module Hrk
|
2
2
|
module Execute
|
3
3
|
class HerokuDetector
|
4
|
-
def initialize
|
5
|
-
@
|
4
|
+
def initialize next_callee
|
5
|
+
@next_callee = next_callee
|
6
6
|
end
|
7
7
|
|
8
8
|
def call *args
|
9
9
|
if heroku_present?
|
10
|
-
@
|
10
|
+
@next_callee.call(*args)
|
11
11
|
else
|
12
12
|
puts <<-eos
|
13
13
|
Error: The heroku command is missing!
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Hrk
|
2
|
+
module Execute
|
3
|
+
class Remember
|
4
|
+
def initialize next_callee
|
5
|
+
@next_callee = next_callee
|
6
|
+
end
|
7
|
+
|
8
|
+
def call *args
|
9
|
+
env = Hrk::Env.new
|
10
|
+
if remoteless?(args) && env.remote?
|
11
|
+
@next_callee.call(*args, *env.remote)
|
12
|
+
else
|
13
|
+
@next_callee.call(*args)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def remoteless? args
|
20
|
+
args.reverse.take(2).none? { |a| a =~ /\A-[ar]\Z/ }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Hrk
|
2
2
|
module Execute
|
3
3
|
class RemoteDisplay
|
4
|
-
def initialize
|
4
|
+
def initialize next_callee
|
5
5
|
@env = Hrk::Env.new
|
6
|
-
@
|
6
|
+
@next_callee = next_callee
|
7
7
|
end
|
8
8
|
|
9
9
|
def call *args
|
@@ -15,7 +15,7 @@ module Hrk
|
|
15
15
|
false
|
16
16
|
end
|
17
17
|
else
|
18
|
-
@
|
18
|
+
@next_callee.call(*args)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Hrk
|
2
|
+
module Execute
|
3
|
+
class RemoteLast
|
4
|
+
ARG = /\A-[ar]\Z/
|
5
|
+
|
6
|
+
def initialize next_callee
|
7
|
+
@next_callee = next_callee
|
8
|
+
end
|
9
|
+
|
10
|
+
def call *args
|
11
|
+
@next_callee.call(*order(args))
|
12
|
+
end
|
13
|
+
|
14
|
+
def order args
|
15
|
+
args.slice_before { |arg| arg =~ ARG }.inject([[], nil]) do |r, slice|
|
16
|
+
if slice.first =~ ARG
|
17
|
+
raise ArgumentError.new("Too many remotes mentionned") if r.last
|
18
|
+
[r.first + slice.drop(2), slice.take(2)]
|
19
|
+
else
|
20
|
+
[r.first + slice, r.last]
|
21
|
+
end
|
22
|
+
end.flatten.compact
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/hrk/execute.rb
CHANGED
@@ -1,17 +1,27 @@
|
|
1
1
|
module Hrk
|
2
2
|
module Execute
|
3
|
-
autoload :Command,
|
4
|
-
autoload :
|
5
|
-
autoload :
|
6
|
-
autoload :
|
7
|
-
autoload :
|
3
|
+
autoload :Command, "hrk/execute/command"
|
4
|
+
autoload :AskForRemote, "hrk/execute/ask_for_remote"
|
5
|
+
autoload :Remember, "hrk/execute/remember"
|
6
|
+
autoload :RemoteLast, "hrk/execute/remote_last"
|
7
|
+
autoload :Help, "hrk/execute/help"
|
8
|
+
autoload :ErrorTrap, "hrk/execute/error_trap"
|
9
|
+
autoload :HerokuDetector, "hrk/execute/heroku_detector"
|
10
|
+
autoload :RemoteDisplay, "hrk/execute/remote_display"
|
8
11
|
|
9
12
|
def self.call *args
|
10
13
|
executer.call(*args)
|
11
14
|
end
|
12
15
|
|
13
16
|
def self.executer
|
14
|
-
ErrorTrap.new
|
17
|
+
ErrorTrap.new \
|
18
|
+
HerokuDetector.new \
|
19
|
+
RemoteDisplay.new \
|
20
|
+
Help.new \
|
21
|
+
RemoteLast.new \
|
22
|
+
Remember.new \
|
23
|
+
AskForRemote.new \
|
24
|
+
Command.new
|
15
25
|
end
|
16
26
|
end
|
17
27
|
end
|
data/lib/hrk/heroku.rb
CHANGED
@@ -6,20 +6,20 @@ module Hrk
|
|
6
6
|
|
7
7
|
def call *command
|
8
8
|
validate! command
|
9
|
-
puts "Executing `#{([
|
10
|
-
exec
|
9
|
+
puts "Executing `#{(["heroku"] + command + @remote).join " "}`..."
|
10
|
+
exec "heroku", *(command + @remote)
|
11
11
|
end
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
15
|
def validate! command
|
16
|
-
remote = (command.each_cons(2).detect { |(parameter, _)| parameter =~ %r{\A-[ar]\Z} }.join
|
16
|
+
remote = (command.each_cons(2).detect { |(parameter, _)| parameter =~ %r{\A-[ar]\Z} }.join " " rescue nil)
|
17
17
|
raise ExplicitApplicationError.new, "You're calling a command on remote #{@remote.join " "} yet the command explicitly references #{remote}" if remote
|
18
18
|
end
|
19
19
|
|
20
20
|
def exec *command
|
21
21
|
Signal.trap("INT") {}
|
22
|
-
Process.wait fork { Kernel.exec
|
22
|
+
Process.wait fork { Kernel.exec(*command) }
|
23
23
|
$?.success?.tap { Signal.trap("INT", "DEFAULT") }
|
24
24
|
end
|
25
25
|
|
data/lib/hrk/version.rb
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Hrk::Execute::AskForRemote do
|
4
|
+
describe "#call" do
|
5
|
+
let(:next_callee) { double(Hrk::Execute::Command) }
|
6
|
+
let(:env) { double(Hrk::Env) }
|
7
|
+
|
8
|
+
subject(:ask_for_remote) { Hrk::Execute::AskForRemote.new next_callee }
|
9
|
+
|
10
|
+
let(:users_remote) { [%w(-a -r).sample, "remote-#{rand(0..9)}"] }
|
11
|
+
let(:users_input) { users_remote.join(" ") }
|
12
|
+
|
13
|
+
before { allow(next_callee).to receive(:call) }
|
14
|
+
before { allow(Hrk::Env).to receive(:new).and_return(env) }
|
15
|
+
before { allow(ask_for_remote).to receive(:puts) }
|
16
|
+
before { allow(STDIN).to receive(:gets).and_return(users_input) }
|
17
|
+
before { ask_for_remote.call(*command) }
|
18
|
+
|
19
|
+
context "there was no remote" do
|
20
|
+
let(:command) { %w(run console) }
|
21
|
+
|
22
|
+
it { expect(ask_for_remote).to have_received(:puts) }
|
23
|
+
it { expect(next_callee).to have_received(:call).with(*command, *users_remote) }
|
24
|
+
end
|
25
|
+
|
26
|
+
context "there was a remote" do
|
27
|
+
let(:command) { %w(logs -t) + [%w(-a -r).sample, "remote-#{rand(0..9)}"] }
|
28
|
+
|
29
|
+
it { expect(ask_for_remote).not_to have_received(:puts) }
|
30
|
+
it { expect(STDIN).not_to have_received(:gets) }
|
31
|
+
it { expect(next_callee).to have_received(:call).with(*command) }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
3
|
RSpec.describe Hrk::Execute::Command do
|
4
|
-
describe
|
4
|
+
describe "#call" do
|
5
5
|
subject(:command) { Hrk::Execute::Command.new }
|
6
6
|
|
7
7
|
let(:heroku) { double("Hrk::Heroku") }
|
@@ -10,10 +10,10 @@ RSpec.describe Hrk::Execute::Command do
|
|
10
10
|
|
11
11
|
before { allow(command.env).to receive(:remote=) }
|
12
12
|
|
13
|
-
context
|
13
|
+
context "no remote was previously memorized" do
|
14
14
|
before { allow(command.env).to receive(:remote?).and_return(nil) }
|
15
15
|
|
16
|
-
describe
|
16
|
+
describe "standard case (a remote, a command)" do
|
17
17
|
let(:remote) { "remote-#{rand(1..9)}" }
|
18
18
|
let(:args) { %w(whatever that:may -b) }
|
19
19
|
|
@@ -23,12 +23,12 @@ RSpec.describe Hrk::Execute::Command do
|
|
23
23
|
context "when the command returns #{result}" do
|
24
24
|
before { allow(heroku).to receive(:call).and_return(result) }
|
25
25
|
|
26
|
-
it { expect(command.call(opt, remote
|
26
|
+
it { expect(command.call(*args, opt, remote)).to eq result }
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
describe
|
31
|
-
before { command.call(opt, remote
|
30
|
+
describe "interactions" do
|
31
|
+
before { command.call(*args, opt, remote) }
|
32
32
|
|
33
33
|
it { expect(Hrk::Heroku).to have_received(:new).with(opt, remote) }
|
34
34
|
it { expect(heroku).to have_received(:call).with(*%w{whatever that:may -b}) }
|
@@ -38,103 +38,47 @@ RSpec.describe Hrk::Execute::Command do
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
describe
|
42
|
-
|
43
|
-
|
44
|
-
before { expect(heroku).not_to receive(:call) }
|
45
|
-
before { expect(command.env).not_to receive(:remote=) }
|
46
|
-
|
47
|
-
it { expect { command.call }.to raise_error ArgumentError }
|
48
|
-
it { expect { command.call "parameterless-remote", *other_args }.to raise_error ArgumentError }
|
49
|
-
it { expect { command.call(*other_args) }.to raise_error ArgumentError }
|
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 }
|
56
|
-
end
|
57
|
-
end
|
41
|
+
describe "edge cases" do
|
42
|
+
describe "a remote, nocommand" do
|
43
|
+
let(:remote) { "remote-#{rand(1..9)}" }
|
58
44
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
45
|
+
%w(-a -r).each do |opt|
|
46
|
+
context "using #{opt}" do
|
47
|
+
[true, false].each do |result|
|
48
|
+
context "when the command returns #{result}" do
|
49
|
+
before { allow(heroku).to receive(:call).and_return(result) }
|
63
50
|
|
64
|
-
|
65
|
-
|
66
|
-
|
51
|
+
it { expect(command.call(opt, remote)).to eq result }
|
52
|
+
end
|
53
|
+
end
|
67
54
|
|
68
|
-
|
69
|
-
|
70
|
-
before { allow(heroku).to receive(:call).and_return(result) }
|
55
|
+
describe "interactions" do
|
56
|
+
before { command.call(opt, remote) }
|
71
57
|
|
72
|
-
|
58
|
+
it { expect(Hrk::Heroku).to have_received(:new).with(opt, remote) }
|
59
|
+
it { expect(heroku).to have_received(:call).with no_args }
|
60
|
+
it { expect(command.env).to have_received(:remote=).with([opt, remote]) }
|
61
|
+
end
|
62
|
+
end
|
73
63
|
end
|
74
64
|
end
|
75
65
|
|
76
|
-
describe
|
77
|
-
|
66
|
+
describe "no remote, improper remote..." do
|
67
|
+
let(:other_args) { %W(something-#{rand(1..9)} -o r --another) }
|
78
68
|
|
79
|
-
|
80
|
-
|
81
|
-
it { expect(command.env).to have_received(:remote=).with(['-r', remote]) }
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
describe 'use previous remote' do
|
86
|
-
let(:args) { %w(whatever that:may -b) }
|
69
|
+
before { expect(heroku).not_to receive(:call) }
|
70
|
+
before { expect(command.env).not_to receive(:remote=) }
|
87
71
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
describe 'interactions' do
|
97
|
-
before { command.call(*args) }
|
98
|
-
|
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}) }
|
72
|
+
it { expect { command.call }.to raise_error ArgumentError }
|
73
|
+
it { expect { command.call(*other_args) }.to raise_error ArgumentError }
|
74
|
+
it { expect { command.call(*other_args, "-r") }.to raise_error ArgumentError }
|
75
|
+
it { expect { command.call(*other_args, "-a") }.to raise_error ArgumentError }
|
76
|
+
it { expect { command.call(*other_args, *%w(-r demo -r prod)) }.to raise_error ArgumentError }
|
77
|
+
it { expect { command.call(*other_args, *%w(-a app -a other-app)) }.to raise_error ArgumentError }
|
78
|
+
it { expect { command.call(*other_args, *%w(-r staging -a server)) }.to raise_error ArgumentError }
|
79
|
+
it { expect { command.call(*other_args, *%w(-a machine -r dennis)) }.to raise_error ArgumentError }
|
101
80
|
end
|
102
81
|
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 }
|
138
82
|
end
|
139
83
|
end
|
140
84
|
end
|
@@ -2,27 +2,50 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
RSpec.describe Hrk::Execute::Help do
|
4
4
|
describe '#call' do
|
5
|
-
subject(:help) { Hrk::Execute::Help.new }
|
5
|
+
subject(:help) { Hrk::Execute::Help.new the_next_callee_or_not }
|
6
6
|
|
7
7
|
describe 'with the right arguments' do
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
[true, false].each do |there_is_one|
|
9
|
+
context "and #{there_is_one ? "a" : "no"} next callee" do
|
10
|
+
if there_is_one
|
11
|
+
let(:the_next_callee_or_not) { double }
|
12
|
+
before { allow(the_next_callee_or_not).to receive(:call).never }
|
13
|
+
else
|
14
|
+
let(:the_next_callee_or_not) { nil }
|
15
|
+
end
|
16
|
+
|
17
|
+
before { expect(help).to receive :display }
|
18
|
+
|
19
|
+
it { expect(help.call).to eq true }
|
20
|
+
it { expect(help.call('h')).to eq true }
|
21
|
+
it { expect(help.call('-h')).to eq true }
|
22
|
+
it { expect(help.call('help')).to eq true }
|
23
|
+
it { expect(help.call('--help')).to eq true }
|
24
|
+
end
|
25
|
+
end
|
15
26
|
end
|
16
27
|
|
17
|
-
describe 'with
|
28
|
+
describe 'with other arguments' do
|
18
29
|
[
|
19
30
|
%w(run rake db:migrate),
|
20
31
|
%w(helpe),
|
21
32
|
%w(ahelp)
|
22
33
|
].each do |args|
|
23
|
-
|
34
|
+
context "and a next callee" do
|
35
|
+
let(:the_next_callee_or_not) { double }
|
36
|
+
before { allow(the_next_callee_or_not).to receive(:call).and_return :fallouts }
|
37
|
+
|
38
|
+
it do
|
39
|
+
expect(help.call(*args)).to eq :fallouts
|
40
|
+
expect(the_next_callee_or_not).to have_received(:call).with(*args)
|
41
|
+
end
|
42
|
+
end
|
24
43
|
|
25
|
-
|
44
|
+
context "and no next callee" do
|
45
|
+
let(:the_next_callee_or_not) { nil }
|
46
|
+
|
47
|
+
it { expect { help.call(*args) }.to raise_error ArgumentError }
|
48
|
+
end
|
26
49
|
end
|
27
50
|
end
|
28
51
|
end
|
@@ -35,23 +58,4 @@ RSpec.describe Hrk::Execute::Help do
|
|
35
58
|
|
36
59
|
it { expect(help).to have_received(:puts).at_least(1).times }
|
37
60
|
end
|
38
|
-
|
39
|
-
describe '#fallback' do
|
40
|
-
describe 'without a fallback command' do
|
41
|
-
subject(:help) { Hrk::Execute::Help.new }
|
42
|
-
|
43
|
-
it { expect { help.fallback(*%w(whatever arguments it received)) }.to raise_error ArgumentError }
|
44
|
-
end
|
45
|
-
|
46
|
-
describe 'with a fallback command' do
|
47
|
-
let(:fallback) { double }
|
48
|
-
before { allow(fallback).to receive :call }
|
49
|
-
|
50
|
-
subject(:help) { Hrk::Execute::Help.new fallback }
|
51
|
-
|
52
|
-
before { expect(fallback).to receive(:call).with(*%w(whatever arguments it received)).and_return(:some_result) }
|
53
|
-
|
54
|
-
it { expect(help.fallback(*%w(whatever arguments it received))).to eq :some_result }
|
55
|
-
end
|
56
|
-
end
|
57
61
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Hrk::Execute::Remember do
|
4
|
+
describe '#call' do
|
5
|
+
let(:next_callee) { double(Hrk::Execute::Command) }
|
6
|
+
|
7
|
+
subject(:remember) { Hrk::Execute::Remember.new next_callee }
|
8
|
+
subject(:env) { double(Hrk::Env) }
|
9
|
+
|
10
|
+
before { allow(next_callee).to receive(:call) }
|
11
|
+
before { allow(Hrk::Env).to receive(:new).and_return(env) }
|
12
|
+
|
13
|
+
def self.receiving args, it_should_pass_on: []
|
14
|
+
context "receiving #{args.join " "}" do
|
15
|
+
let(:what_it_should_pass_on) do
|
16
|
+
if it_should_pass_on.respond_to?(:call)
|
17
|
+
instance_exec(&it_should_pass_on)
|
18
|
+
else
|
19
|
+
it_should_pass_on
|
20
|
+
end
|
21
|
+
end
|
22
|
+
subject!(:result) { remember.call(*args) }
|
23
|
+
|
24
|
+
it { expect(next_callee).to have_received(:call).with(*what_it_should_pass_on) }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "no remote memorized" do
|
29
|
+
before { allow(env).to receive(:remote?).and_return(false) }
|
30
|
+
before { allow(env).to receive(:remote).and_return(nil) }
|
31
|
+
|
32
|
+
context "a remote in the args" do
|
33
|
+
receiving %w(logs -t -r demo), it_should_pass_on: %w(logs -t -r demo)
|
34
|
+
receiving %w(run rake db:migrate -a that-one-cloud), it_should_pass_on: %w(run rake db:migrate -a that-one-cloud)
|
35
|
+
end
|
36
|
+
|
37
|
+
context "no remote in the args" do
|
38
|
+
receiving %w(run rake db:rollback), it_should_pass_on: %w(run rake db:rollback)
|
39
|
+
receiving %w(run console), it_should_pass_on: %w(run console)
|
40
|
+
end
|
41
|
+
|
42
|
+
context "part of a remote in the args" do
|
43
|
+
receiving %w(maintenance:off -r), it_should_pass_on: %w(maintenance:off -r)
|
44
|
+
receiving %w(logs -a), it_should_pass_on: %w(logs -a)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "a remote memorized" do
|
49
|
+
let(:remote) { [%w(-r -a).sample, %w(demo staging prod test app).sample] }
|
50
|
+
before { allow(env).to receive(:remote?).and_return(true) }
|
51
|
+
before { allow(env).to receive(:remote).and_return(remote) }
|
52
|
+
|
53
|
+
context "a remote in the args" do
|
54
|
+
receiving %w(run rake some:task -r a-remote), it_should_pass_on: %w(run rake some:task -r a-remote)
|
55
|
+
receiving %w(maintenance:on -a another-app), it_should_pass_on: %w(maintenance:on -a another-app)
|
56
|
+
end
|
57
|
+
|
58
|
+
context "no remote in the args" do
|
59
|
+
receiving %w(restart), it_should_pass_on: -> { %w(restart) + remote }
|
60
|
+
end
|
61
|
+
|
62
|
+
context "part of a remote in the args" do
|
63
|
+
receiving %w(run console -r), it_should_pass_on: %w(run console -r)
|
64
|
+
receiving %w(maintenance:on -a), it_should_pass_on: %w(maintenance:on -a)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -2,16 +2,16 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
RSpec.describe Hrk::Execute::RemoteDisplay do
|
4
4
|
describe '#call' do
|
5
|
-
let(:
|
6
|
-
let(:
|
7
|
-
let(:remote)
|
8
|
-
let(:there_be_a_remote)
|
5
|
+
let(:next_callee) { double }
|
6
|
+
let(:next_callee_result) { [true, false].sample }
|
7
|
+
let(:remote) { [%w(-a -r).sample, "demo#{rand(1..9)}"] }
|
8
|
+
let(:there_be_a_remote) { [true, false].sample }
|
9
9
|
|
10
|
-
subject(:remote_display) { Hrk::Execute::RemoteDisplay.new(
|
10
|
+
subject(:remote_display) { Hrk::Execute::RemoteDisplay.new(next_callee) }
|
11
11
|
|
12
12
|
before { allow_any_instance_of(Hrk::Env).to receive(:remote?).and_return(there_be_a_remote) }
|
13
13
|
before { allow_any_instance_of(Hrk::Env).to receive(:remote).and_return(remote) }
|
14
|
-
before { allow(
|
14
|
+
before { allow(next_callee).to receive(:call).and_return(next_callee_result) }
|
15
15
|
before { allow(remote_display).to receive(:puts) }
|
16
16
|
|
17
17
|
subject!(:result) { remote_display.call(*args) }
|
@@ -24,7 +24,7 @@ RSpec.describe Hrk::Execute::RemoteDisplay do
|
|
24
24
|
|
25
25
|
it { expect(result).to eq true }
|
26
26
|
it { expect(remote_display).to have_received(:puts).with(remote.join(' ')) }
|
27
|
-
it { expect(
|
27
|
+
it { expect(next_callee).not_to have_received(:call) }
|
28
28
|
end
|
29
29
|
|
30
30
|
context 'and no remote' do
|
@@ -32,16 +32,16 @@ RSpec.describe Hrk::Execute::RemoteDisplay do
|
|
32
32
|
|
33
33
|
it { expect(result).to eq false }
|
34
34
|
it { expect(remote_display).not_to have_received(:puts) }
|
35
|
-
it { expect(
|
35
|
+
it { expect(next_callee).not_to have_received(:call) }
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
39
|
context 'there are arguments' do
|
40
40
|
let(:args) { %W(what#{rand(1..9)} --will we --do -to -- the drunken --whaler?) }
|
41
41
|
|
42
|
-
it { expect(result).to eq
|
42
|
+
it { expect(result).to eq next_callee_result }
|
43
43
|
it { expect(remote_display).not_to have_received(:puts) }
|
44
|
-
it { expect(
|
44
|
+
it { expect(next_callee).to have_received(:call).with(*args) }
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Hrk::Execute::RemoteLast do
|
4
|
+
describe "#call" do
|
5
|
+
let(:next_callee) { double(Hrk::Execute::Command) }
|
6
|
+
|
7
|
+
subject(:remote_last) { Hrk::Execute::RemoteLast.new next_callee }
|
8
|
+
|
9
|
+
before { allow(next_callee).to receive(:call) }
|
10
|
+
|
11
|
+
context "normal cases" do
|
12
|
+
def self.receiving args, it_should_pass_on: []
|
13
|
+
context "receiving #{args.join " "}" do
|
14
|
+
subject!(:result) { remote_last.call(*args) }
|
15
|
+
|
16
|
+
it { expect(next_callee).to have_received(:call).with(*it_should_pass_on) }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
receiving %w(run console -r demo),
|
21
|
+
it_should_pass_on: %w(run console -r demo)
|
22
|
+
receiving %w(logs -t -a some-app-prod),
|
23
|
+
it_should_pass_on: %w(logs -t -a some-app-prod)
|
24
|
+
receiving %w(-r test run rake db:migrate),
|
25
|
+
it_should_pass_on: %w(run rake db:migrate -r test)
|
26
|
+
receiving %w(-a another-app-demo config),
|
27
|
+
it_should_pass_on: %w(config -a another-app-demo)
|
28
|
+
receiving %w(run -r testing rake db:migrate),
|
29
|
+
it_should_pass_on: %w(run rake db:migrate -r testing)
|
30
|
+
receiving %w(config:set -a the-main-app whatever="some_value"),
|
31
|
+
it_should_pass_on: %w(config:set whatever="some_value" -a the-main-app)
|
32
|
+
receiving %w(rake db:rollback),
|
33
|
+
it_should_pass_on: %w(rake db:rollback)
|
34
|
+
receiving %w(run console -a),
|
35
|
+
it_should_pass_on: %w(run console -a)
|
36
|
+
receiving %w(logs -t -r),
|
37
|
+
it_should_pass_on: %w(logs -t -r)
|
38
|
+
end
|
39
|
+
|
40
|
+
context "edge cases" do
|
41
|
+
def self.receiving args, it_should_raise: ArgumentError
|
42
|
+
context "receiving #{args.join " "}" do
|
43
|
+
subject(:the_command) { -> { remote_last.call(*args) } }
|
44
|
+
|
45
|
+
it { expect(&the_command).to raise_error it_should_raise }
|
46
|
+
|
47
|
+
context "the next callee" do
|
48
|
+
before { the_command.call rescue nil }
|
49
|
+
|
50
|
+
it { expect(next_callee).not_to have_received(:call) }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
receiving %w(-r test run console -r demo), it_should_raise: ArgumentError
|
56
|
+
receiving %w(rake -a my-way db:migrate -a my-way-tmp), it_should_raise: ArgumentError
|
57
|
+
receiving %w(-a super-app -r staging rake db:migrate), it_should_raise: ArgumentError
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/spec/hrk/execute_spec.rb
CHANGED
@@ -22,13 +22,19 @@ RSpec.describe Hrk::Execute do
|
|
22
22
|
let(:heroku_detector) { double(Hrk::Execute::HerokuDetector) }
|
23
23
|
let(:remote_display) { double(Hrk::Execute::RemoteDisplay) }
|
24
24
|
let(:help) { double(Hrk::Execute::Help) }
|
25
|
+
let(:remote_last) { double(Hrk::Execute::RemoteLast) }
|
26
|
+
let(:remember) { double(Hrk::Execute::Remember) }
|
27
|
+
let(:ask_for_remote) { double(Hrk::Execute::AskForRemote) }
|
25
28
|
let(:command) { double(Hrk::Execute::Command) }
|
26
29
|
|
27
|
-
before { allow(Hrk::Execute::Command).to receive(:new).and_return(command) }
|
28
|
-
before { allow(Hrk::Execute::
|
29
|
-
before { allow(Hrk::Execute::
|
30
|
+
before { allow(Hrk::Execute::Command). to receive(:new).and_return(command) }
|
31
|
+
before { allow(Hrk::Execute::AskForRemote). to receive(:new).with(command).and_return(ask_for_remote) }
|
32
|
+
before { allow(Hrk::Execute::Remember). to receive(:new).with(ask_for_remote).and_return(remember) }
|
33
|
+
before { allow(Hrk::Execute::RemoteLast). to receive(:new).with(remember).and_return(remote_last) }
|
34
|
+
before { allow(Hrk::Execute::Help). to receive(:new).with(remote_last).and_return(help) }
|
35
|
+
before { allow(Hrk::Execute::RemoteDisplay). to receive(:new).with(help).and_return(remote_display) }
|
30
36
|
before { allow(Hrk::Execute::HerokuDetector).to receive(:new).with(remote_display).and_return(heroku_detector) }
|
31
|
-
before { allow(Hrk::Execute::ErrorTrap).to receive(:new).with(heroku_detector).and_return(error_trap) }
|
37
|
+
before { allow(Hrk::Execute::ErrorTrap). to receive(:new).with(heroku_detector).and_return(error_trap) }
|
32
38
|
|
33
39
|
it { expect(Hrk::Execute.executer).to eq error_trap }
|
34
40
|
end
|
data/spec/hrk/heroku_spec.rb
CHANGED
@@ -1,19 +1,18 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
3
|
RSpec.describe Hrk::Heroku do
|
4
|
-
describe
|
5
|
-
describe
|
6
|
-
def self.calling command, on_remote: %W(-r whatever-app), starts: [], and_outputs:
|
7
|
-
describe "calling
|
4
|
+
describe "#call" do
|
5
|
+
describe "the exec command ran" do
|
6
|
+
def self.calling command, on_remote: %W(-r whatever-app), starts: [], and_outputs: ""
|
7
|
+
describe "calling `#{command.join " "}` on remote #{on_remote}" do
|
8
8
|
subject(:heroku) { Hrk::Heroku.new(*on_remote) }
|
9
9
|
|
10
10
|
before { allow(heroku).to receive(:puts) }
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
12
|
+
subject!(:result) { heroku.call(*command) }
|
13
|
+
|
14
|
+
it { expect(heroku).to have_received(:exec).with(*starts) }
|
15
|
+
it { expect(heroku).to have_received(:puts).with(and_outputs) }
|
17
16
|
end
|
18
17
|
end
|
19
18
|
|
@@ -44,35 +43,38 @@ RSpec.describe Hrk::Heroku do
|
|
44
43
|
end
|
45
44
|
end
|
46
45
|
|
47
|
-
describe
|
46
|
+
describe "(edge case)" do
|
48
47
|
subject(:heroku) { Hrk::Heroku.new(*%w(-r some-remote)) }
|
49
48
|
|
50
49
|
before { allow(heroku).to receive(:puts) }
|
50
|
+
before { allow(heroku).to receive(:exec) }
|
51
51
|
|
52
|
-
specify
|
52
|
+
specify "another remote is mentionned" do
|
53
53
|
expect { heroku.call(*%w(run rake rake:db:migrate -r some-other-remote)) }.to raise_exception(Hrk::Heroku::ExplicitApplicationError)
|
54
54
|
expect(heroku).not_to have_received(:puts)
|
55
|
+
expect(heroku).not_to have_received(:exec)
|
55
56
|
end
|
56
|
-
specify
|
57
|
+
specify "another app is mentionned" do
|
57
58
|
expect { heroku.call(*%w(run rake rake:db:migrate -a different-app)) }.to raise_exception(Hrk::Heroku::ExplicitApplicationError)
|
58
59
|
expect(heroku).not_to have_received(:puts)
|
60
|
+
expect(heroku).not_to have_received(:exec)
|
59
61
|
end
|
60
62
|
end
|
61
63
|
end
|
62
64
|
|
63
|
-
describe
|
65
|
+
describe "the result of the command" do
|
64
66
|
subject(:heroku) { Hrk::Heroku.new(*%w(-r some-remote)) }
|
65
|
-
before {
|
66
|
-
before {
|
67
|
+
before { expect(heroku).to receive(:exec).with(*%W(heroku some command -r some-remote)).and_return(exec_return) }
|
68
|
+
before { expect(heroku).to receive(:puts) }
|
67
69
|
|
68
|
-
context
|
69
|
-
let(:
|
70
|
+
context "the command result is truthy" do
|
71
|
+
let(:exec_return) { true }
|
70
72
|
|
71
73
|
it { expect(heroku.call(*%w(some command))).to be_truthy }
|
72
74
|
end
|
73
75
|
|
74
|
-
context
|
75
|
-
let(:
|
76
|
+
context "the command result is falsy" do
|
77
|
+
let(:exec_return) { false }
|
76
78
|
|
77
79
|
it { expect(heroku.call(*%w(some command))).to be_falsy }
|
78
80
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hrk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.7
|
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-
|
11
|
+
date: 2015-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -165,19 +165,25 @@ files:
|
|
165
165
|
- lib/hrk.rb
|
166
166
|
- lib/hrk/env.rb
|
167
167
|
- lib/hrk/execute.rb
|
168
|
+
- lib/hrk/execute/ask_for_remote.rb
|
168
169
|
- lib/hrk/execute/command.rb
|
169
170
|
- lib/hrk/execute/error_trap.rb
|
170
171
|
- lib/hrk/execute/help.rb
|
171
172
|
- lib/hrk/execute/heroku_detector.rb
|
173
|
+
- lib/hrk/execute/remember.rb
|
172
174
|
- lib/hrk/execute/remote_display.rb
|
175
|
+
- lib/hrk/execute/remote_last.rb
|
173
176
|
- lib/hrk/heroku.rb
|
174
177
|
- lib/hrk/version.rb
|
175
178
|
- spec/hrk/env_spec.rb
|
179
|
+
- spec/hrk/execute/ask_for_remote_spec.rb
|
176
180
|
- spec/hrk/execute/command_spec.rb
|
177
181
|
- spec/hrk/execute/error_trap_spec.rb
|
178
182
|
- spec/hrk/execute/help_spec.rb
|
179
183
|
- spec/hrk/execute/heroku_detector_spec.rb
|
184
|
+
- spec/hrk/execute/remember_spec.rb
|
180
185
|
- spec/hrk/execute/remote_display_spec.rb
|
186
|
+
- spec/hrk/execute/remote_last_spec.rb
|
181
187
|
- spec/hrk/execute_spec.rb
|
182
188
|
- spec/hrk/heroku_spec.rb
|
183
189
|
- spec/spec_helper.rb
|