atli 0.1.8 → 0.1.9
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/atli.gemspec +1 -1
- data/lib/thor.rb +2 -0
- data/lib/thor/command.rb +2 -0
- data/lib/thor/completion/bash.rb +162 -0
- data/lib/thor/version.rb +2 -2
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1d536b28ea563e34f3d78cede54f2a9d8c21da2
|
4
|
+
data.tar.gz: 67573792a5172033627abd159a41bd9f0f1bb983
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30da74bbb70ca3aa22595a13f6a984cddeec184e189fdce51c19ddc7c2eca8d5be9e400ab5bfb945e71b6d530ccd852f6932388aacb069178eafeaa1c9346786
|
7
|
+
data.tar.gz: 4923f187d07c5a41bf4d47bdff6a90e47ddaf79c07cba061381c4eda383d8fd9e445494b8b22f306625c1c99895df1d5b0e4afac9f296eebb0a55e4ca06894e4
|
data/atli.gemspec
CHANGED
data/lib/thor.rb
CHANGED
data/lib/thor/command.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'semantic_logger'
|
2
|
+
require_relative './completion/bash'
|
2
3
|
|
3
4
|
class Thor
|
4
5
|
class Command < Struct.new( :name,
|
@@ -9,6 +10,7 @@ class Thor
|
|
9
10
|
:options,
|
10
11
|
:ancestor_name )
|
11
12
|
include SemanticLogger::Loggable
|
13
|
+
include Thor::Completion::Bash::Command
|
12
14
|
|
13
15
|
FILE_REGEXP = /^#{Regexp.escape(File.dirname(__FILE__))}/
|
14
16
|
|
@@ -0,0 +1,162 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
# Requirements
|
5
|
+
# =======================================================================
|
6
|
+
|
7
|
+
# Stdlib
|
8
|
+
# -----------------------------------------------------------------------
|
9
|
+
|
10
|
+
# Deps
|
11
|
+
# -----------------------------------------------------------------------
|
12
|
+
|
13
|
+
require 'nrser'
|
14
|
+
require 'nrser/labs/i8'
|
15
|
+
|
16
|
+
# Project / Package
|
17
|
+
# -----------------------------------------------------------------------
|
18
|
+
|
19
|
+
|
20
|
+
# Refinements
|
21
|
+
# =======================================================================
|
22
|
+
|
23
|
+
require 'nrser/refinements/types'
|
24
|
+
using NRSER::Types
|
25
|
+
|
26
|
+
|
27
|
+
# Namespace
|
28
|
+
# =======================================================================
|
29
|
+
|
30
|
+
class Thor
|
31
|
+
module Completion
|
32
|
+
|
33
|
+
|
34
|
+
# Definitions
|
35
|
+
# =======================================================================
|
36
|
+
|
37
|
+
# Experimental support for Bash completions.
|
38
|
+
#
|
39
|
+
module Bash
|
40
|
+
|
41
|
+
Request = I8::Struct.new \
|
42
|
+
cur: t.str,
|
43
|
+
prev: t.str,
|
44
|
+
cword: t.non_neg_int,
|
45
|
+
split: t.bool,
|
46
|
+
words: t.array( t.str )
|
47
|
+
|
48
|
+
# Needs to be mixed in to {Thor}. It's all class methods at the moment.
|
49
|
+
#
|
50
|
+
# @todo
|
51
|
+
# Deal with that {Thor::Group} thing? I never use it...
|
52
|
+
#
|
53
|
+
module Thor
|
54
|
+
|
55
|
+
# Methods to be mixed as class methods in to {Thor}.
|
56
|
+
#
|
57
|
+
module ClassMethods
|
58
|
+
|
59
|
+
# Get this class' {Thor::Command} instances, keyed by how their names will
|
60
|
+
# appear in the UI (replace `_` with `-`).
|
61
|
+
#
|
62
|
+
# @param [Boolean] include_hidden:
|
63
|
+
# When `true`, "hidden" commands will also be included.
|
64
|
+
#
|
65
|
+
# @return [Hash<String, Thor::Command>]
|
66
|
+
#
|
67
|
+
def all_commands_by_ui_name include_hidden: false
|
68
|
+
all_commands.
|
69
|
+
each_with_object( {} ) { |(name, cmd), hash|
|
70
|
+
next if cmd.hidden? && !include_hidden
|
71
|
+
hash[ name.tr( '_', '-' ) ] = cmd
|
72
|
+
}
|
73
|
+
end # .all_commands_by_ui_name
|
74
|
+
|
75
|
+
#
|
76
|
+
#
|
77
|
+
def bash_complete comp_req:, index:
|
78
|
+
# Find the command, if any
|
79
|
+
|
80
|
+
logger.info __method__,
|
81
|
+
comp_req: comp_req,
|
82
|
+
index: index,
|
83
|
+
word: comp_req.words[index]
|
84
|
+
|
85
|
+
scan_index = index
|
86
|
+
|
87
|
+
while (comp_req.words[scan_index] || '').start_with? '-'
|
88
|
+
scan_index += 1
|
89
|
+
end
|
90
|
+
|
91
|
+
cmd_ui_name = comp_req.words[scan_index] || ''
|
92
|
+
|
93
|
+
cmd = all_commands_by_ui_name[cmd_ui_name]
|
94
|
+
|
95
|
+
if cmd.nil?
|
96
|
+
return all_commands_by_ui_name.keys.select { |ui_name|
|
97
|
+
ui_name.start_with? cmd_ui_name
|
98
|
+
}
|
99
|
+
end
|
100
|
+
|
101
|
+
index = scan_index + 1
|
102
|
+
|
103
|
+
# is it a subcommand?
|
104
|
+
if subcommand_classes.key? cmd.name
|
105
|
+
# It is, hand it off to there
|
106
|
+
subcommand_classes[cmd.name].bash_complete \
|
107
|
+
comp_req: comp_req,
|
108
|
+
index: index
|
109
|
+
else
|
110
|
+
# It's a command, have that handle it
|
111
|
+
cmd.bash_complete \
|
112
|
+
comp_req: comp_req,
|
113
|
+
index: index
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end # module ClassMethods
|
118
|
+
|
119
|
+
# Hook to mix {ClassMethods} in on include.
|
120
|
+
#
|
121
|
+
def self.included base
|
122
|
+
base.extend ClassMethods
|
123
|
+
end
|
124
|
+
|
125
|
+
end # module Thor
|
126
|
+
|
127
|
+
|
128
|
+
# Methods that need to mixed in to {Thor::Command}.
|
129
|
+
#
|
130
|
+
module Command
|
131
|
+
|
132
|
+
def bash_complete comp_req:, index:
|
133
|
+
# TODO Handle
|
134
|
+
return [] if comp_req.split
|
135
|
+
|
136
|
+
logger.info __method__,
|
137
|
+
cmd_name: name,
|
138
|
+
options: options
|
139
|
+
|
140
|
+
options.
|
141
|
+
each_with_object( [ '--help' ] ) { |(name, opt), results|
|
142
|
+
ui_name = name.to_s.tr( '_', '-' )
|
143
|
+
|
144
|
+
if opt.type == :boolean
|
145
|
+
results << "--#{ ui_name }"
|
146
|
+
results << "--no-#{ ui_name }"
|
147
|
+
else
|
148
|
+
results << "--#{ ui_name }="
|
149
|
+
end
|
150
|
+
}.
|
151
|
+
select { |term| term.start_with? comp_req.cur }
|
152
|
+
end
|
153
|
+
|
154
|
+
end # module Command
|
155
|
+
|
156
|
+
end # module Bash
|
157
|
+
|
158
|
+
# /Namespace
|
159
|
+
# =======================================================================
|
160
|
+
|
161
|
+
end # module Completion
|
162
|
+
end # class Thor
|
data/lib/thor/version.rb
CHANGED
@@ -14,7 +14,7 @@ class Thor
|
|
14
14
|
#
|
15
15
|
# @return [String]
|
16
16
|
#
|
17
|
-
VERSION = '0.1.
|
17
|
+
VERSION = '0.1.9'
|
18
18
|
|
19
19
|
|
20
20
|
# The version of Thor that Atli is up to date with.
|
@@ -27,5 +27,5 @@ class Thor
|
|
27
27
|
#
|
28
28
|
# @return [String]
|
29
29
|
#
|
30
|
-
THOR_VERSION = '0.1.
|
30
|
+
THOR_VERSION = '0.1.9'
|
31
31
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Neil Souza (Atli)
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-
|
13
|
+
date: 2018-07-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -32,14 +32,14 @@ dependencies:
|
|
32
32
|
requirements:
|
33
33
|
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version: 0.3.
|
35
|
+
version: 0.3.8
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
40
|
- - "~>"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: 0.3.
|
42
|
+
version: 0.3.8
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: yard
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +94,7 @@ files:
|
|
94
94
|
- lib/thor/base/class_methods.rb
|
95
95
|
- lib/thor/base/common_class_options.rb
|
96
96
|
- lib/thor/command.rb
|
97
|
+
- lib/thor/completion/bash.rb
|
97
98
|
- lib/thor/core_ext/hash_with_indifferent_access.rb
|
98
99
|
- lib/thor/core_ext/io_binary_read.rb
|
99
100
|
- lib/thor/core_ext/ordered_hash.rb
|