fylla 0.3.0 → 0.4.0

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
- SHA1:
3
- metadata.gz: 90d49bc51792ace89262f2175d3590427cdb9d92
4
- data.tar.gz: 9cd74325c692ddce6371ddaea10d4e972ec721e2
2
+ SHA256:
3
+ metadata.gz: dfe6f78127702957706d81b2d20f1433edb3d0539c2fe06cb7a5faa8a199dee1
4
+ data.tar.gz: c2aa3c67515e64eb9ea13c3177cc5f911bd65123438cda196df7a04781ee0a7e
5
5
  SHA512:
6
- metadata.gz: a53727a1901bbe8cde4260fd3acaa75db30755b8fb8900cdaea12f6980028d9ef66b250ea6bc948b92e43460f3c5eeb27b4bad163d16a0480dbe5dce20876c32
7
- data.tar.gz: d4adaac549e8dc82aad501442ad406ca8cb3d14594b0a1abb059f0c6b05893808e1d5b9b53bbf1941082936133567632344c6cd5ba682c90b5a42f16fdc1138d
6
+ metadata.gz: 39368c375eb8ccbc486609c06590e324e1aaa0980a071fa550c7898f6f1843a66a23320ec48a93d6b3d0dc7ecb29096a04d45be4b6eb2657108f0e505c5e2088
7
+ data.tar.gz: b6343092982862c13bcc149515a0d68a61623ca5a7790f41d4c0f3fa7406173549ecf2887d61a91e57bb6f57b080102fe09737074d04ab6da8a70873f7e38d31
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in Fylla.gemspec
4
- gemspec
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in Fylla.gemspec
4
+ gemspec
data/exe/fylla CHANGED
File without changes
data/fylla.gemspec CHANGED
@@ -1,39 +1,39 @@
1
- lib = File.expand_path('lib', __dir__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'fylla/version'
4
-
5
- # rubocop:disable BlockLength
6
- Gem::Specification.new do |spec|
7
- spec.name = 'fylla'
8
- spec.version = Fylla::VERSION
9
- spec.authors = ['Tyler Thrailkill']
10
- spec.email = ['tyler.b.thrailkill@gmail.com']
11
-
12
- spec.summary = 'Adds functions for generating autocomplete scripts for Thor applications'
13
- spec.description = 'Fylla generates zsh and bash autocomplete scripts for Thor CLI applications.'
14
- spec.homepage = 'https://github.com/snowe2010/fylla'
15
- spec.license = 'MIT'
16
-
17
- spec.metadata['yard.run'] = 'yri' # use "yard" to build full HTML docs.
18
- spec.metadata['changelog_uri'] = 'https://github.com/snowe2010/fylla/blob/master/CHANGELOG.md'
19
-
20
- # Specify which files should be added to the gem when it is released.
21
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
23
- `git ls-files -z`.split("\x0").reject do |f|
24
- f.match(%r{^(.idea|test|spec|features)/|^[.][a-zA-Z0-9]|^.*[.]md|Gemfile.lock})
25
- end
26
- end
27
-
28
- spec.bindir = 'exe'
29
- spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f)}
30
- spec.require_paths = ['lib']
31
-
32
- spec.add_development_dependency 'bundler', '~> 2.0'
33
- spec.add_development_dependency 'codecov', '~> 0.1.14'
34
- spec.add_development_dependency 'minitest', '~> 5.0'
35
- spec.add_development_dependency 'minitest-hooks', '~> 1.5.0'
36
- spec.add_development_dependency 'rake', '~> 10.0'
37
- spec.add_dependency 'thor', '>= 0.19.0'
38
- end
39
- # rubocop:enable BlockLength
1
+ lib = File.expand_path('lib', __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'fylla/version'
4
+
5
+ # rubocop:disable BlockLength
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'fylla'
8
+ spec.version = Fylla::VERSION
9
+ spec.authors = ['Tyler Thrailkill']
10
+ spec.email = ['tyler.b.thrailkill@gmail.com']
11
+
12
+ spec.summary = 'Adds functions for generating autocomplete scripts for Thor applications'
13
+ spec.description = 'Fylla generates zsh and bash autocomplete scripts for Thor CLI applications.'
14
+ spec.homepage = 'https://github.com/snowe2010/fylla'
15
+ spec.license = 'MIT'
16
+
17
+ spec.metadata['yard.run'] = 'yri' # use "yard" to build full HTML docs.
18
+ spec.metadata['changelog_uri'] = 'https://github.com/snowe2010/fylla/blob/master/CHANGELOG.md'
19
+
20
+ # Specify which files should be added to the gem when it is released.
21
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
23
+ `git ls-files -z`.split("\x0").reject do |f|
24
+ f.match(%r{^(.idea|test|spec|features)/|^[.][a-zA-Z0-9]|^.*[.]md|Gemfile.lock})
25
+ end
26
+ end
27
+
28
+ spec.bindir = 'exe'
29
+ spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f)}
30
+ spec.require_paths = ['lib']
31
+
32
+ spec.add_development_dependency 'bundler', '~> 2.0'
33
+ spec.add_development_dependency 'codecov', '~> 0.1.14'
34
+ spec.add_development_dependency 'minitest', '~> 5.0'
35
+ spec.add_development_dependency 'minitest-hooks', '~> 1.5.0'
36
+ spec.add_development_dependency 'rake', '~> 10.0'
37
+ spec.add_dependency 'thor', '>= 0.19.0'
38
+ end
39
+ # rubocop:enable BlockLength
data/lib/fylla.rb CHANGED
@@ -5,6 +5,9 @@ require 'fylla/parsed_subcommand'
5
5
  require 'fylla/completion_extension'
