gem-release 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/core_ext/kernel/silence.rb +18 -0
- data/lib/core_ext/string/camelize.rb +5 -0
- data/lib/gem_release.rb +7 -0
- data/lib/gem_release/command_options.rb +11 -0
- data/lib/gem_release/gemspec.rb +34 -0
- data/lib/gem_release/helpers.rb +17 -1
- data/lib/gem_release/template.rb +30 -0
- data/lib/gem_release/templates/gemspec.erb +20 -0
- data/lib/gem_release/templates/version.erb +3 -0
- data/lib/gem_release/version.rb +18 -1
- data/lib/rubygems/commands/init_command.rb +64 -0
- data/lib/rubygems_plugin.rb +2 -0
- metadata +11 -4
- data/Gemfile +0 -6
- data/README.textile +0 -24
@@ -0,0 +1,18 @@
|
|
1
|
+
module Kernel
|
2
|
+
def silence
|
3
|
+
silence_stream(STDOUT, STDERR) { yield }
|
4
|
+
end
|
5
|
+
|
6
|
+
def silence_stream(*streams)
|
7
|
+
on_hold = streams.collect{ |stream| stream.dup }
|
8
|
+
streams.each do |stream|
|
9
|
+
stream.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
|
10
|
+
stream.sync = true
|
11
|
+
end
|
12
|
+
yield
|
13
|
+
ensure
|
14
|
+
streams.each_with_index do |stream, i|
|
15
|
+
stream.reopen(on_hold[i])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/gem_release.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
module GemRelease
|
2
|
+
module CommandOptions
|
3
|
+
def option(key, short, description)
|
4
|
+
long = "--[no-]#{key}"
|
5
|
+
default = self.class::OPTIONS[key]
|
6
|
+
add_option(short, long, description, "Defaults to #{default}") do |value, options|
|
7
|
+
options[key] = value
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module GemRelease
|
2
|
+
class Gemspec < Template
|
3
|
+
attr_reader :authors, :email, :homepage, :summary, :description
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
super
|
7
|
+
|
8
|
+
@authors ||= [`git config --get user.name`.strip]
|
9
|
+
@email ||= `git config --get user.email`.strip
|
10
|
+
@github_user ||= `git config --get github.user`.strip
|
11
|
+
@homepage ||= "http://github.com/#{@github_user}/#{name}" || "[your github name]"
|
12
|
+
|
13
|
+
@summary ||= '[summary]'
|
14
|
+
@description ||= '[description]'
|
15
|
+
end
|
16
|
+
|
17
|
+
def files
|
18
|
+
case @strategy || :git
|
19
|
+
when :glob
|
20
|
+
"Dir['{lib/**/*,[A-Z]*}']"
|
21
|
+
when :git
|
22
|
+
'`git ls-files {app,lib}`.split("\n")'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def filename
|
27
|
+
"#{name}.gemspec"
|
28
|
+
end
|
29
|
+
|
30
|
+
def template_name
|
31
|
+
'gemspec.erb'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/gem_release/helpers.rb
CHANGED
@@ -1,5 +1,19 @@
|
|
1
|
+
require 'core_ext/kernel/silence'
|
2
|
+
|
1
3
|
module GemRelease
|
2
4
|
module Helpers
|
5
|
+
def github_user
|
6
|
+
@github_user ||= `git config --get github.user`.strip
|
7
|
+
end
|
8
|
+
|
9
|
+
def github_token
|
10
|
+
@github_token ||= `git config --get github.token`.strip
|
11
|
+
end
|
12
|
+
|
13
|
+
def gem_name
|
14
|
+
@gem_name ||= gemspec ? gemspec.name : File.basename(Dir.pwd)
|
15
|
+
end
|
16
|
+
|
3
17
|
def gem_filename
|
4
18
|
gemspec.file_name
|
5
19
|
end
|
@@ -9,7 +23,9 @@ module GemRelease
|
|
9
23
|
end
|
10
24
|
|
11
25
|
def gemspec
|
12
|
-
@gemspec ||= Gem::Specification.load(gemspec_filename)
|
26
|
+
@gemspec ||= silence { Gem::Specification.load(gemspec_filename) }
|
27
|
+
rescue LoadError, RuntimeError
|
28
|
+
nil
|
13
29
|
end
|
14
30
|
|
15
31
|
def gemspec_filename
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'core_ext/string/camelize'
|
4
|
+
|
5
|
+
module GemRelease
|
6
|
+
class Template
|
7
|
+
attr_reader :name, :module_name, :module_path
|
8
|
+
|
9
|
+
def initialize(options = {})
|
10
|
+
options.each { |key, value| instance_variable_set(:"@#{key}", value) }
|
11
|
+
|
12
|
+
@name ||= File.basename(Dir.pwd)
|
13
|
+
@module_path ||= name.gsub('-', '_')
|
14
|
+
@module_name ||= module_path.camelize
|
15
|
+
end
|
16
|
+
|
17
|
+
def write
|
18
|
+
FileUtils.mkdir_p(File.dirname(filename))
|
19
|
+
File.open(filename, 'w+') { |f| f.write(render) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def render
|
23
|
+
ERB.new(template, nil, "%").result(binding)
|
24
|
+
end
|
25
|
+
|
26
|
+
def template
|
27
|
+
File.new(File.expand_path("../templates/#{template_name}", __FILE__)).read
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
$: << File.expand_path('../lib', __FILE__)
|
4
|
+
require '<%= module_path %>/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = <%= name.inspect %>
|
8
|
+
s.version = <%= module_name %>::VERSION
|
9
|
+
s.authors = <%= authors.inspect %>
|
10
|
+
s.email = <%= email.inspect %>
|
11
|
+
s.homepage = <%= homepage.inspect %>
|
12
|
+
s.summary = <%= summary.inspect %>
|
13
|
+
s.description = <%= description.inspect %>
|
14
|
+
|
15
|
+
s.files = <%= files %>
|
16
|
+
s.platform = Gem::Platform::RUBY
|
17
|
+
s.require_path = 'lib'
|
18
|
+
s.rubyforge_project = '[none]'
|
19
|
+
s.required_rubygems_version = '>= 1.3.6'
|
20
|
+
end
|
data/lib/gem_release/version.rb
CHANGED
@@ -1,3 +1,20 @@
|
|
1
1
|
module GemRelease
|
2
|
-
VERSION = '0.0.
|
2
|
+
VERSION = '0.0.8'
|
3
|
+
|
4
|
+
class Version < Template
|
5
|
+
attr_reader :version
|
6
|
+
|
7
|
+
def initialize(options = {})
|
8
|
+
super
|
9
|
+
@version ||= '0.0.1'
|
10
|
+
end
|
11
|
+
|
12
|
+
def filename
|
13
|
+
"lib/#{module_path}/version.rb"
|
14
|
+
end
|
15
|
+
|
16
|
+
def template_name
|
17
|
+
'version.erb'
|
18
|
+
end
|
19
|
+
end
|
3
20
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'gem_release/helpers'
|
2
|
+
|
3
|
+
class Gem::Commands::InitCommand < Gem::Command
|
4
|
+
include GemRelease
|
5
|
+
include Helpers, CommandOptions
|
6
|
+
|
7
|
+
OPTIONS = {
|
8
|
+
:gemspec => true,
|
9
|
+
:scaffold => false,
|
10
|
+
:github => false
|
11
|
+
}
|
12
|
+
|
13
|
+
attr_reader :arguments, :usage
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
super 'init', 'Initialize a new gem source repository', OPTIONS
|
17
|
+
|
18
|
+
option :gemspec, '-g', 'Generate a .gemspec'
|
19
|
+
option :scaffold, '-s', 'Scaffold lib/[gem_name]/version.rb README test/'
|
20
|
+
option :github, '-h', 'Init a git repo, create on github and push'
|
21
|
+
|
22
|
+
@arguments = ''
|
23
|
+
@usage = "#{program_name}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def execute
|
27
|
+
write_gemspec if options[:gemspec]
|
28
|
+
write_scaffold if options[:scaffold]
|
29
|
+
create_repo if options[:github]
|
30
|
+
end
|
31
|
+
|
32
|
+
def write_scaffold
|
33
|
+
`mkdir lib test`
|
34
|
+
`touch README`
|
35
|
+
Version.new(options).write
|
36
|
+
end
|
37
|
+
|
38
|
+
def write_gemspec
|
39
|
+
Gemspec.new(options).write
|
40
|
+
end
|
41
|
+
|
42
|
+
def create_repo
|
43
|
+
options = { :login => github_user, :token => github_token, :name => gem_name }
|
44
|
+
options = options.map { |name, value| "-F '#{name}=#{value}'" }.join(' ')
|
45
|
+
|
46
|
+
say 'Initializing git repository'
|
47
|
+
`git init`
|
48
|
+
|
49
|
+
say 'Staging files'
|
50
|
+
`git add .`
|
51
|
+
|
52
|
+
say 'Creating initial commit'
|
53
|
+
`git commit -m 'initial commit'`
|
54
|
+
|
55
|
+
say "Adding remote origin git@github.com:#{github_user}/#{gem_name}.git"
|
56
|
+
`git remote add origin git@github.com:#{github_user}/#{gem_name}.git`
|
57
|
+
|
58
|
+
say 'Creating repository on Github'
|
59
|
+
silence { `curl #{options} http://github.com/api/v2/yaml/repos/create` }
|
60
|
+
|
61
|
+
say 'Pushing to Github'
|
62
|
+
`git push origin master`
|
63
|
+
end
|
64
|
+
end
|
data/lib/rubygems_plugin.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 8
|
9
|
+
version: 0.0.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Sven Fuchs
|
@@ -27,13 +27,20 @@ extensions: []
|
|
27
27
|
extra_rdoc_files: []
|
28
28
|
|
29
29
|
files:
|
30
|
+
- lib/core_ext/kernel/silence.rb
|
31
|
+
- lib/core_ext/string/camelize.rb
|
32
|
+
- lib/gem_release.rb
|
33
|
+
- lib/gem_release/command_options.rb
|
34
|
+
- lib/gem_release/gemspec.rb
|
30
35
|
- lib/gem_release/helpers.rb
|
36
|
+
- lib/gem_release/template.rb
|
37
|
+
- lib/gem_release/templates/gemspec.erb
|
38
|
+
- lib/gem_release/templates/version.erb
|
31
39
|
- lib/gem_release/version.rb
|
40
|
+
- lib/rubygems/commands/init_command.rb
|
32
41
|
- lib/rubygems/commands/release_command.rb
|
33
42
|
- lib/rubygems/commands/tag_command.rb
|
34
43
|
- lib/rubygems_plugin.rb
|
35
|
-
- Gemfile
|
36
|
-
- README.textile
|
37
44
|
has_rdoc: true
|
38
45
|
homepage: http://github.com/svenfuchs/gem-release
|
39
46
|
licenses: []
|
data/Gemfile
DELETED
data/README.textile
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
h1. gem release
|
2
|
-
|
3
|
-
This gem plugin adds a `release` command to the rubygems `gem` command which
|
4
|
-
|
5
|
-
* builds a gem from your gemspec and
|
6
|
-
* pushes it to rubygems.org
|
7
|
-
* deletes the gem file
|
8
|
-
|
9
|
-
h2. Installation
|
10
|
-
|
11
|
-
Obviously ...
|
12
|
-
|
13
|
-
<pre>
|
14
|
-
$ gem install gem-release
|
15
|
-
</pre>
|
16
|
-
|
17
|
-
h2. Usage
|
18
|
-
|
19
|
-
<pre>
|
20
|
-
$ gem release path/to/your.gemspec
|
21
|
-
$ gem release
|
22
|
-
</pre>
|
23
|
-
|
24
|
-
If you don't specify a gemspec filename the first \*.gemspec file found in your current working directory will be used.
|