simonmenke-gm 0.0.5 → 0.0.6

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 CHANGED
@@ -2,4 +2,10 @@ h1. GM (GemMake)
2
2
 
3
3
  GM is a gem and gemspec builder for use with github.
4
4
 
5
- For more info/docs go to "http://simonmenke.github.com/gm":http://simonmenke.github.com/gm
5
+ For more info/docs go to "http://simonmenke.github.com/gm":http://simonmenke.github.com/gm
6
+
7
+ h2. Todo
8
+
9
+ * Document extendability
10
+ * Document architecture
11
+ * Implement CDN interfaces (rubyforge, github, your site, ...)
@@ -9,6 +9,7 @@ module GM
9
9
  app.emulate = true
10
10
  app.build_gemspec
11
11
 
12
+ app.info "Building your gem..."
12
13
  builder = Gem::Builder.new app.gemspec
13
14
  app.gem_file_name = builder.build
14
15
  system("rm -f pkg/#{app.gem_file_name}")
@@ -8,18 +8,45 @@ module GM
8
8
  def run
9
9
  puts "#{File.basename($0)} <command> <options>"
10
10
  puts options.to_s
11
+ puts ""
11
12
  puts "Commands:"
12
- puts command_descriptions
13
+ command_descriptions
14
+ puts ""
15
+ puts "Passes:"
16
+ passes_in_running_order
17
+ end
18
+
19
+ private
20
+
21
+ def passes_in_running_order
22
+ format = "% 3d %- 20s %s"
23
+
24
+ puts "- initialization"
25
+ ConfigurationPassQueue.new(:initialization).each_with_index do |pass, idx|
26
+ puts format % [idx, pass.name, pass.description]
27
+ end
28
+ puts "- configuration"
29
+ ConfigurationPassQueue.new(:configuration).each_with_index do |pass, idx|
30
+ puts format % [idx, pass.name, pass.description]
31
+ end
32
+ puts "- normal"
33
+ ConfigurationPassQueue.new(:normal).each_with_index do |pass, idx|
34
+ puts format % [idx, pass.name, pass.description]
35
+ end
36
+ puts "- finalization"
37
+ ConfigurationPassQueue.new(:finalization).each_with_index do |pass, idx|
38
+ puts format % [idx, pass.name, pass.description]
39
+ end
13
40
  end
14
41
 
15
42
  def command_descriptions
16
43
  descriptions = []
17
- app.commands.collect do |name, cmd|
44
+ app.commands.each do |name, cmd|
18
45
  descriptions << [name.to_s.underscore.sub('_command', ''), cmd.description]
19
46
  end
20
47
  descriptions.sort { |a,b| a.first <=> b.first }
21
48
  descriptions.collect do |(name, desc)|
22
- "#{name+(" "*(17-name.length))} #{desc}"
49
+ puts "%- 17s %s" % [name, desc]
23
50
  end
24
51
  end
25
52
 
@@ -7,6 +7,8 @@ module GM
7
7
 
8
8
  def run
9
9
  Command.run(:build)
10
+
11
+ app.info "Installing your gem..."
10
12
  system("sudo gem install pkg/#{app.gem_file_name}")
11
13
  end
12
14
 
@@ -7,6 +7,7 @@ module GM
7
7
 
8
8
  def run
9
9
  app.build_gemspec
10
+ app.info "Writing your gemspec..."
10
11
  File.open("#{app.gemspec.name}.gemspec", 'w+') do |f|
11
12
  f.write app.gemspec.to_ruby
12
13
  end
@@ -0,0 +1,4 @@
1
+ general:
2
+ name: <%= app_name %>
3
+ version: 0.0.1
4
+ summary: FIX my gem.
@@ -12,11 +12,10 @@ class TestGenerator < RubiGen::Base
12
12
 
13
13
  def manifest
14
14
  record do |m|
15
-
16
15
  m.directory ''
17
16
  %w( test ).each { |path| m.directory path }
18
17
 
19
- m.template "test/test_helper.rb", "test/test_helper.rb"
18
+ m.template "test/test_helper.rb", "test/test_helper.rb" unless File.exist? "test/test_helper.rb"
20
19
  m.template "test/test_case.rb", "test/#{@file_name}_test.rb" unless @file_name.nil?
21
20
  end
22
21
  end
@@ -0,0 +1,11 @@
1
+
2
+ desc "Remove dir and duplicate paths"
3
+
4
+ finalization_pass :clean_file_list do |spec|
5
+
6
+ spec.files.reject! { |path| File.directory? path }
7
+ spec.files.uniq!
8
+ spec.files.compact!
9
+ spec.files.sort!
10
+
11
+ end
@@ -37,12 +37,12 @@ end
37
37
 
