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.
@@ -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.start do
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.start do
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 start method will only keep
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.start do
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.start do
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.2.1
1
+ 0.3.0
@@ -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
- instance_eval &block
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
- %w[banner type message delay output].each do |method|
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
- return instance_variable_get(var) unless args.first
47
- instance_variable_set(var, args.first)
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
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "spinning_cursor"
8
- s.version = "0.2.1"
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-07-28"
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 = "1.8.23"
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 = 3
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"])
@@ -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.start do
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.start do
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.start do
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.start do
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 }
@@ -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.start do
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.start { }
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.start do
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.start do
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.start do
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.start do
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.start do
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.start do
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.start do
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.start do
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.start do
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.2.1
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-07-28 00:00:00.000000000 Z
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: 1.8.23
150
+ rubygems_version: 2.0.3
168
151
  signing_key:
169
- specification_version: 3
152
+ specification_version: 4
170
153
  summary: A DSL for adding animated loaders to your Ruby command line application.
171
154
  test_files: []