rake-tui 0.1.0 → 0.2.3

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: 49dc062ea430b2a65be5a69d587de76d0de3a87dacb7305c41d77db7ea55ddc4
4
- data.tar.gz: d87e1c482e8abf53d5023c1a030493dc3816d3c621a225bfb68bc21a631bf427
3
+ metadata.gz: 4982123b5ac9d9339b1d753b92a8e234434f7dde48b4bb5e35931416950bde15
4
+ data.tar.gz: e7f6f3a898a75b40be96b88a7f37c22fe31c139eb85fe79f2d134a9180b1f7ef
5
5
  SHA512:
6
- metadata.gz: 1c89b628e3f77dff0fa3d33fc516243fd9724e4bce59cba7c98815b6f9fe8a15a48af42825b076931080a70e7f73d946d354f34fdc9959a60e6e33de2ab61892
7
- data.tar.gz: ed063cf1785f5006ad6ddd5667e27c0ad7702e16dd658ce48774f772419cb2316db30df99d161f06f2746e1b103848878ceb8f4d53c029c619ec37a567e26b52
6
+ metadata.gz: 358dccc0992f11ff52a99ab08746272c9fa28b9bef5738522b2d26a491ee1f804eb6f56cebd302656bc32346db7a20ef0102eff23b6828c145780840df07e266
7
+ data.tar.gz: 35b62d8deaf05e51a98f263ac3452bf7b134264454fac07e1cc312e0e9b9832e2584a38565ce776f94f2a3acbd8aa4f6d0e67ad5d4c61d425c0860ed4b401773
@@ -0,0 +1,29 @@
1
+ # Change Log
2
+
3
+ ## 0.2.3
4
+
5
+ - Fixed issue with adding rake task list twice
6
+
7
+ ## 0.2.2
8
+
9
+ - Improve compatibility with older tty-prompt v0.21.0 by setting select choices via block argument when using a block
10
+
11
+ ## 0.2.1
12
+
13
+ - `branding_header`, `prompt_question`, and `task_formatter` block options
14
+
15
+ ## 0.2.0
16
+
17
+ - Optimized performance for JRuby
18
+ - rakeui, raketui, jrakeui, and jraketui shorter alternative commands
19
+ - Enter arguments when a rake task needs them
20
+ - Added an API for direct Ruby use
21
+ - Specify/limit tasks displayed
22
+
23
+ ## 0.1.1
24
+
25
+ - jrake-tui to support JRuby without RVM
26
+
27
+ ## 0.1.0
28
+
29
+ - Initial version supporting listing and execution of rake tasks (without passing arguments)
data/README.md CHANGED
@@ -5,6 +5,9 @@
5
5
 
6
6
  ![Rake TUI Demo](rake-tui-demo.gif)
7
7
 