38
38
  configuration_pass :configatron_global, :configatron_defaults do |s|
39
39
  c = configatron
40
- c.configure_from_yaml(File.expand_path('~/.gmrc.yml'))
40
+ c.configure_from_yaml(File.expand_path('~/.gmrc'))
41
41
  end
42
42
 
43
43
  configuration_pass :configatron_local, :configatron_global do |s|
44
44
  c = configatron
45
- c.configure_from_yaml(File.expand_path('gmfile.yml'))
45
+ c.configure_from_yaml(File.expand_path('Gmfile'))
46
46
  end
47
47
 
48
48
  configuration_pass :configatron_normalize, :configatron_local do |s|
@@ -64,7 +64,7 @@ configuration_pass :configatron_exclude_passes, :configatron_local do |s|
64
64
  end
65
65
  end
66
66
 
67
- pass :configatron do |s|
67
+ configuration_pass :configatron, :configatron_exclude_passes do |s|
68
68
  c = configatron
69
69
  s.name = c.general.name
70
70
  s.version = c.general.version
@@ -1,8 +1,10 @@
1
1
 
2
+ desc "Initiate default values for the gemspec"
2
3
  initialization_pass :defaults do |spec|
3
4
 
4
5
  spec.platform = Gem::Platform::RUBY
5
6
  spec.files = []
6
7
  spec.test_files = []
8
+ spec.require_paths = ['lib']
7
9
 
8
10
  end
@@ -1,4 +1,5 @@
1
1
 
2
+ desc "Discover exceutables in bin/"
2
3
  pass :executables do |spec|
3
4
 
4
5
  paths = Dir.glob('bin/*')
data/gm_passes/files.rb CHANGED
@@ -1,14 +1,15 @@
1
1
 
2
- pass :files do |spec|
3
-
4
- files = []
5
- files += Dir.glob('bin/*')
6
- files += Dir.glob('lib/**/*.rb')
7
- files += Dir.glob('*.{txt,rdoc,textile}')
8
- spec.files += files
9
-
2
+ desc "Collect lib files"
3
+ pass :lib_files do |spec|
4
+ spec.files += Dir.glob('lib/**/*.rb')
10
5
  end
11
6
 
12
- pass :require_paths do |spec|
13
- spec.require_paths = ['lib']
7
+ desc "Collect bin files"
8
+ pass :bin_files, :before => :executables do |spec|
9
+ spec.files += Dir.glob('bin/*')
10
+ end
11
+
12
+ desc "Collect text files"
13
+ pass :text_files do |spec|
14
+ spec.files += Dir.glob('*.{txt,rdoc,textile}')
14
15
  end
data/gm_passes/github.rb CHANGED
@@ -1,4 +1,5 @@
1
1
 
2
+ desc "Rename the gem in emulation mode (build, install) so it resembles a GitHub gem."
2
3
  finalization_pass :emulate_github do |spec|
3
4
 
4
5
  if GM::App.emulate?
data/gm_passes/gm.rb CHANGED
@@ -1,7 +1,9 @@
1
1
 
2
- pass :gm_passes do |spec|
2
+ desc "Collect all GM related files (generators, commands, passes)"
3
+ pass :gm_files do |spec|
3
4
 
4
5
  spec.files += Dir.glob('gm_commands/*_command.rb')
5
6
  spec.files += Dir.glob('gm_passes/*.rb')
7
+ spec.files += Dir.glob('gm_generators/**/*')
6
8
 
7
9
  end
data/gm_passes/rails.rb CHANGED
@@ -1,4 +1,5 @@
1
1
 
2
+ desc "Collect all Rails related files (rails/init.rb, tasks/*.rake)"
2
3
  pass :rails do |spec|
3
4
 
4
5
  spec.files += Dir.glob('rails/init.rb')
data/gm_passes/rubigen.rb CHANGED
@@ -1,4 +1,5 @@
1
1
 
2
+ desc "Collect rubigen files"
2
3
  pass :rubigen do |spec|
3
4
 
4
5
  paths = Dir.glob('*generators/**/*')
data/gm_passes/specs.rb CHANGED
@@ -1,4 +1,5 @@
1
1
 
2
+ desc "Collect rspec files"
2
3
  pass :specs do |spec|
3
4
 
4
5
  spec.test_files += Dir.glob('spec/**/*.rb')
data/gm_passes/test.rb CHANGED
@@ -1,4 +1,5 @@
1
1
 
2
+ desc "Collect Test::Unit files"
2
3
  pass :tests do |spec|
3
4
 
4
5
  spec.test_files += Dir.glob('test/**/*.rb')
@@ -1,6 +1,28 @@
1
1
 
2
2
  module Gem # :nodoc:
3
3
 
4
+ def self.find_recent_files(path)
5
+ specs = searcher.find_all path
6
+ specs = specs.inject({}) do |s, spec|
7
+ if s[spec.name].nil?
8
+ s[spec.name] = spec
9
+ elsif (s[spec.name] <=> spec) == -1
10
+ s[spec.name] = spec
11
+ end
12
+ s
13
+ end.values
14
+
15
+ specs.map do |spec|
16
+ searcher.matching_files spec, path
17
+ end.flatten
18
+ end
19
+
20
+ def self.find_recent_resources(path)
21
+ find_recent_files(File.join('..',path)).map do |gem_path|
22
+ File.expand_path(gem_path)
23
+ end
24
+ end
25
+
4
26
  class Specification # :nodoc:
5
27
 
6
28
  alias_method :ruby_code_old, :ruby_code
data/lib/gm.rb CHANGED
@@ -10,8 +10,14 @@ rescue LoadError
10
10
  end
11
11
 
12
12
  module GM
13
+
14
+ def self.app
15
+ GM::App.instance
16
+ end
17
+
13
18
  end
14
19
 
20
+ require File.dirname(__FILE__)+'/extentions/gem'
15
21
  require File.dirname(__FILE__)+'/gm/app'
16
22
  require File.dirname(__FILE__)+'/gm/command'
17
23
  require File.dirname(__FILE__)+'/gm/configuration_pass'
data/lib/gm/app.rb CHANGED
@@ -24,6 +24,7 @@ module GM
24
24
  # extra options provided by the app.
25
25
  def extra_options(options)
26
26
  options.flag 'v', 'verbose', :desc => 'Print more information.'
27
+ options.flag 'd', 'debug', :desc => 'Print debugging information.'
27
28
  end
28
29
 
29
30
  # run the app
@@ -39,6 +40,7 @@ module GM
39
40
  end
40
41
 
41
42
  def build_gemspec
43
+ self.info "Generating your gemspec..."
42
44
  @gemspec = Gem::Specification.new do |s|
43
45
  ConfigurationPassQueue.new(:initialization).run(s)
44
46
  ConfigurationPassQueue.new(:configuration).run(s)
@@ -48,20 +50,31 @@ module GM
48
50
  @gemspec.validate
49
51
  end
50
52
 
53
+ def info(msg)
54
+ puts msg if ARGV.include? '-v' or @options.verbose?
55
+ end
56
+
57
+ def debug(msg)
58
+ puts msg if ARGV.include? '-d' or @options.debug?
59
+ end
60
+
51
61
  private
52
62
 
53
63
  # load all passes
54
64
  def load_passes
55
- require 'reverse_require'
56
- Gem.find_resources('gm_passes/*.rb').uniq.each do |path|
65
+ Gem.find_recent_resources('gm_passes/*.rb').uniq.each do |path|
57
66
  GM::DSL.load_pass path
58
67
  end
68
+ @configuration_passes.each do |fase, passes|
69
+ passes.each do |name, pass|
70
+ pass.dependencies
71
+ end
72
+ end
59
73
  end
60
74
 
61
75
  # load all commands
62
76
  def load_commands
63
- require 'reverse_require'
64
- Gem.find_resources('gm_commands/*_command.rb').uniq.each do |path|
77
+ Gem.find_recent_resources('gm_commands/*_command.rb').uniq.each do |path|
65
78
  GM::Command.load_command path
66
79
  end
67
80
  end
@@ -5,22 +5,54 @@ module GM
5
5
 
6
6
  attr_accessor :proc
7
7
  attr_accessor :name
8
+ attr_accessor :fase
9
+ attr_accessor :description
8
10
  attr_accessor :dependencies
11
+ attr_accessor :run_before
12
+ attr_accessor :run_after
9
13
 
10
- def initialize(name, dependencies=[], &proc)
14
+ def initialize(name, description, options={}, &proc)
11
15
  @name = name.to_sym
12
- @dependencies = [dependencies].flatten.collect { |dep| dep.to_sym }
16
+ @description = description || ""
13
17
  @proc = proc || Proc.new { |spec| }
18
+ @dependencies = nil
19
+
20
+ case options
21
+ when Hash
22
+ @run_after = options.delete(:after)
23
+ @run_before = options.delete(:before)
24
+ else @run_after = [options]
25
+ end
26
+ @run_after = [@run_after].flatten.compact.collect { |dep| dep.to_sym }
27
+ @run_before = [@run_before].flatten.compact.collect { |dep| dep.to_sym }
14
28
  end
15
29
 
16
30
  def register(fase)
17
- GM::App.instance.configuration_passes[fase.to_sym][@name] = self
31
+ @fase = fase.to_sym
32
+ GM.app.configuration_passes[@fase][@name] = self
18
33
  end
19
34
 
20
35
  def run(spec)
36
+ GM.app.debug "Running #{@name} pass."
21
37
  @proc.call spec
22
38
  end
23
39
 
40
+ def dependencies
41
+ return @dependencies unless @dependencies.nil?
42
+ @dependencies = @run_after.dup
43
+ @run_before.each do |dep|
44
+ pass = GM.app.configuration_passes[@fase][dep]
45
+ pass.add_dependency(@name) unless pass.nil?
46
+ end
47
+ @dependencies
48
+ end
49
+
50
+ def add_dependency(dep)
51
+ return if dep.nil?
52
+ @run_after << dep
53
+ @dependencies << dep unless @dependencies.nil?
54
+ end
55
+
24
56
  end
25
57
 
26
58
  end
@@ -2,32 +2,67 @@
2
2
  module GM
3
3
 
4
4
  class ConfigurationPassQueue
5
+ include Enumerable
6
+
7
+ attr_accessor :fase
5
8
  attr_accessor :queue
6
9
  attr_accessor :passes
7
- attr_accessor :processed_passes
8
10
 
9
11
  def initialize(fase)
10
- @passes = GM::App.instance.configuration_passes[fase.to_sym].dup
11
- @processed_passes = []
12
- @queue = @passes.values
12
+ @fase = fase
13
+ reset!
13
14
  end
14
15
 
15
- def run(spec)
16
- until @queue.empty?
17
- @queue.each do |pass|
18
- if run_pass(pass, spec)
19
- @queue.delete(pass)
16
+ def order
17
+ return false unless @queue.nil?
18
+
19
+ unordered_passes = @passes.values.dup
20
+ ordered_passes = []
21
+
22
+ dependencies = Hash.new { |h,k| h[k.to_sym] = [] }
23
+ unordered_passes.each do |pass|
24
+ dependencies[pass.name].concat pass.dependencies.dup
25
+ end
26
+
27
+ dependencies.each do |k,v|
28
+ v.delete(k) if v.include? k
29
+ v.dup.each do |n|
30
+ v.delete(n) if dependencies[n].nil?
31
+ end
32
+ end
33
+
34
+ until unordered_passes.empty?
35
+ unordered_passes.each do |pass|
36
+ if dependencies[pass.name].empty?
37
+ unordered_passes.delete(pass)
38
+ ordered_passes << pass
39
+ dependencies.each do |k,v|
40
+ v.delete pass.name
41
+ end
20
42
  end
21
43
  end
22
44
  end
45
+
46
+ @queue = ordered_passes
47
+ return true
23
48
  end
24
49
 
25
- def run_pass(pass, spec)
26
- return false unless (pass.dependencies - @processed_passes).empty?
27
- pass.run spec
28
- @processed_passes << pass.name
29
- return true
50
+ def run(spec)
51
+ each do |pass|
52
+ pass.run spec
53
+ end
54
+ end
55
+
56
+ def reset!
57
+ @passes = GM::App.instance.configuration_passes[@fase.to_sym].dup
58
+ @queue = nil
30
59
  end
60
+
61
+ def each(&block)
62
+ order
63
+ @queue.each(&block)
64
+ end
65
+
31
66
  end
32
67
 
33
68
  end
data/lib/gm/dsl.rb CHANGED
@@ -11,17 +11,28 @@ module GM
11
11
  end
12
12
  module_function :load_pass
13
13
 
14
- def initialization_pass(name, dependencies=[], &proc)
15
- ConfigurationPass.new(name, dependencies, &proc).register(:initialization)
14
+ def desc(msg)
15
+ @description = msg
16
16
  end
17
- def configuration_pass(name, dependencies=[], &proc)
18
- ConfigurationPass.new(name, dependencies, &proc).register(:configuration)
17
+
18
+ def initialization_pass(name, options={}, &proc)
19
+ ConfigurationPass.new(name, @description, options, &proc).register(:initialization)
20
+ @description = nil
19
21
  end
20
- def pass(name, dependencies=[], &proc)
21
- ConfigurationPass.new(name, dependencies, &proc).register(:normal)
22
+
23
+ def configuration_pass(name, options={}, &proc)
24
+ ConfigurationPass.new(name, @description, options, &proc).register(:configuration)
25
+ @description = nil
22
26
  end
