gem_polish 0.0.3 → 0.0.4

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: 4c31a47f214bd4cbda2e76e059444aafa3adbb0d
4
- data.tar.gz: 4cb8604e6284d299348292047c7338b121a089a1
3
+ metadata.gz: ac3062847f504d97ef2f042caeb28d8260568057
4
+ data.tar.gz: d715b9cbc2c326f9c89ff81007deb3a3a21d064e
5
5
  SHA512:
6
- metadata.gz: ba2e88c89011f2461ffb435f551d4933a9a6e5759dc7e9ddbe0cef7de50c97d186a2d366407206f20324e52509b301cec4d2680691339a68e4eef04606541a3a
7
- data.tar.gz: 2f998d5155526a21c6aa83f51a48ebad07d88d000f9836a048ac32558b6d6f1ba595e0238f02d9c4eef78e95a8c038ab624f575d0245f3f9212c3812926677d2
6
+ metadata.gz: 9053b78b5885b27d678fbbd900f544d81f822dd2950418559b1e2d99471757a74893eb7c322cbd0c193185210989b7c221a169ddcfdc7f6eb8f2a1daffe3ba8f
7
+ data.tar.gz: 759dfe1c8200cbee3bf328ba969832450589cf79fb1a1e377b8067c3fa9938060b8cb3bb08a5a096972118cca0ce5c383a96bf126f9e17808a6103ea77d7070f
@@ -0,0 +1,166 @@
1
+ require 'yaml'
2
+
3
+ module GemPolish
4
+ class CLI::Polisher
5
+ def initialize(options, thor)
6
+ @options = options
7
+ @thor = thor
8
+ @defaults = set_defaults
9
+ end
10
+
11
+ def set_defaults
12
+ defaults_disabled? ? {} : read_from_conf_file
13
+ end
14
+
15
+ def insert_description
16
+ if description
17
+ @thor.gsub_file(gemspec, /TODO:.*summary.*(?=})/, description)
18
+ @thor.gsub_file(readme, /TODO:.*gem description/, description)
19
+ end
20
+ end
21
+
22
+ def insert_badges
23
+ if badges
24
+ @thor.insert_into_file(readme, after: /^#\s.*\n/, force: false) { badge_links }
25
+ end
26
+ end
27
+
28
+ def insert_coveralls
29
+ if parse_opt(:coveralls)
30
+ @thor.prepend_file(spec_helper, template(:coveralls) + "\n")
31
+ add_dev_dependency('simplecov', '0.7')
32
+ @thor.append_file(gemfile, %{gem 'coveralls', require: false})
33
+ end
34
+ end
35
+
36
+ def insert_rspec_conf
37
+ if parse_opt(:rspec_conf)
38
+ @thor.append_file(spec_helper, "\n" + template(:rspec_configuration))
39
+ end
40
+ end
41
+
42
+ def insert_travis
43
+ if t = parse_opt(:travis)
44
+ @thor.say_status :rewrite, relative_destination(travis)
45
+ File.write(travis, YAML.dump(travis_content(t)))
46
+ end
47
+ end
48
+
49
+ def git_user
50
+ user = @options[:git_user] || read_from_git_config
51
+ user.empty? ? "TODO: Write your name" : user
52
+ end
53
+
54
+ private
55
+
56
+ def description
57
+ @description ||= @options[:description]
58
+ end
59
+
60
+ BADGE_NAMES = {
61
+ 'badge_fury' => 'Version',
62
+ 'gemnasium' => 'Dependencies',
63
+ 'travis' => 'Build Status',
64
+ 'coveralls' => 'Coverage',
65
+ 'code_climate' => 'Code Climate'
66
+ }
67
+
68
+ def badges
69
+ @badges ||= parse_opt(:badges)
70
+ end
71
+
72
+ def badge_links
73
+ "\n#{badges.map { |badge| badge_link(badge) }.join("\n")}\n"
74
+ end
75
+
76
+ def badge_link(badge)
77
+ path = "http://allthebadges.io/#{git_user}/#{gem_name}/#{badge}"
78
+ "[![#{BADGE_NAMES[badge]}](#{path}.png)](#{path})"
79
+ end
80
+
81
+ def read_from_git_config
82
+ # can it return nil?
83
+ `git config user.name`.to_s.chomp
84
+ end
85
+
86
+ def parse_opt(opt)
87
+ @options[opt] || @defaults[opt]
88
+ end
89
+
90
+ def read_from_conf_file
91
+ conf_file_present? ? load_conf_file : {}
92
+ end
93
+
94
+ def defaults_disabled?
95
+ @options[:no_default]
96
+ end
97
+
98
+ def conf_file_present?
99
+ File.exist?(conf_file)
100
+ end
101
+
102
+ def load_conf_file
103
+ YAML.load(File.read(conf_file)).each_with_object({}) do |(k, v), h|
104
+ h[k.to_sym] = v
105
+ end
106
+ end
107
+
108
+ def add_dev_dependency(gem, version = nil)
109
+ total_size = File.size(gemspec)
110
+ pos_before_end = total_size - 4
111
+ insertion = %{ spec.add_development_dependency "#{gem}"}
112
+ return if File.read(gemspec).match(/#{insertion}/)
113
+ insertion << %{, "~> #{version}"} if version
114
+
115
+ @thor.say_status :append, relative_destination(gemspec)
116
+ File.open(gemspec, 'r+') do |file|
117
+ file.seek(pos_before_end, IO::SEEK_SET)
118
+ file.puts(insertion)
119
+ file.puts('end')
120
+ end
121
+ end
122
+
123
+ def travis_content(opts)
124
+ c = { 'language' => 'ruby'}
125
+ c.merge((opts.is_a?(Hash) ? opts : { 'rvm' => opts }))
126
+ end
127
+
128
+ def relative_destination(dest)
129
+ d = File.expand_path(dest, @thor.destination_root)
130
+ @thor.relative_to_original_destination_root(d)
131
+ end
132
+
133
+ TEMPLATE_DIR = File.expand_path('../../../templates', __FILE__)
134
+ def template(name)
135
+ File.read("#{TEMPLATE_DIR}/#{name}.template")
136
+ end
137
+
138
+ def conf_file
139
+ "#{ENV['HOME']}/.gem_polish.yml"
140
+ end
141
+
142
+ def gem_name
143
+ File.basename(Dir.pwd)
144
+ end
145
+
146
+ def travis
147
+ ".travis.yml"
148
+ end
149
+
150
+ def spec_helper
151
+ "spec/spec_helper.rb"
152
+ end
153
+
154
+ def gemspec
155
+ "#{gem_name}.gemspec"
156
+ end
157
+
158
+ def gemfile
159
+ "Gemfile"
160
+ end
161
+
162
+ def readme
163
+ "README.md"
164
+ end
165
+ end
166
+ end
@@ -4,6 +4,7 @@ require 'yaml'
4
4
  module GemPolish
5
5
  class CLI < Thor
6
6
 
7
+ require 'gem_polish/cli/polisher'
7
8
  require 'gem_polish/cli/versioner'
8
9
  include Thor::Actions
9
10
 
@@ -24,18 +25,12 @@ module GemPolish
24
25
  desc: 'Bypasses ~/.gem_polish.yml. Defaults to false'
25
26
  def polish(name = '.')
26
27
  inside name do
27
- default = options.has_key?('no_default') ? {} : def_conf
28
-
29
- description = options[:description]
30
- git_user_name = extract_git_user(options)
31
- badges = parse_opt(:badges, options, default)
32
- travis_opts = parse_opt(:travis, options, default)
33
-
34
- insert_badges(badges, git_user_name, gem_name) if badges
35
- insert_description(description) if description
36
- insert_coveralls if parse_opt(:coverage, options, default)
37
- insert_rspec_conf if parse_opt(:rspec_conf, options, default)
38
- insert_travis(travis_opts) if travis_opts
28
+ p = Polisher.new(options, self)
29
+ p.insert_description
30
+ p.insert_badges
31
+ p.insert_coveralls
32
+ p.insert_rspec_conf
33
+ p.insert_travis
39
34
  end
40
35
  end
41
36
 
@@ -66,116 +61,6 @@ module GemPolish
66
61
  end
67
62
  end
68
63
  end
69
-
70
- no_commands do
71
- def parse_opt(opt, opts, default)
72
- opts[opt] || default[opt]
73
- end
74
-
75
- def extract_git_user(options)
76
- user = options[:git_user] || `git config user.name`.chomp
77
- user.empty? ? "TODO: Write your name" : user
78
- end
79
-
80
- def insert_description(description)
81
- gsub_file(gemspec, /TODO:.*summary.*(?=})/, description)
82
- gsub_file(readme, /TODO:.*gem description/, description)
83
- end
84
-
85
- BADGE_NAMES = {
86
- 'badge_fury' => 'Version',
87
- 'gemnasium' => 'Dependencies',
88
- 'travis' => 'Build Status',
89
- 'coveralls' => 'Coverage',
90
- 'code_climate' => 'Code Climate'
91
- }
92
-
93
- def insert_badges(badges, user, gem)
94
- insert_into_file(readme, after: /^#\s.*\n/, force: false) do
95
- "\n#{badges.map { |badge| badge_link(badge, user, gem) }.join("\n")}\n"
96
- end
97
- end
98
-
99
- def badge_link(badge, user, gem)
100
- path = "http://allthebadges.io/#{user}/#{gem}/#{badge}"
101
- "[![#{BADGE_NAMES[badge]}](#{path}.png)](#{path})"
102
- end
103
-
104
- def insert_coveralls
105
- prepend_file(spec_helper, read_template(:coveralls) + "\n")
106
- add_dev_dependency('simplecov', '0.7')
107
- append_file(gemfile, %{gem 'coveralls', require: false})
108
- end
109
-
110
- def insert_rspec_conf
111
- append_file(spec_helper, "\n" + read_template(:rspec_configuration))
112
- end
113
-
114
- def insert_travis(opts)
115
- say_status :rewrite, relative_destination(travis)
116
- File.write(travis, YAML.dump(travis_content(opts)))
117
- end
118
-
119
- def travis_content(opts)
120
- c = { 'language' => 'ruby'}
121
- c.merge((opts.is_a?(Hash) ? opts : { 'rvm' => opts }))
122
- end
123
-
124
- def relative_destination(dest)
125
- d = File.expand_path(dest, destination_root)
126
- relative_to_original_destination_root(d)
127
- end
128
-
129
- def def_conf
130
- conf_file = "#{ENV['HOME']}/.gem_polish.yml"
131
- conf = File.exists?(conf_file) ? YAML.load(File.read(conf_file)) : {}
132
- conf.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
133
- end
134
-
135
- def gem_name
136
- File.basename(Dir.pwd)
137
- end
138
-
139
- def travis
140
- ".travis.yml"
141
- end
142
-
143
- def spec_helper
144
- "spec/spec_helper.rb"
145
- end
146
-
147
- def gemspec
148
- "#{gem_name}.gemspec"
149
- end
150
-
151
- def gemfile
152
- "Gemfile"
153
- end
154
-
155
- def readme
156
- "README.md"
157
- end
158
-
159
- TEMPLATE_DIR = File.expand_path('../../templates', __FILE__)
160
- def read_template(name)
161
- File.read("#{TEMPLATE_DIR}/#{name}.template")
162
- end
163
-
164
- def add_dev_dependency(gem, version = nil)
165
- total_size = File.size(gemspec)
166
- pos_before_end = total_size - 4
167
- insertion = %{ spec.add_development_dependency "#{gem}"}
168
- return if File.read(gemspec).match(/#{insertion}/)
169
- insertion << %{, "~> #{version}"} if version
170
-
171
- say_status :append, relative_destination(gemspec)
172
- File.open(gemspec, 'r+') do |file|
173
- file.seek(pos_before_end, IO::SEEK_SET)
174
- file.puts(insertion)
175
- file.puts('end')
176
- end
177
- end
178
- end
179
64
  end
180
65
  end
181
66
 
@@ -1,3 +1,3 @@
1
1
  module GemPolish
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+
3
+ describe GemPolish::CLI::Polisher do
4
+ let(:thor) do
5
+ double(
6
+ gsub_file: true, insert_into_file: true, say_status: true,
7
+ append_file: true, prepend_file: true
8
+ )
9
+ end
10
+
11
+ class GemPolish::CLI::Polisher
12
+ # we need to override this, otherwise it really reads
13
+ # the conf file
14
+ def load_conf_file
15
+ {}
16
+ end
17
+ end
18
+
19
+ def new_polisher(options)
20
+ GemPolish::CLI::Polisher.new(options, thor)
21
+ # need to stub this, otherwise it really reads from the conf file
22
+ end
23
+
24
+ describe "#set_defaults" do
25
+ it "returns empty if --no-default was passed" do
26
+ polisher = new_polisher(no_default: true)
27
+ polisher.set_defaults.should be_empty
28
+ end
29
+
30
+ it "returns empty when no conf file is present" do
31
+ polisher = new_polisher({})
32
+ polisher.stub(conf_file_present?: false)
33
+ polisher.set_defaults.should be_empty
34
+ end
35
+
36
+ it "loads conf file when present" do
37
+ polisher = new_polisher({})
38
+ conf_file = { a: 1}
39
+ polisher.stub(load_conf_file: conf_file)
40
+ polisher.set_defaults.should == conf_file
41
+ end
42
+ end
43
+
44
+ describe "#insert_description" do
45
+ it "does nothing when no desciption was passed" do
46
+ polisher = new_polisher({})
47
+ thor.should_not receive(:gsub_file)
48
+ polisher.insert_description.should be_nil
49
+ end
50
+
51
+ it "inserts description in gemspec and README" do
52
+ polisher = new_polisher(description: 'test')
53
+ thor.should receive(:gsub_file).twice
54
+ polisher.insert_description
55
+ end
56
+ end
57
+
58
+ describe "#git_user" do
59
+ it "returns the provided git user name" do
60
+ polisher = new_polisher(git_user: 'Tester')
61
+ polisher.git_user.should == 'Tester'
62
+ end
63
+
64
+ it "tries to read from git_config when nothing was provided" do
65
+ polisher = new_polisher({})
66
+ polisher.stub(read_from_git_config: 'Gitter')
67
+ polisher.git_user.should == 'Gitter'
68
+ end
69
+
70
+ it "returns a todo when there is no user in git config" do
71
+ polisher = new_polisher({})
72
+ polisher.stub(read_from_git_config: '')
73
+ polisher.git_user.should =~ /TODO/
74
+ end
75
+ end
76
+
77
+ describe "#insert_badges" do
78
+ it "does nothing when no badges were passed" do
79
+ polisher = new_polisher({})
80
+ thor.should_not receive(:insert_into_file)
81
+ polisher.insert_badges
82
+ end
83
+
84
+ it "inserts badges when badges are present" do
85
+ polisher = new_polisher(badges: ['travis'])
86
+ thor.should receive(:insert_into_file)
87
+ polisher.insert_badges
88
+ end
89
+ end
90
+ end
@@ -42,7 +42,7 @@ describe GemPolish::CLI::Versioner do
42
42
  versioner.instance_variable_set(:@version, versioner.extract_from_version_file)
43
43
  end
44
44
 
45
- describe "#returns an updated version hash for the given bumper" do
45
+ describe "returns an updated version hash for the given bumper" do
46
46
  it "bumps revision" do
47
47
  res = {
48
48
  'major' => 2,
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.3
4
+ version: 0.0.4
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-28 00:00:00.000000000 Z
11
+ date: 2014-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -92,11 +92,13 @@ files:
92
92
  - gem_polish.thor
93
93
  - lib/gem_polish.rb
94
94
  - lib/gem_polish/cli.rb
95
+ - lib/gem_polish/cli/polisher.rb
95
96
  - lib/gem_polish/cli/versioner.rb
96
97
  - lib/gem_polish/version.rb
97
98
  - lib/templates/coveralls.template
98
99
  - lib/templates/rspec_configuration.template
99
100
  - spec/gem_polish_spec.rb
101
+ - spec/lib/gem_polish/cli/polisher_spec.rb
100
102
  - spec/lib/gem_polish/cli/versioner_spec.rb
101
103
  - spec/spec_helper.rb
102
104
  homepage: ''
@@ -125,5 +127,6 @@ specification_version: 4
125
127
  summary: Command line tool to help with gem creation and maintenance
126
128
  test_files:
127
129
  - spec/gem_polish_spec.rb
130
+ - spec/lib/gem_polish/cli/polisher_spec.rb
128
131
  - spec/lib/gem_polish/cli/versioner_spec.rb
129
132
  - spec/spec_helper.rb