hrk 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6b49a0cf56d15242a4698692039f7bc6bcbe5ba6
4
- data.tar.gz: 14d7a71edcf4b28066719f2d4e39f250348b6963
3
+ metadata.gz: 67b379c0812c173de1d738d526b6b350947acf9c
4
+ data.tar.gz: 30708b927366d6842771652f86fcd73b6a962593
5
5
  SHA512:
6
- metadata.gz: 56ba559a77eac95014dd40ca7351342ad09bcb3607d858ecb164505d1195b2009426631756c4864e0ffd7ae4c998c7be1c453c39eecbb5f9ab234a50c53f92e7
7
- data.tar.gz: 9f0acc8e03334c960b4acd870cfc9d69235de3c64ade99817991a3a53c433f97180bd5c92135fd3155420b00803e06b067b6d1f881015fa3d515604dd4f366f8
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
- exit (if system("heroku #{ARGV.drop(1).join " "} -r #{ARGV.first}") then 0 else 1 end)
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
@@ -0,0 +1,4 @@
1
+ module Hrk
2
+ autoload :Heroku, 'hrk/heroku'
3
+ autoload :Execute, 'hrk/execute'
4
+ end
@@ -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
@@ -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.2
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: 2014-12-18 00:00:00.000000000 Z
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