8
+ Other TUI gems you may be interested in:
9
+ - [rvm-tui](https://github.com/AndyObtiva/rvm-tui)
10
+
8
11
  ## Pre-requisites
9
12
 
10
13
  - [Ruby](https://www.ruby-lang.org/en/)
@@ -20,7 +23,7 @@ gem install rake-tui
20
23
  ### Bundler
21
24
 
22
25
  ```ruby
23
- gem 'rake-tui'
26
+ gem 'rake-tui', require: false
24
27
  ```
25
28
 
26
29
  ### [RVM](https://rvm.io/)
@@ -29,26 +32,192 @@ gem 'rake-tui'
29
32
  rvm @global do gem install rake-tui
30
33
  ```
31
34
 
35
+ ## Usage
36
+
37
+ Simply run this command:
38
+
39
+ ```
40
+ rakeui
41
+ ```
42
+
43
+ Or one of the aliases:
44
+
45
+ ```
46
+ rake-ui
47
+ raketui
48
+ rake-tui
49
+ ```
50
+
32
51
  ### [JRuby](https://www.jruby.org/)
33
52
 
34
- The `rake-tui` binary uses a `ruby` shebang: `#!/usr/bin/env ruby`
53
+ If you are using [RVM](https://rvm.io/), then `rake-tui` works in [JRuby](https://www.jruby.org/) too.
35
54
 
36
- When using [JRuby](https://www.jruby.org/) with [RVM](https://rvm.io/), `ruby` is automatically symlinked as `jruby`, so `rake-tui` works fine.
55
+ Otherwise, simply run this command instead:
56
+
57
+ ```
58
+ jrakeui
59
+ ```
37
60
 
38
- To use `rake-tui` with [JRuby](https://www.jruby.org/) without [RVM](https://rvm.io/), you must create a symlink for `ruby` pointing to `jruby` as follows:
61
+ Or one of the aliases:
39
62
 
40
63
  ```
41
- ln -s $(which jruby) $(dirname $(which jruby))/ruby
64
+ jrake-ui
65
+ jraketui
66
+ jrake-tui
42
67
  ```
43
68
 
44
- ## Usage
69
+ ## API
45
70
 
46
- Simply run this command:
71
+ To use [rake-tui](https://rubygems.org/gems/rake-tui) as part of a Ruby app, require the [rake-tui](https://rubygems.org/gems/rake-tui) gem once at the top of your code:
47
72
 
73
+ ```ruby
74
+ require 'rake-tui'
48
75
  ```
49
- rake-tui
76
+
77
+ Afterwards, simply invoke the `Rake::TUI.run` method wherever you need to display the TUI to the user:
78
+
79
+ ```ruby
80
+ Rake::TUI.run
81
+ ```
82
+
83
+ If you'd rather specify or limit the tasks shown, then pass the tasks to the constructor before running:
84
+
85
+ ```ruby
86
+ Rake::TUI.new(tasks).run
87
+ ```
88
+
89
+ If you want to make that the default, then set the singleton instance:
90
+
91
+ ```ruby
92
+ Rake::TUI.instance(Rake::TUI.new(tasks))
93
+ Rake::TUI.run # this now displays the specified task list
94
+ ```
95
+
96
+ ## Options
97
+
98
+ ### `branding_header`
99
+
100
+ The default branding header looks like this (from `Rake::TUI::BRANDING_HEADER_DEFAULT`):
101
+
102
+ ```
103
+ == rake-tui version 0.2.3 ==
104
+ ```
105
+
106
+ It may be customized by passing in the `branding_header` option (removed when set to `nil`).
107
+
108
+ Example:
109
+
110
+ ```ruby
111
+ Rake::TUI.run(branding_header: '== Glimmer (Ruby Desktop Development GUI Library) ==')
112
+ ```
113
+
114
+ Output:
115
+
116
+ ```
117
+ == Glimmer (Ruby Desktop Development GUI Library) ==
118
+ ```
119
+
120
+ ### `prompt_question`
121
+
122
+ The prompt question is the text that shows up before the help message and looks like this (from `Rake::TUI::PROMPT_QUESTION_DEFAULT`):
123
+
124
+ ```
125
+ Choose a Rake task:
126
+ ```
127
+
128
+ It may be customized by passing in the `prompt_question` option:
129
+
130
+ Example:
131
+
132
+ ```ruby
133
+ Rake::TUI.run(prompt_question: 'Select a Glimmer task:')
134
+ ```
135
+
136
+ Output:
137
+
138
+ ```
139
+ Select a Glimmer task: (Press ↑/↓ arrow to move, Enter to select and letters to filter)
50
140
  ```
51
141
 
142
+ ### `task_formatter` block
143
+
144
+ The task formatter (default: `Rake::TUI::TASK_FORMATTER_DEFAULT`) is responsible for formatting
145
+ tasks into task lines presented as choices to the user.
146
+
147
+ It receives `task` and `tasks` list as options.
148
+
149
+ For example, by default, it prints the same standard output you see from running `rake -T`:
150
+
151
+ ```
152
+ rake build # Build gem into pkg/
153
+ rake clean # Remove any temporary products
154
+ rake clobber # Remove any generated files
155
+ rake clobber_rdoc # Remove RDoc HTML files
156
+ rake console[script] # Start IRB with all runtime dependencies loaded
157
+ rake gemcutter:release # Release gem to Gemcutter
158
+ rake gemspec # Generate and validate gemspec
159
+ rake gemspec:debug # Display the gemspec for debugging purposes, as juwelier knows it (not from the filesystem)
160
+ rake gemspec:generate # Regenerate the gemspec on the filesystem
161
+ ‣ rake gemspec:release # Regenerate and validate gemspec, and then commits and pushes to git
162
+ rake gemspec:validate # Validates the gemspec on the filesystem
163
+ rake git:release # Tag and push release to git
164
+ rake install # Build and install gem using `gem install`
165
+ rake rdoc # Build RDoc HTML files
166
+ rake release # Release gem
167
+ rake rerdoc # Rebuild RDoc HTML files
168
+ rake simplecov # Code coverage detail
169
+ rake spec # Run RSpec code examples
170
+ rake version # Displays the current version
171
+ rake version:bump:major # Bump the major version by 1
172
+ rake version:bump:minor # Bump the a minor version by 1
173
+ rake version:bump:patch # Bump the patch version by 1
174
+ rake version:write # Writes out an explicit version
175
+ ```
176
+
177
+ However, it can be customized by passing in a `task_formatter` block.
178
+
179
+ Example:
180
+
181
+ ```ruby
182
+ Rake::TUI.new.run { |task, tasks| task.name_with_args }
183
+ ```
184
+
185
+ Output:
186
+
187
+ ```
188
+ build
189
+ clean
190
+ clobber
191
+ clobber_rdoc
192
+ console[script]
193
+ gemcutter:release
194
+ gemspec
195
+ gemspec:debug
196
+ gemspec:generate
197
+ gemspec:release
198
+ gemspec:validate
199
+ git:release
200
+ install
201
+ rdoc
202
+ ‣ release
203
+ rerdoc
204
+ simplecov
205
+ spec
206
+ version
207
+ version:bump:major
208
+ version:bump:minor
209
+ version:bump:patch
210
+ version:write
211
+ ```
212
+
213
+ ## TODO
214
+
215
+ [TODO.md](TODO.md)
216
+
217
+ ## Change Log
218
+
219
+ [CHANGELOG.md](CHANGELOG.md)
220
+
52
221
  ## Contributing to rake-tui
53
222
 
54
223
  - Check out the latest master to make sure the feature hasn't been
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.3
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env jruby
2
+
3
+ # Copyright (c) 2020 Andy Maleh
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ require_relative '../lib/rake-tui.rb'
25
+ Rake::TUI.run
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env jruby
2
+
3
+ # Copyright (c) 2020 Andy Maleh
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ require_relative '../lib/rake-tui.rb'
25
+ Rake::TUI.run
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env jruby
2
+
3
+ # Copyright (c) 2020 Andy Maleh
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ require_relative '../lib/rake-tui.rb'
25
+ Rake::TUI.run
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env jruby
2
+
3
+ # Copyright (c) 2020 Andy Maleh
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ require_relative '../lib/rake-tui.rb'
25
+ Rake::TUI.run
@@ -1,3 +1,25 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ # Copyright (c) 2020 Andy Maleh
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
3
24
  require_relative '../lib/rake-tui.rb'
25
+ Rake::TUI.run
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2020 Andy Maleh
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ require_relative '../lib/rake-tui.rb'
25
+ Rake::TUI.run
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2020 Andy Maleh
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ require_relative '../lib/rake-tui.rb'
25
+ Rake::TUI.run
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2020 Andy Maleh
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ require_relative '../lib/rake-tui.rb'
25
+ Rake::TUI.run
@@ -1,44 +1,26 @@
1
- $LOAD_PATH.unshift(File.expand_path('..', __FILE__))
2
-
3
- version = File.read(File.expand_path('../../VERSION', __FILE__)).strip
4
- puts "== rake-tui version #{version} =="
5
-
6
- require 'tty-prompt'
1
+ # frozen_string_literal: true
7
2
 
8
- prompt = TTY::Prompt.new
9
-
10
- prompt.on(:keyescape) do |event|
11
- puts # a new line is needed
12
- puts "Exiting..."
13
- exit(0)
14
- end
15
-
16
- begin
17
- rake_task_lines = `rake -T`.split("\n")
18
- unless rake_task_lines.detect {|l| l.start_with?('rake ')}
19
- puts "No Rake tasks found!"
20
- puts "Exiting..."
21
- exit(0)
22
- end
23
- rake_task_lines = rake_task_lines.map do |line|
24
- bound = TTY::Screen.width - 6
25
- line.size <= bound ? line : "#{line[0..(bound - 3)]}..."
26
- end
27
- rake_task_line = prompt.select("Choose a Rake task: ", rake_task_lines, cycle: true, per_page: [TTY::Screen.height - 5, 1].max, filter: true, help: true, show_help: :always) do |list|
28
- list.singleton_class.define_method(:keyspace) do |event|
29
- return unless filterable?
3
+ # Copyright (c) 2020 Andy Maleh
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ $LOAD_PATH.unshift(File.expand_path('..', __FILE__))
30
25
 
31
- if event.value = " "
32
- @filter << event.value
33
- @active = 1
34
- end
35
- end
36
- end
37
- rake_task = rake_task_line.split('#').first.strip
38
- system rake_task
39
- rescue TTY::Reader::InputInterrupt => e
40
- # No Op
41
- puts # a new line is needed
42
- puts "Exiting..."
43
- exit(0)
44
- end
26
+ require 'rake-tui/ext/rake/tui'
@@ -0,0 +1,113 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rake'
4
+ Rake::TaskManager.record_task_metadata = true
5
+
6
+ module Rake
7
+ class TUI
8
+ VERSION = File.read(File.expand_path('../../../../../VERSION', __FILE__)).strip
9
+ BRANDING_HEADER_DEFAULT = "== rake-tui version #{VERSION} =="
10
+ PROMPT_QUESTION_DEFAULT = "Choose a Rake task: "
11
+ TASK_FORMATTER_DEFAULT = lambda do |task, tasks|
12
+ max_task_size = tasks.map(&:name_with_args).map(&:size).max + 1
13
+ line = "rake #{task.name_with_args.ljust(max_task_size)} # #{task.comment}"
14
+ bound = TTY::Screen.width - 6
15
+ line.size <= bound ? line : "#{line[0..(bound - 3)]}..."
16
+ end
17
+
18
+ class << self
19
+ # Singleton instance (if argument is specified, it is used to set instance)
20
+ def instance(tui=nil)
21
+ if tui.nil?
22
+ @instance ||= new
23
+ else
24
+ @instance = tui
25
+ end
26
+ end
27
+
28
+ # Runs TUI (recommended for general use)
29
+ #
30
+ # Optionally takes a `branding_header` to customize the branding header or take it off when set to `nil`.
31
+ #
32
+ # Optionally takes a `prompt_question` to customize the question for selecting a rake task.
33
+ #
34
+ # Optionally pass a task_formatter mapping block to
35
+ # transform every rake task line into a different format
36
+ # e.g. Rake::TUI.new.run { |task, tasks| task.name_with_args }
37
+ # This makes tasks show up without `rake` prefix or `# description` suffix
38
+ def run(branding_header: BRANDING_HEADER_DEFAULT, prompt_question: PROMPT_QUESTION_DEFAULT, &task_formatter)
39
+ instance.run(branding_header: branding_header, prompt_question: prompt_question, &task_formatter)
40
+ end
41
+ end
42
+
43
+ # Initializes a new TUI object
44
+ def initialize(tasks=Rake.application.tasks)
45
+ if tasks.empty?
46
+ Rake.application.init
47
+ Rake.application.load_rakefile
48
+ tasks = Rake.application.tasks
49
+ end
50
+
51
+ @tasks = tasks.reject {|task| task.comment.nil?}
52
+ end
53
+
54
+ # Runs TUI
55
+ #
56
+ # Optionally takes a `branding_header` to customize the branding header or take it off when set to `nil`.
57
+ #
58
+ # Optionally takes a `prompt_question` to customize the question for selecting a rake task.
59
+ #
60
+ # Optionally takes a `task_formatter` mapping block to
61
+ # transform every rake task line into a different format
62
+ # e.g. Rake::TUI.new.run { |task, tasks| task.name_with_args }
63
+ # This makes tasks show up without `rake` prefix or `# description` suffix
64
+ def run(branding_header: BRANDING_HEADER_DEFAULT, prompt_question: PROMPT_QUESTION_DEFAULT, &task_formatter)
65
+ puts branding_header unless branding_header.nil?
66
+
67
+ if @tasks.empty?
68
+ puts "No Rake tasks found!"
69
+ puts "Exiting..."
70
+ exit(0)
71
+ end
72
+
73
+ require 'tty-prompt'
74
+
75
+ prompt = TTY::Prompt.new
76
+
77
+ prompt.on(:keyescape) do |event|
78
+ puts # a new line is needed
79
+ puts "Exiting..."
80
+ exit(0)
81
+ end
82
+
83
+ begin
84
+ task_formatter ||= TASK_FORMATTER_DEFAULT
85
+ rake_task_lines = @tasks.map {|task, tasks| task_formatter.call(task, @tasks)}
86
+ rake_task_line = prompt.select(prompt_question, cycle: true, per_page: [TTY::Screen.height - 5, 1].max, filter: true, show_help: :always) do |list|
87
+ list.choices rake_task_lines
88
+ list.singleton_class.define_method(:keyspace) do |event|
89
+ return unless filterable?
90
+
91
+ if event.value = " "
92
+ @filter << event.value
93
+ @active = 1
94
+ end
95
+ end
96
+ end
97
+
98
+ selected_task = @tasks[rake_task_lines.index(rake_task_line)]
99
+ rake_task = selected_task.name
100
+ rake_task_arg_names = selected_task.arg_names
101
+ rake_task_arg_values = rake_task_arg_names.map do |rake_task_arg_name|
102
+ prompt.ask("Enter [#{rake_task_arg_name}] (default=nil):")
103
+ end
104
+ Rake::Task[rake_task].invoke(*rake_task_arg_values) # TODO support args
105
+ rescue TTY::Reader::InputInterrupt => e
106
+ # No Op
107
+ puts # a new line is needed
108
+ puts "Exiting..."
109
+ exit(0)
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,69 @@
1
+ # Generated by juwelier
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: rake-tui 0.2.3 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "rake-tui".freeze
9
+ s.version = "0.2.3"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["AndyMaleh".freeze]
14
+ s.date = "2020-09-24"
15
+ s.description = "Rake Text-based User Interface".freeze
16
+ s.email = "andy.am@gmail.com".freeze
17
+ s.executables = ["rake-tui".freeze, "jrake-tui".freeze, "raketui".freeze, "jraketui".freeze, "rake-ui".freeze, "jrake-ui".freeze, "rakeui".freeze, "jrakeui".freeze]
18
+ s.extra_rdoc_files = [
19
+ "CHANGELOG.md",
20
+ "LICENSE.txt",
21
+ "README.md"
22
+ ]
23
+ s.files = [
24
+ "CHANGELOG.md",
25
+ "LICENSE.txt",
26
+ "README.md",
27
+ "VERSION",
28
+ "bin/jrake-tui",
29
+ "bin/jrake-ui",
30
+ "bin/jraketui",
31
+ "bin/jrakeui",
32
+ "bin/rake-tui",
33
+ "bin/rake-ui",
34
+ "bin/raketui",
35
+ "bin/rakeui",
36
+ "lib/rake-tui.rb",
37
+ "lib/rake-tui/ext/rake/tui.rb",
38
+ "rake-tui.gemspec"
39
+ ]
40
+ s.homepage = "http://github.com/AndyObtiva/rake-tui".freeze
41
+ s.licenses = ["MIT".freeze]
42
+ s.rubygems_version = "3.1.4".freeze
43
+ s.summary = "Rake TUI".freeze
44
+
45
+ if s.respond_to? :specification_version then
46
+ s.specification_version = 4
47
+ end
48
+
49
+ if s.respond_to? :add_runtime_dependency then
50
+ s.add_runtime_dependency(%q<tty-prompt>.freeze, [">= 0"])
51
+ s.add_development_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
52
+ s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
53
+ s.add_development_dependency(%q<bundler>.freeze, [">= 1.0"])
54
+ s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.1.0"])
55
+ s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
56
+ s.add_development_dependency(%q<e2mmap>.freeze, ["~> 0.1.0"])
57
+ s.add_development_dependency(%q<puts_debuggerer>.freeze, [">= 0"])
58
+ else
59
+ s.add_dependency(%q<tty-prompt>.freeze, [">= 0"])
60
+ s.add_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
61
+ s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
62
+ s.add_dependency(%q<bundler>.freeze, [">= 1.0"])
63
+ s.add_dependency(%q<juwelier>.freeze, ["~> 2.1.0"])
64
+ s.add_dependency(%q<simplecov>.freeze, [">= 0"])
65
+ s.add_dependency(%q<e2mmap>.freeze, ["~> 0.1.0"])
66
+ s.add_dependency(%q<puts_debuggerer>.freeze, [">= 0"])
67
+ end
68
+ end
69
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake-tui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
- - andy_maleh
7
+ - AndyMaleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-05 00:00:00.000000000 Z
11
+ date: 2020-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tty-prompt
@@ -126,16 +126,34 @@ description: Rake Text-based User Interface
126
126
  email: andy.am@gmail.com
127
127
  executables:
128
128
  - rake-tui
129
+ - jrake-tui
130
+ - raketui
131
+ - jraketui
132
+ - rake-ui
133
+ - jrake-ui
134
+ - rakeui
135
+ - jrakeui
129
136
  extensions: []
130
137
  extra_rdoc_files:
138
+ - CHANGELOG.md
131
139
  - LICENSE.txt
132
140
  - README.md
133
141
  files:
142
+ - CHANGELOG.md
134
143
  - LICENSE.txt
135
144
  - README.md
136
145
  - VERSION
146
+ - bin/jrake-tui
147
+ - bin/jrake-ui
148
+ - bin/jraketui
149
+ - bin/jrakeui
137
150
  - bin/rake-tui
151
+ - bin/rake-ui
152
+ - bin/raketui
153
+ - bin/rakeui
138
154
  - lib/rake-tui.rb
155
+ - lib/rake-tui/ext/rake/tui.rb
156
+ - rake-tui.gemspec
139
157
  homepage: http://github.com/AndyObtiva/rake-tui
140
158
  licenses:
141
159
  - MIT