fylla 0.4.3 → 0.5.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
2
  SHA256:
3
- metadata.gz: b37d5c86abc42354f12c24adadd654c6d2cbc4b090834d091d1c60f31c9424e7
4
- data.tar.gz: f9a4e6414ba530f1aac31b00fdd5e201ec41f5c21be935c293b23c1e9f4b849f
3
+ metadata.gz: 14e4ab52af2d12b3d0078c3c0451da1a28c0e795c06b9e9867f6188e849c304a
4
+ data.tar.gz: 8267d2624d22df38cdce36e8b9f245458ec43b6659634e02a5970eaa099fef21
5
5
  SHA512:
6
- metadata.gz: 114177248eed456e9df5902faef1db685ecff2377e81a3a9525872be7c6b1136b5ade5c964cc6c9c6ba19e33fc48e3a9f8e0e038add709cfcffd46773f7e0e18
7
- data.tar.gz: 2f8c8789125f743d4e38e85186e10cbee76c5d5a39ec8dc2c81f03b338998a66f3ba046802ba4712db0db9d17d2dcbe506078ef88a06b5cc1dbfb3eaf7b918f0
6
+ metadata.gz: 0ff83b9fcc93795be5fc9feadc6dc4cc04cf3fbc178a6430a7f2602e2363d7d0ab5961430f78da4bad91957846690b648638e317ac019f272e5d184272a79971
7
+ data.tar.gz: f92146028038df7a651eb82579bc5dc437032fb554e1518290cc2f9c40319fd43fa8204bb914b0e4c8bbf0c9c46db09dc9e7da28c8a444e465b4d4b998b0061b
@@ -3,10 +3,12 @@ require 'fylla/completion_generator'
3
3
  require 'fylla/parsed_command'
4
4
  require 'fylla/parsed_subcommand'
5
5
  require 'fylla/completion_extension'
6
+ require 'fylla/thor/extensions/comma_array_extension'
6
7
  require 'thor'
7
8
 
8
9
  # We _must prepend before thor loads_ Ideally this is at require time...
9
10
  ::Thor::Option.prepend Fylla::Thor::Option
11
+ ::Thor::Arguments.prepend Fylla::Thor::Arguments
10
12
 
11
13
  #
12
14
  # Top level module for the Fylla project.
@@ -1,13 +1,17 @@
1
1
  require 'thor'
2
2
 
3
- # add the 'completion:' option to Thor::Option, which
4
- # allows passing a shorter description for the shell
3
+ # add more options to Thor::Option
4
+ #
5
+ # :completion => allows providing a custom completion description for zsh
6
+ # :filter => allows filtering completions for arrays based on past completions
5
7
  module Fylla
6
8
  module Thor
7
9
  module Option
8
- attr_accessor :completion
10
+ attr_accessor :completion, :filter
9
11
  def initialize(name, options = {})
10
- @completion = options[:completion]
12
+ @completion = options[:fylla]&.[](:completion)
13
+ @filter = options[:fylla]&.[](:filter)
14
+ @filter = true if @filter.nil?
11
15
  super
12
16
  end
13
17
  end
@@ -29,6 +29,7 @@ module Fylla
29
29
  builder = map_to_completion_string [command]
30
30
  completion = "#compdef _#{executable_name} #{executable_name}\n"
31
31
  completion += builder
32
+ completion += %Q(_#{executable_name} "$@")
32
33
  completion
33
34
  end
34
35
 
@@ -175,7 +176,7 @@ module Fylla
175
176
  def parse_options(options)
176
177
  options.map do |opt|
177
178
  description = opt.completion || opt.description || opt.banner || opt.name.to_s.upcase
178
- ParsedOption.new(opt.name, description, opt.aliases)
179
+ ParsedOption.new(opt.name, description, opt.aliases, opt.enum, opt.filter)
179
180
  end
180
181
  end
181
182
  end
@@ -2,14 +2,24 @@ function _<%= @executable_name %><%= context_name %> {
2
2
  _arguments \
3
3
  <%- unless command.options.nil? -%>
4
4
  <%- command.options.each do |option| -%>
5
- "--<%= option.name %>=[<%= option.description.gsub('"', %q|\\"|) %>]" \
6
- <%- option.aliases.each do |al| -%>
7
- "-<%= al %>=[<%= option.description.gsub('"', %q|\\"|) %>]" \
8
- <%- end -%>
5
+ <%- enums_exist = option.enum -%>
6
+ <%- filtered = option.filter -%>
7
+ <%- desc = option.description.gsub('"', %q|\\"|) -%>
8
+ <%- if enums_exist -%>
9
+ <%- if filtered -%>
10
+ <%- actions = ": :_values -s , 'options' #{option.enum.join(' ')}" -%>
11
+ <%- else -%>
12
+ <%- actions = ": :_sequence -d compadd - #{option.enum.join(' ')}" -%>
13
+ <%- end -%>
14
+ "--<%= option.name %>=[<%= desc %>]<%= actions %>" \
15
+ <%- else -%>
16
+ "--<%= option.name %>[<%= desc %>]" \
17
+ <%- end -%>
18
+ <%- option.aliases.each do |al| -%>
19
+ "-<%= al %><%= option.enum ? '=' : '' %>[<%= desc %>]<%= option.enum ? actions : '' %>" \
20
+ <%- end -%>
9
21
  <%- end -%>
10
22
  <%- end -%>
11
23
  "-h[Show help information]" \
12
- "--help[Show help information]" \
13
- "1: :_commands" \
14
- "*::arg:->args"/.
24
+ "--help[Show help information]"
15
25
  }
@@ -1,35 +1,37 @@
1
1
  function _<%= @executable_name %><%= context_name %> {
2
2
  local line
3
3
  <%- unless command.commands.empty? %>
4
- function _commands {
5
- local -a commands
6
- commands=(
7
- <%-# remove newlines and leading space on this loop -%>
8
- <%- command.commands.sort_by(&:name).each do |command| -%>
9
- '<%= command.name %>:<%= command.description.gsub("'", %q|'"'"'|) %>'
10
- <%- end -%>
11
- )
12
- _describe 'command' commands
13
- }
4
+ local -a commands
5
+ commands=(
6
+ <%-# remove newlines and leading space on this loop -%>
7
+ <%- command.commands.sort_by(&:name).each do |command| -%>
8
+ '<%= command.name %>:<%= command.description.gsub("'", %q|'"'"'|) %>'
9
+ <%- end -%>
10
+ )
14
11
  <%- end %>
15
12
  _arguments \
16
13
  <%- unless class_options.nil? -%>
17
14
  <%- class_options.each do |option| -%>
18
15
  <%- option.aliases.each do |al| -%>
19
- "-<%= al %>=[<%= option.description.gsub('"', %q|\\"|) %>]" \
16
+ "-<%= al %>[<%= option.description.gsub('"', %q|\\"|) %>]" \
20
17
  <%- end -%>
21
- "--<%= option.name %>=[<%= option.description.gsub('"', %q|\\"|) %>]" \
18
+ "--<%= option.name %>[<%= option.description.gsub('"', %q|\\"|) %>]" \
22
19
  <%- end -%>
23
20
  <%- end -%>
24
21
  "-h[Show help information]" \
25
22
  "--help[Show help information]" \
26
- "1: :_commands" \
27
- "*::arg:->args"/.
28
- case $line[1] in
29
- <%- command.commands.sort_by(&:name).each do |command| -%>
30
- <%= command.name %>)
31
- _<%= @executable_name %><%= context_name %>_<%= command.name %>
23
+ "1: : _describe 'command' commands" \
24
+ "*::arg:->args"
25
+
26
+ case $state in
27
+ args)
28
+ case $line[1] in
29
+ <%- command.commands.sort_by(&:name).each do |command| -%>
30
+ <%= command.name %>)
31
+ _<%= @executable_name %><%= context_name %>_<%= command.name %>
32
+ ;;
33
+ <%- end -%>
34
+ esac
32
35
  ;;
33
- <%- end -%>
34
36
  esac
35
37
  }
@@ -1,12 +1,14 @@
1
1
  module Fylla
2
2
  class ParsedOption
3
- attr_accessor :aliases, :description, :name
3
+ attr_accessor :aliases, :description, :name, :enum, :filter
4
4
  attr_reader :completion, :banner # used just for parsing class_options recursively. Don't ever set these.
5
5
 
6
- def initialize(name, description, aliases)
6
+ def initialize(name, description, aliases, enum, filter)
7
7
  @name = name
8
8
  @description = description
9
9
  @aliases = aliases
10
+ @enum = enum || nil
11
+ @filter = filter
10
12
  end
11
13
  end
12
14
  end
@@ -0,0 +1,21 @@
1
+ require 'thor'
2
+
3
+ # Modify how Thor parses array arguments to be POSIX standard per
4
+ # getopt_long(3)
5
+ # @see https://linux.die.net/man/3/getopt_long
6
+ module Fylla
7
+ module Thor
8
+ module Arguments
9
+ def parse_array(name)
10
+ return shift if peek.is_a?(Array)
11
+ array = []
12
+ if peek.include? ","
13
+ array.push(*shift.split(","))
14
+ else
15
+ array << shift while current_is_value?
16
+ end
17
+ array
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module Fylla
2
- VERSION = '0.4.3'.freeze
2
+ VERSION = '0.5.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.4.3
4
+ version: 0.5.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-06-02 00:00:00.000000000 Z
11
+ date: 2019-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -119,7 +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
+ - lib/fylla/thor/extensions/comma_array_extension.rb
123
123
  - lib/fylla/version.rb
124
124
  homepage: https://github.com/snowe2010/fylla
125
125
  licenses: