hookapp 2.0.5 → 2.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/AUTHORS.md +4 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +35 -40
- data/LICENSE +21 -0
- data/README.md +52 -19
- data/Rakefile +7 -3
- data/bin/hook +102 -65
- data/buildnotes.md +30 -0
- data/hook.rdoc +35 -11
- data/hookapp.gemspec +1 -0
- data/html/App.html +1 -1
- data/html/GLI/Commands/Doc.html +1 -1
- data/html/GLI/Commands/MarkdownDocumentListener.html +27 -17
- data/html/GLI/Commands.html +1 -1
- data/html/GLI.html +1 -1
- data/html/Hook.html +1 -1
- data/html/HookApp.html +106 -44
- data/html/Hooker.html +2 -2
- data/html/README_rdoc.html +47 -18
- data/html/String.html +23 -1
- data/html/created.rid +9 -8
- data/html/index.html +39 -12
- data/html/js/navigation.js.gz +0 -0
- data/html/js/search_index.js +1 -1
- data/html/js/search_index.js.gz +0 -0
- data/html/js/searcher.js.gz +0 -0
- data/html/table_of_contents.html +71 -7
- data/lib/hook/hookapp.rb +40 -22
- data/lib/hook/hooker.rb +1 -0
- data/lib/hook/markdown_document_listener.rb +12 -2
- data/lib/hook/prompt.rb +113 -0
- data/lib/hook/string.rb +4 -0
- data/lib/hook/version.rb +1 -1
- data/lib/hook.rb +2 -0
- data/test/helpers/hook-helpers.rb +76 -0
- data/test/hook_clip_test.rb +24 -0
- data/test/hook_clone_test.rb +30 -0
- data/test/hook_encode_test.rb +30 -0
- data/test/hook_link_test.rb +40 -0
- data/test/hook_list_test.rb +25 -0
- data/test/hook_remove_test.rb +34 -0
- data/test/hook_scripts_test.rb +21 -0
- metadata +33 -16
- data/lib/helpers/fuzzyfilefinder +0 -0
- data/test/default_test.rb +0 -14
- data/test/hookfiles/01.test +0 -0
- data/test/hookfiles/02.test +0 -0
- data/test/hookfiles/03.test +0 -0
- data/test/hookfiles/04.test +0 -0
- data/test/hookfiles/05.test +0 -0
- data/test/hookfiles/06.test +0 -0
- data/test/hookfiles/07.test +0 -0
- data/test/hookfiles/08.test +0 -0
- data/test/hookfiles/09.test +0 -0
- data/test/hookfiles/10.test +0 -0
- data/test/hookfiles/11.test +0 -0
- data/test/hookfiles/12.test +0 -0
@@ -15,6 +15,7 @@ module GLI
|
|
15
15
|
@io = File.new('README.md', 'w')
|
16
16
|
@nest = '#'
|
17
17
|
@arg_name_formatter = GLI::Commands::HelpModules::ArgNameFormatter.new
|
18
|
+
@parent_command = []
|
18
19
|
end
|
19
20
|
|
20
21
|
def beginning
|
@@ -26,6 +27,12 @@ module GLI
|
|
26
27
|
@io.puts IO.read('CREDITS.md')
|
27
28
|
@io.puts
|
28
29
|
end
|
30
|
+
|
31
|
+
if File.exist?('AUTHORS.md')
|
32
|
+
@io.puts IO.read('AUTHORS.md')
|
33
|
+
@io.puts
|
34
|
+
end
|
35
|
+
|
29
36
|
if File.exist?('LICENSE.md')
|
30
37
|
@io.puts IO.read('LICENSE.md')
|
31
38
|
@io.puts
|
@@ -89,7 +96,7 @@ module GLI
|
|
89
96
|
name = "[no-]#{name}" if name.to_s.length > 1
|
90
97
|
aliases = aliases.map { |_| _.to_s.length > 1 ? "[no-]#{_}" : _ }
|
91
98
|
end
|
92
|
-
invocations = ([name] + aliases).map { |_| "`" + add_dashes(_) + "`" }.join('|')
|
99
|
+
invocations = ([name] + aliases).map { |_| "`" + add_dashes(_).strip + "`" }.join('|')
|
93
100
|
@io.puts header("#{invocations}", 2)
|
94
101
|
@io.puts
|
95
102
|
@io.puts String(desc).strip
|
@@ -109,8 +116,10 @@ module GLI
|
|
109
116
|
|
110
117
|
# Gives you a command in the current context and creates a new context of this command
|
111
118
|
def command(name, aliases, desc, long_desc, arg_name, arg_options)
|
119
|
+
@parent_command.push ([name] + aliases).join('|')
|
112
120
|
arg_name_fmt = @arg_name_formatter.format(arg_name, arg_options, [])
|
113
|
-
|
121
|
+
arg_name_fmt = " `#{arg_name_fmt.strip}`" if arg_name_fmt
|
122
|
+
@io.puts header("`$ #{@exe}` <mark>`#{@parent_command.join(' ')}`</mark>#{arg_name_fmt}", 1)
|
114
123
|
@io.puts
|
115
124
|
@io.puts "*#{String(desc).strip}*"
|
116
125
|
@io.puts
|
@@ -121,6 +130,7 @@ module GLI
|
|
121
130
|
|
122
131
|
# Ends a command, and "pops" you back up one context
|
123
132
|
def end_command(_name)
|
133
|
+
@parent_command.pop
|
124
134
|
decrement_nest
|
125
135
|
@io.puts "* * * * * *\n\n" unless @nest.size > 2
|
126
136
|
end
|
data/lib/hook/prompt.rb
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hook
|
4
|
+
module PromptSTD
|
5
|
+
##
|
6
|
+
## Clear the terminal screen
|
7
|
+
##
|
8
|
+
def clear_screen(msg = nil)
|
9
|
+
puts "\e[H\e[2J" if $stdout.tty?
|
10
|
+
puts msg if msg.good?
|
11
|
+
end
|
12
|
+
|
13
|
+
##
|
14
|
+
## Redirect STDOUT and STDERR to /dev/null or file
|
15
|
+
##
|
16
|
+
## @param file [String] a file path to redirect to
|
17
|
+
##
|
18
|
+
def silence_std(file = '/dev/null')
|
19
|
+
$stdout = File.new(file, 'w')
|
20
|
+
$stderr = File.new(file, 'w')
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
## Restore silenced STDOUT and STDERR
|
25
|
+
##
|
26
|
+
def restore_std
|
27
|
+
$stdout = STDOUT
|
28
|
+
$stderr = STDERR
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Methods for working installing/using FuzzyFileFinder
|
33
|
+
module PromptFZF
|
34
|
+
##
|
35
|
+
## Get path to fzf binary, installing if needed
|
36
|
+
##
|
37
|
+
## @return [String] Path to fzf binary
|
38
|
+
##
|
39
|
+
def fzf
|
40
|
+
@fzf ||= install_fzf
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
## Remove fzf binary
|
45
|
+
##
|
46
|
+
def uninstall_fzf
|
47
|
+
fzf_bin = File.join(File.dirname(__FILE__), '../helpers/fzf/bin/fzf')
|
48
|
+
FileUtils.rm_f(fzf_bin) if File.exist?(fzf_bin)
|
49
|
+
warn 'fzf: removed #{fzf_bin}'
|
50
|
+
end
|
51
|
+
|
52
|
+
##
|
53
|
+
## Return the path to the fzf binary
|
54
|
+
##
|
55
|
+
## @return [String] Path to fzf
|
56
|
+
##
|
57
|
+
def which_fzf
|
58
|
+
fzf_dir = File.join(File.dirname(__FILE__), '../helpers/fzf')
|
59
|
+
fzf_bin = File.join(fzf_dir, 'bin/fzf')
|
60
|
+
return fzf_bin if File.exist?(fzf_bin)
|
61
|
+
|
62
|
+
TTY::Which.which('fzf')
|
63
|
+
end
|
64
|
+
|
65
|
+
##
|
66
|
+
## Install fzf on the current system. Installs to a
|
67
|
+
## subdirectory of the gem
|
68
|
+
##
|
69
|
+
## @param force [Boolean] If true, reinstall if
|
70
|
+
## needed
|
71
|
+
##
|
72
|
+
## @return [String] Path to fzf binary
|
73
|
+
##
|
74
|
+
def install_fzf(force: false)
|
75
|
+
if force
|
76
|
+
uninstall_fzf
|
77
|
+
elsif which_fzf
|
78
|
+
return which_fzf
|
79
|
+
end
|
80
|
+
|
81
|
+
fzf_dir = File.join(File.dirname(__FILE__), '../helpers/fzf')
|
82
|
+
FileUtils.mkdir_p(fzf_dir) unless File.directory?(fzf_dir)
|
83
|
+
fzf_bin = File.join(fzf_dir, 'bin/fzf')
|
84
|
+
return fzf_bin if File.exist?(fzf_bin)
|
85
|
+
|
86
|
+
warn 'fzf: Compiling and installing fzf -- this will only happen once'
|
87
|
+
warn 'fzf: fzf is copyright Junegunn Choi, MIT License <https://github.com/junegunn/fzf/blob/master/LICENSE>'
|
88
|
+
|
89
|
+
silence_std
|
90
|
+
`'#{fzf_dir}/install' --bin --no-key-bindings --no-completion --no-update-rc --no-bash --no-zsh --no-fish &> /dev/null`
|
91
|
+
unless File.exist?(fzf_bin)
|
92
|
+
restore_std
|
93
|
+
warn 'Error installing, trying again as root'
|
94
|
+
silence_std
|
95
|
+
`sudo '#{fzf_dir}/install' --bin --no-key-bindings --no-completion --no-update-rc --no-bash --no-zsh --no-fish &> /dev/null`
|
96
|
+
end
|
97
|
+
restore_std
|
98
|
+
unless File.exist?(fzf_bin)
|
99
|
+
puts 'fzf: unable to install fzf. You can install manually and Hook CLI will use the system version.'
|
100
|
+
puts 'fzf: see https://github.com/junegunn/fzf#installation'
|
101
|
+
raise RuntimeError.new('Error installing fzf, please report at https://github.com/ttscoff/hookapp/issues')
|
102
|
+
end
|
103
|
+
|
104
|
+
warn "fzf: installed to #{fzf}"
|
105
|
+
fzf_bin
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
module Prompt
|
110
|
+
include PromptSTD
|
111
|
+
include PromptFZF
|
112
|
+
end
|
113
|
+
end
|
data/lib/hook/string.rb
CHANGED
data/lib/hook/version.rb
CHANGED
data/lib/hook.rb
CHANGED
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'open3'
|
3
|
+
|
4
|
+
class ::Numeric
|
5
|
+
def pad_to(x)
|
6
|
+
"%0#{x.to_i}d" % self
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module HookHelpers
|
11
|
+
HOOK_EXEC = File.join(File.dirname(__FILE__), '..', '..', 'bin', 'hook')
|
12
|
+
HOOK_FILES_DIR = File.join(File.dirname(__FILE__), '..', 'hookfiles')
|
13
|
+
HOOK_COMPLETIONS_DIR = File.join(File.dirname(__FILE__), '..', '..', 'lib', 'completion')
|
14
|
+
|
15
|
+
def create_temp_files
|
16
|
+
FileUtils.mkdir_p HOOK_FILES_DIR
|
17
|
+
10.times.with_index do |i|
|
18
|
+
new_file = File.join(HOOK_FILES_DIR, i.pad_to(2) + '.md')
|
19
|
+
File.open(new_file, 'w') do |f|
|
20
|
+
f.puts ("Hook Test File ##{i}")
|
21
|
+
end
|
22
|
+
hook('rm', '-a', '-f', new_file)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def clean_temp_files
|
27
|
+
FileUtils.rm_r HOOK_FILES_DIR, force: true
|
28
|
+
end
|
29
|
+
|
30
|
+
def assert_count_links(file, count, msg)
|
31
|
+
res = hook('ls', file).strip
|
32
|
+
|
33
|
+
links = res == 'No bookmarks' ? 0 : res.split(/\n/).size
|
34
|
+
|
35
|
+
assert_equal(count, links, msg)
|
36
|
+
end
|
37
|
+
|
38
|
+
def assert_links_include(file, pattern, msg)
|
39
|
+
result = hook('ls', file).strip
|
40
|
+
assert_match(/#{pattern}/, result, msg)
|
41
|
+
end
|
42
|
+
|
43
|
+
def hook(*args)
|
44
|
+
hook_with_env({}, *args)
|
45
|
+
end
|
46
|
+
|
47
|
+
def hook_with_stdin(input, *args)
|
48
|
+
pread_stdin({}, input, HOOK_EXEC, *args)
|
49
|
+
end
|
50
|
+
|
51
|
+
def hook_with_env(env, *args)
|
52
|
+
pread(env, HOOK_EXEC, *args)
|
53
|
+
end
|
54
|
+
|
55
|
+
def pread_stdin(env, input, *cmd)
|
56
|
+
out, err, status = Open3.capture3(env, 'bundle', 'exec', *cmd, :stdin_data => input)
|
57
|
+
unless status.success?
|
58
|
+
raise [
|
59
|
+
"Error (#{status}): #{cmd.inspect} failed", "STDOUT:", out.inspect, "STDERR:", err.inspect
|
60
|
+
].join("\n")
|
61
|
+
end
|
62
|
+
|
63
|
+
out
|
64
|
+
end
|
65
|
+
|
66
|
+
def pread(env, *cmd)
|
67
|
+
out, err, status = Open3.capture3(env, 'bundle', 'exec', *cmd)
|
68
|
+
unless status.success?
|
69
|
+
raise [
|
70
|
+
"Error (#{status}): #{cmd.inspect} failed", "STDOUT:", out.inspect, "STDERR:", err.inspect
|
71
|
+
].join("\n")
|
72
|
+
end
|
73
|
+
|
74
|
+
out
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'hook-helpers'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class ClipTest < Test::Unit::TestCase
|
5
|
+
include HookHelpers
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@basedir = HOOK_FILES_DIR
|
9
|
+
create_temp_files
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
clean_temp_files
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_clip
|
17
|
+
file = Dir.glob(File.join(HOOK_FILES_DIR, '*.md'))[0]
|
18
|
+
# Clear clipboard
|
19
|
+
`echo -n | pbcopy`
|
20
|
+
hook('clip', file)
|
21
|
+
clipboard = `pbpaste`.strip
|
22
|
+
assert_match(/^hook:.*?#{File.basename(file).sub(/\./, '(%2E|\.)')}$/, clipboard, 'Clipboard should contain link to first file')
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'hook-helpers'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class CloneTest < Test::Unit::TestCase
|
5
|
+
include HookHelpers
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@basedir = HOOK_FILES_DIR
|
9
|
+
create_temp_files
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
clean_temp_files
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_clone
|
17
|
+
count = 3
|
18
|
+
|
19
|
+
files = Dir.glob(File.join(HOOK_FILES_DIR, '*.md'))
|
20
|
+
|
21
|
+
# Link all files to last file
|
22
|
+
hook('link', *files[0..count - 1])
|
23
|
+
links = hook('ls', files[count - 1]).strip
|
24
|
+
|
25
|
+
hook('clone', files[count-1], files[count])
|
26
|
+
cloned_links = hook('ls', files[count]).strip
|
27
|
+
|
28
|
+
assert_match(links, cloned_links, "#{files[count - 1]} links should match #{files[count]} links")
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'hook-helpers'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class EncodeTest < Test::Unit::TestCase
|
5
|
+
include HookHelpers
|
6
|
+
|
7
|
+
def setup
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
end
|
12
|
+
|
13
|
+
# # FIXME: I don't know why this isn't getting output
|
14
|
+
# def test_encode_args
|
15
|
+
# result = hook('percent', 'encode', %(here's a "string?"))
|
16
|
+
# assert_match(/here%27s%20a%20%22string%3F%22/, result, 'URL encoded string should match')
|
17
|
+
# end
|
18
|
+
|
19
|
+
def test_encode_stdin
|
20
|
+
result = pread_stdin({}, %(here's a "string?"), HOOK_EXEC, 'percent', 'encode')
|
21
|
+
assert_match(/here%27s%20a%20%22string%3F%22/, result, 'URL encoded string should match')
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_encode_decode_stdin
|
25
|
+
original_string = %(here's a "string?")
|
26
|
+
encoded = pread_stdin({}, original_string, HOOK_EXEC, 'percent', 'encode')
|
27
|
+
decoded = pread_stdin({}, encoded, HOOK_EXEC, 'percent', 'decode')
|
28
|
+
assert_match(decoded, original_string, 'URL encoded string should match')
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'hook-helpers'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class LinkTest < Test::Unit::TestCase
|
5
|
+
include HookHelpers
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@basedir = HOOK_FILES_DIR
|
9
|
+
create_temp_files
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
clean_temp_files
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_link
|
17
|
+
count = 3
|
18
|
+
|
19
|
+
files = Dir.glob(File.join(HOOK_FILES_DIR, '*.md'))[0..(count - 1)]
|
20
|
+
|
21
|
+
# Link all files to last file
|
22
|
+
hook('link', *files)
|
23
|
+
|
24
|
+
assert_count_links(files[-1], count - 1, "Last file should have #{count - 1} links")
|
25
|
+
# I think hook behavior with multi-file linking has changed...
|
26
|
+
# assert_count_links(files[0], 1, 'First file should have 1 link')
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_bi_link
|
30
|
+
count = 3
|
31
|
+
|
32
|
+
files = Dir.glob(File.join(HOOK_FILES_DIR, '*.md'))[0..(count - 1)]
|
33
|
+
|
34
|
+
# Link all files bi-directionally
|
35
|
+
hook('link', '-a', *files)
|
36
|
+
|
37
|
+
assert_count_links(files[-1], count - 1, "Last file should have #{count - 1} links")
|
38
|
+
assert_count_links(files[0], count - 1, "First file should have #{count - 1} links")
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'hook-helpers'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class ListTest < Test::Unit::TestCase
|
5
|
+
include HookHelpers
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@basedir = HOOK_FILES_DIR
|
9
|
+
create_temp_files
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
clean_temp_files
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_list
|
17
|
+
count = 2
|
18
|
+
files = Dir.glob(File.join(HOOK_FILES_DIR, '*.md'))[0..(count - 1)]
|
19
|
+
# Link all files to last file
|
20
|
+
hook('link', *files)
|
21
|
+
|
22
|
+
assert_count_links(files[-1], count - 1, "Last file should have #{count - 1} links")
|
23
|
+
assert_links_include(files[-1], File.basename(files[0]), 'Links on last file should include first file')
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'hook-helpers'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class RemoveTest < Test::Unit::TestCase
|
5
|
+
include HookHelpers
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@basedir = HOOK_FILES_DIR
|
9
|
+
create_temp_files
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
clean_temp_files
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_remove
|
17
|
+
count = 5
|
18
|
+
|
19
|
+
files = Dir.glob(File.join(HOOK_FILES_DIR, '*.md'))[0..(count - 1)]
|
20
|
+
|
21
|
+
# Link all files to last file
|
22
|
+
hook('link', *files)
|
23
|
+
|
24
|
+
assert_count_links(files[-1], count - 1, "Last file should start with #{count - 1} links")
|
25
|
+
|
26
|
+
hook('remove', files[-1], files[0])
|
27
|
+
|
28
|
+
assert_count_links(files[-1], count - 2, "Last file should have #{count - 2} links")
|
29
|
+
|
30
|
+
hook('remove', '--all', '--force', files[-1])
|
31
|
+
|
32
|
+
assert_count_links(files[-1], 0, "Last file should end with 0 links")
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'hook-helpers'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class ScriptsTest < Test::Unit::TestCase
|
5
|
+
include HookHelpers
|
6
|
+
|
7
|
+
def setup
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_shell_scripts
|
14
|
+
%w[bash fish zsh].each do |sh|
|
15
|
+
source = IO.read(File.join(HOOK_COMPLETIONS_DIR, 'hook_completion.' + sh))
|
16
|
+
result = hook('scripts', sh)
|
17
|
+
|
18
|
+
assert_match(source, result, 'Script output should match')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hookapp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brett Terpstra
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aruba
|
@@ -66,6 +66,26 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 2.20.1
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: tty-which
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.5'
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 0.5.0
|
79
|
+
type: :runtime
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - "~>"
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0.5'
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.5.0
|
69
89
|
description:
|
70
90
|
email: me@brettterpstra.com
|
71
91
|
executables:
|
@@ -76,9 +96,11 @@ extra_rdoc_files:
|
|
76
96
|
- hook.rdoc
|
77
97
|
files:
|
78
98
|
- ".gitignore"
|
99
|
+
- AUTHORS.md
|
79
100
|
- CHANGELOG.md
|
80
101
|
- Gemfile
|
81
102
|
- Gemfile.lock
|
103
|
+
- LICENSE
|
82
104
|
- LICENSE.md
|
83
105
|
- OVERVIEW.md
|
84
106
|
- README.md
|
@@ -148,26 +170,21 @@ files:
|
|
148
170
|
- lib/completion/hook_completion.bash
|
149
171
|
- lib/completion/hook_completion.fish
|
150
172
|
- lib/completion/hook_completion.zsh
|
151
|
-
- lib/helpers/fuzzyfilefinder
|
152
173
|
- lib/hook.rb
|
153
174
|
- lib/hook/hookapp.rb
|
154
175
|
- lib/hook/hooker.rb
|
155
176
|
- lib/hook/markdown_document_listener.rb
|
177
|
+
- lib/hook/prompt.rb
|
156
178
|
- lib/hook/string.rb
|
157
179
|
- lib/hook/version.rb
|
158
|
-
- test/
|
159
|
-
- test/
|
160
|
-
- test/
|
161
|
-
- test/
|
162
|
-
- test/
|
163
|
-
- test/
|
164
|
-
- test/
|
165
|
-
- test/
|
166
|
-
- test/hookfiles/08.test
|
167
|
-
- test/hookfiles/09.test
|
168
|
-
- test/hookfiles/10.test
|
169
|
-
- test/hookfiles/11.test
|
170
|
-
- test/hookfiles/12.test
|
180
|
+
- test/helpers/hook-helpers.rb
|
181
|
+
- test/hook_clip_test.rb
|
182
|
+
- test/hook_clone_test.rb
|
183
|
+
- test/hook_encode_test.rb
|
184
|
+
- test/hook_link_test.rb
|
185
|
+
- test/hook_list_test.rb
|
186
|
+
- test/hook_remove_test.rb
|
187
|
+
- test/hook_scripts_test.rb
|
171
188
|
- test/test_helper.rb
|
172
189
|
homepage: https://brettterpstra.com
|
173
190
|
licenses: []
|
data/lib/helpers/fuzzyfilefinder
DELETED
Binary file
|
data/test/default_test.rb
DELETED
data/test/hookfiles/01.test
DELETED
File without changes
|
data/test/hookfiles/02.test
DELETED
File without changes
|
data/test/hookfiles/03.test
DELETED
File without changes
|
data/test/hookfiles/04.test
DELETED
File without changes
|
data/test/hookfiles/05.test
DELETED
File without changes
|
data/test/hookfiles/06.test
DELETED
File without changes
|
data/test/hookfiles/07.test
DELETED
File without changes
|
data/test/hookfiles/08.test
DELETED
File without changes
|
data/test/hookfiles/09.test
DELETED
File without changes
|
data/test/hookfiles/10.test
DELETED
File without changes
|
data/test/hookfiles/11.test
DELETED
File without changes
|
data/test/hookfiles/12.test
DELETED
File without changes
|