gm 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.txt +22 -0
- data/README.textile +13 -0
- data/bin/gem-make +6 -0
- data/bin/gm +6 -0
- data/gm_behaviors/author_behavior.rb +29 -0
- data/gm_behaviors/bin_files_behavior.rb +10 -0
- data/gm_behaviors/dependencies_behavior.rb +22 -0
- data/gm_behaviors/executables_behavior.rb +13 -0
- data/gm_behaviors/general_behavior.rb +41 -0
- data/gm_behaviors/github_behavior.rb +11 -0
- data/gm_behaviors/gm_files_behavior.rb +13 -0
- data/gm_behaviors/lib_files_behavior.rb +10 -0
- data/gm_behaviors/rails_behavior.rb +11 -0
- data/gm_behaviors/rdoc_behavior.rb +34 -0
- data/gm_behaviors/rspec_behavior.rb +10 -0
- data/gm_behaviors/rubigen_behavior.rb +13 -0
- data/gm_behaviors/rubyforge_behavior.rb +12 -0
- data/gm_behaviors/test_behavior.rb +10 -0
- data/gm_behaviors/text_files_behavior.rb +10 -0
- data/gm_commands/build_command.rb +25 -0
- data/gm_commands/build_gemspec_command.rb +35 -0
- data/gm_commands/clean_command.rb +14 -0
- data/gm_commands/config_command.rb +42 -0
- data/gm_commands/create_command.rb +10 -0
- data/gm_commands/gen_command.rb +31 -0
- data/gm_commands/help_command.rb +246 -0
- data/gm_commands/install_command.rb +17 -0
- data/gm_commands/publish_command.rb +33 -0
- data/gm_commands/spec_command.rb +14 -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/Gmfile +4 -0
- data/gm_generators/gem/templates/README.textile +0 -0
- data/gm_generators/gem/templates/lib/module.rb +4 -0
- data/gm_generators/mit_license/mit_license_generator.rb +17 -0
- data/gm_generators/mit_license/templates/LICENSE.txt +22 -0
- data/gm_generators/rails/rails_generator.rb +18 -0
- data/gm_generators/rails/templates/rails/init.rb +1 -0
- data/gm_generators/test/templates/test_case.rb.erb +5 -0
- data/gm_generators/test/templates/test_helper.rb.erb +7 -0
- data/gm_generators/test/test_generator.rb +26 -0
- data/gm_networks/github_network.rb +72 -0
- data/gm_networks/rubyforge_network.rb +90 -0
- data/lib/autotest/discover.rb +3 -0
- data/lib/autotest/gm.rb +37 -0
- data/lib/extentions/gem.rb +27 -0
- data/lib/gm.rb +30 -0
- data/lib/gm/app.rb +108 -0
- data/lib/gm/behavior.rb +23 -0
- data/lib/gm/command.rb +70 -0
- data/lib/gm/configuration.rb +20 -0
- data/lib/gm/documentation.rb +38 -0
- data/lib/gm/helpers.rb +20 -0
- data/lib/gm/loader.rb +84 -0
- data/lib/gm/network.rb +29 -0
- data/lib/gm/system.rb +16 -0
- data/test/command_test.rb +106 -0
- data/test/gem_extentions_test.rb +31 -0
- data/test/system_test.rb +17 -0
- data/test/test_helper.rb +12 -0
- metadata +159 -0
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2009 Simon Menke
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
4
|
+
obtaining a copy of this software and associated documentation
|
5
|
+
files (the "Software"), to deal in the Software without
|
6
|
+
restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the
|
9
|
+
Software is furnished to do so, subject to the following
|
10
|
+
conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/README.textile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
h1. GM (GemMake)
|
2
|
+
|
3
|
+
GM is a gem and gemspec builder for use with github.
|
4
|
+
|
5
|
+
For the documentation go to "http://simonmenke.github.com/gm":http://simonmenke.github.com/gm
|
6
|
+
|
7
|
+
For bug reports and feature requests go to "http://menke.lighthouseapp.com/projects/23688-gm":http://menke.lighthouseapp.com/projects/23688-gm
|
8
|
+
|
9
|
+
h2. Todo
|
10
|
+
|
11
|
+
* Document extendability
|
12
|
+
* Document architecture
|
13
|
+
* Implement CDN interfaces (rubyforge, github, your site, ...)
|
data/bin/gem-make
ADDED
data/bin/gm
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
class AuthorBehavior < GM::Behavior
|
3
|
+
|
4
|
+
specify_conf do |root|
|
5
|
+
|
6
|
+
root.map :author do |author|
|
7
|
+
author.should_be_present
|
8
|
+
|
9
|
+
author.conf(:name) do |name|
|
10
|
+
name.should_be_present
|
11
|
+
name.should_be_a String
|
12
|
+
name.should_not_be_empty
|
13
|
+
end
|
14
|
+
|
15
|
+
author.conf(:email) do |email|
|
16
|
+
email.should_be_present
|
17
|
+
email.should_be_a String
|
18
|
+
email.should_not_be_empty
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def run
|
25
|
+
spec.author = config[:author][:name]
|
26
|
+
spec.email = config[:author][:email]
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
class DependenciesBehavior < GM::Behavior
|
3
|
+
|
4
|
+
specify_conf do |root|
|
5
|
+
|
6
|
+
# root.list :dependencies do |dependency|
|
7
|
+
# dependency.conf do |c|
|
8
|
+
# c.should_be_a String
|
9
|
+
# c.should_not_be_empty
|
10
|
+
# end
|
11
|
+
# end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
def run
|
16
|
+
(config[:dependencies] || []).each do |dependency|
|
17
|
+
gem, requirement = dependency.strip.split(/\s+/, 2)
|
18
|
+
spec.add_dependency gem.strip, requirement.strip
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
class GeneralBehavior < GM::Behavior
|
3
|
+
|
4
|
+
specify_conf do |root|
|
5
|
+
|
6
|
+
root.map :general do |general|
|
7
|
+
general.should_be_present
|
8
|
+
|
9
|
+
general.conf(:name) do |s|
|
10
|
+
s.should_be_present
|
11
|
+
s.should_be_a String
|
12
|
+
s.should_not_be_empty
|
13
|
+
end
|
14
|
+
|
15
|
+
general.conf(:version) do |s|
|
16
|
+
s.should_be_present
|
17
|
+
s.should_be_a String
|
18
|
+
s.should_not_be_empty
|
19
|
+
end
|
20
|
+
|
21
|
+
general.conf(:summary) do |s|
|
22
|
+
s.should_be_a String
|
23
|
+
s.should_not_be_empty
|
24
|
+
end
|
25
|
+
|
26
|
+
general.conf(:homepage) do |s|
|
27
|
+
s.should_be_a String
|
28
|
+
s.should_not_be_empty
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def run
|
35
|
+
spec.name ||= config[:general][:name]
|
36
|
+
spec.version = config[:general][:version]
|
37
|
+
spec.summary = config[:general][:summary]
|
38
|
+
spec.homepage = config[:general][:homepage]
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
class GmFilesBehavior < GM::Behavior
|
3
|
+
|
4
|
+
desc "Collect all GM related files (generators, commands, networks, behaviors)"
|
5
|
+
|
6
|
+
def run
|
7
|
+
spec.files += Dir.glob('gm_commands/*_command.rb')
|
8
|
+
spec.files += Dir.glob('gm_behaviors/*_behavior.rb')
|
9
|
+
spec.files += Dir.glob('gm_networks/*_network.rb')
|
10
|
+
spec.files += Dir.glob('gm_generators/**/*')
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
class RdocBehavior < GM::Behavior
|
3
|
+
|
4
|
+
specify_conf do |root|
|
5
|
+
|
6
|
+
root.map :rdoc do |rdoc|
|
7
|
+
|
8
|
+
rdoc.conf(:enabled) do |s|
|
9
|
+
s.should_be_present
|
10
|
+
end
|
11
|
+
|
12
|
+
rdoc.conf(:extra_files) do |s|
|
13
|
+
end
|
14
|
+
|
15
|
+
rdoc.conf(:options) do |s|
|
16
|
+
s.should_be_a String
|
17
|
+
s.should_not_be_empty
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def run
|
25
|
+
if config[:rdoc] and config[:rdoc][:enabled]
|
26
|
+
spec.has_rdoc = true
|
27
|
+
spec.extra_rdoc_files = config[:rdoc][:extra_files]
|
28
|
+
spec.rdoc_options = config[:rdoc][:options]
|
29
|
+
else
|
30
|
+
spec.has_rdoc = false
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
class RubigenBehavior < GM::Behavior
|
3
|
+
|
4
|
+
desc "Collect rubigen files"
|
5
|
+
|
6
|
+
def run
|
7
|
+
paths = Dir.glob('*generators/**/*')
|
8
|
+
paths.reject! { |path| File.directory? path }
|
9
|
+
paths.reject! { |path| File.basename(path)[0,1] == "." }
|
10
|
+
spec.files += paths
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
class BuildCommand < GM::Command
|
3
|
+
|
4
|
+
desc "Build the gem"
|
5
|
+
banner "build"
|
6
|
+
doc <<-DOC
|
7
|
+
build a gem and put the result in pkg/
|
8
|
+
DOC
|
9
|
+
|
10
|
+
def extra_options(p)
|
11
|
+
p.flag 'E', 'no-emulation', :desc => 'Don\'t emulate any network'
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
GM::Command.run(:build_gemspec, [(options.no_emulation? ? '-E' : nil)].compact)
|
16
|
+
|
17
|
+
app.info "Building your gem..."
|
18
|
+
builder = Gem::Builder.new app.gemspec
|
19
|
+
app.gem_file_name = builder.build
|
20
|
+
sh("rm -f pkg/#{app.gem_file_name}",
|
21
|
+
"mkdir -p pkg",
|
22
|
+
"mv #{app.gem_file_name} pkg/")
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
class BuildGemspecCommand < GM::Command
|
3
|
+
|
4
|
+
def extra_options(p)
|
5
|
+
p.flag 'E', 'no-emulation', :desc => 'Don\'t emulate any network'
|
6
|
+
end
|
7
|
+
|
8
|
+
def run
|
9
|
+
app.info "Generating your gemspec..."
|
10
|
+
app.emulate = !options.no_emulation?
|
11
|
+
app.gemspec = Gem::Specification.new
|
12
|
+
|
13
|
+
GM::Behavior.behaviors.each do |name,klass|
|
14
|
+
behavior = klass.new
|
15
|
+
behavior.run
|
16
|
+
end
|
17
|
+
|
18
|
+
clean_file_list
|
19
|
+
spec.validate
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def clean_file_list
|
25
|
+
spec.files.reject! { |path| File.directory? path }
|
26
|
+
spec.files.reject! { |path| File.basename(path) == '.DS_Store' }
|
27
|
+
spec.files.reject! { |path| File.basename(path) == '.gitignore' }
|
28
|
+
spec.files.reject! { |path| path.include? '/.svn' }
|
29
|
+
spec.files.reject! { |path| path.include? '/.git' }
|
30
|
+
spec.files.uniq!
|
31
|
+
spec.files.compact!
|
32
|
+
spec.files.sort!
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
class ConfigCommand < GM::Command
|
3
|
+
|
4
|
+
desc "Manage your GM configurations."
|
5
|
+
banner "config [show edit]"
|
6
|
+
doc <<-DOC
|
7
|
+
With the edit argument the config command allows you to edit your glabal GM configurations.
|
8
|
+
With the show argument the config command will display all the configurations made in your environment.
|
9
|
+
|
10
|
+
The edit option is the default.
|
11
|
+
DOC
|
12
|
+
|
13
|
+
EMPTY_CONFIG = <<-EOC
|
14
|
+
author:
|
15
|
+
name:
|
16
|
+
email:
|
17
|
+
github:
|
18
|
+
username:
|
19
|
+
EOC
|
20
|
+
|
21
|
+
def run
|
22
|
+
case argv.first
|
23
|
+
when 'edit' then run_edit
|
24
|
+
when 'show' then run_show
|
25
|
+
else run_edit
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def run_edit
|
30
|
+
path = File.expand_path('~/.gmrc')
|
31
|
+
unless File.exist? path
|
32
|
+
File.open(path, 'w+') { |f| f.write EMPTY_CONFIG }
|
33
|
+
end
|
34
|
+
sh("$EDITOR '#{path}'")
|
35
|
+
end
|
36
|
+
|
37
|
+
def run_show
|
38
|
+
GM::Command.run(:build_gemspec)
|
39
|
+
puts config.to_yaml
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|