spinning_cursor 0.2.1 → 0.3.0
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 +7 -0
- data/CHANGELOG +4 -0
- data/README.md +5 -5
- data/VERSION +1 -1
- data/lib/spinning_cursor.rb +15 -2
- data/lib/spinning_cursor/parser.rb +27 -4
- data/spinning_cursor.gemspec +4 -4
- data/test/test_cursors.rb +4 -4
- data/test/test_parser.rb +88 -0
- data/test/test_spinning_cursor.rb +84 -11
- metadata +11 -28
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6ef985becc5baa16055d3a0b4bb79ebabb96df36
|
4
|
+
data.tar.gz: ef9ca743d415c3d8ccf4c26ae23016ea27a9b534
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 143c9030a8c4efebe615bc6872544af7a77a00fc314331999dc9ea91e5f6a521a853b3ea3c150ad52178081eb6fec62e7ec65f83e7cc5a47e6555d4c27c4c434
|
7
|
+
data.tar.gz: a8338b406d6f8febc5d024aaf9bfa272e0415819daadce7ef7b4883a4f86b04afe7789466a5fcc34b1b99fe4f40ccf74f54bfaaceabe840bcb474041e4f28e37
|
data/CHANGELOG
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
===============================================================================
|
3
3
|
|
4
|
+
v0.3.0 (2013-10-28)
|
5
|
+
- API changes (SpinningCursor#setup method and SpinningCursor#start renamed to SpinningCursor#run) #29
|
6
|
+
- Type validation of options - throws exception if validation fails #28
|
7
|
+
|
4
8
|
v0.2.1 (2013-07-28)
|
5
9
|
- Fix banner overflowing issue #19
|
6
10
|
- Ensure cross-platform support #22 #23
|
data/README.md
CHANGED
@@ -29,7 +29,7 @@ _It's so simple it hurts!_
|
|
29
29
|
```ruby
|
30
30
|
require 'spinning_cursor' # you'll definitely need this bit
|
31
31
|
|
32
|
-
SpinningCursor.
|
32
|
+
SpinningCursor.run do
|
33
33
|
banner "An amazing task is happening"
|
34
34
|
type :spinner
|
35
35
|
action do
|
@@ -76,7 +76,7 @@ The first option is the simplest, but the second isn't so bad either.
|
|
76
76
|
It's pretty simple, just do:
|
77
77
|
|
78
78
|
```ruby
|
79
|
-
SpinningCursor.
|
79
|
+
SpinningCursor.run do
|
80
80
|
banner "Loading"
|
81
81
|
type :dots
|
82
82
|
message "Done"
|
@@ -88,7 +88,7 @@ sleep 20
|
|
88
88
|
SpinningCursor.stop
|
89
89
|
```
|
90
90
|
|
91
|
-
**Notice** the absence of the `action` option. The
|
91
|
+
**Notice** the absence of the `action` option. The run method will only keep
|
92
92
|
the cursor running if an `action` block isn't passed to it.
|
93
93
|
|
94
94
|
### I want to be able to change the finish message conditionally!
|
@@ -98,7 +98,7 @@ Do you? Well that's easy too (I'm starting to see a pattern here...)!
|
|
98
98
|
Use the `set_message` method to change the message during the execution:
|
99
99
|
|
100
100
|
```ruby
|
101
|
-
SpinningCursor.
|
101
|
+
SpinningCursor.run do
|
102
102
|
banner "Calculating your favour colour, please wait"
|
103
103
|
type :dots
|
104
104
|
action do
|
@@ -123,7 +123,7 @@ the banner message in the same way you would the finish message, using
|
|
123
123
|
`set_banner`:
|
124
124
|
|
125
125
|
```ruby
|
126
|
-
SpinningCursor.
|
126
|
+
SpinningCursor.run do
|
127
127
|
banner "Stealing your food"
|
128
128
|
action do
|
129
129
|
sleep 10
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lib/spinning_cursor.rb
CHANGED
@@ -8,20 +8,30 @@ module SpinningCursor
|
|
8
8
|
include self::ConsoleHelpers
|
9
9
|
extend self::ConsoleHelpers
|
10
10
|
|
11
|
+
def setup(&block)
|
12
|
+
@parsed = Parser.new(&block)
|
13
|
+
@cursor = Cursor.new(@parsed)
|
14
|
+
@setup = true
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def setup?
|
19
|
+
@setup
|
20
|
+
end
|
21
|
+
|
11
22
|
#
|
12
23
|
# Sends passed block to Parser, and starts cursor thread
|
13
24
|
# It will execute the action block and kill the cursor
|
14
25
|
# thread if an action block is passed.
|
15
26
|
#
|
16
27
|
def start(&block)
|
28
|
+
setup(&block) if block or not setup?
|
17
29
|
stop if alive?
|
18
30
|
|
19
31
|
save_stdout_sync_status
|
20
32
|
capture_console
|
21
33
|
hide_cursor
|
22
34
|
|
23
|
-
@parsed = Parser.new(&block)
|
24
|
-
@cursor = Cursor.new(@parsed)
|
25
35
|
@spinner = Thread.new do
|
26
36
|
abort_on_exception = true
|
27
37
|
@cursor.spin
|
@@ -47,6 +57,8 @@ module SpinningCursor
|
|
47
57
|
end
|
48
58
|
end
|
49
59
|
|
60
|
+
alias run start
|
61
|
+
|
50
62
|
#
|
51
63
|
# Kills the cursor thread and prints the finished message
|
52
64
|
# Returns execution time
|
@@ -72,6 +84,7 @@ module SpinningCursor
|
|
72
84
|
# Set parsed to nil so set_message method only works
|
73
85
|
# when cursor is actually running.
|
74
86
|
@parsed = nil
|
87
|
+
@setup = false
|
75
88
|
|
76
89
|
# Return execution time
|
77
90
|
@stop_watch.stop
|
@@ -15,7 +15,11 @@ module SpinningCursor
|
|
15
15
|
|
16
16
|
if block_given?
|
17
17
|
@outer_scope_object = eval("self", block.binding)
|
18
|
-
|
18
|
+
if block.arity == 1
|
19
|
+
yield self
|
20
|
+
else
|
21
|
+
instance_eval &block
|
22
|
+
end
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
@@ -40,11 +44,30 @@ module SpinningCursor
|
|
40
44
|
# For setting, use method with arguments
|
41
45
|
# e.g. `banner "my banner"`
|
42
46
|
#
|
43
|
-
|
47
|
+
|
48
|
+
methods_and_validations = {
|
49
|
+
:type => Proc.new { |arg|
|
50
|
+
inst_methods = SpinningCursor::Cursor.public_instance_methods |
|
51
|
+
SpinningCursor::Cursor.private_instance_methods |
|
52
|
+
SpinningCursor::Cursor.protected_instance_methods
|
53
|
+
(inst_methods & [ arg, arg.to_s ]).empty? ? false : arg },
|
54
|
+
:delay => Proc.new { |arg| arg.is_a?(Numeric) ? arg.to_f : false},
|
55
|
+
:output => Proc.new { |arg| [:inline, :at_stop].include?(arg) ? arg : false},
|
56
|
+
:banner => Proc.new { |arg| arg.respond_to?(:to_s) ? arg.to_s : false},
|
57
|
+
:message => Proc.new { |arg| arg.respond_to?(:to_s) ? arg.to_s : false},
|
58
|
+
}
|
59
|
+
|
60
|
+
methods_and_validations.each do |method, validation|
|
44
61
|
define_method(method) do |*args|
|
45
62
|
var = "@#{method}"
|
46
|
-
|
47
|
-
|
63
|
+
arg = args.first
|
64
|
+
if arg
|
65
|
+
valid_arg = validation.call(arg)
|
66
|
+
raise ArgumentError unless valid_arg
|
67
|
+
instance_variable_set(var, valid_arg)
|
68
|
+
else
|
69
|
+
instance_variable_get(var)
|
70
|
+
end
|
48
71
|
end
|
49
72
|
end
|
50
73
|
|
data/spinning_cursor.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "spinning_cursor"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Adnan Abdulhussein"]
|
12
|
-
s.date = "2013-
|
12
|
+
s.date = "2013-10-28"
|
13
13
|
s.description = "Spinning Cursor is a flexible DSL that allows you to easily produce a customizable waiting/loading message for your Ruby command line program. Beautifully keep your users informed with what your program is doing when a more complex solution, such as a progress bar, doesn't fit your needs."
|
14
14
|
s.email = "adnan@prydoni.us"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -43,11 +43,11 @@ Gem::Specification.new do |s|
|
|
43
43
|
s.homepage = "http://github.com/Prydonius/spinning_cursor"
|
44
44
|
s.licenses = ["MIT"]
|
45
45
|
s.require_paths = ["lib"]
|
46
|
-
s.rubygems_version = "
|
46
|
+
s.rubygems_version = "2.0.3"
|
47
47
|
s.summary = "A DSL for adding animated loaders to your Ruby command line application."
|
48
48
|
|
49
49
|
if s.respond_to? :specification_version then
|
50
|
-
s.specification_version =
|
50
|
+
s.specification_version = 4
|
51
51
|
|
52
52
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
53
53
|
s.add_runtime_dependency(%q<highline>, ["~> 1.6.19"])
|
data/test/test_cursors.rb
CHANGED
@@ -8,7 +8,7 @@ class TestSpinningCursorCursor < Test::Unit::TestCase
|
|
8
8
|
should "not clear lines above if it fits within the width of the shell" do
|
9
9
|
# general case
|
10
10
|
capture_stdout do |out|
|
11
|
-
SpinningCursor.
|
11
|
+
SpinningCursor.run do
|
12
12
|
banner (1..cols-20).map { ('a'..'z').to_a[rand(26)] }.join
|
13
13
|
action { sleep 0.1 }
|
14
14
|
end
|
@@ -18,7 +18,7 @@ class TestSpinningCursorCursor < Test::Unit::TestCase
|
|
18
18
|
|
19
19
|
should "not clear lines above if it fits exactly on the line (edge case)" do
|
20
20
|
capture_stdout do |out|
|
21
|
-
SpinningCursor.
|
21
|
+
SpinningCursor.run do
|
22
22
|
# spinner type takes up two characters, so minus 2 to fit exactly
|
23
23
|
banner (1..cols-2).map { ('a'..'z').to_a[rand(26)] }.join
|
24
24
|
action { sleep 0.1 }
|
@@ -29,7 +29,7 @@ class TestSpinningCursorCursor < Test::Unit::TestCase
|
|
29
29
|
|
30
30
|
should "clear lines above if banner message overflows" do
|
31
31
|
capture_stdout do |out|
|
32
|
-
SpinningCursor.
|
32
|
+
SpinningCursor.run do
|
33
33
|
# spinner type takes up two characters, so minus 2 to fit exactly
|
34
34
|
banner (1..400).map { ('a'..'z').to_a[rand(26)] }.join
|
35
35
|
action { sleep 0.1 }
|
@@ -40,7 +40,7 @@ class TestSpinningCursorCursor < Test::Unit::TestCase
|
|
40
40
|
|
41
41
|
should "clear lines above if banner message overflows (edge case)" do
|
42
42
|
capture_stdout do |out|
|
43
|
-
SpinningCursor.
|
43
|
+
SpinningCursor.run do
|
44
44
|
# spinner type takes up two characters, so minus 2 to fit exactly
|
45
45
|
banner (1..cols-1).map { ('a'..'z').to_a[rand(26)] }.join
|
46
46
|
action { sleep 0.1 }
|
data/test/test_parser.rb
CHANGED
@@ -75,4 +75,92 @@ class TestSpinningCursorParser < Test::Unit::TestCase
|
|
75
75
|
assert_equal proc, @parser.action
|
76
76
|
end
|
77
77
|
end
|
78
|
+
|
79
|
+
context "SpinningCursor#run" do
|
80
|
+
context "with a block with 1 parameter (arity 1)" do
|
81
|
+
setup do
|
82
|
+
$outer_context = self
|
83
|
+
capture_stdout do |out|
|
84
|
+
SpinningCursor.run do |param|
|
85
|
+
$inner_context = self
|
86
|
+
$yielded_param = param
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
should "yield the Parser as parameter" do
|
92
|
+
assert_equal Parser, $yielded_param.class
|
93
|
+
end
|
94
|
+
|
95
|
+
should "outer context be available (outer self = inner self)" do
|
96
|
+
assert_equal $inner_context.object_id, $outer_context.object_id
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "with a block without parameters (arity 0)" do
|
101
|
+
setup do
|
102
|
+
$outer_context = self
|
103
|
+
capture_stdout do |out|
|
104
|
+
SpinningCursor.run do
|
105
|
+
$inner_context = self
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
should "instance_eval the block on Parser context" do
|
111
|
+
assert_equal Parser, $inner_context.class
|
112
|
+
end
|
113
|
+
|
114
|
+
should "outer context NOT be available (outer self != inner self)" do
|
115
|
+
assert_not_equal $outer_context.object_id, $inner_context.object_id
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context "SpinningCursor::Parser method" do
|
122
|
+
context "'type'" do
|
123
|
+
should "raise ArgumentError if argument IS NOT a SpinningCursor::Cursor instance_method" do
|
124
|
+
assert_raise(ArgumentError) { SpinningCursor::Parser.new.type :fake_method }
|
125
|
+
end
|
126
|
+
should "NOT raise anything if argument IS a SpinningCursor::Cursor instance_method" do
|
127
|
+
assert_nothing_raised { SpinningCursor::Parser.new.type :dots }
|
128
|
+
end
|
129
|
+
end
|
130
|
+
context "'delay'" do
|
131
|
+
should "raise ArgumentError if argument IS NOT a Numeric" do
|
132
|
+
assert_raise(ArgumentError) { SpinningCursor::Parser.new.delay "Not a number" }
|
133
|
+
end
|
134
|
+
should "NOT raise anything if argument IS a Numeric" do
|
135
|
+
assert_nothing_raised { SpinningCursor::Parser.new.delay 10 }
|
136
|
+
end
|
137
|
+
end
|
138
|
+
context "'output'" do
|
139
|
+
should "raise ArgumentError if argument IS NOT :inline or :at_stop" do
|
140
|
+
assert_raise(ArgumentError) { SpinningCursor::Parser.new.output :not_inline_nor_at_stop }
|
141
|
+
end
|
142
|
+
should "NOT raise anything if argument IS :inline or :at_stop" do
|
143
|
+
assert_nothing_raised { SpinningCursor::Parser.new.output :inline }
|
144
|
+
assert_nothing_raised { SpinningCursor::Parser.new.output :at_stop }
|
145
|
+
end
|
146
|
+
end
|
147
|
+
context "'banner' and 'message'" do
|
148
|
+
class LackingToSClass
|
149
|
+
undef :to_s
|
150
|
+
end
|
151
|
+
|
152
|
+
should "raise ArgumentError if argument IS NOT a String nor respond_to :to_s (:banner)" do
|
153
|
+
assert_raise(ArgumentError) { SpinningCursor::Parser.new.banner LackingToSClass.new }
|
154
|
+
end
|
155
|
+
should "raise ArgumentError if argument IS NOT a String nor respond_to :to_s (:message)" do
|
156
|
+
assert_raise(ArgumentError) { SpinningCursor::Parser.new.message LackingToSClass.new }
|
157
|
+
end
|
158
|
+
should "NOT raise anything if argument IS a String or respond_to :to_s (:banner)" do
|
159
|
+
assert_nothing_raised { SpinningCursor::Parser.new.banner "A String" }
|
160
|
+
end
|
161
|
+
should "NOT raise anything if argument IS a String or respond_to :to_s (:message)" do
|
162
|
+
assert_nothing_raised { SpinningCursor::Parser.new.message "A String" }
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
78
166
|
end
|
@@ -5,7 +5,7 @@ class TestSpinningCursor < Test::Unit::TestCase
|
|
5
5
|
should "start the cursor, run block content and kill the cursor" do
|
6
6
|
# Hide any output
|
7
7
|
capture_stdout do |out|
|
8
|
-
SpinningCursor.
|
8
|
+
SpinningCursor.run do
|
9
9
|
action { sleep 0.1 }
|
10
10
|
end
|
11
11
|
# Give it some time to abort
|
@@ -15,7 +15,7 @@ class TestSpinningCursor < Test::Unit::TestCase
|
|
15
15
|
|
16
16
|
should "Parser#outer_scope_object point to 'caller'" do
|
17
17
|
capture_stdout do |out|
|
18
|
-
SpinningCursor.
|
18
|
+
SpinningCursor.run { }
|
19
19
|
parsed = SpinningCursor.instance_variable_get(:@parsed)
|
20
20
|
assert_equal self, parsed.outer_scope_object
|
21
21
|
SpinningCursor.stop
|
@@ -25,7 +25,7 @@ class TestSpinningCursor < Test::Unit::TestCase
|
|
25
25
|
should "evalute the block from the calling class" do
|
26
26
|
@num = 1
|
27
27
|
capture_stdout do |out|
|
28
|
-
SpinningCursor.
|
28
|
+
SpinningCursor.run do
|
29
29
|
action { @num += 1 }
|
30
30
|
end
|
31
31
|
|
@@ -37,7 +37,7 @@ class TestSpinningCursor < Test::Unit::TestCase
|
|
37
37
|
class SomethingWrongHappened < StandardError; end
|
38
38
|
assert_raise SomethingWrongHappened do
|
39
39
|
capture_stdout do |out|
|
40
|
-
SpinningCursor.
|
40
|
+
SpinningCursor.run do
|
41
41
|
action { raise SomethingWrongHappened }
|
42
42
|
end
|
43
43
|
end
|
@@ -48,7 +48,7 @@ class TestSpinningCursor < Test::Unit::TestCase
|
|
48
48
|
context "when an action block isn't passed it" do
|
49
49
|
should "start the cursor, and keep it going until stop is called" do
|
50
50
|
capture_stdout do |out|
|
51
|
-
SpinningCursor.
|
51
|
+
SpinningCursor.run do
|
52
52
|
banner "no action block"
|
53
53
|
end
|
54
54
|
sleep 0.5
|
@@ -63,7 +63,7 @@ class TestSpinningCursor < Test::Unit::TestCase
|
|
63
63
|
context "whilst running it" do
|
64
64
|
should "allow you to change the end message" do
|
65
65
|
capture_stdout do |out|
|
66
|
-
SpinningCursor.
|
66
|
+
SpinningCursor.run do
|
67
67
|
action do
|
68
68
|
SpinningCursor.set_message "Failed!"
|
69
69
|
end
|
@@ -77,7 +77,7 @@ class TestSpinningCursor < Test::Unit::TestCase
|
|
77
77
|
should "stop and display error if an unmanaged exception is thrown" do
|
78
78
|
capture_stdout do |out|
|
79
79
|
begin
|
80
|
-
SpinningCursor.
|
80
|
+
SpinningCursor.run do
|
81
81
|
action do
|
82
82
|
raise "An exception!"
|
83
83
|
end
|
@@ -90,7 +90,7 @@ class TestSpinningCursor < Test::Unit::TestCase
|
|
90
90
|
|
91
91
|
should "not stop if an exception is handled" do
|
92
92
|
capture_stdout do |out|
|
93
|
-
SpinningCursor.
|
93
|
+
SpinningCursor.run do
|
94
94
|
action do
|
95
95
|
begin
|
96
96
|
raise "An exception!"
|
@@ -106,7 +106,7 @@ class TestSpinningCursor < Test::Unit::TestCase
|
|
106
106
|
|
107
107
|
should "allow you to change the banner" do
|
108
108
|
capture_stdout do |out|
|
109
|
-
SpinningCursor.
|
109
|
+
SpinningCursor.run do
|
110
110
|
delay 0.2
|
111
111
|
action do
|
112
112
|
# Have to give it time to print the banners
|
@@ -142,7 +142,7 @@ class TestSpinningCursor < Test::Unit::TestCase
|
|
142
142
|
should "(with a block) return similar timing values" do
|
143
143
|
capture_stdout do |out|
|
144
144
|
result =
|
145
|
-
SpinningCursor.
|
145
|
+
SpinningCursor.run do
|
146
146
|
action do
|
147
147
|
sleep 0.2
|
148
148
|
end
|
@@ -150,7 +150,7 @@ class TestSpinningCursor < Test::Unit::TestCase
|
|
150
150
|
timing_1 = result[:elapsed_time]
|
151
151
|
|
152
152
|
result =
|
153
|
-
SpinningCursor.
|
153
|
+
SpinningCursor.run do
|
154
154
|
action do
|
155
155
|
sleep 0.2
|
156
156
|
end
|
@@ -162,4 +162,77 @@ class TestSpinningCursor < Test::Unit::TestCase
|
|
162
162
|
end
|
163
163
|
end
|
164
164
|
end
|
165
|
+
|
166
|
+
context "SpinningCursor#run" do
|
167
|
+
|
168
|
+
context "with a block with 1 parameter (arity 1)" do
|
169
|
+
setup do
|
170
|
+
@my_inst = "outer_inst"
|
171
|
+
capture_stdout do |out|
|
172
|
+
SpinningCursor.run do |param|
|
173
|
+
@my_inst = "inner_inst"
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
should "outer instance variables be available inside" do
|
179
|
+
assert_equal "inner_inst", @my_inst
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
context "with a block without parameters (arity 0)" do
|
184
|
+
setup do
|
185
|
+
@my_inst = "outer_inst"
|
186
|
+
capture_stdout do |out|
|
187
|
+
SpinningCursor.run do
|
188
|
+
@my_inst = "inner_inst"
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
should "outer instance variables NOT be available inside" do
|
194
|
+
assert_equal "outer_inst", @my_inst
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
context "SpinningCursor#setup" do
|
200
|
+
setup do
|
201
|
+
@sc = SpinningCursor.setup do
|
202
|
+
banner "My Setup Banner"
|
203
|
+
type :dots
|
204
|
+
message "My Setup Message"
|
205
|
+
delay 0.73
|
206
|
+
@bl = Proc.new {}
|
207
|
+
action(&@bl)
|
208
|
+
output :at_stop
|
209
|
+
end
|
210
|
+
@parsed = @sc.instance_variable_get(:@parsed)
|
211
|
+
end
|
212
|
+
|
213
|
+
should "parse banner correctly" do
|
214
|
+
assert_equal "My Setup Banner", @parsed.banner
|
215
|
+
end
|
216
|
+
|
217
|
+
should "parse type correctly" do
|
218
|
+
assert_equal :dots, @parsed.type
|
219
|
+
end
|
220
|
+
|
221
|
+
should "parse message correctly" do
|
222
|
+
assert_equal "My Setup Message", @parsed.message
|
223
|
+
end
|
224
|
+
|
225
|
+
should "parse delay correctly" do
|
226
|
+
assert_equal 0.73, @parsed.delay
|
227
|
+
end
|
228
|
+
|
229
|
+
should "parse action correctly" do
|
230
|
+
assert_equal @parsed.instance_variable_get(:@bl), @parsed.action
|
231
|
+
end
|
232
|
+
|
233
|
+
should "parse output correctly" do
|
234
|
+
assert_equal :at_stop, @parsed.output
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
165
238
|
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spinning_cursor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Adnan Abdulhussein
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-10-28 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: highline
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: bundler
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: jeweler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: yard
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ~>
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,33 +69,29 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: redcarpet
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: github-markup
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - '>='
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - '>='
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
description: Spinning Cursor is a flexible DSL that allows you to easily produce a
|
@@ -143,29 +130,25 @@ files:
|
|
143
130
|
homepage: http://github.com/Prydonius/spinning_cursor
|
144
131
|
licenses:
|
145
132
|
- MIT
|
133
|
+
metadata: {}
|
146
134
|
post_install_message:
|
147
135
|
rdoc_options: []
|
148
136
|
require_paths:
|
149
137
|
- lib
|
150
138
|
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
-
none: false
|
152
139
|
requirements:
|
153
|
-
- -
|
140
|
+
- - '>='
|
154
141
|
- !ruby/object:Gem::Version
|
155
142
|
version: '0'
|
156
|
-
segments:
|
157
|
-
- 0
|
158
|
-
hash: 699468937831844808
|
159
143
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
|
-
none: false
|
161
144
|
requirements:
|
162
|
-
- -
|
145
|
+
- - '>='
|
163
146
|
- !ruby/object:Gem::Version
|
164
147
|
version: '0'
|
165
148
|
requirements: []
|
166
149
|
rubyforge_project:
|
167
|
-
rubygems_version:
|
150
|
+
rubygems_version: 2.0.3
|
168
151
|
signing_key:
|
169
|
-
specification_version:
|
152
|
+
specification_version: 4
|
170
153
|
summary: A DSL for adding animated loaders to your Ruby command line application.
|
171
154
|
test_files: []
|