spinning_cursor 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|