tomo 0.16.0 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: af13c147cb9a33a4a35847911d99d23ba2f0d094834fbc8f547ad7a670e7ed31
4
- data.tar.gz: e9901154cb62048c531eae549680dbdb001a8019d68d7e32bfc800d18b18f936
3
+ metadata.gz: dfaf239a0381aeb001061664581633beaed57f0dd70afb00f46c059917404941
4
+ data.tar.gz: 90091440ac547e2d1d72f14abea0108b42fad6a96a393dca9375a44bcb4d0558
5
5
  SHA512:
6
- metadata.gz: 1dbb5d34e21b4861b2cd1e0d8b7cf281def92212beef59489e193547192dac8c42e815da4032a9d0af5fa3aec1be8488a0d02a161a26c95d2e6937bd52ad479d
7
- data.tar.gz: c8bbc999a60e7d99ed86dbfe309c90eaed8bdb0518a2d20ecb7439a251876fdd530994dbee0eae7eb29692ed3bfa0275ca2a38605d7400e197a76d1d07e5a5b9
6
+ metadata.gz: 395f0de0988086e308c786b6a0de6ef7b6915966a4fda2398b1b5fe378e055768cbf3e884154cf5fccd350355c228ca78fba1cd13323560c35f6f27a85083a0b
7
+ data.tar.gz: 26e2966999b8fd0049e5a073ed2f6f504df0be16edd587ef4fb9376427d66ea31d5a5afdece8cfaf7910b4c204f31d6ef4d590db715b8342dd3aeb33b76cf824
data/lib/tomo/console.rb CHANGED
@@ -1,33 +1,80 @@
1
+ require "forwardable"
1
2
  require "io/console"
2
3
 
3
4
  module Tomo
4
- module Console
5
+ class Console
5
6
  autoload :KeyReader, "tomo/console/key_reader"
6
7
  autoload :Menu, "tomo/console/menu"
7
8
 
8
9
  class << self
9
- def interactive?(input=$stdin)
10
- input.respond_to?(:raw) && input.respond_to?(:tty?) && input.tty?
11
- end
10
+ extend Forwardable
11
+ def_delegators :@instance, :interactive?, :prompt, :menu
12
+ end
13
+
14
+ def initialize(env=ENV, input=$stdin)
15
+ @env = env
16
+ @input = input
17
+ end
18
+
19
+ def interactive?
20
+ input.respond_to?(:raw) &&
21
+ input.respond_to?(:tty?) &&
22
+ input.tty? &&
23
+ !ci?
24
+ end
25
+
26
+ def prompt(question)
27
+ assert_interactive
28
+
29
+ print question
30
+ line = input.gets
31
+ raise_non_interactive if line.nil?
32
+
33
+ line.chomp
34
+ end
35
+
36
+ def menu(question, choices:)
37
+ assert_interactive
38
+
39
+ Menu.new(question, choices).prompt_for_selection
40
+ end
12
41
 
13
- def prompt(question)
14
- assert_interactive
42
+ private
15
43
 
16
- print question
17
- $stdin.gets.chomp
18
- end
44
+ attr_reader :env, :input
19
45
 
20
- def menu(question, choices:)
21
- assert_interactive
46
+ CI_VARS = %w[
47
+ JENKINS_HOME
48
+ JENKINS_URL
49
+ TRAVIS
50
+ CIRCLECI
51
+ CI
52
+ TEAMCITY_VERSION
53
+ GO_PIPELINE_NAME
54
+ bamboo_buildKey
55
+ GITLAB_CI
56
+ XCS
57
+ ].freeze
58
+ private_constant :CI_VARS
22
59
 
23
- Menu.new(question, choices).prompt_for_selection
24
- end
60
+ def ci?
61
+ (env.keys & CI_VARS).any?
62
+ end
63
+
64
+ def assert_interactive
65
+ raise_non_interactive unless interactive?
66
+ end
25
67
 
26
- private
68
+ def raise_non_interactive
69
+ raise "An interactive console is required" unless ci?
27
70
 
28
- def assert_interactive
29
- raise "An interactive console is required" unless interactive?
30
- end
71
+ env_var = (env.keys & CI_VARS).first
72
+ raise <<~ERROR
73
+ This appears to be a CI environment because the #{env_var} env var is set.
74
+ Tomo::Console cannot be used in a non-interactive CI environment.
75
+ ERROR
31
76
  end
32
77
  end
33
78
  end
79
+
80
+ Tomo::Console.instance_variable_set :@instance, Tomo::Console.new
@@ -3,7 +3,7 @@ require "io/console"
3
3
  require "time"
4
4
 
5
5
  module Tomo
6
- module Console
6
+ class Console
7
7
  class KeyReader
8
8
  extend Forwardable
9
9
 
@@ -2,7 +2,7 @@ require "forwardable"
2
2
  require "io/console"
3
3
 
4
4
  module Tomo
5
- module Console
5
+ class Console
6
6
  class Menu
7
7
  ARROW_UP = "\e[A".freeze
8
8
  ARROW_DOWN = "\e[B".freeze
@@ -1,5 +1,3 @@
1
- require "forwardable"
2
-
3
1
  module Tomo
4
2
  class TaskLibrary
5
3
  include TaskAPI
data/lib/tomo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Tomo
2
- VERSION = "0.16.0".freeze
2
+ VERSION = "0.17.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tomo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Brictson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-02 00:00:00.000000000 Z
11
+ date: 2020-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler