hrk 0.0.2 → 0.0.3
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/bin/hrk +7 -1
- data/lib/hrk.rb +4 -0
- data/lib/hrk/execute.rb +15 -0
- data/lib/hrk/execute/command.rb +12 -0
- data/lib/hrk/execute/help.rb +36 -0
- data/lib/hrk/heroku.rb +21 -0
- data/spec/hrk/execute/command_spec.rb +29 -0
- data/spec/hrk/execute/help_spec.rb +57 -0
- data/spec/hrk/execute_spec.rb +19 -0
- data/spec/hrk/heroku_spec.rb +51 -0
- data/spec/spec_helper.rb +26 -0
- metadata +55 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67b379c0812c173de1d738d526b6b350947acf9c
|
4
|
+
data.tar.gz: 30708b927366d6842771652f86fcd73b6a962593
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f74f6a0f912eb4baa1b6d02c202f71c9791b375c0d34b7e4a54598fb67c16a0ec1e262ce37414e672c0c459fc9b0d01b0727eb99847c939572a1a5d9b0748876
|
7
|
+
data.tar.gz: 6b029a0c02a97c3f4632a90c4f157928e28e9a1cb7c28f085b944285d936933d917c4226cc03fd91a9a4dff4ea316b3d28af623f6fa96e1caebc9a4a15c05dce
|
data/bin/hrk
CHANGED
@@ -1,3 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
3
|
+
begin
|
4
|
+
$:.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))
|
5
|
+
require 'hrk'
|
6
|
+
rescue IOError
|
7
|
+
end
|
8
|
+
|
9
|
+
exit (if Hrk::Execute.(*ARGV) then 0 else 1 end)
|
data/lib/hrk.rb
ADDED
data/lib/hrk/execute.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
module Hrk
|
2
|
+
module Execute
|
3
|
+
autoload :Command, 'hrk/execute/command'
|
4
|
+
autoload :Help, 'hrk/execute/help'
|
5
|
+
|
6
|
+
def self.call *args
|
7
|
+
executer.call *args
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.executer
|
11
|
+
Hrk::Execute::Help.new \
|
12
|
+
Hrk::Execute::Command.new
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Hrk
|
2
|
+
module Execute
|
3
|
+
class Command
|
4
|
+
REMOTE_MATCHER = %r{\A(.+):\Z}
|
5
|
+
|
6
|
+
def call remote, *args
|
7
|
+
raise ArgumentError.new("#{remote.inspect} isn't a proper remote marker") unless remote =~ REMOTE_MATCHER
|
8
|
+
Hrk::Heroku.new(remote[REMOTE_MATCHER, 1]).call(args.join(' '))
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Hrk
|
2
|
+
module Execute
|
3
|
+
class Help
|
4
|
+
def initialize fallback = nil
|
5
|
+
@fallback = fallback
|
6
|
+
end
|
7
|
+
|
8
|
+
def call *args
|
9
|
+
if args.empty? || args.first =~ %r(\A(?:(?:(?:-)?h)|(?:(?:--)?help))\Z)
|
10
|
+
display || true
|
11
|
+
else
|
12
|
+
fallback *args
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def display
|
17
|
+
puts <<-eos
|
18
|
+
Usage:
|
19
|
+
hrk remote: command..."
|
20
|
+
hrk [h | help | -h | --help]"
|
21
|
+
|
22
|
+
Options:
|
23
|
+
-h --help Display this screen.
|
24
|
+
eos
|
25
|
+
end
|
26
|
+
|
27
|
+
def fallback *args
|
28
|
+
if @fallback
|
29
|
+
@fallback.call *args
|
30
|
+
else
|
31
|
+
raise ArgumentError.new
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/hrk/heroku.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Hrk
|
2
|
+
class Heroku
|
3
|
+
def initialize remote_name
|
4
|
+
@remote_name = remote_name
|
5
|
+
end
|
6
|
+
|
7
|
+
def call command
|
8
|
+
validate! command
|
9
|
+
system %Q(heroku #{command} -r #{@remote_name})
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def validate! command
|
15
|
+
raise ExplicitApplicationError.new, "You're calling a command on remote #{@remote_name} yet the command explicitely references #{command[%r{-[ar]\s+\S+}]}" if command =~ %r{ -[ra]\b}
|
16
|
+
end
|
17
|
+
|
18
|
+
class ExplicitApplicationError < Exception
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Hrk::Execute::Command do
|
4
|
+
describe '#call' do
|
5
|
+
subject(:command) { Hrk::Execute::Command.new }
|
6
|
+
|
7
|
+
describe 'standard case (a remote, a command)' do
|
8
|
+
let(:remote) { "remote-#{rand(1..9)}" }
|
9
|
+
let(:args) { %w(whatever that:may -b) }
|
10
|
+
|
11
|
+
let(:heroku) { double("Hrk::Heroku") }
|
12
|
+
before { allow(heroku).to receive(:call) }
|
13
|
+
before { allow(Hrk::Heroku).to receive(:new).and_return(heroku) }
|
14
|
+
|
15
|
+
before { command.call "#{remote}:", *args }
|
16
|
+
|
17
|
+
it { expect(Hrk::Heroku).to have_received(:new).with(remote) }
|
18
|
+
it { expect(heroku).to have_received(:call).with("whatever that:may -b") }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'edge cases (no remote or improper remote)' do
|
22
|
+
let(:other_args) { %w(something or-another) }
|
23
|
+
it { expect { command.call }.to raise_error ArgumentError }
|
24
|
+
it { expect { command.call "bad-remote", *other_args }.to raise_error ArgumentError }
|
25
|
+
it { expect { command.call ":misplaced-marker", *other_args }.to raise_error ArgumentError }
|
26
|
+
it { expect { command.call ":", *other_args }.to raise_error ArgumentError }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Hrk::Execute::Help do
|
4
|
+
describe '#call' do
|
5
|
+
subject(:help) { Hrk::Execute::Help.new }
|
6
|
+
|
7
|
+
describe 'with the right arguments' do
|
8
|
+
before { expect(help).to receive :display }
|
9
|
+
|
10
|
+
it { expect(help.call).to eq true }
|
11
|
+
it { expect(help.call('h')).to eq true }
|
12
|
+
it { expect(help.call('-h')).to eq true }
|
13
|
+
it { expect(help.call('help')).to eq true }
|
14
|
+
it { expect(help.call('--help')).to eq true }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'with wrong arguments' do
|
18
|
+
[
|
19
|
+
%w(run rake db:migrate),
|
20
|
+
%w(helpe),
|
21
|
+
%w(ahelp)
|
22
|
+
].each do |args|
|
23
|
+
before { allow(help).to receive(:fallback).with(*args).and_return :fallouts }
|
24
|
+
|
25
|
+
it { expect(help.call(*args)).to eq :fallouts}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#display' do
|
31
|
+
subject(:help) { Hrk::Execute::Help.new }
|
32
|
+
|
33
|
+
before { allow(help).to receive :puts }
|
34
|
+
before { help.display }
|
35
|
+
|
36
|
+
it { expect(help).to have_received(:puts).at_least(1).times }
|
37
|
+
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
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'hrk/execute'
|
2
|
+
|
3
|
+
RSpec.describe Hrk::Execute do
|
4
|
+
describe '.call' do
|
5
|
+
let(:executer) { double }
|
6
|
+
let(:args) { %w(run rake db:migrate) }
|
7
|
+
|
8
|
+
before { allow(Hrk::Execute).to receive(:executer).and_return(executer) }
|
9
|
+
before { expect(executer).to receive(:call).with(*args).and_return(return_value) }
|
10
|
+
|
11
|
+
[true, false].each do |value|
|
12
|
+
describe "the executer returns #{value}" do
|
13
|
+
let(:return_value) { value }
|
14
|
+
|
15
|
+
it { expect(Hrk::Execute.call(*args)).to eq return_value }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Hrk::Heroku do
|
4
|
+
describe '#call' do
|
5
|
+
describe 'the system command ran' do
|
6
|
+
def self.calling command, on_remote: 'whatever-app', starts: ''
|
7
|
+
describe "calling '#{command}' on remote '#{on_remote}', system" do
|
8
|
+
subject(:heroku) { Hrk::Heroku.new(on_remote) }
|
9
|
+
|
10
|
+
before { heroku.call command }
|
11
|
+
|
12
|
+
it { expect(heroku).to have_received(:system).with(starts) }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
before { allow(heroku).to receive(:system) }
|
17
|
+
|
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'
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '(edge case)' do
|
27
|
+
subject(:heroku) { Hrk::Heroku.new('some-remote') }
|
28
|
+
|
29
|
+
it { expect { heroku.call('run rake rake:db:migrate -r some-other-remote') }.to raise_exception(Hrk::Heroku::ExplicitApplicationError) }
|
30
|
+
it { expect { heroku.call('run rake rake:db:migrate -a different-app') }.to raise_exception(Hrk::Heroku::ExplicitApplicationError) }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'the result of the command' do
|
35
|
+
subject(:heroku) { Hrk::Heroku.new('some-remote') }
|
36
|
+
before { allow(heroku).to receive(:system).with('heroku some command -r some-remote').and_return(system_returns) }
|
37
|
+
|
38
|
+
context 'the command result is truthy' do
|
39
|
+
let(:system_returns) { true }
|
40
|
+
|
41
|
+
it { expect(heroku.call('some command')).to be_truthy }
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'the command result is falsy' do
|
45
|
+
let(:system_returns) { false }
|
46
|
+
|
47
|
+
it { expect(heroku.call('some command')).to be_falsy }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'hrk'
|
2
|
+
|
3
|
+
RSpec.configure do |config|
|
4
|
+
config.expect_with :rspec do |expectations|
|
5
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
6
|
+
end
|
7
|
+
|
8
|
+
config.mock_with :rspec do |mocks|
|
9
|
+
mocks.verify_partial_doubles = true
|
10
|
+
end
|
11
|
+
|
12
|
+
config.filter_run :focus
|
13
|
+
config.run_all_when_everything_filtered = true
|
14
|
+
config.disable_monkey_patching!
|
15
|
+
config.warnings = true
|
16
|
+
config.default_formatter =
|
17
|
+
if config.files_to_run.one?
|
18
|
+
'doc'
|
19
|
+
else
|
20
|
+
'NyanCatFormatter'
|
21
|
+
end
|
22
|
+
|
23
|
+
config.order = :random
|
24
|
+
|
25
|
+
Kernel.srand config.seed
|
26
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,57 @@
|
|
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michel Belleville
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
11
|
+
date: 2015-01-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nyan-cat-formatter
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: guard-rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
13
55
|
description: Hrk 2 swim like a dolphin in a sea of heroku commands
|
14
56
|
email: michel.belleville@gmail.com
|
15
57
|
executables:
|
@@ -19,6 +61,16 @@ extra_rdoc_files: []
|
|
19
61
|
files:
|
20
62
|
- README.md
|
21
63
|
- bin/hrk
|
64
|
+
- lib/hrk.rb
|
65
|
+
- lib/hrk/execute.rb
|
66
|
+
- lib/hrk/execute/command.rb
|
67
|
+
- lib/hrk/execute/help.rb
|
68
|
+
- lib/hrk/heroku.rb
|
69
|
+
- spec/hrk/execute/command_spec.rb
|
70
|
+
- spec/hrk/execute/help_spec.rb
|
71
|
+
- spec/hrk/execute_spec.rb
|
72
|
+
- spec/hrk/heroku_spec.rb
|
73
|
+
- spec/spec_helper.rb
|
22
74
|
homepage: http://github.com/Bastes/hrk
|
23
75
|
licenses:
|
24
76
|
- GPL-3
|