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 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