gem_polish 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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