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 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