gem_polish 0.0.2 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 12cf40e16b83b5a99a5780f3abbc210e07d614fc
4
- data.tar.gz: 925342a186338c06f0d15260ab317c28b3237006
3
+ metadata.gz: 4c31a47f214bd4cbda2e76e059444aafa3adbb0d
4
+ data.tar.gz: 4cb8604e6284d299348292047c7338b121a089a1
5
5
  SHA512:
6
- metadata.gz: 92775a78eb91009b6924ce2aaa0be9f7984e32ec3346b39d8d92f2781bad8424244e0802ed2ad708d018748d4e93fe44e783d27e6f008631fb06a884ace2f1fb
7
- data.tar.gz: ca72d0ca25e930adbfd17bbf05858abb8577f40dcc3dc8afa92ed864881f9b85e2c7551f47142bb9b5c1d5d576b516833dbf2397cf3287c345dbdb96a9ff1544
6
+ metadata.gz: ba2e88c89011f2461ffb435f551d4933a9a6e5759dc7e9ddbe0cef7de50c97d186a2d366407206f20324e52509b301cec4d2680691339a68e4eef04606541a3a
7
+ data.tar.gz: 2f998d5155526a21c6aa83f51a48ebad07d88d000f9836a048ac32558b6d6f1ba595e0238f02d9c4eef78e95a8c038ab624f575d0245f3f9212c3812926677d2
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # GemPolish
2
2
 
3
- Further polishes your Bundler gem skeleton.
3
+ Command line tool to help with gem creation and maintenance. Is meant to be used in
4
+ addition to `bundler`'s `gem` command.
4
5
 
5
6
  ## Installation
6
7
 
@@ -8,9 +9,9 @@ Further polishes your Bundler gem skeleton.
8
9
 
9
10
  ## Usage
10
11
 
11
- Provides two executables to improve your Bundler gem skeleton.
12
+ Provides the executable `gem_polish`, which boasts the following subcommands:
12
13
 
13
- - polish_gem
14
+ - __polish__
14
15
 
15
16
  Is meant to be used inside the directory a newly created gem (`bundle gem GEM_NAME`)
16
17
  Available options:
@@ -32,27 +33,35 @@ for gem polishing. Check the `examples` folder for its formatting.
32
33
  Here's an example of the syntax:
33
34
  ```
34
35
  # inside a new gem called test
35
- polish_gem -nc -d 'a test gem' -t 1.9.3 jruby-1.7.8 -b travis coveralls
36
+ gem_polish polish -nc -d 'a test gem' -t 1.9.3 jruby-1.7.8 -b travis coveralls
36
37
  ```
37
38
  This would polish the test gem with coveralls support,
38
39
  circumventing the `.gem_polish.yml` file, adding a description,
39
40
  using two ruby versions for travis and adding two badges to the
40
41
  README file.
41
42
 
43
+ For ease of use you can issue `polish_gem` instead of `gem_polish
44
+ polish` directly on the command line.
42
45
 
43
- * create_gem
44
-
45
- Combines gem creation and polishing:
46
+ The additional executable `create_gem` combines gem creation and polishing:
46
47
  ```
47
48
  create_gem my_new_gem
48
49
  ```
49
- This will create the new gem `my_new_gem`. Arguments of `polish_gem` can be passed to override defaults or provide a description.
50
+ This will create the new gem `my_new_gem`. Arguments of `polish_gem` can
51
+ be passed to override defaults or to provide a description.
50
52
  ```
51
53
  create_gem my_new_gem -d 'Does nothing so far'
52
54
  ```
53
55
  At the moment he `bundle gem` command is invoked with `-t rspec` to
54
56
  provide the `rspec` test framework by default.
55
57
 
58
+ - __version__
59
+
60
+ Provides a version reader and a version bumper. Call `gem_polish
61
+ version` to learn about its usage. Also includes support to commit your
62
+ version bump directly through `git`.
63
+
64
+
56
65
  ## Contributing
57
66
 
