joe 0.0.3 → 0.1.0
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.
- data/README.markdown +3 -3
- data/bin/joe +55 -7
- data/lib/joe.rb +43 -39
- metadata +6 -7
data/README.markdown
CHANGED
@@ -17,13 +17,13 @@ Now go ahead and release your new gem to RubyGems.org:
|
|
17
17
|
|
18
18
|
$ joe release
|
19
19
|
|
20
|
-
Easy, right? Wait
|
20
|
+
Easy, right? Wait until RubyGems.org updates its gems index and you will be able to run `gem install foo`.
|
21
21
|
|
22
22
|
|
23
23
|
Maintaining a gemspec file
|
24
24
|
--------------------------
|
25
25
|
|
26
|
-
The easiest way we've found to maintain a gemspec file is by creating a `foo.gemspec.erb` template ([see example](
|
26
|
+
The easiest way we've found to maintain a gemspec file is by creating a `foo.gemspec.erb` template ([see example](https://github.com/soveran/ohm/blob/master/ohm.gemspec.erb)). Then you can use Joe to produce the real gemspec file:
|
27
27
|
|
28
28
|
$ joe gemspec
|
29
29
|
|
@@ -31,7 +31,7 @@ The easiest way we've found to maintain a gemspec file is by creating a `foo.gem
|
|
31
31
|
Installation
|
32
32
|
------------
|
33
33
|
|
34
|
-
$
|
34
|
+
$ gem install joe
|
35
35
|
|
36
36
|
That's it. Try:
|
37
37
|
|
data/bin/joe
CHANGED
@@ -1,13 +1,61 @@
|
|
1
1
|
#! /usr/bin/env ruby -rubygems
|
2
2
|
|
3
3
|
require File.join(File.dirname(__FILE__), "..", "lib", "joe")
|
4
|
+
require "clap"
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
help = <<-EOS
|
7
|
+
JOE(1)
|
8
|
+
|
9
|
+
NAME
|
10
|
+
joe -- Release your gems, no pain involved.
|
11
|
+
|
12
|
+
SYNOPSIS
|
13
|
+
joe COMMAND
|
14
|
+
|
15
|
+
DESCRIPTION
|
16
|
+
Joe is a small script that helps you build and release Ruby gems. It only
|
17
|
+
needs a gemspec file or an ERB gemspec template. With joe you can build the
|
18
|
+
gem, install it, archive it and release it to rubygems.org.
|
19
|
+
|
20
|
+
USAGE
|
21
|
+
Joe assumes you have a *.gemspec file in the current directory and it will
|
22
|
+
use it to build the gem. If you prefer to use an ERB template, make sure
|
23
|
+
you have the template named *.gemspec.erb.
|
24
|
+
|
25
|
+
COMMANDS
|
26
|
+
help Show this usage guide
|
27
|
+
gemspec Generate the gemspec file out of the ERB template
|
28
|
+
build Build the gem
|
29
|
+
install Build the gem, package it, and install it
|
30
|
+
archive Create a .tar.gz archive out of the current HEAD
|
31
|
+
release Push gem to rubygems.org
|
32
|
+
|
33
|
+
EXAMPLES
|
34
|
+
If your library is called foo, you need to have foo.gemspec or
|
35
|
+
foo.gemspec.erb available. If you do, the following command will build the
|
36
|
+
gem and release it to rubygems.org.
|
37
|
+
|
38
|
+
joe release
|
39
|
+
|
40
|
+
To install the gem locally without releasing it:
|
41
|
+
|
42
|
+
joe install
|
43
|
+
|
44
|
+
SEE ALSO
|
45
|
+
gem(1)
|
46
|
+
EOS
|
47
|
+
|
48
|
+
if ARGV.empty?
|
49
|
+
puts help
|
50
|
+
exit
|
10
51
|
end
|
11
52
|
|
12
|
-
|
13
|
-
|
53
|
+
joe = Joe.new
|
54
|
+
|
55
|
+
Clap.run ARGV,
|
56
|
+
"gemspec" => joe.method(:gemspec),
|
57
|
+
"build" => joe.method(:build),
|
58
|
+
"install" => joe.method(:install),
|
59
|
+
"archive" => joe.method(:archive),
|
60
|
+
"release" => joe.method(:release),
|
61
|
+
"help" => lambda { puts help }
|
data/lib/joe.rb
CHANGED
@@ -1,67 +1,70 @@
|
|
1
|
-
require "
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require 'rubygems/gem_runner'
|
1
|
+
require "fileutils"
|
2
|
+
require "erb"
|
3
|
+
require "rubygems/gem_runner"
|
5
4
|
|
6
|
-
class Joe
|
7
|
-
VERSION = "0.0
|
5
|
+
class Joe
|
6
|
+
VERSION = "0.1.0"
|
8
7
|
|
9
|
-
include Thor::Actions
|
10
|
-
|
11
|
-
desc "gemspec", "Generate the gemspec file out of the ERb template"
|
12
8
|
def gemspec
|
13
|
-
|
14
|
-
|
9
|
+
File.open(spec_file, "w") do |f|
|
10
|
+
f.write ERB.new(File.read("%s.erb" % spec_file), nil, "-").result
|
15
11
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
status :write, spec_file
|
13
|
+
end
|
14
|
+
rescue SyntaxError
|
15
|
+
fail "Parsing your gemspec failed. Please check its syntax."
|
20
16
|
end
|
21
17
|
|
22
|
-
desc "build", "Build the gem"
|
23
18
|
def build
|
24
|
-
gemspec if File.
|
19
|
+
gemspec if File.exist?("%s.erb" % spec_file)
|
25
20
|
|
26
|
-
gem
|
21
|
+
gem("build", spec_file)
|
27
22
|
|
28
23
|
if pkg(gem_file)
|
29
|
-
|
30
|
-
true
|
24
|
+
status :created, "pkg/#{gem_file}"
|
31
25
|
else
|
32
|
-
|
33
|
-
false
|
26
|
+
fail "Unable to build #{gem_file}"
|
34
27
|
end
|
35
28
|
end
|
36
29
|
|
37
|
-
|
30
|
+
def install
|
31
|
+
build and gem("install", "pkg/#{gem_file}")
|
32
|
+
end
|
33
|
+
|
38
34
|
def archive
|
39
|
-
if
|
40
|
-
|
41
|
-
true
|
35
|
+
if git_archive && pkg(archive_file)
|
36
|
+
status :created, "pkg/#{archive_file}"
|
42
37
|
end
|
43
38
|
end
|
44
39
|
|
45
|
-
desc "release", "Publish gem to RubyGems.org"
|
46
40
|
def release
|
47
41
|
build
|
48
|
-
|
49
|
-
gem
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.source_root
|
53
|
-
"."
|
42
|
+
status :releasing, gem_file
|
43
|
+
gem("push", "pkg/#{gem_file}")
|
54
44
|
end
|
55
45
|
|
56
|
-
|
57
|
-
|
46
|
+
private
|
58
47
|
def pkg(file)
|
59
48
|
FileUtils.mkdir_p("pkg")
|
60
49
|
File.exist?(file) && FileUtils.mv(file, "pkg")
|
61
50
|
end
|
62
51
|
|
63
52
|
def spec_file
|
64
|
-
Dir["*.gemspec"].first || Dir["*.gemspec.erb"].first.sub(/\.erb$/,
|
53
|
+
Dir["*.gemspec"].first || Dir["*.gemspec.erb"].first.sub(/\.erb$/, "")
|
54
|
+
end
|
55
|
+
|
56
|
+
def fail(str)
|
57
|
+
puts "\e[1;31m#{str}\e[1;37m"
|
58
|
+
end
|
59
|
+
|
60
|
+
def status(type, message)
|
61
|
+
puts "\e[1;32m %10s \e[1;37m %s" % [type, message]
|
62
|
+
|
63
|
+
return type, message
|
64
|
+
end
|
65
|
+
|
66
|
+
def gem(*args)
|
67
|
+
Gem::GemRunner.new.run(args)
|
65
68
|
end
|
66
69
|
|
67
70
|
def spec
|
@@ -69,7 +72,7 @@ protected
|
|
69
72
|
begin
|
70
73
|
@spec = eval(File.read(spec_file))
|
71
74
|
rescue Errno::ENOENT
|
72
|
-
|
75
|
+
log :not_found, spec_file
|
73
76
|
exit 1
|
74
77
|
end
|
75
78
|
end
|
@@ -82,7 +85,8 @@ protected
|
|
82
85
|
gem_file.sub(/\.gem$/, ".tar.gz")
|
83
86
|
end
|
84
87
|
|
85
|
-
def
|
86
|
-
|
88
|
+
def git_archive
|
89
|
+
system("git archive --prefix=#{spec.name}-#{spec.version}/ " +
|
90
|
+
"--format=tar HEAD | gzip > #{archive_file}")
|
87
91
|
end
|
88
92
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
|
9
|
-
version: 0.0.3
|
9
|
+
version: 0.1.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Damian Janowski
|
@@ -15,21 +15,20 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-11-05 00:00:00 -03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: clap
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
segments:
|
30
30
|
- 0
|
31
|
-
|
32
|
-
version: "0.11"
|
31
|
+
version: "0"
|
33
32
|
type: :runtime
|
34
33
|
version_requirements: *id001
|
35
34
|
description: "Joe builds on top of Thor\xE2\x80\x99s awesomeness to take you from a gem specification to world domination in a single step."
|