tabry 0.2.3 → 0.2.4
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/tabry-fish +9 -0
- data/bin/tabry-generate-fish-complete +31 -0
- data/lib/tabry/cli/all_in_one.rb +27 -6
- data/lib/tabry/config_builder/top_level_builder.rb +1 -0
- data/lib/tabry/models/const_option.rb +1 -1
- data/lib/tabry/models/flags_list.rb +6 -2
- data/lib/tabry/models/include_option.rb +2 -2
- data/lib/tabry/models/method_option.rb +1 -1
- data/lib/tabry/models/options_list.rb +2 -2
- data/lib/tabry/models/shell_option.rb +1 -1
- data/lib/tabry/models/subs_list.rb +13 -2
- data/lib/tabry/options_finder.rb +13 -8
- data/lib/tabry/runner.rb +2 -2
- data/lib/tabry/shells/fish/wrapper.rb +51 -0
- data/lib/tabry/shells/fish.rb +82 -0
- data/lib/tabry/version.rb +3 -0
- data/sh/fish/README.md +2 -1
- data/sh/fish/tabry_fish.fish +12 -9
- data/spec/tabry/cli/all_in_one_spec.rb +12 -0
- data/tabry.gemspec +2 -4
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87fa1708b1efb9ef81588017419bb6c63455ee786870f882783cf59f22ea462b
|
4
|
+
data.tar.gz: f0822419f2a36d48148cf7cf0ecdbd195666e2c5fe284d2e8dd6a563976c0842
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de752dc58cefc4cc1caed94a4f0ae34758fdb40a9973f48ed5471b17fef517b0eecfbfd7e3735179793cce8d16d739d2cb2fe6d833c3f765f5c57e353dac1b7a
|
7
|
+
data.tar.gz: 3e26e31d951fbc7f076b3c6e5b2c96eccfd1287c5469f84447ec549dc6aca51746dc193cbed36276b2e81dab67ce2bee8204cc0e8bb6b4010a07b284bac75f32
|
data/bin/tabry-fish
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
# Run by the tabry_fish.sh fish tab completion function to plug into Tabry
|
5
|
+
# to get completion options.
|
6
|
+
# Fish-specific entrypoint
|
7
|
+
|
8
|
+
require_relative "../lib/tabry/shells/fish/wrapper"
|
9
|
+
Tabry::Fish::Wrapper.run(*ARGV)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative "../lib/tabry/cli/all_in_one"
|
4
|
+
require_relative "../lib/tabry/shells/fish"
|
5
|
+
|
6
|
+
Tabry::CLI::AllInOne.run do
|
7
|
+
config(names_underscores_to_dashes: true) do
|
8
|
+
desc <<~DESC
|
9
|
+
Generates fish completion for the tabry relative to this script
|
10
|
+
for the given command name and tabry JSON/YML file. Generates
|
11
|
+
fish functions unique to the command name to avoid conflicting with
|
12
|
+
other potential tabry installations.
|
13
|
+
DESC
|
14
|
+
arg :command_name, "Name of the command, e.g. 'mycli'"
|
15
|
+
arg :tabry_json_path, "Path to the mycli.json or mycli.yml compiled tabry file"
|
16
|
+
flagarg "uniq-fn-id,i", <<~DESC
|
17
|
+
Unique identifier to use for the unique tabry completion bash functions
|
18
|
+
(default is the capitalized command name)
|
19
|
+
DESC
|
20
|
+
end
|
21
|
+
|
22
|
+
def main
|
23
|
+
puts Tabry::Shells::Fish.generate(
|
24
|
+
args.command_name,
|
25
|
+
args.tabry_json_path,
|
26
|
+
uniq_fn_id: flags.uniq_fn_id,
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
|
data/lib/tabry/cli/all_in_one.rb
CHANGED
@@ -25,7 +25,7 @@ module Tabry
|
|
25
25
|
|
26
26
|
# Hack to avoid processing block any more if only running completion
|
27
27
|
# That way you an have expensive requires after the include
|
28
|
-
if (ARGV.first == "completion") && ARGV.length == 3 && ARGV[2].to_s =~ /^[0-9]+$/
|
28
|
+
if ((ARGV.first == "completion")) && ARGV.length == 3 && ARGV[2].to_s =~ /^[0-9]+$/
|
29
29
|
throw :run_completion, true
|
30
30
|
end
|
31
31
|
end
|
@@ -45,14 +45,26 @@ module Tabry
|
|
45
45
|
|
46
46
|
def self.define_completion_methods(cli_class, config, cmd_name: nil)
|
47
47
|
cli_class.module_eval do
|
48
|
+
|
48
49
|
define_method :completion__bash do
|
49
50
|
require_relative "../shells/bash"
|
50
51
|
Kernel.puts Tabry::Shells::Bash.generate_self(cmd_name: cmd_name)
|
51
52
|
end
|
52
53
|
|
54
|
+
define_method :completion__fish do
|
55
|
+
require_relative "../shells/fish"
|
56
|
+
Kernel.puts Tabry::Shells::Fish.generate_self(cmd_name: cmd_name)
|
57
|
+
end
|
58
|
+
|
53
59
|
define_method :completion do
|
54
|
-
|
55
|
-
|
60
|
+
fish_mode = ENV.fetch("TABRY_FISH_MODE", false)
|
61
|
+
if fish_mode
|
62
|
+
require_relative "../shells/fish/wrapper"
|
63
|
+
Tabry::Fish::Wrapper.run(args.cmd_line, args.comp_point, config: config)
|
64
|
+
else
|
65
|
+
require_relative "../shells/bash/wrapper"
|
66
|
+
Tabry::Bash::Wrapper.run(args.cmd_line, args.comp_point, config: config)
|
67
|
+
end
|
56
68
|
end
|
57
69
|
end
|
58
70
|
end
|
@@ -77,13 +89,22 @@ module Tabry
|
|
77
89
|
# If we recognize command is going to be a completion command, fast track and
|
78
90
|
# run completion now
|
79
91
|
if run_completion
|
80
|
-
|
81
|
-
|
92
|
+
if ARGV.first == "completion"
|
93
|
+
fish_mode = ENV.fetch("TABRY_FISH_MODE", false)
|
94
|
+
if fish_mode
|
95
|
+
require_relative "../shells/fish/wrapper"
|
96
|
+
Tabry::Fish::Wrapper.run(ARGV[1], ARGV[2], config: config)
|
97
|
+
else
|
98
|
+
require_relative "../shells/bash/wrapper"
|
99
|
+
Tabry::Bash::Wrapper.run(ARGV[1], ARGV[2], config: config)
|
100
|
+
end
|
101
|
+
exit
|
102
|
+
end
|
82
103
|
end
|
83
104
|
|
84
105
|
# If we recognize there is a "completion" subcommand, add completion
|
85
106
|
# methods -- if not already defined by caller in the block
|
86
|
-
if config.main.subs.by_name["completion"] && !cli.instance_methods.include?(:completion__bash)
|
107
|
+
if config.main.subs.by_name["completion"] && !cli.instance_methods.include?(:completion__bash) && !cli.instance_methods.include?(:completion__fish)
|
87
108
|
define_completion_methods(cli, config)
|
88
109
|
end
|
89
110
|
|
@@ -24,6 +24,7 @@ module Tabry
|
|
24
24
|
sub :completion do
|
25
25
|
desc "Get tab completion shell config"
|
26
26
|
sub :bash, "Get tab completion for bash or zsh"
|
27
|
+
sub :fish, "Get tab completion for fish"
|
27
28
|
arg :cmd_line, "(for internal usage, when used instead of subcommand) full command line for getting completion options"
|
28
29
|
arg :comp_point, "(for internal usage, when used instead of subcommand) comp point"
|
29
30
|
end
|
@@ -16,10 +16,14 @@ module Tabry
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
def options(token, used:)
|
19
|
+
def options(token, used:, params:)
|
20
20
|
to_a.map do |flag|
|
21
21
|
if token&.start_with?("-") && flag.name_with_dashes.start_with?(token) && !used[flag.name]
|
22
|
-
|
22
|
+
if params[:descriptions]
|
23
|
+
[flag.name_with_dashes, flag.description]
|
24
|
+
else
|
25
|
+
flag.name_with_dashes
|
26
|
+
end
|
23
27
|
end
|
24
28
|
end.compact
|
25
29
|
end
|
@@ -20,9 +20,20 @@ module Tabry
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
def options(token)
|
24
|
-
|
23
|
+
def options(token, params)
|
24
|
+
::Tabry::Util.debug "checking:::: #{token}"
|
25
|
+
to_a
|
26
|
+
.select { |sub| sub.name.start_with?(token) }
|
27
|
+
.map do |sub|
|
28
|
+
if params[:descriptions]
|
29
|
+
[sub.name, sub.description]
|
30
|
+
else
|
31
|
+
sub.name
|
32
|
+
end
|
33
|
+
end
|
34
|
+
.compact
|
25
35
|
end
|
36
|
+
|
26
37
|
end
|
27
38
|
end
|
28
39
|
end
|
data/lib/tabry/options_finder.rb
CHANGED
@@ -4,15 +4,16 @@ require "json"
|
|
4
4
|
|
5
5
|
module Tabry
|
6
6
|
class OptionsFinder
|
7
|
-
attr_reader :result
|
7
|
+
attr_reader :result, :params
|
8
8
|
|
9
9
|
# Returns an array of options
|
10
|
-
def self.options(result, token)
|
11
|
-
new(result).options(token)
|
10
|
+
def self.options(result, token, params)
|
11
|
+
new(result, params).options(token)
|
12
12
|
end
|
13
13
|
|
14
|
-
def initialize(result)
|
14
|
+
def initialize(result, params)
|
15
15
|
@result = result
|
16
|
+
@params = params
|
16
17
|
end
|
17
18
|
|
18
19
|
def options(token)
|
@@ -59,7 +60,7 @@ module Tabry
|
|
59
60
|
|
60
61
|
def options_flagarg(token)
|
61
62
|
result.sub_stack.map do |sub|
|
62
|
-
sub.flags[state.current_flag]&.options&.options(token)
|
63
|
+
sub.flags[state.current_flag]&.options&.options(token, params)
|
63
64
|
end.compact.flatten.uniq
|
64
65
|
end
|
65
66
|
|
@@ -68,14 +69,18 @@ module Tabry
|
|
68
69
|
# once an arg has been given, can no longer use a subcommand
|
69
70
|
[]
|
70
71
|
else
|
71
|
-
current_sub.subs.options(token)
|
72
|
+
current_sub.subs.options(token, params)
|
72
73
|
end
|
73
74
|
end
|
74
75
|
|
75
76
|
def options_subcommand_flags(token)
|
76
77
|
return [] if state.dashdash
|
77
78
|
|
78
|
-
result
|
79
|
+
result
|
80
|
+
.sub_stack
|
81
|
+
.map { |sub| sub.flags.options(token, used: state.flags, params: params) }
|
82
|
+
.flatten(1)
|
83
|
+
.uniq
|
79
84
|
end
|
80
85
|
|
81
86
|
def options_subcommand_args(token)
|
@@ -85,7 +90,7 @@ module Tabry
|
|
85
90
|
current_sub.args[state.args.length]
|
86
91
|
end
|
87
92
|
|
88
|
-
arg&.options&.options(token) || []
|
93
|
+
arg&.options&.options(token, params) || []
|
89
94
|
end
|
90
95
|
end
|
91
96
|
end
|
data/lib/tabry/runner.rb
CHANGED
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "shellwords"
|
4
|
+
require "yaml"
|
5
|
+
require_relative "../../util"
|
6
|
+
require_relative "../../runner"
|
7
|
+
require_relative "../../shell_tokenizer"
|
8
|
+
|
9
|
+
# Fish-specific entrypoint
|
10
|
+
module Tabry
|
11
|
+
module Fish
|
12
|
+
module Wrapper
|
13
|
+
DESCRIPTION_MAX_LENGTH = 50
|
14
|
+
|
15
|
+
def self.run(cmd_line, comp_point, config: nil)
|
16
|
+
cmd_name, args, last_arg = Tabry::ShellTokenizer.split_with_comppoint(cmd_line, comp_point)
|
17
|
+
opts = Tabry::Runner.new(config: config || cmd_name).options(args, last_arg, {descriptions: true})
|
18
|
+
|
19
|
+
if Tabry::Util.debug?
|
20
|
+
$stderr.puts
|
21
|
+
warn "debug: got command line and comp_point: #{cmd_line.inspect}, #{comp_point}"
|
22
|
+
warn "using args: #{args.inspect}"
|
23
|
+
warn "using lastarg: #{last_arg.inspect}"
|
24
|
+
warn "results from Tabry#options(): #{opts.inspect}"
|
25
|
+
warn "--- end debug output ---"
|
26
|
+
end
|
27
|
+
|
28
|
+
normal_opts = opts.select { |t,| t.is_a?(String) }
|
29
|
+
special_opts = opts.select { |t| t.is_a?(Symbol) }
|
30
|
+
|
31
|
+
puts normal_opts.map { |opt, desc| "#{Shellwords.escape(opt)}\t#{format_description(desc)}" }.join("\n")
|
32
|
+
if special_opts.any?
|
33
|
+
puts
|
34
|
+
puts special_opts.join("\n")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.format_description(description)
|
39
|
+
if description.nil?
|
40
|
+
""
|
41
|
+
else
|
42
|
+
if description.length > DESCRIPTION_MAX_LENGTH
|
43
|
+
"#{description[0..(DESCRIPTION_MAX_LENGTH - 3)]}..."
|
44
|
+
else
|
45
|
+
description
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Used to generate a tab-completion function for a Tabry CLI using absolute
|
4
|
+
# paths to the tabry-bash script in this repo and to the Tabry JSON/YML file.
|
5
|
+
# Using uniquely-named tab-completion functions and absolute paths means you can
|
6
|
+
# have different Tabry-based CLIs using different versions of Tabry without any
|
7
|
+
# conflicts.
|
8
|
+
# See sh/bash/README.md and "Adding Tab Completion to your CLI" in main README
|
9
|
+
|
10
|
+
require "shellwords"
|
11
|
+
|
12
|
+
module Tabry
|
13
|
+
module Shells
|
14
|
+
module Fish
|
15
|
+
# NOTE! This code uses sh/fish/tabry_fish.fish and is described in
|
16
|
+
# sh/fish/README.md; see that README for more info
|
17
|
+
def self.generate(cmd_name, tabry_file_path, uniq_fn_id: nil)
|
18
|
+
generate_internal(
|
19
|
+
cmd_name: cmd_name,
|
20
|
+
import_path: File.expand_path(tabry_file_path),
|
21
|
+
tabry_fish_executable: File.expand_path("#{path_to_tabry}/bin/tabry-fish"),
|
22
|
+
tabry_fish_arg: nil,
|
23
|
+
uniq_fn_id: uniq_fn_id
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Generate fish completion code that will run the currently running
|
28
|
+
# command ($0) with "completion" to get completion options. "cmd_name"
|
29
|
+
# is used to tell fish which command to make options for
|
30
|
+
def self.generate_self(cmd_name: nil)
|
31
|
+
cmd_name ||= File.basename($0)
|
32
|
+
generate_internal(
|
33
|
+
cmd_name: cmd_name,
|
34
|
+
import_path: "",
|
35
|
+
tabry_fish_executable: File.expand_path($0),
|
36
|
+
tabry_fish_arg: "completion",
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.path_to_tabry
|
41
|
+
File.expand_path("#{__dir__}/../../../")
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.esc(s)
|
45
|
+
Shellwords.escape(s)
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.add_uniq_id(str, pattern, uniq_id)
|
49
|
+
str.gsub! pattern, "#{pattern}_#{uniq_id}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.generate_internal(cmd_name:, import_path:, tabry_fish_executable:, tabry_fish_arg:, uniq_fn_id: nil)
|
53
|
+
# uniq_fn_id is added to the bash functions to ensure they are unique
|
54
|
+
# -- by default this is the capitalized command name
|
55
|
+
uniq_fn_id ||= cmd_name
|
56
|
+
uniq_fn_id = uniq_fn_id.upcase.gsub(/[^A-Z0-9_]/, "_")
|
57
|
+
script = File.read("#{__dir__}/../../../sh/fish/tabry_fish.fish")
|
58
|
+
|
59
|
+
add_uniq_id(script, "tabry_completion_init", uniq_fn_id)
|
60
|
+
add_uniq_id(script, "__fish_tabry_internal_invoke", uniq_fn_id)
|
61
|
+
add_uniq_id(script, "__fish_tabry_check_only_args", uniq_fn_id)
|
62
|
+
add_uniq_id(script, "__fish_tabry_check_only_file", uniq_fn_id)
|
63
|
+
add_uniq_id(script, "__fish_tabry_check_args_and_file", uniq_fn_id)
|
64
|
+
add_uniq_id(script, "__fish_tabry_completions", uniq_fn_id)
|
65
|
+
|
66
|
+
script.gsub! "# TABRY_IMPORT_PATH_REPLACE (DO NOT REMOVE)", "set TABRY_IMPORTS_PATH #{esc import_path}"
|
67
|
+
script.gsub! "# TABRY_EXECUTABLE_REPLACE (DO NOT REMOVE)", "set TABRY_EXECUTABLE #{esc tabry_fish_executable}"
|
68
|
+
if !tabry_fish_arg.nil?
|
69
|
+
script.gsub! "# TABRY_ARG_REPLACE (DO NOT REMOVE)", "set TABRY_ARG #{esc tabry_fish_arg}"
|
70
|
+
end
|
71
|
+
|
72
|
+
<<~END_FISH_CODE_TEMPLATE
|
73
|
+
# The following Autocomplete is for a Tabry-powered command. It was
|
74
|
+
# generated by the command itself. See the documentation located in
|
75
|
+
# #{esc path_to_tabry}/sh/fish/README.md
|
76
|
+
#{script}
|
77
|
+
tabry_completion_init_#{uniq_fn_id} #{esc cmd_name}
|
78
|
+
END_FISH_CODE_TEMPLATE
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
data/sh/fish/README.md
CHANGED
@@ -2,8 +2,9 @@ This directory includes fish completions for Tabry
|
|
2
2
|
|
3
3
|
There are two steps to add to your ~/.config/fish/config.fish to use:
|
4
4
|
|
5
|
-
1. Source
|
5
|
+
1. Source `tabry_fish.fish`
|
6
6
|
2. Add a call to `tabry_completion_init`, for each command
|
7
|
+
3. Ensure the `TABRY_IMPORTS_PATH` environment variable is defined and points to where your compiled tabry files are located.
|
7
8
|
|
8
9
|
```sh
|
9
10
|
source tabry_fish.fish
|
data/sh/fish/tabry_fish.fish
CHANGED
@@ -12,14 +12,19 @@ end
|
|
12
12
|
|
13
13
|
# return true if tabry only reports commands
|
14
14
|
function __fish_tabry_internal_invoke
|
15
|
-
|
16
|
-
|
15
|
+
# TABRY_IMPORT_PATH_REPLACE (DO NOT REMOVE)
|
16
|
+
# TABRY_EXECUTABLE_REPLACE (DO NOT REMOVE)
|
17
|
+
# TABRY_ARG_REPLACE (DO NOT REMOVE)
|
18
|
+
set -x TABRY_FISH_MODE true
|
17
19
|
|
18
20
|
# -C "Get cursor position"
|
19
21
|
set cursor_position (commandline -C)
|
20
22
|
set cmd (commandline)
|
21
|
-
|
22
|
-
|
23
|
+
|
24
|
+
set result ($TABRY_EXECUTABLE $TABRY_ARG "$cmd" "$cursor_position")
|
25
|
+
for arg in $result
|
26
|
+
echo $arg
|
27
|
+
end
|
23
28
|
end
|
24
29
|
|
25
30
|
# return true if tabry only reports file
|
@@ -75,16 +80,14 @@ function __fish_tabry_completions
|
|
75
80
|
|
76
81
|
set args (echo "$result"|sed 's/ .*//')
|
77
82
|
|
78
|
-
# The '--' arg is needed in case $result contains flag-like strings
|
79
|
-
set args_parsed (string split -- ' ' $args)
|
80
|
-
|
81
83
|
if test "x$args" = "x"
|
82
84
|
# Don't offer anything if we don't have any completions
|
83
85
|
return 1;
|
84
86
|
else
|
85
|
-
# $
|
87
|
+
# $result will be something like: ["foo 'this is foo'" "bar" "baz" "" "file"]
|
86
88
|
# where "file" is special, since it's after the space.
|
87
|
-
for arg in $
|
89
|
+
for arg in $result
|
90
|
+
set clean_arg (echo "$arg"|sed 's/ .*//')
|
88
91
|
if test "x$arg" != "x"
|
89
92
|
echo "$arg"
|
90
93
|
else
|
@@ -3,6 +3,7 @@
|
|
3
3
|
require_relative "../../../lib/tabry/cli/all_in_one"
|
4
4
|
require_relative "../../../lib/tabry/shells/bash"
|
5
5
|
require_relative "../../../lib/tabry/shells/bash/wrapper"
|
6
|
+
require_relative "../../../lib/tabry/shells/fish"
|
6
7
|
|
7
8
|
module Tabry::Spec
|
8
9
|
module Cli
|
@@ -124,6 +125,17 @@ describe Tabry::CLI::AllInOne do
|
|
124
125
|
end
|
125
126
|
end
|
126
127
|
|
128
|
+
it "creates a #completion__fish method which generates completion" do
|
129
|
+
stub_const("ARGV", %w[completion fish])
|
130
|
+
expect(Tabry::Shells::Fish).to receive(:generate_self).with(cmd_name: "foo").and_return("fish completion stuff")
|
131
|
+
expect_any_instance_of(Kernel).to receive(:puts).with("fish completion stuff")
|
132
|
+
|
133
|
+
described_class.completion_only do
|
134
|
+
cmd :foo
|
135
|
+
sub :bar
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
127
139
|
it "creates a #completion method which generates options" do
|
128
140
|
stub_const("ARGV", ["completion", "cmd line", "6"])
|
129
141
|
expect(Tabry::Bash::Wrapper).to receive(:run) do |cmd_line, comp_point, config:|
|
data/tabry.gemspec
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
lib = File.expand_path("lib", __dir__)
|
5
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require_relative './lib/tabry/version'
|
6
4
|
|
7
5
|
Gem::Specification.new do |s|
|
8
6
|
s.name = "tabry"
|
9
|
-
s.version =
|
7
|
+
s.version = Tabry::VERSION
|
10
8
|
s.summary = "Tab completion and CLIs extraordinaire"
|
11
9
|
s.authors = ["Evan Battaglia"]
|
12
10
|
s.email = "battaglia.evan@gmail.com"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tabry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evan Battaglia
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry-byebug
|
@@ -84,7 +84,9 @@ description:
|
|
84
84
|
email: battaglia.evan@gmail.com
|
85
85
|
executables:
|
86
86
|
- tabry-bash
|
87
|
+
- tabry-fish
|
87
88
|
- tabry-generate-bash-complete
|
89
|
+
- tabry-generate-fish-complete
|
88
90
|
- tabry-help
|
89
91
|
- tabry-test-options
|
90
92
|
- tabry-test-parse
|
@@ -92,7 +94,9 @@ extensions: []
|
|
92
94
|
extra_rdoc_files: []
|
93
95
|
files:
|
94
96
|
- bin/tabry-bash
|
97
|
+
- bin/tabry-fish
|
95
98
|
- bin/tabry-generate-bash-complete
|
99
|
+
- bin/tabry-generate-fish-complete
|
96
100
|
- bin/tabry-help
|
97
101
|
- bin/tabry-test-options
|
98
102
|
- bin/tabry-test-parse
|
@@ -148,9 +152,12 @@ files:
|
|
148
152
|
- lib/tabry/shell_tokenizer.rb
|
149
153
|
- lib/tabry/shells/bash.rb
|
150
154
|
- lib/tabry/shells/bash/wrapper.rb
|
155
|
+
- lib/tabry/shells/fish.rb
|
156
|
+
- lib/tabry/shells/fish/wrapper.rb
|
151
157
|
- lib/tabry/state.rb
|
152
158
|
- lib/tabry/usage_generator.rb
|
153
159
|
- lib/tabry/util.rb
|
160
|
+
- lib/tabry/version.rb
|
154
161
|
- sh/bash/README.md
|
155
162
|
- sh/bash/tabry_bash.sh
|
156
163
|
- sh/bash/tabry_bash_core.sh
|