completely 0.1.0 → 0.1.2

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: cd3ae4ec92d7318bd4ef32fdd465d9bff3341931f5f965d2db8f263c1b95e38b
4
- data.tar.gz: 01ccb2fa2e1f050b7a45944b552590fad6aab9bafc90ef4cb98b8d6284200392
3
+ metadata.gz: c09f951fc28b18f24c2c28fd7c80a15b3731aa07456145ab905c63c2b0dc9634
4
+ data.tar.gz: a9a25173ab3358e7eea42fe38552cbced8c6602bf5a0e9e6c414555420ae7af6
5
5
  SHA512:
6
- metadata.gz: fd06256b9cb4c42364d118ea1392b180ef662e98b2ea9c6b24ca815f5fa5cf1f16d6c0a6792090c9bc5f376ab7dfb04e9b8c732cb83292140acb59676d6090a9
7
- data.tar.gz: b1985849259627803ebe3f7c56b4adc98137456b172fb36cbf1379b4677257dca6cc671d85a12106596fb246de02aad07c5e9d51c5dd0abc7301518d9b7529b2
6
+ metadata.gz: b6edd13c5a0084485b7cb7114c45cf30d8c144075a3791aa51a8f5e7fc71df825cb03cb4786bc8fb3832f7bc1a46f06876614493184c4602d7e2e0dfbd3d4854
7
+ data.tar.gz: f8eb6cb08636c4281b50d7542d3c92fc8c6914e10597605f48e29ae342b6fb8cd31fff84de9e81dc0a7011bd5e963469c11fe025719e537238883d0a5812b5d9
data/README.md CHANGED
@@ -2,13 +2,14 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/completely.svg)](https://badge.fury.io/rb/completely)
4
4
  [![Build Status](https://github.com/DannyBen/completely/workflows/Test/badge.svg)](https://github.com/DannyBen/completely/actions?query=workflow%3ATest)
5
+ [![Maintainability](https://api.codeclimate.com/v1/badges/6c021b8309ac796c3919/maintainability)](https://codeclimate.com/github/DannyBen/completely/maintainability)
5
6
 
6
7
  ---
7
8
 
8
9
  Completely is a command line utility and a Ruby library that lets you generate
9
10
  bash completion scripts from simple YAML configuration.
10
11
 
11
- This tool is for you it:
12
+ This tool is for you if:
12
13
 
13
14
  1. You develop your own command line tools.
14
15
  2. Your life feels empty without bash completions.
@@ -19,11 +20,11 @@ This tool is for you it:
19
20
 
20
21
  ## Install
21
22
 
22
- ```
23
+ ```bash
23
24
  $ gem install completely
24
25
  ```
25
26
 
26
- ## Usage
27
+ ## Using the `completely` command line
27
28
 
28
29
  The `completely` command line works with a simple YAML configuration file as
29
30
  input, and generates a bash completions script as output.
@@ -78,7 +79,7 @@ follows it will be suggested as completions.
78
79
 
79
80
  To generate the bash script, simply run:
80
81
 
81
- ```
82
+ ```bash
82
83
  $ completely generate
83
84
 
84
85
  # or, to just preview it without saving:
@@ -87,7 +88,7 @@ $ completely preview
87
88
 
88
89
  For more options (like setting input/output path), run
89
90
 
90
- ```
91
+ ```bash
91
92
  $ completely --help
92
93
  ```
93
94
 
@@ -99,7 +100,7 @@ You may have noticed that the sample file contains two special entries:
99
100
  - `<directory>`
100
101
 
101
102
  These patterns will add the list of files and directories
102
- (when `<file>` is used) or just directories (when `<directory` is used) to
103
+ (when `<file>` is used) or just directories (when `<directory>` is used) to
103
104
  the list of suggestions.
104
105
 
105
106
  For those interested in the technical details, any word between `<...>` will
@@ -107,17 +108,40 @@ simply be added using the [`compgen -A action`][compgen] function, so you can
107
108
  in fact use any of its supported arguments.
108
109
 
109
110
 
110
- ### Using the generated completion scripts
111
+ ## Using the generated completion scripts
111
112
 
112
113
  In order to enable the completions, simply source the generated script:
113
114
 
114
- ```
115
+ ```bash
115
116
  $ source completely.bash
116
117
  ```
117
118
 
118
119
  You may wish to add this to your `~/.bashrc` file to enable this for future
119
120
  sessions (just be sure to use absolute path).
120
121
 
122
+ ## Using from within Ruby code
123
+
124
+ ```ruby
125
+ require 'completely'
126
+
127
+ # Load from file
128
+ completions = Completely::Completions.load "input.yaml"
129
+
130
+ # Or, from a hash
131
+ input = {
132
+ "mygit" => %w[--help --version status init commit],
133
+ "mygit status" => %w[--help --verbose --branch]
134
+ }
135
+ completions = Completely::Completions.new input
136
+
137
+ # Generate the script
138
+ puts completions.script
139
+
140
+ # Or, generate a function that echos the script
141
+ puts completions.wrapper_function
142
+ puts completions.wrapper_function "custom_function_name"
143
+ ```
144
+
121
145
 
122
146
  ## Contributing / Support
123
147
 
@@ -1,6 +1,6 @@
1
1
  require 'mister_bin'
2
- require 'completely/command'
3
2
  require 'completely/version'
3
+ require 'completely/command'
4
4
 
5
5
  module Completely
6
6
  class CLI
@@ -5,7 +5,7 @@ module Completely
5
5
 
6
6
  usage "completely new [CONFIG_PATH]"
7
7
  usage "completely preview [CONFIG_PATH --function NAME]"
8
- usage "completely generate [CONFIG_PATH OUTPUT_PATH --function NAME]"
8
+ usage "completely generate [CONFIG_PATH OUTPUT_PATH --function NAME --wrap NAME]"
9
9
  usage "completely (-h|--help|--version)"
10
10
 
11
11
  command "new", "Create a new sample YAML configuration file"
@@ -13,16 +13,18 @@ module Completely
13
13
  command "generate", "Generate the bash completion script to a file"
14
14
 
15
15
  option "-f --function NAME", "Modify the name of the function in the generated script"
16
+ option "-w --wrap NAME", "Wrap the completion script inside a function that echos the script. This is useful if you wish to embed it directly in your script"
16
17
 
17
18
  param "CONFIG_PATH", "Path to the YAML configuration file"
18
19
  param "OUTPUT_PATH", "Path to the output bash script"
19
20
 
20
21
  example "completely new"
21
22
  example "completely new input.yaml"
22
- example "completely preview --function my_completions"
23
+ example "completely preview --function _my_completions"
23
24
  example "completely generate"
24
25
  example "completely generate input.yaml"
25
- example "completely generate input.yaml output.sh -f my_completions"
26
+ example "completely generate input.yaml output.sh -f _my_completions"
27
+ example "completely generate -w give_comps -f my_completions"
26
28
 
27
29
  def new_command
28
30
  if File.exist? config_path
@@ -38,7 +40,9 @@ module Completely
38
40
  end
39
41
 
40
42
  def generate_command
41
- File.write output_path, script
43
+ wrap = args['--wrap']
44
+ output = wrap ? wrapper_function(wrap) : script
45
+ File.write output_path, output
42
46
  say "Saved !txtpur!#{output_path}"
43
47
  end
44
48
 
@@ -64,6 +68,10 @@ module Completely
64
68
  @script ||= completions.script
65
69
  end
66
70
 
71
+ def wrapper_function(wrapper_name)
72
+ completions.wrapper_function wrapper_name
73
+ end
74
+
67
75
  def completions
68
76
  @completions ||= Completions.load(config_path, function_name: args['--function'])
69
77
  end
@@ -19,6 +19,17 @@ module Completely
19
19
  ERB.new(template, trim_mode: '%-').result(binding)
20
20
  end
21
21
 
22
+ def wrapper_function(name = nil)
23
+ name ||= "send_completions"
24
+
25
+ script_lines = script.split("\n").map do |line|
26
+ clean_line = line.gsub("'") { "\\'" }
27
+ %Q[ echo $'#{clean_line}']
28
+ end.join("\n")
29
+
30
+ "#{name}() {\n#{script_lines}\n}"
31
+ end
32
+
22
33
  private
23
34
 
24
35
  def template_path
@@ -6,7 +6,7 @@
6
6
  <%= function_name %>() {
7
7
  local cur=${COMP_WORDS[COMP_CWORD]}
8
8
 
9
- case "$COMP_LINE" in
9
+ case "$COMP_LINE" in
10
10
  % patterns.each do |pattern, words|
11
11
  % next unless words
12
12
  % clean_words = words.reject { |w| w =~ /^<.*>$/ }.join " "
@@ -1,3 +1,3 @@
1
1
  module Completely
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/completely.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'requires'
2
-
3
1
  if ENV['BYEBUG']
4
2
  require 'byebug'
5
3
  require 'lp'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: completely
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.7'
41
- - !ruby/object:Gem::Dependency
42
- name: requires
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '0.1'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '0.1'
55
41
  description: Generate bash completion scripts using simple YAML configuration
56
42
  email: db@dannyben.com
57
43
  executables: