simonmenke-gm 0.0.2 → 0.0.3
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.textile +1 -39
- data/gm_commands/build_command.rb +14 -0
- data/gm_commands/clean_command.rb +12 -0
- data/gm_commands/create_command.rb +15 -0
- data/gm_commands/gen_command.rb +16 -0
- data/gm_commands/help_command.rb +14 -0
- data/gm_commands/install_command.rb +15 -0
- data/gm_commands/spec_command.rb +15 -0
- data/gm_generators/bin/bin_generator.rb +22 -0
- data/gm_generators/bin/templates/bin/bin.rb +3 -0
- data/gm_generators/gem/gem_generator.rb +38 -0
- data/gm_generators/gem/templates/README.textile +0 -0
- data/gm_generators/gem/templates/gmfile.yml +3 -0
- data/gm_generators/gem/templates/lib/module.rb +4 -0
- data/gm_generators/rails/rails_generator.rb +20 -0
- data/gm_generators/rails/templates/rails/init.rb +1 -0
- data/gm_generators/test/templates/test/test_case.rb +5 -0
- data/gm_generators/test/templates/test/test_helper.rb +6 -0
- data/gm_generators/test/test_generator.rb +24 -0
- data/{lib/passes → gm_passes}/configatron.rb +0 -0
- data/{lib/passes → gm_passes}/defaults.rb +0 -0
- data/{lib/passes → gm_passes}/executables.rb +0 -0
- data/{lib/passes → gm_passes}/files.rb +0 -0
- data/{lib/passes → gm_passes}/github.rb +0 -0
- data/gm_passes/gm.rb +7 -0
- data/{lib/passes → gm_passes}/rails.rb +0 -0
- data/gm_passes/rubigen.rb +9 -0
- data/{lib/passes → gm_passes}/specs.rb +0 -0
- data/{lib/passes/tests.rb → gm_passes/test.rb} +0 -0
- data/lib/extentions/gem.rb +15 -0
- data/lib/gm.rb +5 -0
- data/lib/gm/app.rb +42 -75
- data/lib/gm/command.rb +54 -0
- metadata +59 -10
data/README.textile
CHANGED
@@ -2,42 +2,4 @@ h1. GM (gem make)
|
|
2
2
|
|
3
3
|
GM is a gem and gemspec builder for use with github.
|
4
4
|
|
5
|
-
|
6
|
-
h2. Configuration
|
7
|
-
|
8
|
-
~/.gmrc.yml
|
9
|
-
|
10
|
-
author:
|
11
|
-
name: [your name]
|
12
|
-
email: [your email adres]
|
13
|
-
github:
|
14
|
-
username: [your github username]
|
15
|
-
|
16
|
-
paths/to/gem/gmfile.yml
|
17
|
-
|
18
|
-
general:
|
19
|
-
name: [name of the gem]
|
20
|
-
version: [version]
|
21
|
-
summary: [a short description]
|
22
|
-
dependencies:
|
23
|
-
- gem-name version-requirement
|
24
|
-
- gem2-name version-requirement
|
25
|
-
|
26
|
-
h2. Example
|
27
|
-
|
28
|
-
~/.gmrc.yml
|
29
|
-
|
30
|
-
author:
|
31
|
-
name: Simon Menke
|
32
|
-
email: simon.menke@gmail.com
|
33
|
-
github:
|
34
|
-
username: simonmenke
|
35
|
-
|
36
|
-
paths/to/gem/gmfile.yml
|
37
|
-
|
38
|
-
general:
|
39
|
-
name: gm
|
40
|
-
version: 0.0.1
|
41
|
-
summary: Build gems with ease.
|
42
|
-
dependencies:
|
43
|
-
- configatron >= 2.2.1
|
5
|
+
For more info/docs go to http://simonmenke.github.com/gm
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
class BinGenerator < RubiGen::Base
|
3
|
+
|
4
|
+
attr_reader :bin_name
|
5
|
+
|
6
|
+
def initialize(runtime_args, runtime_options = {})
|
7
|
+
super
|
8
|
+
@destination_root = '.'
|
9
|
+
@bin_name = args.shift
|
10
|
+
end
|
11
|
+
|
12
|
+
def manifest
|
13
|
+
record do |m|
|
14
|
+
|
15
|
+
m.directory ''
|
16
|
+
%w( bin ).each { |path| m.directory path }
|
17
|
+
|
18
|
+
m.template "bin/bin.rb", "bin/#{@bin_name}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
class GemGenerator < RubiGen::Base
|
3
|
+
|
4
|
+
attr_reader :app_name, :module_name
|
5
|
+
|
6
|
+
def initialize(runtime_args, runtime_options = {})
|
7
|
+
super
|
8
|
+
usage if args.empty?
|
9
|
+
@destination_root = args.shift
|
10
|
+
@app_name = File.basename(File.expand_path(@destination_root))
|
11
|
+
@module_name = app_name.camelize
|
12
|
+
end
|
13
|
+
|
14
|
+
def manifest
|
15
|
+
record do |m|
|
16
|
+
|
17
|
+
# Root directory and all subdirectories.
|
18
|
+
m.directory ''
|
19
|
+
%w( lib ).each { |path| m.directory path }
|
20
|
+
|
21
|
+
# Root
|
22
|
+
m.template_copy_each %w( gmfile.yml )
|
23
|
+
m.file_copy_each %w( README.textile )
|
24
|
+
|
25
|
+
m.template "lib/module.rb", "lib/#{app_name}.rb"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
def banner
|
32
|
+
<<-EOS
|
33
|
+
Create a stub gem for #{File.basename $0} to get started.
|
34
|
+
|
35
|
+
Usage: #{File.basename $0} gen gm /path/to/your/gem"
|
36
|
+
EOS
|
37
|
+
end
|
38
|
+
end
|
File without changes
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
class RailsGenerator < RubiGen::Base
|
3
|
+
|
4
|
+
attr_reader :file_name, :test_case_name
|
5
|
+
|
6
|
+
def initialize(runtime_args, runtime_options = {})
|
7
|
+
super
|
8
|
+
@destination_root = '.'
|
9
|
+
end
|
10
|
+
|
11
|
+
def manifest
|
12
|
+
record do |m|
|
13
|
+
m.directory ''
|
14
|
+
m.directory 'rails'
|
15
|
+
|
16
|
+
m.template "rails/init.rb", "rails/init.rb"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
# initialize your rails plugin here
|
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
class TestGenerator < RubiGen::Base
|
3
|
+
|
4
|
+
attr_reader :file_name, :test_case_name
|
5
|
+
|
6
|
+
def initialize(runtime_args, runtime_options = {})
|
7
|
+
super
|
8
|
+
@destination_root = '.'
|
9
|
+
@file_name = args.shift
|
10
|
+
@test_case_name = file_name.camelize unless @file_name.nil?
|
11
|
+
end
|
12
|
+
|
13
|
+
def manifest
|
14
|
+
record do |m|
|
15
|
+
|
16
|
+
m.directory ''
|
17
|
+
%w( test ).each { |path| m.directory path }
|
18
|
+
|
19
|
+
m.template "test/test_helper.rb", "test/test_helper.rb"
|
20
|
+
m.template "test/test_case.rb", "test/#{@file_name}_test.rb" unless @file_name.nil?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/gm_passes/gm.rb
ADDED
File without changes
|
File without changes
|
File without changes
|
data/lib/gm.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
|
2
2
|
begin
|
3
|
+
require 'clip'
|
4
|
+
require 'singleton'
|
3
5
|
require 'configatron'
|
6
|
+
require 'rubigen'
|
7
|
+
require 'rubigen/scripts/generate'
|
4
8
|
rescue LoadError
|
5
9
|
retry if require 'rubygems'
|
6
10
|
end
|
@@ -9,6 +13,7 @@ module GM
|
|
9
13
|
end
|
10
14
|
|
11
15
|
require File.dirname(__FILE__)+'/gm/app'
|
16
|
+
require File.dirname(__FILE__)+'/gm/command'
|
12
17
|
require File.dirname(__FILE__)+'/gm/configuration_pass'
|
13
18
|
require File.dirname(__FILE__)+'/gm/configuration_pass_queue'
|
14
19
|
require File.dirname(__FILE__)+'/gm/dsl'
|
data/lib/gm/app.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'singleton'
|
2
1
|
|
3
2
|
module GM
|
4
3
|
|
@@ -6,113 +5,81 @@ module GM
|
|
6
5
|
include Singleton
|
7
6
|
|
8
7
|
attr_accessor :configuration_passes
|
8
|
+
attr_accessor :commands
|
9
|
+
attr_accessor :options
|
10
|
+
attr_accessor :gemspec
|
11
|
+
attr_accessor :emulate
|
12
|
+
attr_accessor :gem_file_name
|
9
13
|
|
10
|
-
|
11
|
-
|
12
|
-
def initialize
|
14
|
+
def initialize # :nodoc:
|
13
15
|
@configuration_passes = Hash.new { |h, k| h[k] = {} }
|
16
|
+
@commands = {}
|
14
17
|
end
|
15
18
|
|
19
|
+
# exclude a pass from the configuration fase
|
16
20
|
def exclude_pass(name, fase=:normal)
|
17
21
|
@configuration_passes[fase.to_sym].delete(name.to_sym)
|
18
22
|
end
|
19
23
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
@command = 'help' if @command.nil?
|
24
|
+
# extra options provided by the app.
|
25
|
+
def extra_options(options)
|
26
|
+
options.flag 'v', 'verbose', :desc => 'Print more information.'
|
24
27
|
end
|
25
28
|
|
29
|
+
# run the app
|
26
30
|
def run
|
27
31
|
load_passes
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
def run_help
|
33
|
-
puts "#{File.basename($0)} #{COMMANDS.join('|')}"
|
34
|
-
end
|
35
|
-
|
36
|
-
def run_spec
|
37
|
-
build_gemspec
|
38
|
-
write_spec_file
|
32
|
+
load_commands
|
33
|
+
Command.build(self).run
|
39
34
|
end
|
40
35
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
def run_install
|
48
|
-
@emulate = true
|
49
|
-
build_gemspec
|
50
|
-
build_spec
|
51
|
-
install_gem
|
52
|
-
end
|
53
|
-
|
54
|
-
def run_clean
|
55
|
-
system("rm -rf pkg/* *.gemspec")
|
36
|
+
# ge a list of all the command names
|
37
|
+
def command_names
|
38
|
+
commands.keys.collect do |name|
|
39
|
+
name.to_s.gsub(/[A-Z]/){|m|'_'+m.downcase}.sub(/^_/, '').sub('_command', '')
|
40
|
+
end.sort
|
56
41
|
end
|
57
42
|
|
43
|
+
# should we emulate github?
|
58
44
|
def self.emulate?
|
59
|
-
instance.emulate
|
60
|
-
end
|
61
|
-
|
62
|
-
def emulate?
|
63
|
-
@emulate || false
|
45
|
+
instance.emulate || false
|
64
46
|
end
|
65
47
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
48
|
+
def build_gemspec
|
49
|
+
@gemspec = Gem::Specification.new do |s|
|
50
|
+
ConfigurationPassQueue.new(:init).run(s)
|
51
|
+
ConfigurationPassQueue.new(:pre).run(s)
|
52
|
+
ConfigurationPassQueue.new(:normal).run(s)
|
53
|
+
ConfigurationPassQueue.new(:post).run(s)
|
71
54
|
end
|
55
|
+
@gemspec.validate
|
72
56
|
end
|
73
57
|
|
74
|
-
def
|
75
|
-
|
76
|
-
end
|
77
|
-
|
78
|
-
def build_spec
|
79
|
-
builder = Gem::Builder.new @spec
|
58
|
+
def build_gem
|
59
|
+
builder = Gem::Builder.new @gemspec
|
80
60
|
@gem_file_name = builder.build
|
81
61
|
system("rm -f pkg/#{@gem_file_name}")
|
82
62
|
system("mkdir -p pkg && mv #{@gem_file_name} pkg/")
|
83
63
|
end
|
84
64
|
|
85
|
-
|
86
|
-
|
87
|
-
|
65
|
+
private
|
66
|
+
|
67
|
+
# load all passes
|
68
|
+
def load_passes
|
69
|
+
require 'reverse_require'
|
70
|
+
Gem.find_resources('gm_passes/*.rb').uniq.each do |path|
|
71
|
+
GM::DSL.load_pass path
|
88
72
|
end
|
89
73
|
end
|
90
74
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
ConfigurationPassQueue.new(:post).run(s)
|
75
|
+
# load all commands
|
76
|
+
def load_commands
|
77
|
+
require 'reverse_require'
|
78
|
+
Gem.find_resources('gm_commands/*_command.rb').uniq.each do |path|
|
79
|
+
GM::Command.load_command path
|
97
80
|
end
|
98
|
-
@spec.validate
|
99
81
|
end
|
100
82
|
|
101
83
|
end
|
102
84
|
|
103
85
|
end
|
104
|
-
|
105
|
-
module Gem
|
106
|
-
|
107
|
-
class Specification
|
108
|
-
|
109
|
-
alias_method :ruby_code_old, :ruby_code
|
110
|
-
|
111
|
-
def ruby_code(obj)
|
112
|
-
obj = nil if obj.is_a? Configatron::Store
|
113
|
-
ruby_code_old(obj)
|
114
|
-
end
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
end
|
data/lib/gm/command.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
|
2
|
+
module GM
|
3
|
+
|
4
|
+
class Command
|
5
|
+
|
6
|
+
attr_accessor :app
|
7
|
+
attr_accessor :options
|
8
|
+
|
9
|
+
# load a command from a file
|
10
|
+
def self.load_command(path)
|
11
|
+
cmd_name = File.basename(path, '.rb')
|
12
|
+
cmd_name = cmd_name.gsub(/(^|_)([a-z])/i) { |m| $2.upcase }
|
13
|
+
|
14
|
+
mod = Module.new
|
15
|
+
mod.module_eval IO.read(path)
|
16
|
+
|
17
|
+
cmd_class = (mod.module_eval("GM::"+cmd_name) rescue nil)
|
18
|
+
|
19
|
+
return nil if cmd_class.nil?
|
20
|
+
|
21
|
+
GM::App.instance.commands[cmd_name.to_sym] = cmd_class
|
22
|
+
end
|
23
|
+
|
24
|
+
# build a command
|
25
|
+
def self.build(app)
|
26
|
+
cmd_name = (ARGV.detect {|i| not i =~ /^--?/ } || 'help')
|
27
|
+
ARGV.delete(cmd_name)
|
28
|
+
cmd_name = cmd_name + '_command'
|
29
|
+
cmd_name = cmd_name.gsub(/(^|_)([a-z])/i) { |m| $2.upcase }
|
30
|
+
cmd_class = GM::App.instance.commands[cmd_name.to_sym] || GM::App.instance.commands[:HelpCommand]
|
31
|
+
cmd = cmd_class.new
|
32
|
+
cmd.app = app
|
33
|
+
cmd.options = app.options = Clip do |p|
|
34
|
+
app.extra_options(p)
|
35
|
+
cmd.extra_options(p)
|
36
|
+
end
|
37
|
+
ARGV.clear
|
38
|
+
ARGV.concat(cmd.options.remainder)
|
39
|
+
cmd
|
40
|
+
end
|
41
|
+
|
42
|
+
# A command can overwrite this method in order to add extra command line options.
|
43
|
+
def extra_options(options)
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
# A command must overwrite this method.
|
48
|
+
def run
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simonmenke-gm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Menke
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-01-
|
12
|
+
date: 2009-01-14 00:00:00 -08:00
|
13
13
|
default_executable: gm
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -21,6 +21,33 @@ dependencies:
|
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 2.2.1
|
23
23
|
version:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: clip
|
26
|
+
version_requirement:
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: 1.0.0
|
32
|
+
version:
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rubigen
|
35
|
+
version_requirement:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.5.1
|
41
|
+
version:
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: reverse-require
|
44
|
+
version_requirement:
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 0.3.1
|
50
|
+
version:
|
24
51
|
description:
|
25
52
|
email: simon.menke@gmail.com
|
26
53
|
executables:
|
@@ -31,20 +58,42 @@ extra_rdoc_files: []
|
|
31
58
|
|
32
59
|
files:
|
33
60
|
- bin/gm
|
61
|
+
- lib/extentions/gem.rb
|
34
62
|
- lib/gm/app.rb
|
63
|
+
- lib/gm/command.rb
|
35
64
|
- lib/gm/configuration_pass.rb
|
36
65
|
- lib/gm/configuration_pass_queue.rb
|
37
66
|
- lib/gm/dsl.rb
|
38
67
|
- lib/gm.rb
|
39
|
-
- lib/passes/configatron.rb
|
40
|
-
- lib/passes/defaults.rb
|
41
|
-
- lib/passes/executables.rb
|
42
|
-
- lib/passes/files.rb
|
43
|
-
- lib/passes/github.rb
|
44
|
-
- lib/passes/rails.rb
|
45
|
-
- lib/passes/specs.rb
|
46
|
-
- lib/passes/tests.rb
|
47
68
|
- README.textile
|
69
|
+
- gm_generators/bin/bin_generator.rb
|
70
|
+
- gm_generators/bin/templates/bin/bin.rb
|
71
|
+
- gm_generators/gem/gem_generator.rb
|
72
|
+
- gm_generators/gem/templates/gmfile.yml
|
73
|
+
- gm_generators/gem/templates/lib/module.rb
|
74
|
+
- gm_generators/gem/templates/README.textile
|
75
|
+
- gm_generators/rails/rails_generator.rb
|
76
|
+
- gm_generators/rails/templates/rails/init.rb
|
77
|
+
- gm_generators/test/templates/test/test_case.rb
|
78
|
+
- gm_generators/test/templates/test/test_helper.rb
|
79
|
+
- gm_generators/test/test_generator.rb
|
80
|
+
- gm_commands/build_command.rb
|
81
|
+
- gm_commands/clean_command.rb
|
82
|
+
- gm_commands/create_command.rb
|
83
|
+
- gm_commands/gen_command.rb
|
84
|
+
- gm_commands/help_command.rb
|
85
|
+
- gm_commands/install_command.rb
|
86
|
+
- gm_commands/spec_command.rb
|
87
|
+
- gm_passes/configatron.rb
|
88
|
+
- gm_passes/defaults.rb
|
89
|
+
- gm_passes/executables.rb
|
90
|
+
- gm_passes/files.rb
|
91
|
+
- gm_passes/github.rb
|
92
|
+
- gm_passes/gm.rb
|
93
|
+
- gm_passes/rails.rb
|
94
|
+
- gm_passes/rubigen.rb
|
95
|
+
- gm_passes/specs.rb
|
96
|
+
- gm_passes/test.rb
|
48
97
|
has_rdoc: true
|
49
98
|
homepage: http://github.com/simonmenke/gm
|
50
99
|
post_install_message:
|