gem-new 0.1.2 → 0.2.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/HISTORY.markdown +39 -0
- data/README.markdown +41 -0
- data/Rakefile +10 -0
- data/data/gem-new/default/description.txt +2 -0
- data/data/gem-new/default/meta.yaml +1 -1
- data/data/gem-new/default/skeleton/GEM_NAME.gemspec.erb +6 -1
- data/data/gem-new/default/skeleton/{README.markdown.literal → README.markdown.stop.erb} +0 -0
- data/data/gem-new/default/skeleton/Rakefile +1 -1
- data/data/gem-new/default/skeleton/lib/REQUIRE_NAME.rb.erb +9 -21
- data/data/gem-new/default/skeleton/lib/REQUIRE_NAME/version.rb.erb +5 -1
- data/data/gem-new/gem-raketasks/description.txt +1 -0
- data/data/gem-new/gem-raketasks/meta.yaml +3 -0
- data/data/gem-new/gem-raketasks/skeleton/rake/lib/.gitkeep +0 -0
- data/data/gem-new/gem-raketasks/skeleton/rake/tasks/.gitkeep +0 -0
- data/data/gem-new/gem-raketasks/skeleton/rake/tasks/gem.rake +21 -0
- data/lib/gem/commands/new_command.rb +10 -1
- data/lib/gem/commands/new_command/skeleton.rb +43 -15
- data/lib/gem/commands/new_command/version.rb +1 -1
- data/rake/tasks/gem.rake +21 -0
- metadata +14 -4
data/HISTORY.markdown
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
GEM NEW HISTORY
|
2
|
+
===============
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
2011- - Released Version 0.2.0
|
7
|
+
------------------------------
|
8
|
+
|
9
|
+
* New: Added basic rake tasks to build the gem.
|
10
|
+
* Changed: .literal Suffix no longer exists, use .stop instead.
|
11
|
+
* Changed: Files are now processed by suffix, until .stop or an unknown suffix is hit.
|
12
|
+
E.g. foo.html.markdown.erb will first be processed by the ERB processor, then by the
|
13
|
+
Markdown processor and then it'll stop (because .html is not being processed any
|
14
|
+
further)
|
15
|
+
* Fixed: Fixed broken template file default/skeleton/lib/REQUIRE_NAME.rb.
|
16
|
+
* Improved: Added executables detection and setting of spec.executables to
|
17
|
+
GEM\_NAME.gemspec.erb
|
18
|
+
* Improved: Removed spec.date from GEM\_NAME.gemspec.erb
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
2011-06-15 - Released Version 0.1.2
|
23
|
+
-----------------------------------
|
24
|
+
|
25
|
+
* Fixed: Fixed a bug in the text of "gem help new"
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
2011-06-13 - Released Version 0.1.1
|
30
|
+
-----------------------------------
|
31
|
+
|
32
|
+
* Fixed: Fixed a small bug in the initial release
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
2011-06-13 - Released Version 0.1.0
|
37
|
+
-----------------------------------
|
38
|
+
|
39
|
+
* Initial Release
|
data/README.markdown
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
GEM NEW
|
2
|
+
=======
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
Summary
|
7
|
+
-------
|
8
|
+
Create new gems easily
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
Quick Install & Usage
|
13
|
+
---------------------
|
14
|
+
1. `gem install gem-new`
|
15
|
+
2. `gem new my_new_gems_name`
|
16
|
+
3. Profit!
|
17
|
+
|
18
|
+
See `gem help new` for more information (only available after you installed the `gem-new`
|
19
|
+
gem).
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
Description
|
24
|
+
-----------
|
25
|
+
Gem-new is a gem command plugin that allows you to easily create a new gem.
|
26
|
+
To facilitate gem creation, it relies on directory templates. You can create your own templates and
|
27
|
+
let a template use other templates. For example you could have a 'rails-plugin' template, which
|
28
|
+
includes a 'git-repository', 'rspec', 'ruby-lib' and 'yard' template. This way you can modularly
|
29
|
+
build up your templates and quickly create matching directory structures.
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
Executable
|
34
|
+
----------
|
35
|
+
Use `gem help new` for information on how to use the gem-new executable.
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
Known Bugs and Issues
|
40
|
+
---------------------
|
41
|
+
Go to https://github.com/apeiros/gem-new/issues
|
data/Rakefile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../rake/lib', __FILE__))
|
2
|
+
Dir.glob(File.expand_path('../rake/tasks/**/*.{rake,task,rb}', __FILE__)) do |task_file|
|
3
|
+
begin
|
4
|
+
import task_file
|
5
|
+
rescue LoadError => e
|
6
|
+
warn "Failed to load task file #{task_file}"
|
7
|
+
warn " #{e.class} #{e.message}"
|
8
|
+
warn " #{e.backtrace.first}"
|
9
|
+
end
|
10
|
+
end
|
@@ -4,8 +4,9 @@ Gem::Specification.new do |s|
|
|
4
4
|
s.name = <%= gem_name.inspect %>
|
5
5
|
s.version = <%= version.to_s.inspect %>
|
6
6
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1")
|
7
|
+
# According to Eric Hodel (Rubygems maintainer), you should generally not set this value
|
8
|
+
# s.date = <%= date.inspect %>
|
7
9
|
s.authors = <%= author.inspect %>
|
8
|
-
s.date = <%= date.inspect %>
|
9
10
|
s.description = <<-DESCRIPTION.gsub(/^ /, '').chomp
|
10
11
|
<%= description && description.gsub(/^/,' ') %>
|
11
12
|
DESCRIPTION
|
@@ -24,6 +25,10 @@ Gem::Specification.new do |s|
|
|
24
25
|
README.markdown
|
25
26
|
]
|
26
27
|
s.require_paths = %w[lib]
|
28
|
+
if File.directory?('bin') then
|
29
|
+
executables = Dir.chdir('bin') { Dir.glob('**/*').select { |f| File.executable?(f) } }
|
30
|
+
s.executables = executables unless executables.empty?
|
31
|
+
end
|
27
32
|
s.rubygems_version = "1.3.1"
|
28
33
|
s.specification_version = 3
|
29
34
|
end
|
File without changes
|
@@ -1,7 +1,7 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.expand_path('../rake/lib', __FILE__))
|
2
2
|
Dir.glob(File.expand_path('../rake/tasks/**/*.{rake,task,rb}', __FILE__)) do |task_file|
|
3
3
|
begin
|
4
|
-
|
4
|
+
import task_file
|
5
5
|
rescue LoadError => e
|
6
6
|
warn "Failed to load task file #{task_file}"
|
7
7
|
warn " #{e.class} #{e.message}"
|
@@ -1,24 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
DESCRIPTION
|
13
|
-
s.summary = <<-SUMMARY.chomp
|
14
|
-
Create new gems easily
|
15
|
-
SUMMARY
|
16
|
-
s.email = "stefan.rusterholz@gmail.com"
|
17
|
-
s.files = %w[
|
18
|
-
lib/rubygems_plugin.rb
|
19
|
-
]
|
20
|
-
s.homepage = "http://github.com/apeiros/gem-new"
|
21
|
-
s.require_paths = %w[lib]
|
22
|
-
s.rubygems_version = "1.3.1"
|
23
|
-
s.specification_version = 3
|
3
|
+
|
4
|
+
|
5
|
+
require '<%= require_name %>/version'
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
# <%= namespace.chomp %>
|
10
|
+
<%= description.gsub(/\n*\z/, '').gsub(/^/, '# ')+"\n" %>
|
11
|
+
module <%= namespace %>
|
24
12
|
end
|
@@ -1,6 +1,10 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
|
3
|
+
begin
|
4
|
+
require 'rubygems/version' # newer rubygems use this
|
5
|
+
rescue LoadError
|
6
|
+
require 'gem/version' # older rubygems use this
|
7
|
+
end
|
4
8
|
|
5
9
|
module <%= namespace %>
|
6
10
|
Version = Gem::Version.new(<%= version.to_s.inspect %>)
|
@@ -0,0 +1 @@
|
|
1
|
+
This template provides a couple of rake tasks related to building your gem.
|
File without changes
|
File without changes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
begin
|
2
|
+
require 'rubygems/package_task'
|
3
|
+
rescue
|
4
|
+
require 'gem/package_task'
|
5
|
+
end
|
6
|
+
|
7
|
+
namespace :gem do
|
8
|
+
spec_files = Dir.glob('*.gemspec')
|
9
|
+
abort("No gemspec found in project-root") if spec_files.empty?
|
10
|
+
abort("More than one gemspec found in project-root: #{spec.join(', ')}") if spec_files.size > 1
|
11
|
+
gem_spec = Gem::Specification.load(spec_files.first)
|
12
|
+
|
13
|
+
Gem::PackageTask.new(gem_spec) do |pkg|
|
14
|
+
pkg.package_dir = 'pkg'
|
15
|
+
pkg.need_zip = false
|
16
|
+
pkg.need_tar = false
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Clobbers previous products and builds the gem"
|
21
|
+
task :gem => ['gem:clobber_package', 'gem:gem']
|
@@ -37,9 +37,17 @@ class Gem::Commands::NewCommand < Gem::Command
|
|
37
37
|
add_option('--variables', 'Show all available variables') do |value, opts|
|
38
38
|
opts[:variables] = value
|
39
39
|
end
|
40
|
+
add_option('--version', 'Show gem-new version and exit') do |value, opts|
|
41
|
+
opts[:version] = true
|
42
|
+
end
|
40
43
|
end
|
41
44
|
|
42
45
|
def execute
|
46
|
+
if options[:version] then
|
47
|
+
puts "gem-new version #{VERSION}"
|
48
|
+
return
|
49
|
+
end
|
50
|
+
|
43
51
|
if File.exist?(ConfigPath) then
|
44
52
|
if Configuration.new(ConfigPath).config_version < ConfigVersion then
|
45
53
|
FileUtils.mv(ConfigPath, "#{ConfigPath}.bak")
|
@@ -267,6 +275,7 @@ private
|
|
267
275
|
path_variables: {}
|
268
276
|
YAML
|
269
277
|
FileUtils.mkdir_p(File.dirname(ConfigPath))
|
278
|
+
FileUtils.mkdir_p(UserTemplatesDir.last)
|
270
279
|
File.open(ConfigPath, 'wb') { |fh| fh.write(yaml) }
|
271
280
|
end
|
272
281
|
|
@@ -286,6 +295,6 @@ private
|
|
286
295
|
end
|
287
296
|
|
288
297
|
def camelcase(string)
|
289
|
-
string.gsub(/(?:^|_)([a-z])/) {
|
298
|
+
string.gsub(/(?:^|_)([a-z])/) { $1.upcase }
|
290
299
|
end
|
291
300
|
end
|
@@ -6,22 +6,42 @@ require 'gem/commands/new_command/erb_template'
|
|
6
6
|
|
7
7
|
|
8
8
|
class Gem::Commands::NewCommand < Gem::Command
|
9
|
+
# Preregistered processors
|
10
|
+
# * .erb: Interprets the file as ERB template, see rubys stdlib docs on ERB.
|
11
|
+
# * .stop: Stops the preprocessing chain, it's advised to add that to all files.
|
12
|
+
# * .rb: Same as .stop
|
13
|
+
# * .yaml: Same as .stop
|
14
|
+
# * .html: Same as .stop
|
15
|
+
# * .js: Same as .stop
|
16
|
+
# * .png: Same as .stop
|
17
|
+
# * .jpg: Same as .stop
|
18
|
+
# * .gif: Same as .stop
|
19
|
+
#
|
9
20
|
class Skeleton
|
10
21
|
DefaultOptions = {
|
11
22
|
:verbose => false,
|
12
23
|
:silent => false,
|
13
24
|
:out => $stdout,
|
14
25
|
}
|
15
|
-
Processors = {
|
26
|
+
Processors = {
|
27
|
+
'.stop' => nil,
|
28
|
+
'.rb' => nil,
|
29
|
+
'.yaml' => nil,
|
30
|
+
'.html' => nil,
|
31
|
+
'.js' => nil,
|
32
|
+
'.png' => nil,
|
33
|
+
'.jpg' => nil,
|
34
|
+
'.gif' => nil,
|
35
|
+
}
|
16
36
|
Processor = Struct.new(:suffix, :name, :execute)
|
17
|
-
|
37
|
+
|
18
38
|
def self.register_processor(suffix, name, &execute)
|
39
|
+
raise ArgumentError, "A processor named #{suffix.inspect} is already registered" if Processors[suffix]
|
40
|
+
raise TypeError, "Processor name must be a String, but is #{suffix.class}:#{suffix.inspect}" unless suffix.is_a?(String)
|
41
|
+
|
19
42
|
Processors[suffix] = Processor.new(suffix, name, execute)
|
20
43
|
end
|
21
44
|
|
22
|
-
register_processor '.literal', 'Literal' do |template, variables|
|
23
|
-
template
|
24
|
-
end
|
25
45
|
register_processor '.erb', 'ERB' do |template, variables|
|
26
46
|
ErbTemplate.replace(template, variables)
|
27
47
|
end
|
@@ -100,25 +120,33 @@ class Gem::Commands::NewCommand < Gem::Command
|
|
100
120
|
|
101
121
|
def source_to_target_path_and_processors(source_path, target_dir, replacer)
|
102
122
|
replaced_source = replacer.replace(source_path[@source_slice])
|
103
|
-
|
123
|
+
processed_source = replaced_source.dup
|
104
124
|
processors = []
|
105
|
-
processed_source = replaced_source
|
106
125
|
|
107
|
-
|
108
|
-
processors
|
109
|
-
processed_source = processed_source.chomp(extname)
|
126
|
+
while processor = extract_processor_from_path(processed_source)
|
127
|
+
processors << processor
|
110
128
|
end
|
111
129
|
target_path = File.join(target_dir, processed_source)
|
112
|
-
# while processor = Processors[extname]
|
113
|
-
# processors << processor
|
114
|
-
# processed_source = File.basename(processed_source, extname)
|
115
|
-
# extname = File.extname(processed_source)
|
116
|
-
# end
|
117
130
|
|
118
131
|
[target_path, processors]
|
119
132
|
end
|
120
133
|
|
121
134
|
private
|
135
|
+
# @param [String] path
|
136
|
+
# The path to extract the processor from.
|
137
|
+
# BEWARE! The string referenced by path will be mutated. The extension is being
|
138
|
+
# removed.
|
139
|
+
#
|
140
|
+
# @return [Processor, nil]
|
141
|
+
# Returns the processor or nil
|
142
|
+
def extract_processor_from_path(path)
|
143
|
+
extname = File.extname(path)
|
144
|
+
processor = Processors[extname]
|
145
|
+
path.chomp!(extname) if processor
|
146
|
+
|
147
|
+
processor
|
148
|
+
end
|
149
|
+
|
122
150
|
def info(msg)
|
123
151
|
@out.puts msg unless @silent
|
124
152
|
end
|
data/rake/tasks/gem.rake
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
begin
|
2
|
+
require 'rubygems/package_task'
|
3
|
+
rescue
|
4
|
+
require 'gem/package_task'
|
5
|
+
end
|
6
|
+
|
7
|
+
namespace :gem do
|
8
|
+
spec_files = Dir.glob('*.gemspec')
|
9
|
+
abort("No gemspec found in project-root") if spec_files.empty?
|
10
|
+
abort("More than one gemspec found in project-root: #{spec.join(', ')}") if spec_files.size > 1
|
11
|
+
gem_spec = Gem::Specification.load(spec_files.first)
|
12
|
+
|
13
|
+
Gem::PackageTask.new(gem_spec) do |pkg|
|
14
|
+
pkg.package_dir = 'pkg'
|
15
|
+
pkg.need_zip = false
|
16
|
+
pkg.need_tar = false
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Clobbers previous products and builds the gem"
|
21
|
+
task :gem => ['gem:clobber_package', 'gem:gem']
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem-new
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-06-10 00:00:00.
|
12
|
+
date: 2011-06-10 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! ' Gem-new is a gem command plugin that allows you to easily create
|
15
15
|
a new gem.'
|
@@ -18,15 +18,19 @@ executables: []
|
|
18
18
|
extensions: []
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
|
+
- data/gem-new/default/description.txt
|
21
22
|
- data/gem-new/default/meta.yaml
|
22
23
|
- data/gem-new/default/skeleton/GEM_NAME.gemspec.erb
|
23
24
|
- data/gem-new/default/skeleton/lib/REQUIRE_NAME/version.rb.erb
|
24
25
|
- data/gem-new/default/skeleton/lib/REQUIRE_NAME.rb.erb
|
25
26
|
- data/gem-new/default/skeleton/Rakefile
|
26
|
-
- data/gem-new/default/skeleton/README.markdown.
|
27
|
+
- data/gem-new/default/skeleton/README.markdown.stop.erb
|
27
28
|
- data/gem-new/default/skeleton/README_DIRECTORIES
|
28
29
|
- data/gem-new/gem-new-template/meta.yaml
|
29
30
|
- data/gem-new/gem-new-template/skeleton/data/GEM_NAME/your_template_name/meta.yaml
|
31
|
+
- data/gem-new/gem-raketasks/description.txt
|
32
|
+
- data/gem-new/gem-raketasks/meta.yaml
|
33
|
+
- data/gem-new/gem-raketasks/skeleton/rake/tasks/gem.rake
|
30
34
|
- data/gem-new/default/skeleton/bin/.gitkeep
|
31
35
|
- data/gem-new/default/skeleton/development/.gitkeep
|
32
36
|
- data/gem-new/default/skeleton/documentation/.gitkeep
|
@@ -35,6 +39,8 @@ files:
|
|
35
39
|
- data/gem-new/default/skeleton/rake/tasks/.gitkeep
|
36
40
|
- data/gem-new/default/skeleton/test/.gitkeep
|
37
41
|
- data/gem-new/gem-new-template/skeleton/data/GEM_NAME/your_template_name/skeleton/.gitkeep
|
42
|
+
- data/gem-new/gem-raketasks/skeleton/rake/lib/.gitkeep
|
43
|
+
- data/gem-new/gem-raketasks/skeleton/rake/tasks/.gitkeep
|
38
44
|
- lib/gem/commands/new_command/blank_slate.rb
|
39
45
|
- lib/gem/commands/new_command/configuration.rb
|
40
46
|
- lib/gem/commands/new_command/erb_template.rb
|
@@ -43,6 +49,10 @@ files:
|
|
43
49
|
- lib/gem/commands/new_command/version.rb
|
44
50
|
- lib/gem/commands/new_command.rb
|
45
51
|
- lib/rubygems_plugin.rb
|
52
|
+
- rake/tasks/gem.rake
|
53
|
+
- HISTORY.markdown
|
54
|
+
- Rakefile
|
55
|
+
- README.markdown
|
46
56
|
homepage: https://github.com/apeiros/gem-new
|
47
57
|
licenses: []
|
48
58
|
post_install_message:
|
@@ -63,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
73
|
version: 1.3.1
|
64
74
|
requirements: []
|
65
75
|
rubyforge_project:
|
66
|
-
rubygems_version: 1.8.
|
76
|
+
rubygems_version: 1.8.6
|
67
77
|
signing_key:
|
68
78
|
specification_version: 3
|
69
79
|
summary: Create new gems easily
|