ops_team 1.14.1 → 1.15.0.pre.rc2

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: 21c0933e00ebfbc331a0fcf88344ab554fb87c9f0889a9033dd26c1afcd30200
4
- data.tar.gz: 44805923090fb8846ccf1f78375ac70bc30b54238aa444961127a17730f67c7f
3
+ metadata.gz: 1dd30e0216346f00e34b6f12ae0ca98b63d9191b5e894dc27b1bd9e7497c5611
4
+ data.tar.gz: aede677cfad8bcfc29d0665eb289f913d26cd2a9ec1555f14f4f8a3155136b96
5
5
  SHA512:
6
- metadata.gz: ccc49f6c5b23f98bdcd944e96497c54245f3ef26e912bdc109b89eee20e070e5c18ecca9cfe474aac8791be003ad7b4945e33ce13e0ee74477c45ab5722957a2
7
- data.tar.gz: 879871fd770c450b0560beb31788cc83b7e95fd103a86ce78d387533d79f54049ee5d7a7041cfe897fe2113eb0a15d69c642ce12bc652e7e5537a0f09424dbff
6
+ metadata.gz: 2c42419ff6fcc7b8e697c0c9ef88d2ffc9975e077a04d3dfe40cd09276d41a9787c64df5c6ebdcd7b93fa68c008494cfdd9ec94a20ea0917989edbf057f47d98
7
+ data.tar.gz: b73b36965c85fcec71bce2675f18993a372598f9842c37b88878231f035ac8e7296f3f27095a099572ea75f3be99d63f6f0d7bf5d77cad2a76d2e44195315a36
@@ -0,0 +1,120 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'builtin'
4
+ require 'forwards'
5
+ require 'builtins/helpers/enumerator'
6
+ require 'options'
7
+
8
+ require 'require_all'
9
+ require_rel '.'
10
+
11
+ module Builtins
12
+ class Completion < Builtin
13
+ BASH = "bash"
14
+ ZSH = "zsh"
15
+ USAGE = "Usage: ops completion 'bash / zsh'"
16
+
17
+ class << self
18
+ def description
19
+ "displays completion configuration for the flavor of shell provided"
20
+ end
21
+ end
22
+
23
+ def run
24
+ if args.none? || ![BASH, ZSH].include?(args[0])
25
+ Output.error(USAGE)
26
+ false
27
+ elsif args[0] == BASH
28
+ Output.print(bash_completion)
29
+ true
30
+ elsif args[0] == ZSH
31
+ Output.print(zsh_completion)
32
+ true
33
+ end
34
+ end
35
+
36
+ def completion
37
+ return false if ENV["OPS_AUTO_COMPLETE"].nil? || ENV["COMP_WORDS"].nil? || ENV["COMP_CWORD"].nil?
38
+
39
+ word_list = ENV["COMP_WORDS"].split(" ")
40
+ current_index = ENV["COMP_CWORD"].to_i
41
+ current_word = word_list[current_index]
42
+
43
+ Output.out(completion_list(current_word))
44
+ true
45
+ end
46
+
47
+ private
48
+
49
+ def bash_completion
50
+ "\n\n_ops_completion()\n"\
51
+ "{\n"\
52
+ " COMPREPLY=( $( COMP_WORDS=\"${COMP_WORDS[*]}\" \\\n"\
53
+ " COMP_CWORD=$COMP_CWORD \\\n"\
54
+ " OPS_AUTO_COMPLETE=1 $1 2>/dev/null ) )\n"\
55
+ "}\n"\
56
+ "complete -o default -F _ops_completion ops\n"
57
+ end
58
+
59
+ def zsh_completion
60
+ "\n\nfunction _ops_completion {\n"\
61
+ " local words cword\n"\
62
+ " read -Ac words\n"\
63
+ " read -cn cword\n"\
64
+ " reply=( $( COMP_WORDS=\"$words[*]\" \\\n"\
65
+ " COMP_CWORD=$(( cword-1 )) \\\n"\
66
+ " OPS_AUTO_COMPLETE=1 $words[1] 2>/dev/null ))\n"\
67
+ "}\n"\
68
+ "compctl -K _ops_completion ops\n"
69
+ end
70
+
71
+ def completion_list(filter)
72
+ (actions | builtins | forwards).select { |item| item =~ /^#{filter}/ }.sort.join(" ")
73
+ end
74
+
75
+ def forwards
76
+ @forwards ||= Forwards.new(@config).forwards.map do |name, _dir|
77
+ name
78
+ end.uniq
79
+ end
80
+
81
+ def builtins
82
+ @builtins ||= builtin_enumerator.names_by_constant.map do |_klass, names|
83
+ names.map(&:downcase).map(&:to_s)
84
+ end.flatten.uniq
85
+ end
86
+
87
+ def actions
88
+ return [] unless @config["actions"]
89
+
90
+ @actions ||= @config["actions"].map do |name, action_config|
91
+ next unless verify_by_restrictions(action_config)
92
+
93
+ include_aliases? ? [name, alias_string_for(action_config)] : name
94
+ end.flatten.uniq
95
+ end
96
+
97
+ def alias_string_for(action_config)
98
+ return action_config["alias"].to_s if action_config["alias"]
99
+
100
+ ""
101
+ end
102
+
103
+ def include_aliases?
104
+ @include_aliases ||= Options.get("completion.include_aliases")
105
+ end
106
+
107
+ def verify_by_restrictions(action_config)
108
+ env = ENV["environment"] || "dev"
109
+ return false if action_config["skip_in_envs"]&.include?(env)
110
+ return false if action_config["not_in_envs"]&.include?(env)
111
+ return false if action_config["in_envs"] && !action_config["in_envs"].include?(env)
112
+
113
+ true
114
+ end
115
+
116
+ def builtin_enumerator
117
+ @builtin_enumerator ||= ::Builtins::Helpers::Enumerator
118
+ end
119
+ end
120
+ end
data/lib/ops.rb CHANGED
@@ -39,6 +39,8 @@ class Ops
39
39
  # rubocop:disable Metrics/MethodLength
40
40
  # better to have all the rescues in one place
41
41
  def run
42
+ return completion_list if ENV["OPS_AUTO_COMPLETE"]
43
+
42
44
  # "return" is here to allow specs to stub "exit" without executing everything after it
43
45
  return exit(INVALID_SYNTAX_EXIT_CODE) unless syntax_valid?
44
46
  return exit(MIN_VERSION_NOT_MET_EXIT_CODE) unless min_version_met?
@@ -65,6 +67,12 @@ class Ops
65
67
 
66
68
  private
67
69
 
70
+ def completion_list
71
+ require 'builtins/completion'
72
+
73
+ Builtins::Completion.new(@args, @config).completion
74
+ end
75
+
68
76
  def syntax_valid?
69
77
  return true unless @action_name.nil?
70
78
 
data/ops_team.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'ops_team'
5
- s.version = '1.14.1'
5
+ s.version = '1.15.0-rc2'
6
6
  s.authors = [
7
7
  'nickthecook@gmail.com'
8
8
  ]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ops_team
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.1
4
+ version: 1.15.0.pre.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - nickthecook@gmail.com
@@ -173,6 +173,7 @@ files:
173
173
  - lib/builtins/background.rb
174
174
  - lib/builtins/background_log.rb
175
175
  - lib/builtins/common/up_down.rb
176
+ - lib/builtins/completion.rb
176
177
  - lib/builtins/countdown.rb
177
178
  - lib/builtins/down.rb
178
179
  - lib/builtins/env.rb
@@ -225,9 +226,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
225
226
  version: '2.5'
226
227
  required_rubygems_version: !ruby/object:Gem::Requirement
227
228
  requirements:
228
- - - ">="
229
+ - - ">"
229
230
  - !ruby/object:Gem::Version
230
- version: '0'
231
+ version: 1.3.1
231
232
  requirements: []
232
233
  rubygems_version: 3.2.15
233
234
  signing_key: