whirly 0.2.2 → 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
  SHA1:
3
- metadata.gz: 27c78b557a26c8556df8bed870f97d256d9b13f9
4
- data.tar.gz: 0740cc05c8e08ec9fd361dd97f84f3d7d5d0e875
3
+ metadata.gz: 676e277e0721c5b27b89f72b91d218c6132ecea9
4
+ data.tar.gz: c84ff19c62bc2dd2f178d266c06446465bbc2571
5
5
  SHA512:
6
- metadata.gz: 07acf32c1433564b728587786c9e3ef0610d3b4e740341de46b648d784a7a470b6cf764287760068d38af0861ec2bfd0f324e88ebf3905001d2f110cdda6c1d6
7
- data.tar.gz: 5e69bb87239a176c16f83e16cf154ad984e2b6132256c721d027794154b1ce5feee7d7a77ebfbc23ceace195660044b5693db466ea3e2aee07924a54f4aa7297
6
+ metadata.gz: 8cda16355b8fc8f217c05796bd6b9f524da98b4d9574e8b9a2827fefc05c336e706f3a2de5f5641965b9e95e88bbdfa7b89b3473b1a675c6d65d064ad6f5e205
7
+ data.tar.gz: ff67f700686adcdad1dd2b2d6c661aab1ec7a0a85f0ebdf6d0a03fbef97fe157daec8970b890020aa559356577ba33344cf50643c823c74fc6456b8b3e83549c
@@ -1,5 +1,10 @@
1
1
  ## CHANGELOG
2
2
 
3
+ ### 0.2.3
4
+
5
+ - Fix bug that in some cases whirly output would be shown on non-ttys
6
+ - New spinners: card, cloud, photo, banknote, white_square
7
+
3
8
  ### 0.2.2
4
9
 
5
10
  - More emotions for whirly (the spinner)
data/Gemfile CHANGED
@@ -3,4 +3,5 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  gem 'minitest'
6
+ gem 'paint'
6
7
  # gem 'irbtools-more', require: 'irbtools/binding'
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 18 custom spinners and also includes those from the [cli-spinners](https://github.com/sindresorhus/cli-spinners) project.
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
  }
@@ -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
@@ -1,4 +1,3 @@
1
1
  module Whirly
2
- VERSION = "0.2.2".freeze
2
+ VERSION = "0.2.3".freeze
3
3
  end
4
-
@@ -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.15
8
+ sleep 0.2
8
9
  end
9
10
 
10
11
  def medium_sleep
11
- sleep 0.5
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
- medium_sleep
173
+ short_sleep
173
174
  Whirly.stop
174
175
 
175
- refute /A.*B.*C.*D.*E.*F.*G.*H/m =~ @capture.string
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.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-06 00:00:00.000000000 Z
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