23
- def finalization_pass(name, dependencies=[], &proc)
24
- ConfigurationPass.new(name, dependencies, &proc).register(:finalization)
27
+
28
+ def pass(name, options={}, &proc)
29
+ ConfigurationPass.new(name, @description, options, &proc).register(:normal)
30
+ @description = nil
31
+ end
32
+
33
+ def finalization_pass(name, options={}, &proc)
34
+ ConfigurationPass.new(name, @description, options, &proc).register(:finalization)
35
+ @description = nil
25
36
  end
26
37
 
27
38
  def exclude_pass(name, fase=:normal)
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.5
4
+ version: 0.0.6
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-14 00:00:00 -08:00
12
+ date: 2009-01-15 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -39,15 +39,6 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.5.1
41
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:
51
42
  description:
52
43
  email: simon.menke@gmail.com
53
44
  executables:
@@ -58,8 +49,6 @@ extensions: []
58
49
  extra_rdoc_files: []
59
50
 
60
51
  files:
61
- - bin/gm
62
- - bin/gmm
63
52
  - lib/extentions/gem.rb
64
53
  - lib/gm/app.rb
65
54
  - lib/gm/command.rb
@@ -67,8 +56,19 @@ files:
67
56
  - lib/gm/configuration_pass_queue.rb
68
57
  - lib/gm/dsl.rb
69
58
  - lib/gm.rb
70
- - LICENSE.txt
71
- - README.textile
59
+ - gm_generators/bin/bin_generator.rb
60
+ - gm_generators/bin/templates/bin/bin.rb
61
+ - gm_generators/gem/gem_generator.rb
62
+ - gm_generators/gem/templates/Gmfile
63
+ - gm_generators/gem/templates/lib/module.rb
64
+ - gm_generators/gem/templates/README.textile
65
+ - gm_generators/mit_license/mit_license_generator.rb
66
+ - gm_generators/mit_license/templates/LICENSE.txt
67
+ - gm_generators/rails/rails_generator.rb
68
+ - gm_generators/rails/templates/rails/init.rb
69
+ - gm_generators/test/templates/test/test_case.rb
70
+ - gm_generators/test/templates/test/test_helper.rb
71
+ - gm_generators/test/test_generator.rb
72
72
  - gm_commands/build_command.rb
73
73
  - gm_commands/clean_command.rb
74
74
  - gm_commands/create_command.rb
@@ -76,6 +76,7 @@ files:
76
76
  - gm_commands/help_command.rb
77
77
  - gm_commands/install_command.rb
78
78
  - gm_commands/spec_command.rb
79
+ - gm_passes/clean_file_list.rb
79
80
  - gm_passes/configatron.rb
80
81
  - gm_passes/defaults.rb
81
82
  - gm_passes/executables.rb
@@ -86,19 +87,24 @@ files:
86
87
  - gm_passes/rubigen.rb
87
88
  - gm_passes/specs.rb
88
89
  - gm_passes/test.rb
89
- - gm_generators/bin/bin_generator.rb
90
- - gm_generators/bin/templates/bin/bin.rb
91
- - gm_generators/gem/gem_generator.rb
92
- - gm_generators/gem/templates/README.textile
93
- - gm_generators/gem/templates/gmfile.yml
94
- - gm_generators/gem/templates/lib/module.rb
95
- - gm_generators/mit_license/mit_license_generator.rb
96
- - gm_generators/mit_license/templates/LICENSE.txt
97
- - gm_generators/rails/rails_generator.rb
98
- - gm_generators/rails/templates/rails/init.rb
99
- - gm_generators/test/templates/test/test_case.rb
100
- - gm_generators/test/templates/test/test_helper.rb
101
- - gm_generators/test/test_generator.rb
90
+ - gm_generators/bin
91
+ - gm_generators/bin/templates
92
+ - gm_generators/bin/templates/bin
93
+ - gm_generators/gem
94
+ - gm_generators/gem/templates
95
+ - gm_generators/gem/templates/lib
96
+ - gm_generators/mit_license
97
+ - gm_generators/mit_license/templates
98
+ - gm_generators/rails
99
+ - gm_generators/rails/templates
100
+ - gm_generators/rails/templates/rails
101
+ - gm_generators/test
102
+ - gm_generators/test/templates
103
+ - gm_generators/test/templates/test
104
+ - bin/gm
105
+ - bin/gmm
106
+ - LICENSE.txt
107
+ - README.textile
102
108
  has_rdoc: true
103
109
  homepage: http://github.com/simonmenke/gm
104
110
  post_install_message:
@@ -1,3 +0,0 @@
1
- general:
2
- name: <%= app_name %>
3
- version: 0.0.1