whirly 0.2.2 → 0.2.3
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/CHANGELOG.md +5 -0
- data/Gemfile +1 -0
- data/README.md +1 -1
- data/data/whirly-static-spinners.json +50 -0
- data/lib/whirly.rb +10 -8
- data/lib/whirly/version.rb +1 -2
- data/spec/whirly_spec.rb +118 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 676e277e0721c5b27b89f72b91d218c6132ecea9
|
4
|
+
data.tar.gz: c84ff19c62bc2dd2f178d266c06446465bbc2571
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8cda16355b8fc8f217c05796bd6b9f524da98b4d9574e8b9a2827fefc05c336e706f3a2de5f5641965b9e95e88bbdfa7b89b3473b1a675c6d65d064ad6f5e205
|
7
|
+
data.tar.gz: ff67f700686adcdad1dd2b2d6c661aab1ec7a0a85f0ebdf6d0a03fbef97fe157daec8970b890020aa559356577ba33344cf50643c823c74fc6456b8b3e83549c
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Whirly 😀 [![[version]](https://badge.fury.io/rb/whirly.svg)](http://badge.fury.io/rb/whirly) [![[travis]](https://travis-ci.org/janlelis/whirly.png)](https://travis-ci.org/janlelis/whirly)
|
2
2
|
|
3
|
-
A simple, colorful and customizable terminal spinner library for Ruby. It comes with
|
3
|
+
A simple, colorful and customizable terminal spinner library for Ruby. It comes with 23 custom spinners and also includes those from the [cli-spinners](https://github.com/sindresorhus/cli-spinners) project.
|
4
4
|
|
5
5
|
## Demonstration
|
6
6
|
|
@@ -171,5 +171,55 @@
|
|
171
171
|
"😿",
|
172
172
|
"🙀"
|
173
173
|
]
|
174
|
+
},
|
175
|
+
"card": {
|
176
|
+
"interval": 90,
|
177
|
+
"stop": "🂠",
|
178
|
+
"frames": [
|
179
|
+
"🃁", "🃂", "🃃", "🃄", "🃅", "🃆", "🃇", "🃈", "🃉", "🃊", "🃋", "🃌", "🃍", "🃎",
|
180
|
+
"🂱", "🂲", "🂳", "🂴", "🂵", "🂶", "🂷", "🂸", "🂹", "🂺", "🂻", "🂼", "🂽", "🂾",
|
181
|
+
"🂡", "🂢", "🂣", "🂤", "🂥", "🂦", "🂧", "🂨", "🂩", "🂪", "🂫", "🂬", "🂭", "🂮",
|
182
|
+
"🃑", "🃒", "🃓", "🃔", "🃕", "🃖", "🃗", "🃘", "🃙", "🃚", "🃛", "🃜", "🃝", "🃞"
|
183
|
+
]
|
184
|
+
},
|
185
|
+
"cloud": {
|
186
|
+
"interval": 140,
|
187
|
+
"frames": [
|
188
|
+
"🌥",
|
189
|
+
"🌦",
|
190
|
+
"🌧",
|
191
|
+
"🌨",
|
192
|
+
"🌩",
|
193
|
+
"🌪"
|
194
|
+
]
|
195
|
+
},
|
196
|
+
"photo": {
|
197
|
+
"interval": 200,
|
198
|
+
"frames": [
|
199
|
+
"📷",
|
200
|
+
"📸"
|
201
|
+
]
|
202
|
+
},
|
203
|
+
"banknote": {
|
204
|
+
"interval": 100,
|
205
|
+
"frames": [
|
206
|
+
"💴",
|
207
|
+
"💵",
|
208
|
+
"💶",
|
209
|
+
"💷"
|
210
|
+
]
|
211
|
+
},
|
212
|
+
"white_square": {
|
213
|
+
"interval": 100,
|
214
|
+
"mode": "swing",
|
215
|
+
"frames": [
|
216
|
+
"🞓",
|
217
|
+
"🞒",
|
218
|
+
"🞑",
|
219
|
+
"🞐",
|
220
|
+
"🞏",
|
221
|
+
"🞎",
|
222
|
+
"🞔"
|
223
|
+
]
|
174
224
|
}
|
175
225
|
}
|
data/lib/whirly.rb
CHANGED
@@ -133,13 +133,6 @@ module Whirly
|
|
133
133
|
# optionally overwrite configuration on start
|
134
134
|
configure(**options)
|
135
135
|
|
136
|
-
# ensure cursor is visible after exit the program (only register for the very first time)
|
137
|
-
if (!defined?(@at_exit_handler_registered) || !@at_exit_handler_registered) && @options[:hide_cursor]
|
138
|
-
@at_exit_handler_registered = true
|
139
|
-
stream = @options[:stream]
|
140
|
-
at_exit{ stream.print CLI_COMMANDS[:show_cursor] }
|
141
|
-
end
|
142
|
-
|
143
136
|
# only enable once
|
144
137
|
return false if defined?(@enabled) && @enabled
|
145
138
|
|
@@ -149,6 +142,13 @@ module Whirly
|
|
149
142
|
# only do something if we are on a real terminal (or forced)
|
150
143
|
return false unless @options[:stream].tty? || @options[:non_tty]
|
151
144
|
|
145
|
+
# ensure cursor is visible after exit the program (only register for the very first time)
|
146
|
+
if (!defined?(@at_exit_handler_registered) || !@at_exit_handler_registered) && @options[:hide_cursor]
|
147
|
+
@at_exit_handler_registered = true
|
148
|
+
stream = @options[:stream]
|
149
|
+
at_exit{ stream.print CLI_COMMANDS[:show_cursor] }
|
150
|
+
end
|
151
|
+
|
152
152
|
# init color
|
153
153
|
initialize_color if @options[:color]
|
154
154
|
|
@@ -176,12 +176,14 @@ module Whirly
|
|
176
176
|
|
177
177
|
def self.stop(stop_frame = nil)
|
178
178
|
return false unless @enabled
|
179
|
+
@enabled = false
|
180
|
+
return false unless @options[:stream].tty? || @options[:non_tty]
|
181
|
+
|
179
182
|
@thread.terminate if @thread
|
180
183
|
render(stop_frame || @stop) if stop_frame || @stop
|
181
184
|
unrender if @options[:remove_after_stop]
|
182
185
|
@options[:stream].puts if @options[:append_newline]
|
183
186
|
@options[:stream].print CLI_COMMANDS[:show_cursor] if @options[:hide_cursor]
|
184
|
-
@enabled = false
|
185
187
|
|
186
188
|
true
|
187
189
|
end
|
data/lib/whirly/version.rb
CHANGED
data/spec/whirly_spec.rb
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
require_relative "../lib/whirly"
|
2
2
|
require "minitest/autorun"
|
3
|
+
require "paint"
|
3
4
|
# require "irbtools/binding"
|
4
5
|
require "stringio"
|
5
6
|
|
6
7
|
def short_sleep
|
7
|
-
sleep 0.
|
8
|
+
sleep 0.2
|
8
9
|
end
|
9
10
|
|
10
11
|
def medium_sleep
|
11
|
-
sleep 0.
|
12
|
+
sleep 0.6
|
12
13
|
end
|
13
14
|
|
14
15
|
def long_sleep
|
@@ -169,10 +170,10 @@ describe Whirly do
|
|
169
170
|
spinner = { "frames" => "A".."H", "mode" => "random", "interval" => 10 }
|
170
171
|
|
171
172
|
Whirly.start(spinner: spinner)
|
172
|
-
|
173
|
+
short_sleep
|
173
174
|
Whirly.stop
|
174
175
|
|
175
|
-
refute
|
176
|
+
refute /\A.*?A.*?B.*?C.*?D.*?E.*?F.*?G.*?H/m =~ @capture.string
|
176
177
|
end
|
177
178
|
|
178
179
|
it "can be set to reverse" do
|
@@ -195,6 +196,91 @@ describe Whirly do
|
|
195
196
|
assert_match /A.*B.*C.*D.*E.*F.*G.*H.*G.*F.*E.*D.*C.*B.*A/m, @capture.string
|
196
197
|
end
|
197
198
|
end
|
199
|
+
|
200
|
+
describe "Interval" do
|
201
|
+
it "spins more often when interval is lower" do
|
202
|
+
capture1 = StringIO.new
|
203
|
+
Whirly.start(stream: capture1, interval: 100)
|
204
|
+
medium_sleep
|
205
|
+
Whirly.stop
|
206
|
+
|
207
|
+
capture2 = StringIO.new
|
208
|
+
Whirly.start(stream: capture2, interval: 50)
|
209
|
+
medium_sleep
|
210
|
+
Whirly.stop
|
211
|
+
|
212
|
+
assert capture1.string.size < capture2.string.size
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
describe "Colors" do
|
218
|
+
it "will use no color when :color option is falsey" do
|
219
|
+
Whirly.start(color: false)
|
220
|
+
short_sleep
|
221
|
+
Whirly.stop
|
222
|
+
|
223
|
+
refute /\[38;5;/ =~ @capture.string
|
224
|
+
end
|
225
|
+
|
226
|
+
it "will use color when :color option is truthy" do
|
227
|
+
Whirly.start(color: true)
|
228
|
+
short_sleep
|
229
|
+
Whirly.stop
|
230
|
+
|
231
|
+
assert /\[38;5;/ =~ @capture.string
|
232
|
+
end
|
233
|
+
|
234
|
+
it "defaults :color to true when the paint gem is available" do
|
235
|
+
Whirly.reset
|
236
|
+
Whirly.configure
|
237
|
+
assert Whirly.options[:color]
|
238
|
+
end
|
239
|
+
|
240
|
+
# it "defaults :color to true when the paint gem is not available" do
|
241
|
+
# remember_paint = Paint
|
242
|
+
# Object.send(:remove_const, :Paint)
|
243
|
+
# Whirly.reset
|
244
|
+
# Whirly.configure
|
245
|
+
# Object.send(:const_set, :Paint, remember_paint)
|
246
|
+
# refute Whirly.options[:color]
|
247
|
+
# end
|
248
|
+
|
249
|
+
it "changes the the color" do
|
250
|
+
Whirly.start
|
251
|
+
long_sleep
|
252
|
+
Whirly.stop
|
253
|
+
|
254
|
+
colors = @capture.string.scan(/\[38;5;(\d+)m/).flatten
|
255
|
+
assert colors.uniq.size > 1
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
describe "Cursor" do
|
260
|
+
it "hides (and later shows) cursor when :hide_cursor => true option is given (default)" do
|
261
|
+
Whirly.start(hide_cursor: true)
|
262
|
+
short_sleep
|
263
|
+
Whirly.stop
|
264
|
+
|
265
|
+
assert_match /\[?25l.*\[?25h/m, @capture.string
|
266
|
+
end
|
267
|
+
|
268
|
+
it "does not hide cursor when :hide_cursor => false option is given" do
|
269
|
+
Whirly.start(hide_cursor: false)
|
270
|
+
short_sleep
|
271
|
+
Whirly.stop
|
272
|
+
|
273
|
+
refute /\[?25l.*\[?25h/m =~ @capture.string
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
describe "Spinner Packs" do
|
278
|
+
it "can be passed an alternative set of :spinner_packs" do
|
279
|
+
assert_raises ArgumentError do
|
280
|
+
Whirly.start(spinner_packs: [:cli], spinner: "cat") # whirly is part of :whirly, but not of :cli
|
281
|
+
Whirly.stop
|
282
|
+
end
|
283
|
+
end
|
198
284
|
end
|
199
285
|
|
200
286
|
describe "Ansi Escape Mode" do
|
@@ -213,6 +299,34 @@ describe Whirly do
|
|
213
299
|
end
|
214
300
|
end
|
215
301
|
|
302
|
+
describe "Streams and TTYs" do
|
303
|
+
it "will not output anything on non-ttys" do
|
304
|
+
Whirly.reset
|
305
|
+
@capture = StringIO.new
|
306
|
+
Whirly.start(stream: @capture)
|
307
|
+
short_sleep
|
308
|
+
Whirly.stop
|
309
|
+
assert_equal "", @capture.string
|
310
|
+
end
|
311
|
+
|
312
|
+
it "will output something on non-ttys when :non_tty => true option is given" do
|
313
|
+
Whirly.reset
|
314
|
+
@capture = StringIO.new
|
315
|
+
Whirly.start(stream: @capture, non_tty: true)
|
316
|
+
short_sleep
|
317
|
+
Whirly.stop
|
318
|
+
refute_equal "", @capture.string
|
319
|
+
end
|
320
|
+
|
321
|
+
it "can be configured to which stream whirly's output goes" do
|
322
|
+
iolike = StringIO.new
|
323
|
+
Whirly.start(stream: iolike, non_tty: true)
|
324
|
+
short_sleep
|
325
|
+
Whirly.stop
|
326
|
+
refute_equal "", iolike.string
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
216
330
|
describe "Positioning" do
|
217
331
|
it "will render spinner 1 line further below (useful for spinning while git cloning)" do
|
218
332
|
Whirly.start(position: "below")
|
@@ -263,4 +377,3 @@ describe Whirly do
|
|
263
377
|
end
|
264
378
|
end
|
265
379
|
end
|
266
|
-
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: whirly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Lelis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: unicode-display_width
|