bumper 0.0.1

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: 55a3f57075539088c571390e8f53c4aa7ea42eb6
4
+ data.tar.gz: f0763048142dc65816ed8bc9d75e4ce1efa9e141
5
+ SHA512:
6
+ metadata.gz: 6cdcde25eccad205fda8b0ef442a880e58005571b79ccc0c393da0d815b79da42ab10e1da92fe765a175b016d695278032d6f7e8fec2604cd9d308737063bbfb
7
+ data.tar.gz: 4e668a0a117f84a7345ea8af1d7812bb579478d55ad53a25493cae2ea4f5c16a009627723f651e9d6ead0da16b5bcb016c6c387b044c688f64d2449b1edc2d4b
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ a.podspec
@@ -0,0 +1,23 @@
1
+ # Changelog
2
+
3
+ ## [0.1.4] (https://github.com/skywinder/bumper_pusher/tree/0.1.4)
4
+ #### 19/11/14
5
+ - *Merged pull-request:* Add check and warrning message, if you try to bump not from master branch [\#4](https://github.com/skywinder/bumper_pusher/pull/4) ([skywinder](https://github.com/skywinder))
6
+
7
+ - *Merged pull-request:* Remove confirmation for build for beta builds [\#3](https://github.com/skywinder/bumper_pusher/pull/3) ([skywinder](https://github.com/skywinder))
8
+
9
+ ## [0.1.2] (https://github.com/skywinder/bumper_pusher/tree/0.1.2)
10
+ #### 19/11/14
11
+ - *Merged pull-request:* Install and remove gem after push [\#2](https://github.com/skywinder/bumper_pusher/pull/2) ([skywinder](https://github.com/skywinder))
12
+
13
+ - *Merged pull-request:* Don't generate changelog for beta build [\#1](https://github.com/skywinder/bumper_pusher/pull/1) ([skywinder](https://github.com/skywinder))
14
+
15
+ ## [0.1.1] (https://github.com/skywinder/bumper_pusher/tree/0.1.1)
16
+ #### 18/11/14
17
+ ## [0.1.0] (https://github.com/skywinder/bumper_pusher/tree/0.1.0)
18
+ #### 18/11/14
19
+ ## [0.0.2] (https://github.com/skywinder/bumper_pusher/tree/0.0.2)
20
+ #### 14/11/14
21
+
22
+
23
+ \* *This changelog was generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+ # Specify your gem's dependencies in bumper_pusher.gemspec
3
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Petr Korolev
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,57 @@
1
+ # BumperPusher
2
+
3
+ This gem make bumping and pushing your ruby gems easy and fast!
4
+
5
+ - Works with `gemspec` and `podspec` files
6
+ - Automatically detect your current version (from `spec` or `version.rb` file)
7
+ - Auto-bump spec
8
+ - Auto-push spec
9
+
10
+ ## Installation
11
+ [sudo] gem install bumper_pusher
12
+
13
+ ## Usage
14
+ - Just print: `bumper_pusher` and that's it!
15
+ - If you want to test, that all works as expected: try **dry_run** mode: `bumper_pusher --dry-run`
16
+ - To bump version print: `bumper_pusher [option]`
17
+ - `-r` for bump release (`1.2.3` -> `2.0.0`)
18
+ - `-m` for bump minor (`1.2.3` -> `1.3.0`)
19
+ - `-p` for bump patch (`1.2.3` -> `1.2.4`) **default option**
20
+
21
+ - To install locally your gemspec `bumper_pusher -b`
22
+
23
+ ### Params
24
+ Usage: bumper_pusher [options]
25
+ -d, --dry-run Dry run
26
+ --release Bump release version
27
+ -m, --minor Bump minor version
28
+ -p, --patch Bump patch version
29
+ -r, --revert Revert last bump
30
+ -i, --[no-]install Install this gem after push it. Default is true.
31
+ -b, --beta Build beta gem without commit and push
32
+ -v, --version Print version number
33
+ -c, --[no]-changelog Auto generation of changelog and pushing it origin. Default is true
34
+
35
+ ## Alternatives
36
+ - https://github.com/peritus/bumpversion
37
+ - https://github.com/vojtajina/grunt-bump
38
+ - https://github.com/gregorym/bump
39
+ - https://github.com/svenfuchs/gem-release
40
+
41
+ ## Features & Benefits of this project
42
+
43
+ - **Very easy to use**: just print `bumper_pusher` in your repo folder.
44
+ - Support version storage directly in `gemspec` file and in `version.rb`
45
+ - Check that you're bumping from `master`. (otherwise print warning with confirmation)
46
+ - Check that your `git status` in clean
47
+ - Ability to build test gem easily `bumper_pusher -b`
48
+ - Ability to generate changelog for new version by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)
49
+ - Support both `gemspec` and `podspec` files
50
+
51
+ ## Contributing
52
+
53
+ 1. Fork it ( https://github.com/skywinder/bumper_pusher/fork )
54
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
55
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
56
+ 4. Push to the branch (`git push origin my-new-feature`)
57
+ 5. Create a new Pull Request
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bumper_pusher'
4
+
5
+ BumperPusher::Pusher.new
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'bumper_pusher/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "bumper"
9
+ spec.version = BumperPusher::VERSION
10
+ spec.authors = ["Petr Korolev"]
11
+ spec.email = ["sky4winder@gmail.com"]
12
+ spec.summary = %q{Easiest way to bump your specs}
13
+ spec.description = %q{Bumping and pushing your ruby gems easy and fast!}
14
+ spec.homepage = ""
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.7"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_runtime_dependency(%q<colorize>, ["~> 0.7"])
25
+ end
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative 'bumper_pusher/version'
4
+ require_relative 'bumper_pusher/parser'
5
+ require_relative 'bumper_pusher/bumper'
6
+
7
+ module BumperPusher
8
+
9
+ class Pusher
10
+ attr_reader :options
11
+ def initialize
12
+ @options = BumperPusher::Parser.new.parse_options
13
+ @options.freeze
14
+
15
+ @parser = BumperPusher::Bumper.new(@options)
16
+
17
+ if @options[:revert]
18
+ @parser.revert_last_bump
19
+ else
20
+ @parser.run_bumping_script
21
+ end
22
+
23
+ end
24
+ end
25
+
26
+
27
+ end
28
+
29
+ if $0 == __FILE__
30
+ bumper = BumperPusher::Pusher.new
31
+
32
+ end
@@ -0,0 +1,303 @@
1
+ require 'colorize'
2
+
3
+ module BumperPusher
4
+
5
+ POD_SPEC_TYPE = 'podspec'
6
+ GEM_SPEC_TYPE = 'gemspec'
7
+
8
+ class Bumper
9
+
10
+ @spec_mode
11
+
12
+ def initialize(options)
13
+ @options = options
14
+ @spec_file = find_spec_file
15
+ end
16
+
17
+ def check_repo_is_clean_or_dry_run
18
+ value =%x[#{'git status --porcelain'}]
19
+
20
+ if value.empty?
21
+ puts 'Repo is clean -> continue'
22
+ else
23
+ if @options[:dry_run]
24
+ puts 'Repo not clean, "Dry run" enabled -> continue'
25
+ else
26
+ if @options[:beta]
27
+ puts 'Repo not clean, "Beta build" enabled -> continue'
28
+ else
29
+ puts 'Repository not clean -> exit'
30
+ exit
31
+ end
32
+ end
33
+ end
34
+
35
+ current_branch = `git rev-parse --abbrev-ref HEAD`.strip!
36
+ if current_branch != 'master'
37
+ puts "Warning: You're not in 'master' branch (#{current_branch})!".yellow
38
+ ask_sure_Y
39
+ end
40
+ end
41
+
42
+
43
+ def find_spec_file
44
+
45
+ pod_arr = execute_line("find . -name '*.#{POD_SPEC_TYPE}'").split("\n")
46
+ gem_arr = execute_line("find . -name '*.#{GEM_SPEC_TYPE}'").split("\n")
47
+ if gem_arr.any? && pod_arr.any?
48
+ puts 'Warning: both podspec and gemspec found!'.yellow
49
+ end
50
+ all_specs = gem_arr | pod_arr
51
+
52
+ spec_file = ''
53
+
54
+ case all_specs.count
55
+ when 0
56
+ puts 'No spec files found. -> Exit.'
57
+ exit
58
+ when 1
59
+ spec_file = all_specs[0]
60
+ else
61
+ puts 'Which spec should be used?'
62
+ all_specs.each_with_index { |file, index| puts "#{index+1}. #{file}" }
63
+ input_index = Integer(gets.chomp)
64
+ spec_file = all_specs[input_index-1]
65
+ end
66
+
67
+ if spec_file == nil
68
+ puts "Can't find specified spec file -> exit"
69
+ exit
70
+ end
71
+
72
+ if gem_arr.include?(spec_file)
73
+ @spec_mode = GEM_SPEC_TYPE
74
+ else
75
+ if pod_arr.include?(spec_file)
76
+ @spec_mode = POD_SPEC_TYPE
77
+ else
78
+
79
+ end
80
+
81
+ end
82
+
83
+ spec_file.sub('./', '')
84
+
85
+ end
86
+
87
+ def find_current_gem_file
88
+ list_of_specs = execute_line("find . -name '*.gem'")
89
+ arr = list_of_specs.split("\n")
90
+
91
+ spec_file = ''
92
+
93
+ case arr.count
94
+ when 0
95
+ if @options[:dry_run]
96
+ return "test.#{POD_SPEC_TYPE}"
97
+ end
98
+ puts "No #{POD_SPEC_TYPE} files found. -> Exit."
99
+ exit
100
+ when 1
101
+ spec_file = arr[0]
102
+ else
103
+ puts 'Which spec should be used?'
104
+ arr.each_with_index { |file, index| puts "#{index+1}. #{file}" }
105
+ input_index = Integer(gets.chomp)
106
+ spec_file = arr[input_index-1]
107
+ end
108
+
109
+ if spec_file == nil
110
+ puts "Can't find specified spec file -> exit"
111
+ exit
112
+ end
113
+
114
+ spec_file.sub('./', '')
115
+
116
+ end
117
+
118
+ def find_version_in_file(podspec)
119
+ readme = File.read(podspec)
120
+
121
+ #try to find version in format 1.22.333
122
+ re = /(\d+)\.(\d+)\.(\d+)/m
123
+
124
+ match_result = re.match(readme)
125
+
126
+ unless match_result
127
+ puts 'Not found any versions'
128
+ exit
129
+ end
130
+
131
+ puts "Found version #{match_result[0]}"
132
+ return match_result[0], match_result.captures
133
+ end
134
+
135
+ def bump_version(versions_array)
136
+ bumped_result = versions_array.dup
137
+ bumped_result.map! { |x| x.to_i }
138
+
139
+ if @options[:beta]
140
+ bumped_version = versions_array.join('.') + '.1'
141
+ else
142
+ case @options[:bump_number]
143
+ when :major
144
+ bumped_result[0] += 1
145
+ bumped_result[1] = 0
146
+ bumped_result[2] = 0
147
+ when :minor
148
+ bumped_result[1] += 1
149
+ bumped_result[2] = 0
150
+ when :patch
151
+ bumped_result[2] += 1
152
+ else
153
+ raise('unknown bump_number')
154
+ end
155
+ bumped_version = bumped_result.join('.')
156
+ end
157
+
158
+ puts "Bump version: #{versions_array.join('.')} -> #{bumped_version}"
159
+
160
+ unless @options[:dry_run] || @options[:beta]
161
+ ask_sure_Y
162
+ end
163
+
164
+ bumped_version
165
+ end
166
+
167
+ def ask_sure_Y
168
+ puts 'Are you sure? Press Y to continue:'
169
+ str = gets.chomp
170
+ if str != 'Y'
171
+ puts '-> exit'
172
+ exit
173
+ end
174
+ end
175
+
176
+ def execute_line(line)
177
+ output = `#{line}`
178
+ check_exit_status(output)
179
+
180
+ output
181
+ end
182
+
183
+ def execute_line_if_not_dry_run(line)
184
+ if @options[:dry_run]
185
+ puts "Dry run: #{line}"
186
+ nil
187
+ else
188
+ puts line
189
+ value = %x[#{line}]
190
+ puts value
191
+ check_exit_status(value)
192
+ value
193
+ end
194
+ end
195
+
196
+ def check_exit_status(output)
197
+ if $?.exitstatus != 0
198
+ puts "Output:\n#{output}\nExit status = #{$?.exitstatus} ->Terminate script."
199
+ exit
200
+ end
201
+ end
202
+
203
+ def run_bumping_script
204
+
205
+ check_repo_is_clean_or_dry_run
206
+
207
+ version_file = find_version_file
208
+ result, versions_array = find_version_in_file(version_file)
209
+ bumped_version = bump_version(versions_array)
210
+
211
+ if @options[:bump]
212
+ execute_line_if_not_dry_run("sed -i \"\" \"s/#{result}/#{bumped_version}/\" README.md")
213
+ execute_line_if_not_dry_run("sed -i \"\" \"s/#{result}/#{bumped_version}/\" #{version_file}")
214
+ end
215
+
216
+ if @options[:commit]
217
+ execute_line_if_not_dry_run("git commit --all -m \"Update #{@spec_mode} to version #{bumped_version}\"")
218
+ execute_line_if_not_dry_run("git tag #{bumped_version}")
219
+ end
220
+
221
+ if @options[:push]
222
+ execute_line_if_not_dry_run('git push')
223
+ execute_line_if_not_dry_run('git push --tags')
224
+ end
225
+
226
+ if @options[:push]
227
+ if @spec_mode == POD_SPEC_TYPE
228
+ execute_line_if_not_dry_run("pod trunk push #{@spec_file}")
229
+ else
230
+ if @spec_mode == GEM_SPEC_TYPE
231
+ execute_line_if_not_dry_run("gem build #{@spec_file}")
232
+ gem = find_current_gem_file
233
+ execute_line_if_not_dry_run("gem push #{gem}")
234
+
235
+ if @options[:install]
236
+ execute_line_if_not_dry_run("gem install #{gem}")
237
+ end
238
+
239
+ execute_line_if_not_dry_run("rm #{gem}")
240
+ else
241
+ raise 'Unknown spec type'
242
+ end
243
+ end
244
+ end
245
+
246
+ if @options[:beta]
247
+ if @spec_mode == GEM_SPEC_TYPE
248
+ execute_line_if_not_dry_run("gem build #{@spec_file}")
249
+ gem = find_current_gem_file
250
+ execute_line_if_not_dry_run("gem install #{gem}")
251
+
252
+ execute_line_if_not_dry_run("sed -i \"\" \"s/#{bumped_version}/#{result}/\" README.md")
253
+ execute_line_if_not_dry_run("sed -i \"\" \"s/#{bumped_version}/#{result}/\" #{version_file}")
254
+ execute_line_if_not_dry_run("rm #{gem}")
255
+ else
256
+ raise 'Unknown spec type'
257
+ end
258
+ end
259
+
260
+
261
+ if @options[:changelog] && !@options[:beta]
262
+ if `which github_changelog_generator`.empty?
263
+ puts 'Cancelled bumping: no github_changelog_generator gem found'
264
+ else
265
+ execute_line_if_not_dry_run('github_changelog_generator')
266
+ execute_line_if_not_dry_run("git commit CHANGELOG.md -m \"Update changelog for version #{bumped_version}\"")
267
+ execute_line_if_not_dry_run('git push')
268
+ end
269
+ end
270
+
271
+ end
272
+
273
+ def find_version_file
274
+ version_file = nil
275
+ arr = `find . -name 'version.rb'`.split("\n")
276
+ case arr.count
277
+ when 0
278
+ puts "version.rb file found (#{arr[0]}) -> bump this file"
279
+ when 1
280
+ version_file = arr[0]
281
+ else
282
+ puts 'More than 1 version.rb file found. -> skip'
283
+ end
284
+
285
+ version_file ? version_file.sub('./', '') : @spec_file
286
+ end
287
+
288
+ def revert_last_bump
289
+ spec_file = @spec_file
290
+ result, _ = find_version_in_file(spec_file)
291
+
292
+ puts "DELETE tag #{result} and HARD reset HEAD~1?\nPress Y to continue:"
293
+ str = gets.chomp
294
+ if str != 'Y'
295
+ puts '-> exit'
296
+ exit
297
+ end
298
+ execute_line_if_not_dry_run("git tag -d #{result}")
299
+ execute_line_if_not_dry_run('git reset --hard HEAD~1')
300
+ execute_line_if_not_dry_run("git push --delete origin #{result}")
301
+ end
302
+ end
303
+ end
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+ require 'optparse'
3
+
4
+ module BumperPusher
5
+
6
+ class Parser
7
+
8
+ def initialize
9
+
10
+ end
11
+
12
+ def parse_options
13
+ options = {:dry_run => false, :bump_number => :patch, :changelog => true, :bump => true, :commit => true, :build => true, :push => true, :install => true}
14
+
15
+ OptionParser.new { |opts|
16
+ opts.banner = 'Usage: bumper_pusher [options]'
17
+
18
+ opts.on('-d', '--dry-run', 'Dry run') do |v|
19
+ options[:dry_run] = v
20
+ end
21
+ opts.on('-r', '--release', 'Bump release version') do |v|
22
+ options[:bump_number] = :major
23
+ end
24
+ opts.on('-m', '--minor', 'Bump minor version') do |v|
25
+ options[:bump_number] = :minor
26
+ end
27
+ opts.on('-p', '--patch', 'Bump patch version') do |v|
28
+ options[:bump_number] = :patch
29
+ end
30
+ opts.on('-r', '--revert', 'Revert last bump') do |v|
31
+ options[:revert] = v
32
+ end
33
+ opts.on('-i', '--[no-]install', 'Install this gem after push it. Default is true.') do |v|
34
+ options[:install] = v
35
+ end
36
+ opts.on('-b', '--beta', 'Build beta gem without commit and push') do |v|
37
+ options[:beta] = v
38
+ options[:bump] = v
39
+ options[:build] = v
40
+ options[:commit] = !v
41
+ options[:push] = !v
42
+
43
+ end
44
+ opts.on('-v', '--version', 'Print version number') do |v|
45
+ puts "Version: #{BumperPusher::VERSION}"
46
+ exit
47
+ end
48
+ opts.on('-c', '--[no]-changelog', 'Auto generation of changelog and pushing it origin. Default is true') do |v|
49
+ options[:changelog] = v
50
+ end
51
+ }.parse!
52
+ options
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,3 @@
1
+ module BumperPusher
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bumper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Petr Korolev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: colorize
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.7'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.7'
55
+ description: Bumping and pushing your ruby gems easy and fast!
56
+ email:
57
+ - sky4winder@gmail.com
58
+ executables:
59
+ - bumper_pusher
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".gitignore"
64
+ - CHANGELOG.md
65
+ - Gemfile
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - bin/bumper_pusher
70
+ - bumper_pusher.gemspec
71
+ - lib/bumper_pusher.rb
72
+ - lib/bumper_pusher/bumper.rb
73
+ - lib/bumper_pusher/parser.rb
74
+ - lib/bumper_pusher/version.rb
75
+ homepage: ''
76
+ licenses:
77
+ - MIT
78
+ metadata: {}
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 2.4.4
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: Easiest way to bump your specs
99
+ test_files: []