6
6
  require 'thor'
7
7
 
8
+ # We _must prepend before thor loads_ Ideally this is at require time...
9
+ ::Thor::Option.prepend Fylla::Thor::Option
10
+
8
11
  #
9
12
  # Top level module for the Fylla project.
10
13
  # Contains one method for initializing Fylla
@@ -18,7 +21,6 @@ module Fylla
18
21
  def self.load(executable_name = nil)
19
22
  @executable_name = executable_name || nil
20
23
  ::Thor.prepend Fylla::Thor::CompletionGenerator
21
- # ::Thor::Option.prepend Fylla::Thor::Option
22
24
  end
23
25
 
24
26
  #
@@ -1,21 +1,15 @@
1
- require 'thor'
2
-
3
- class Thor
4
- class Option
5
- attr_accessor :completion
6
- old_initialize = instance_method(:initialize)
7
- define_method(:initialize) do |name, options = {}|
8
- old_initialize.bind(self).call(name, options)
9
- @completion = options[:completion]
10
- end
11
- # def initialize(name, options = {})
12
- # old_initialize
13
- # end
14
-
15
- class << self
16
- def completion(completion)
17
- @completion = completion
18
- end
19
- end
20
- end
21
- end
1
+ require 'thor'
2
+
3
+ # add the 'completion:' option to Thor::Option, which
4
+ # allows passing a shorter description for the shell
5
+ module Fylla
6
+ module Thor
7
+ module Option
8
+ attr_accessor :completion
9
+ def initialize(name, options = {})
10
+ @completion = options[:completion]
11
+ super
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,184 +1,184 @@
1
- require_relative 'parsed_option'
2
- require_relative 'parsed_command'
3
- require_relative 'parsed_subcommand'
4
- require 'erb'
5
-
6
- module Fylla
7
- module Thor
8
- #
9
- # module for prepending into +Thor+
10
- # inserts methods into Thor that allow generating completion scripts
11
- module CompletionGenerator
12
- def self.prepended(base)
13
- base.singleton_class.prepend(ClassMethods)
14
- end
15
-
16
- #
17
- # Contains the methods +zsh_completion+
18
- module ClassMethods
19
- #
20
- # Generates a zsh _[executable_name] completion
21
- # script for the entire Thor application
22
- #
23
- # @param executable_name [String]
24
- # the name of the executable to generate the script for
25
- def zsh_completion(executable_name)
26
- @executable_name = executable_name
27
- command = create_command_map all_commands, subcommand_classes
28
-
29
- builder = map_to_completion_string [command]
30
- completion = "#compdef _#{executable_name} #{executable_name}\n"
31
- completion += builder
32
- completion
33
- end
34
-
35
- #
36
- # Generates a bash _[executable_name] completion
37
- # script for the entire Thor application
38
- #
39
- # @param executable_name [String]
40
- # the name of the executable to generate the script for
41
- def bash_completion(executable_name)
42
- @executable_name = executable_name
43
- command = create_command_map all_commands, subcommand_classes
44
-
45
- builder = map_to_completion_string [command], style: :bash
46
- completion = ''
47
- completion += builder
48
- completion += "complete -F _#{executable_name} #{executable_name}\n"
49
- completion
50
- end
51
-
52
- private
53
-
54
- # Takes a list of [ParsedCommand]s and [ParsedSubcommand]s
55
- # and converts them into completion strings, to be combined
56
- # together into one completion script
57
- #
58
- # @param style [Symbol] style of completions to generate
59
- # defaults to :zsh
60
- # @param commands [List<Thor::Command>]
61
- # list of [Thor::Command]s
62
- # @param context [String] the current command context
63
- # this is essentially a breadcrumb of our current
64
- # command path:
65
- # e.g. "exe sub1 sub2 sub3 --help" maps to a context of
66
- # "_sub1_sub2_sub3"
67
- # @param class_options [List<Thor::Option>]
68
- # a list of global or class level options for the current context
69
- def map_to_completion_string(commands,
70
- context: '',
71
- class_options: [],
72
- style: :zsh)
73
- builder = ''
74
- commands.each do |command|
75
- context_name = generate_context_name(context, command)
76
- result = generate_completion_string(command, class_options, context_name, style)
77
- builder += result
78
- end
79
- builder
80
- end
81
-
82
- # Generate a context name based off of
83
- # the current context and the current command
84
- #
85
- # @param context [String] the current context
86
- # @param command [Thor::Command]
87
- # current command we are generating documentation for
88
- def generate_context_name(context, command)
89
- command_name = if command.name.nil? || command.name.empty?
90
- ''
91
- else
92
- "_#{command.name}"
93
- end
94
- "#{context}#{command_name}"
95
- end
96
-
97
- def generate_completion_string(command, class_options, context_name, style)
98
- builder = ''
99
- if command.is_a? ParsedSubcommand
100
- class_options = (class_options + command.class_options).uniq
101
- builder += map_to_completion_string(command.commands,
102
- context: context_name,
103
- class_options: class_options,
104
- style: style)
105
-
106
- builder += create_completion_string(read_template(style, :subcommand), binding)
107
- else
108
- builder += create_completion_string(read_template(style, :command), binding)
109
- end
110
- builder
111
- end
112
-
113
- # Recursively generate a command map based off
114
- # of the commands and subcommands passed in.
115
- #
116
- # The [command_map] is a map of [String]s to [Thor::Command] objects,
117
- # while the [subcommand_map] is a map of [String]s to [Thor] classes,
118
- # usually your own CLI classes that subclass [Thor]
119
- #
120
- # @param command_map [Hash<String, Thor::Command>]
121
- # a map to recursively generate a completion layout
122
- # @param subcommand_map [Hash<String, Class < Thor>]
123
- # a map indicating the subcommands and their respective classes
124
- def recursively_find_commands(command_map, subcommand_map)
125
- map = Hash[command_map.map {|k, v| [v, subcommand_map[k]]}]
126
- map.map do |command, subcommand_class|
127
- if subcommand_class.nil?
128
- ancestor_name = command.ancestor_name if command.respond_to? :ancestor_name
129
- options = parse_options(command.options.values)
130
- ParsedCommand.new(ancestor_name, command.description, command.name, options)
131
- else
132
- commands = recursively_find_commands subcommand_class.commands, subcommand_class.subcommand_classes
133
- ParsedSubcommand.new(command.name, command.description, commands, subcommand_class.class_options.values)
134
- end
135
- end
136
- end
137
-
138
- # Top level method to begin the recursive map generation
139
- # This is needed because we don't have a 'top' level
140
- # command to wrap everything under.
141
- #
142
- # This simplifies the rest of the code.
143
- #
144
- # (see #recursively_find_commands) for more documentation
145
- def create_command_map(command_map, subcommand_map)
146
- command_map = recursively_find_commands command_map, subcommand_map
147
- ParsedSubcommand.new(nil, '', command_map, class_options.values)
148
- end
149
-
150
- # Helper method to load an [ERB] template
151
- # and generate the corresponding [String]
152
- #
153
- # @param template [String] an ERB template
154
- # @param bind [Binding] a binding to a context
155
- def create_completion_string(template, bind)
156
- template = ERB.new(template, nil, '-<>')
157
- template.result(bind)
158
- end
159
-
160
- # Helper method to read an [ERB] template
161
- # from a file and return it as a [String]
162
- #
163
- # @param name [Symbol] type of template to retrieve
164
- # can be either :subcommand or :command
165
- # @param style [Symbol] style of template to retrieve
166
- # can be either :zsh or :bash
167
- # @return [String] template string retrieved from erb file
168
- def read_template(style, name)
169
- style = style.is_a?(Symbol) ? style.to_s : style
170
- name = name.is_a?(Symbol) ? name.to_s : name
171
- erb_path = "erb_templates/#{style}/#{name}.erb"
172
- File.read(File.join(__dir__, erb_path))
173
- end
174
-
175
- def parse_options(options)
176
- options.map do |opt|
177
- description = opt.completion || opt.description || opt.banner
178
- ParsedOption.new(opt.name, description, opt.aliases)
179
- end
180
- end
181
- end
182
- end
183
- end
184
- end
1
+ require_relative 'parsed_option'
2
+ require_relative 'parsed_command'
3
+ require_relative 'parsed_subcommand'
4
+ require 'erb'
5
+
6
+ module Fylla
7
+ module Thor
8
+ #
9
+ # module for prepending into +Thor+
10
+ # inserts methods into Thor that allow generating completion scripts
11
+ module CompletionGenerator
12
+ def self.prepended(base)
13
+ base.singleton_class.prepend(ClassMethods)
14
+ end
15
+
16
+ #
17
+ # Contains the methods +zsh_completion+
18
+ module ClassMethods
19
+ #
20
+ # Generates a zsh _[executable_name] completion
21
+ # script for the entire Thor application
22
+ #
23
+ # @param executable_name [String]
24
+ # the name of the executable to generate the script for
25
+ def zsh_completion(executable_name)
26
+ @executable_name = executable_name
27
+ command = create_command_map all_commands, subcommand_classes
28
+
29
+ builder = map_to_completion_string [command]
30
+ completion = "#compdef _#{executable_name} #{executable_name}\n"
31
+ completion += builder
32
+ completion
33
+ end
34
+
35
+ #
36
+ # Generates a bash _[executable_name] completion
37
+ # script for the entire Thor application
38
+ #
39
+ # @param executable_name [String]
40
+ # the name of the executable to generate the script for
41
+ def bash_completion(executable_name)
42
+ @executable_name = executable_name
43
+ command = create_command_map all_commands, subcommand_classes
44
+
45
+ builder = map_to_completion_string [command], style: :bash
46
+ completion = ''
47
+ completion += builder
48
+ completion += "complete -F _#{executable_name} #{executable_name}\n"
49
+ completion
50
+ end
51
+
52
+ private
53
+
54
+ # Takes a list of [ParsedCommand]s and [ParsedSubcommand]s
55
+ # and converts them into completion strings, to be combined
56
+ # together into one completion script
57
+ #
58
+ # @param style [Symbol] style of completions to generate
59
+ # defaults to :zsh
60
+ # @param commands [List<Thor::Command>]
61
+ # list of [Thor::Command]s
62
+ # @param context [String] the current command context
63
+ # this is essentially a breadcrumb of our current
64
+ # command path:
65
+ # e.g. "exe sub1 sub2 sub3 --help" maps to a context of
66
+ # "_sub1_sub2_sub3"
67
+ # @param class_options [List<Thor::Option>]
68
+ # a list of global or class level options for the current context
69
+ def map_to_completion_string(commands,
70
+ context: '',
71
+ class_options: [],
72
+ style: :zsh)
73
+ builder = ''
74
+ commands.each do |command|
75
+ context_name = generate_context_name(context, command)
76
+ result = generate_completion_string(command, class_options, context_name, style)
77
+ builder += result
78
+ end
79
+ builder
80
+ end
81
+
82
+ # Generate a context name based off of
83
+ # the current context and the current command
84
+ #
85
+ # @param context [String] the current context
86
+ # @param command [Thor::Command]
87
+ # current command we are generating documentation for
88
+ def generate_context_name(context, command)
89
+ command_name = if command.name.nil? || command.name.empty?
90
+ ''
91
+ else
92
+ "_#{command.name}"
93
+ end
94
+ "#{context}#{command_name}"
95
+ end
96
+
97
+ def generate_completion_string(command, class_options, context_name, style)
98
+ builder = ''
99
+ if command.is_a? ParsedSubcommand
100
+ class_options = (class_options + command.class_options).uniq
101
+ builder += map_to_completion_string(command.commands,
102
+ context: context_name,
103
+ class_options: class_options,
104
+ style: style)
105
+
106
+ builder += create_completion_string(read_template(style, :subcommand), binding)
107
+ else
108
+ builder += create_completion_string(read_template(style, :command), binding)
109
+ end
110
+ builder
111
+ end
112
+
113
+ # Recursively generate a command map based off
114
+ # of the commands and subcommands passed in.
115
+ #
116
+ # The [command_map] is a map of [String]s to [Thor::Command] objects,
117
+ # while the [subcommand_map] is a map of [String]s to [Thor] classes,
118
+ # usually your own CLI classes that subclass [Thor]
119
+ #
120
+ # @param command_map [Hash<String, Thor::Command>]
121
+ # a map to recursively generate a completion layout
122
+ # @param subcommand_map [Hash<String, Class < Thor>]
123
+ # a map indicating the subcommands and their respective classes
124
+ def recursively_find_commands(command_map, subcommand_map)
125
+ map = Hash[command_map.map {|k, v| [v, subcommand_map[k]]}]
126
+ map.map do |command, subcommand_class|
127
+ if subcommand_class.nil?
128
+ ancestor_name = command.ancestor_name if command.respond_to? :ancestor_name
129
+ options = parse_options(command.options.values)
130
+ ParsedCommand.new(ancestor_name, command.description, command.name, options)
131
+ else
132
+ commands = recursively_find_commands subcommand_class.commands, subcommand_class.subcommand_classes
133
+ ParsedSubcommand.new(command.name, command.description, commands, subcommand_class.class_options.values)
134
+ end
135
+ end
136
+ end
137
+
138
+ # Top level method to begin the recursive map generation
139
+ # This is needed because we don't have a 'top' level
140
+ # command to wrap everything under.
141
+ #
142
+ # This simplifies the rest of the code.
143
+ #
144
+ # (see #recursively_find_commands) for more documentation
145
+ def create_command_map(command_map, subcommand_map)
146
+ command_map = recursively_find_commands command_map, subcommand_map
147
+ ParsedSubcommand.new(nil, '', command_map, class_options.values)
148
+ end
149
+
150
+ # Helper method to load an [ERB] template
151
+ # and generate the corresponding [String]
152
+ #
153
+ # @param template [String] an ERB template
154
+ # @param bind [Binding] a binding to a context
155
+ def create_completion_string(template, bind)
156
+ template = ERB.new(template, nil, '-<>')
157
+ template.result(bind)
158
+ end
159
+
160
+ # Helper method to read an [ERB] template
161
+ # from a file and return it as a [String]
162
+ #
163
+ # @param name [Symbol] type of template to retrieve
164
+ # can be either :subcommand or :command
165
+ # @param style [Symbol] style of template to retrieve
166
+ # can be either :zsh or :bash
167
+ # @return [String] template string retrieved from erb file
168
+ def read_template(style, name)
169
+ style = style.is_a?(Symbol) ? style.to_s : style
170
+ name = name.is_a?(Symbol) ? name.to_s : name
171
+ erb_path = "erb_templates/#{style}/#{name}.erb"
172
+ File.read(File.join(__dir__, erb_path))
173
+ end
174
+
175
+ def parse_options(options)
176
+ options.map do |opt|
177
+ description = opt.completion || opt.description || opt.banner
178
+ ParsedOption.new(opt.name, description, opt.aliases)
179
+ end
180
+ end
181
+ end
182
+ end
183
+ end
184
+ end
@@ -1,14 +1,14 @@
1
- _<%= @executable_name %><%= context_name %> ()
2
- {
3
- local cur="${COMP_WORDS[COMP_CWORD]}"
4
- local options=()
5
- <%- command.options.each do |opt| -%>
6
- options+=("--<%= opt.name %>")
7
- <%- opt.aliases.each do |a| -%>
8
- options+=("-<%= a %>")
9
- <%- end -%>
10
- <%- end -%>
11
- options+=("--help")
12
- options+=("-h")
13
- COMPREPLY=($(compgen -W "${options[*]}" -- "$cur"))
14
- }
1
+ _<%= @executable_name %><%= context_name %> ()
2
+ {
3
+ local cur="${COMP_WORDS[COMP_CWORD]}"
4
+ local options=()
5
+ <%- command.options.each do |opt| -%>
6
+ options+=("--<%= opt.name %>")
7
+ <%- opt.aliases.each do |a| -%>
8
+ options+=("-<%= a %>")
9
+ <%- end -%>
10
+ <%- end -%>
11
+ options+=("--help")
12
+ options+=("-h")
13
+ COMPREPLY=($(compgen -W "${options[*]}" -- "$cur"))
14
+ }
@@ -1,36 +1,36 @@
1
- _<%= @executable_name %><%= context_name %>() {
2
- local i=1 subcommand_index
3
-
4
- # find the subcommand
5
- while [[ $i -lt $COMP_CWORD ]]; do
6
- local s="${COMP_WORDS[i]}"
7
- case "$s" in
8
- <%= command.name || @executable_name %>)<%# if command.name is empty, then we're at the top level command. therefore we need to use the @executable_name %>
9
- subcommand_index=$i
10
- break
11
- ;;
12
- esac
13
- (( i++ ))
14
- done
15
-
16
- while [[ $subcommand_index -lt $COMP_CWORD ]]; do
17
- local s="${COMP_WORDS[subcommand_index]}"
18
- case "$s" in
19
- <%- unless command.commands.empty? -%>
20
- <%- command.commands.each do |command| -%>
21
- <%= command.name %>)
22
- _<%= @executable_name %><%= context_name %>_<%= command.name %>
23
- return ;;
24
- <%- end -%>
25
- <%- end -%>
26
- help)
27
- COMPREPLY=""
28
- return
29
- ;;
30
- esac
31
- (( subcommand_index++ ))
32
- done
33
-
34
- local cur="${COMP_WORDS[COMP_CWORD]}"
35
- COMPREPLY=($(compgen -W "<%= command.commands.map(&:name).join(" ") %> <%= command.class_options.map(&:switch_name).join(" ") %>" -- "$cur"))
36
- }
1
+ _<%= @executable_name %><%= context_name %>() {
2
+ local i=1 subcommand_index
3
+
4
+ # find the subcommand
5
+ while [[ $i -lt $COMP_CWORD ]]; do
6
+ local s="${COMP_WORDS[i]}"
7
+ case "$s" in
8
+ <%= command.name || @executable_name %>)<%# if command.name is empty, then we're at the top level command. therefore we need to use the @executable_name %>
9
+ subcommand_index=$i
10
+ break
11
+ ;;
12
+ esac
13
+ (( i++ ))
14
+ done
15
+
16
+ while [[ $subcommand_index -lt $COMP_CWORD ]]; do
17
+ local s="${COMP_WORDS[subcommand_index]}"
18
+ case "$s" in
19
+ <%- unless command.commands.empty? -%>
20
+ <%- command.commands.each do |command| -%>
21
+ <%= command.name %>)
22
+ _<%= @executable_name %><%= context_name %>_<%= command.name %>
23
+ return ;;
24
+ <%- end -%>
25
+ <%- end -%>
26
+ help)
27
+ COMPREPLY=""
28
+ return
29
+ ;;
30
+ esac
31
+ (( subcommand_index++ ))
32
+ done
33
+
34
+ local cur="${COMP_WORDS[COMP_CWORD]}"
35
+ COMPREPLY=($(compgen -W "<%= command.commands.map(&:name).join(" ") %> <%= command.class_options.map(&:switch_name).join(" ") %>" -- "$cur"))
36
+ }
@@ -16,9 +16,9 @@ function _<%= @executable_name %><%= context_name %> {
16
16
  <%- unless class_options.nil? -%>
17
17
  <%- class_options.each do |option| -%>
18
18
  <%- option.aliases.each do |al| -%>
19
- "-<%= al %>=[<%= option.description %>]" \
19
+ "-<%= al %>=[<%= option.description %>]" \
20
20
  <%- end -%>
21
- "--<%= option.name%>=[<%= option.description %>]" \
21
+ "--<%= option.name%>=[<%= option.description %>]" \
22
22
  <%- end -%>
23
23
  <%- end -%>
24
24
  "-h[Show help information]" \
data/lib/fylla/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fylla
2
- VERSION = '0.3.0'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fylla
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Thrailkill
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-03 00:00:00.000000000 Z
11
+ date: 2019-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -119,6 +119,7 @@ files:
119
119
  - lib/fylla/parsed_command.rb
120
120
  - lib/fylla/parsed_option.rb
121
121
  - lib/fylla/parsed_subcommand.rb
122
+ - lib/fylla/thor/extensions/ShellDescriptionExtension.rb
122
123
  - lib/fylla/version.rb
123
124
  homepage: https://github.com/snowe2010/fylla
124
125
  licenses:
@@ -142,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
143
  version: '0'
143
144
  requirements: []
144
145
  rubyforge_project:
145
- rubygems_version: 2.6.14.1
146
+ rubygems_version: 2.7.6
146
147
  signing_key:
147
148
  specification_version: 4
148
149
  summary: Adds functions for generating autocomplete scripts for Thor applications