technicalpickles-jeweler 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -17,6 +17,7 @@ begin
17
17
  s.authors = ["Josh Nichols", "Dan Croak"]
18
18
  s.bindir = 'bin'
19
19
  s.files = FileList["[A-Z]*", "{bin,generators,lib,test}/**/*"]
20
+ s.add_dependency 'schacon-git'
20
21
  end
21
22
  rescue LoadError
22
23
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- patch: 2
2
+ patch: 3
3
3
  major: 0
4
4
  minor: 3
@@ -2,13 +2,29 @@ require 'git'
2
2
  require 'erb'
3
3
 
4
4
  class Jeweler
5
+ class NoGitUserName < StandardError
6
+ end
7
+ class NoGitUserEmail < StandardError
8
+ end
9
+
10
+ class FileInTheWay < StandardError
11
+ end
12
+
13
+ class NoRemoteGiven < StandardError
14
+ end
15
+
5
16
  class Generator
6
17
  attr_accessor :target_dir, :user_name, :user_email, :github_repo_name, :github_remote, :github_url, :github_username, :lib_dir
7
18
 
8
19
  def initialize(github_remote, dir = nil)
9
-
20
+ if github_remote.nil?
21
+ raise NoRemoteGiven
22
+ end
23
+
10
24
  self.github_remote = github_remote
25
+
11
26
  check_user_git_config()
27
+
12
28
  determine_github_stuff()
13
29
 
14
30
  self.target_dir = dir || self.github_repo_name
@@ -16,23 +32,22 @@ class Jeweler
16
32
  end
17
33
 
18
34
  def check_user_git_config
19
- lib = Git::Lib.new(nil, nil)
20
- config = lib.parse_config '~/.gitconfig'
35
+ config = read_git_config
21
36
  unless config.has_key? 'user.name'
22
- puts %Q{No user.name set in ~/.gitconfig. Set it with: git config --global user.name 'Your Name Here'}
23
- exit 1
37
+ raise NoGitUserName, %Q{No user.name set in ~/.gitconfig. Set it with: git config --global user.name 'Your Name Here'}
24
38
  end
25
39
  unless config.has_key? 'user.email'
26
- puts %Q{No user.name set in ~/.gitconfig. Set it with: git config --global user.name 'Your Name Here'}
27
- exit 1
40
+ raise NoGitUserEmail, %Q{No user.name set in ~/.gitconfig. Set it with: git config --global user.name 'Your Name Here'}
28
41
  end
29
- @user_name = config['user.name'].gsub('"', '')
30
- @user_email = config['user.email'].gsub('"', '')
42
+
43
+ @user_name = config['user.name']
44
+ @user_email = config['user.email']
31
45
  end
32
46
 
33
47
  def determine_github_stuff
34
- self.github_url = self.github_remote.gsub(/^git@github\.com:/, 'http://github.com/').gsub(/\.git$/, '/tree')
48
+ self.github_url = self.github_remote.gsub(/^git@github\.com:/, 'http://github.com/').gsub(/\.git$/, '')
35
49
  self.github_repo_name = self.github_remote.match(/\/(.*)\.git$/)[1]
50
+ self.github_username = self.github_remote.match(%r{git@github\.com:(.*)/})[1]
36
51
  end
37
52
 
38
53
  def run
@@ -50,9 +65,11 @@ class Jeweler
50
65
 
51
66
  license = template('LICENSE')
52
67
  File.open(File.join(target_dir, 'LICENSE'), 'w') {|file| file.write(license.result(binding))}
68
+
69
+ readme = template('README')
70
+ File.open(File.join(target_dir, 'README'), 'w') {|file| file.write(readme.result(binding))}
53
71
 
54
72
  FileUtils.touch File.join(lib_dir, "#{github_repo_name}.rb")
55
-
56
73
  end
57
74
 
58
75
  def template(file)
@@ -75,5 +92,11 @@ class Jeweler
75
92
  end
76
93
  Dir.chdir(saved_pwd)
77
94
  end
95
+
96
+ protected
97
+ def read_git_config
98
+ lib = Git::Lib.new(nil, nil)
99
+ config = lib.parse_config '~/.gitconfig'
100
+ end
78
101
  end
79
102
  end