58
67
  1. Fork it ( http://github.com/LFDM/gem_polish/fork )
data/bin/gem_polish ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib = File.expand_path('../../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'gem_polish'
7
+ GemPolish::CLI.start
data/gem_polish.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = GemPolish::VERSION
9
9
  spec.authors = ["LFDM"]
10
10
  spec.email = ["1986gh@gmail.com"]
11
- spec.summary = %q{Further polishes your bundler gem skeleton}
12
- spec.description = %q{Adds code coverage tools, badges in README, more ruby versions in travis etc.}
11
+ spec.summary = %q{Command line tool to help with gem creation and maintenance}
12
+ spec.description = %q{Adds code coverage tools, badges in README, help with travis, gem versioning etc.}
13
13
  spec.homepage = ""
14
14
  spec.license = "MIT"
15
15
 
@@ -0,0 +1,78 @@
1
+ module GemPolish
2
+ class CLI::Versioner
3
+ def initialize(thor)
4
+ @thor = thor
5
+ @version = extract_from_version_file
6
+ end
7
+
8
+ def extract_from_version_file
9
+ file_contents.match(regexp)
10
+ numbers = $1.split('.').map(&:to_i)
11
+ Hash[%w{ major minor revision}.zip(numbers)]
12
+ end
13
+
14
+ def to_version(hsh = @version)
15
+ hsh.values.join('.')
16
+ end
17
+
18
+ def substitute_version(v)
19
+ version = v.kind_of?(String) ? v : to_version(v)
20
+ @thor.gsub_file(file, regexp, insertion(version))
21
+ @thor.say_status(:bumped_version, "#{to_version} => #{version}")
22
+ end
23
+
24
+ def update_version(bumper)
25
+ set_back = false
26
+ @version.each_with_object({}) do |(level, number), h|
27
+ nl = if set_back
28
+ 0
29
+ else
30
+ if level == bumper
31
+ set_back = true
32
+ number + 1
33
+ else
34
+ number
35
+ end
36
+ end
37
+ h[level] = nl
38
+ end
39
+ end
40
+
41
+ def commit_version_bump(message)
42
+ if staged_files_present?
43
+ raise StandardError.new, "Commit aborted: Staged files present"
44
+ else
45
+ `git add #{file}`
46
+ `git commit -m "#{message}"`
47
+ sha = `git rev-parse --short HEAD`.chomp
48
+ @thor.say_status(:commited, %{#{sha} "#{message}"})
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def gem_name
55
+ File.basename(Dir.pwd)
56
+ end
57
+
58
+ def file_contents
59
+ File.read(file)
60
+ end
61
+
62
+ def file
63
+ "lib/#{gem_name}/version.rb"
64
+ end
65
+
66
+ def regexp
67
+ /VERSION = "(.*?)"/
68
+ end
69
+
70
+ def insertion(version)
71
+ %{VERSION = "#{version}"}
72
+ end
73
+
74
+ def staged_files_present?
75
+ system('git status --porcelain | grep -o "^\w" >/dev/null')
76
+ end
77
+ end
78
+ end
@@ -3,16 +3,25 @@ require 'yaml'
3
3
 
4
4
  module GemPolish
5
5
  class CLI < Thor
6
+
7
+ require 'gem_polish/cli/versioner'
6
8
  include Thor::Actions
7
9
 
8
- desc "polish", "polishes your gem"
9
- method_option :badges, type: :array, aliases: '-b'
10
- method_option :git_user, type: :string, aliases: '-g'
11
- method_option :description, aliases: '-d'
12
- method_option :coverage, aliases: '-c'
13
- method_option :rspec_conf, aliases: '-r'
14
- method_option :travis, type: :array, aliases: '-t'
15
- method_option :no_default, aliases: '-n'
10
+ desc "polish", "Polishes your gem skeleton"
11
+ method_option :badges, type: :array, aliases: '-b',
12
+ desc: 'Adds badges to your README. Takes one or more of: badge_fury, gemnasium, travis, coveralls and code_climate'
13
+ method_option :git_user, type: :string, aliases: '-g',
14
+ desc: 'Git user to be used for badge links. Defaults to your .gitconfig information'
15
+ method_option :description, aliases: '-d',
16
+ desc: 'Adds a descriptopn to the gemspec and the README'
17
+ method_option :coverage, aliases: '-c',
18
+ desc: 'Adds coveralls coverage'
19
+ method_option :rspec_conf, aliases: '-r',
20
+ desc: 'Adds additional rspec configuration'
21
+ method_option :travis, type: :array, aliases: '-t',
22
+ desc: 'Adds ruby versions to travis'
23
+ method_option :no_default, aliases: '-n',
24
+ desc: 'Bypasses ~/.gem_polish.yml. Defaults to false'
16
25
  def polish(name = '.')
17
26
  inside name do
18
27
  default = options.has_key?('no_default') ? {} : def_conf
@@ -30,6 +39,34 @@ module GemPolish
30
39
  end
31
40
  end
32
41
 
42
+ desc 'version OPTION', 'Reads and writes the version file of your gem'
43
+ method_option :read, type: :boolean, aliases: '-r',
44
+ desc: 'Print current version number'
45
+ method_option :bump, aliases: '-b', lazy_default: 'revision',
46
+ desc: 'Bumps the version number (revision [default], minor or major)'
47
+ method_option :version, aliases: '-v',
48
+ desc: 'Specify the new version number directly'
49
+ method_option :commit, aliases: '-c', lazy_default: 'Bump version',
50
+ desc: 'Creates a git commit of a bump, takes a message, defaults to "Bump version"'
51
+ def version(name = '.')
52
+ inside name do
53
+ return help(:version) if options.empty?
54
+ v = Versioner.new(self)
55
+
56
+ if specified_version = options[:version]
57
+ v.substitute_version(specified_version)
58
+ elsif options[:read]
59
+ puts v.to_version
60
+ elsif bump = options[:bump]
61
+ updated = v.update_version(bump)
62
+ v.substitute_version(updated)
63
+ if message = options[:commit]
64
+ v.commit_version_bump(message)
65
+ end
66
+ end
67
+ end
68
+ end
69
+
33
70
  no_commands do
34
71
  def parse_opt(opt, opts, default)
35
72
  opts[opt] || default[opt]
@@ -1,3 +1,3 @@
1
1
  module GemPolish
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ describe GemPolish::CLI::Versioner do
4
+ let(:versioner) { GemPolish::CLI::Versioner.new('') }
5
+ let(:version_file) do
6
+ <<-FILE
7
+ module Dummy
8
+ VERSION = "2.1.3"
9
+ end
10
+ FILE
11
+ end
12
+ let(:version_hash) do
13
+ {
14
+ 'major' => 2,
15
+ 'minor' => 1,
16
+ 'revision' => 3,
17
+ }
18
+ end
19
+
20
+ describe "#extract_from_version_file" do
21
+ it "returns current version as a hash" do
22
+ versioner.stub(:file_contents) { version_file }
23
+ versioner.extract_from_version_file.should == version_hash
24
+ end
25
+ end
26
+
27
+ describe "#to_version" do
28
+ it "converts a given version hash to a string" do
29
+ versioner.to_version(version_hash).should == "2.1.3"
30
+ end
31
+
32
+ it "returns current version when no version hash is given" do
33
+ versioner.stub(:file_contents) { version_file }
34
+ versioner.instance_variable_set(:@version, versioner.extract_from_version_file)
35
+ versioner.to_version.should == "2.1.3"
36
+ end
37
+ end
38
+
39
+ describe "#update_version" do
40
+ before(:each) do
41
+ versioner.stub(:file_contents) { version_file }
42
+ versioner.instance_variable_set(:@version, versioner.extract_from_version_file)
43
+ end
44
+
45
+ describe "#returns an updated version hash for the given bumper" do
46
+ it "bumps revision" do
47
+ res = {
48
+ 'major' => 2,
49
+ 'minor' => 1,
50
+ 'revision' => 4,
51
+ }
52
+ versioner.update_version('revision').should == res
53
+ end
54
+
55
+ it "bumps minor version" do
56
+ res = {
57
+ 'major' => 2,
58
+ 'minor' => 2,
59
+ 'revision' => 0,
60
+ }
61
+ versioner.update_version('minor').should == res
62
+ end
63
+
64
+ it "bumps major version" do
65
+ res = {
66
+ 'major' => 3,
67
+ 'minor' => 0,
68
+ 'revision' => 0,
69
+ }
70
+ versioner.update_version('major').should == res
71
+ end
72
+ end
73
+ end
74
+
75
+ describe "#commit_version_bump" do
76
+ it "raises an error when staged files are present" do
77
+ versioner.stub(:staged_files_present?) { true }
78
+ expect { versioner.commit_version_bump('') }.to raise_error StandardError, /aborted/
79
+ end
80
+ end
81
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gem_polish
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - LFDM
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-23 00:00:00.000000000 Z
11
+ date: 2014-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,12 +66,13 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- description: Adds code coverage tools, badges in README, more ruby versions in travis
69
+ description: Adds code coverage tools, badges in README, help with travis, gem versioning
70
70
  etc.
71
71
  email:
72
72
  - 1986gh@gmail.com
73
73
  executables:
74
74
  - create_gem
75
+ - gem_polish
75
76
  - polish_gem
76
77
  extensions: []
77
78
  extra_rdoc_files: []
@@ -84,16 +85,19 @@ files:
84
85
  - README.md
85
86
  - Rakefile
86
87
  - bin/create_gem
88
+ - bin/gem_polish
87
89
  - bin/polish_gem
88
90
  - examples/.gem_polish.yml
89
91
  - gem_polish.gemspec
90
92
  - gem_polish.thor
91
93
  - lib/gem_polish.rb
92
94
  - lib/gem_polish/cli.rb
95
+ - lib/gem_polish/cli/versioner.rb
93
96
  - lib/gem_polish/version.rb
94
97
  - lib/templates/coveralls.template
95
98
  - lib/templates/rspec_configuration.template
96
99
  - spec/gem_polish_spec.rb
100
+ - spec/lib/gem_polish/cli/versioner_spec.rb
97
101
  - spec/spec_helper.rb
98
102
  homepage: ''
99
103
  licenses:
@@ -118,7 +122,8 @@ rubyforge_project:
118
122
  rubygems_version: 2.2.0
119
123
  signing_key:
120
124
  specification_version: 4
121
- summary: Further polishes your bundler gem skeleton
125
+ summary: Command line tool to help with gem creation and maintenance
122
126
  test_files:
123
127
  - spec/gem_polish_spec.rb
128
+ - spec/lib/gem_polish/cli/versioner_spec.rb
124
129
  - spec/spec_helper.rb