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.
@@ -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: []