@@ -0,0 +1,185 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class JewelerTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @github_remote = 'git@github.com:technicalpickles/the-perfect-gem.git'
7
+ end
8
+
9
+ context "given a nil github remote" do
10
+ setup do
11
+ @block = lambda { Jeweler::Generator.new(nil) }
12
+ end
13
+
14
+ should "raise an error" do
15
+ assert_raise Jeweler::NoRemoteGiven do
16
+ @block.call
17
+ end
18
+ end
19
+ end
20
+
21
+ context "without git user's name set" do
22
+ setup do
23
+ Jeweler::Generator.any_instance.stubs(:read_git_config).returns({'user.email' => 'bar@example.com'})
24
+ end
25
+
26
+ context "instantiating new generator" do
27
+ setup do
28
+ @block = lambda { Jeweler::Generator.new('git@github.com:technicalpickles/the-perfect-gem.git')}
29
+ end
30
+
31
+ should "raise no git user name exception" do
32
+ assert_raise Jeweler::NoGitUserName do
33
+ @block.call
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ context "without git user's email set" do
40
+ setup do
41
+ Jeweler::Generator.any_instance.stubs(:read_git_config).returns({'user.name' => 'foo'})
42
+ end
43
+
44
+ context "instantiating new generator" do
45
+ setup do
46
+ @block = lambda { Jeweler::Generator.new('git@github.com:technicalpickles/the-perfect-gem.git')}
47
+ end
48
+
49
+ should "raise no git user name exception" do
50
+ assert_raise Jeweler::NoGitUserEmail do
51
+ @block.call
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ context "with valid git user configuration" do
58
+ setup do
59
+ Jeweler::Generator.any_instance.stubs(:read_git_config).returns({'user.name' => 'foo', 'user.email' => 'bar@example.com'})
60
+ end
61
+
62
+ context "for a repository 'git@github.com:technicalpickles/the-perfect-gem.git'" do
63
+ setup do
64
+ @generator = Jeweler::Generator.new('git@github.com:technicalpickles/the-perfect-gem.git')
65
+ end
66
+
67
+ should "assign 'foo' to user's name" do
68
+ assert_equal 'foo', @generator.user_name
69
+ end
70
+
71
+ should "assign 'bar@example.com to user's email" do
72
+ assert_equal 'bar@example.com', @generator.user_email
73
+ end
74
+
75
+ should "assign github remote" do
76
+ assert_equal 'git@github.com:technicalpickles/the-perfect-gem.git', @generator.github_remote
77
+ end
78
+
79
+ should "determine github username as technicalpickles" do
80
+ assert_equal 'technicalpickles', @generator.github_username
81
+ end
82
+
83
+ should "determine github repository name as the-perfect-gem" do
84
+ assert_equal 'the-perfect-gem', @generator.github_repo_name
85
+ end
86
+
87
+ should "determine github url as http://github.com/technicalpickles/the-perfect-gem" do
88
+ assert_equal 'http://github.com/technicalpickles/the-perfect-gem', @generator.github_url
89
+ end
90
+
91
+ should "determine target directory as the same as the github repository name" do
92
+ assert_equal @generator.github_repo_name, @generator.target_dir
93
+ end
94
+
95
+ should "determine lib directory as being inside the target directory" do
96
+ assert_equal File.join(@generator.target_dir, 'lib'), @generator.lib_dir
97
+ end
98
+ end
99
+
100
+
101
+ context "and cleaned out tmp directory" do
102
+ setup do
103
+ @tmp_dir = File.join(File.dirname(__FILE__), 'tmp')
104
+ FileUtils.rm_rf(@tmp_dir)
105
+
106
+ assert ! File.exists?(@tmp_dir)
107
+ end
108
+
109
+ teardown do
110
+ FileUtils.rm_rf(@tmp_dir)
111
+ end
112
+
113
+ context "for a repository 'git@github.com:technicalpickles/the-perfect-gem.git' and working directory 'tmp'" do
114
+ setup do
115
+ @generator = Jeweler::Generator.new('git@github.com:technicalpickles/the-perfect-gem.git', @tmp_dir)
116
+ end
117
+
118
+ should "use tmp for target directory" do
119
+ assert_equal @tmp_dir, @generator.target_dir
120
+ end
121
+
122
+ context "running" do
123
+ setup do
124
+ @generator.run
125
+ end
126
+
127
+ should 'create target directory' do
128
+ assert File.exists?(@tmp_dir)
129
+ end
130
+
131
+ should "create lib directory" do
132
+ assert File.exists?(File.join(@tmp_dir, 'lib'))
133
+ assert File.directory?(File.join(@tmp_dir, 'lib'))
134
+ end
135
+
136
+ should "create LICENSE" do
137
+ assert File.exists?(File.join(@tmp_dir, 'LICENSE'))
138
+ assert File.file?(File.join(@tmp_dir, 'LICENSE'))
139
+ end
140
+
141
+ should "create README" do
142
+ assert File.exists?(File.join(@tmp_dir, 'README'))
143
+ assert File.file?(File.join(@tmp_dir, 'README'))
144
+ end
145
+
146
+ should "create lib/the-perfect-gem.rb" do
147
+ assert File.exists?(File.join(@tmp_dir, 'lib', 'the-perfect-gem.rb'))
148
+ assert File.file?(File.join(@tmp_dir, 'lib', 'the-perfect-gem.rb'))
149
+ end
150
+
151
+ context "LICENSE" do
152
+ setup do
153
+ @content = File.read((File.join(@tmp_dir, 'LICENSE')))
154
+ end
155
+
156
+ should "include copyright for this year with user's name" do
157
+ assert_match 'Copyright (c) 2008 foo', @content
158
+ end
159
+ end
160
+
161
+ context "Rakefile" do
162
+ setup do
163
+ @content = File.read((File.join(@tmp_dir, 'Rakefile')))
164
+ end
165
+
166
+ should "include repo's name as the gem's name" do
167
+ assert_match 's.name = "the-perfect-gem"', @content
168
+ end
169
+
170
+ should "include the user's email as the gem's email" do
171
+ assert_match 's.email = "bar@example.com"', @content
172
+ end
173
+
174
+ should "include the github repo's url as the gem's url" do
175
+ assert_match 's.homepage = "http://github.com/technicalpickles/the-perfect-gem"', @content
176
+ end
177
+ end
178
+
179
+ end
180
+
181
+ end
182
+ end
183
+ end
184
+
185
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: technicalpickles-jeweler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Nichols
@@ -10,10 +10,18 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2008-10-24 00:00:00 -07:00
13
+ date: 2008-10-25 00:00:00 -07:00
14
14
  default_executable: jeweler
15
- dependencies: []
16
-
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: schacon-git
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
17
25
  description: Simple and opinionated helper for creating Rubygem projects on GitHub
18
26
  email: josh@technicalpickles.com
19
27
  executables:
@@ -44,6 +52,7 @@ files:
44
52
  - test/fixtures
45
53
  - test/fixtures/bar
46
54
  - test/fixtures/bar/VERSION.yml
55
+ - test/jeweler_generator_test.rb
47
56
  - test/jeweler_test.rb
48
57
  - test/test_helper.rb
49
58
  has_rdoc: false