tap-gen 0.3.1 → 0.7.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.
Files changed (33) hide show
  1. data/History +4 -0
  2. data/MIT-LICENSE +1 -1
  3. data/README +1 -4
  4. data/lib/tap/generator/base.rb +99 -33
  5. data/lib/tap/generator/destroy.rb +20 -4
  6. data/lib/tap/generator/generate.rb +20 -4
  7. data/lib/tap/generator/generators/config.rb +5 -17
  8. data/lib/tap/generator/generators/env.rb +106 -0
  9. data/lib/tap/generator/generators/resource.rb +3 -3
  10. data/lib/tap/generator/generators/root.rb +25 -38
  11. data/lib/tap/generator/generators/tap.rb +49 -0
  12. data/lib/tap/generator/helpers.rb +49 -0
  13. data/lib/tap/generator/preview.rb +1 -1
  14. data/lib/tap/generator/version.rb +1 -1
  15. data/tap-gen.gemspec +67 -0
  16. data/templates/tap/generator/generators/generator/resource.erb +6 -3
  17. data/templates/tap/generator/generators/generator/test.erb +3 -3
  18. data/templates/tap/generator/generators/middleware/test.erb +2 -2
  19. data/templates/tap/generator/generators/root/README +1 -1
  20. data/templates/tap/generator/generators/root/gemspec +11 -11
  21. data/templates/tap/generator/generators/root/tap.yml +0 -0
  22. data/templates/tap/generator/generators/root/{Rakefile → tapfile} +28 -36
  23. data/templates/tap/generator/generators/root/test/{tap_test_helper.rb → test_helper.rb} +0 -0
  24. data/templates/tap/generator/generators/tap/profile.erb +9 -0
  25. data/templates/tap/generator/generators/tap/tap.erb +3 -0
  26. data/templates/tap/generator/generators/task/resource.erb +0 -1
  27. data/templates/tap/generator/generators/task/test.erb +2 -2
  28. metadata +43 -16
  29. data/cmd/destroy.rb +0 -27
  30. data/cmd/generate.rb +0 -27
  31. data/lib/tap/generator/generators/command.rb +0 -21
  32. data/templates/tap/generator/generators/command/command.erb +0 -30
  33. data/templates/tap/generator/generators/root/Rapfile +0 -11
@@ -7,14 +7,14 @@ module Tap::Generator::Generators
7
7
  config :test, true, &c.switch # Specifies creation of a test file
8
8
 
9
9
  def manifest(m, const_name)
10
- const = Tap::Env::Constant.new(const_name.camelize)
10
+ const = ::Tap::Env::Constant.new(const_name.camelize)
11
11
 
12
- task_path = path('lib', "#{const.path}.rb")
12
+ task_path = path('lib', "#{const.relative_path}.rb")
13
13
  m.directory File.dirname(task_path)
14
14
  m.template task_path, "resource.erb", :const => const
15
15
 
16
16
  if test
17
- test_path = path('test', "#{const.path}_test.rb")
17
+ test_path = path('test', "#{const.relative_path}_test.rb")
18
18
  m.directory File.dirname(test_path)
19
19
  m.template test_path, "test.erb", :const => const
20
20
  end
@@ -11,12 +11,12 @@ module Tap::Generator::Generators
11
11
  # project
12
12
  # |- MIT-LICENSE
13
13
  # |- README
14
- # |- Rakefile
15
14
  # |- lib
16
15
  # |- project.gemspec
17
16
  # |- tap.yml
17
+ # |- tapfile
18
18
  # `- test
19
- # `- tap_test_helper.rb
19
+ # `- test_helper.rb
20
20
  #
21
21
  class Root < Tap::Generator::Base
22
22
 
@@ -28,25 +28,32 @@ module Tap::Generator::Generators
28
28
  config :summary, "" # The project summary
29
29
  end
30
30
 
31
- config :env, false, &c.switch # Create a full tap.yml file
32
- config :license, true, &c.switch # Create an MIT-LICENSE
33
- config :history, true, &c.switch # Create History file
34
- config :rapfile, false, &c.switch # Create a Rapfile
35
- config :rakefile, true, &c.switch # Create a Rakefile
31
+ config :env, false, &c.switch # Create a full tap.yml file
32
+ config :license, true, &c.switch # Create an MIT-LICENSE
33
+ config :history, true, &c.switch # Create History file
34
+ config :tapfile, true, &c.switch # Create a Tapfile
35
+
36
+ helper do
37
+ def titleize(str)
38
+ str.split(/[-_]+/).collect do |sub|
39
+ sub.capitalize
40
+ end.join('-')
41
+ end
42
+ end
36
43
 
37
44
  # ::args ROOT, PROJECT_NAME=basename(ROOT)
38
45
  def manifest(m, root, project_name=nil)
39
- r = Tap::Root.new(File.expand_path(root, destination_root))
40
- project_name = File.basename(r.root) if project_name == nil
46
+ r = destination_root.root(root)
47
+ project_name = File.basename(r.path) if project_name == nil
41
48
 
42
- m.directory r.root
43
- m.directory r['lib']
44
- m.directory r['test']
49
+ m.directory r.path
50
+ m.directory r.path('lib')
51
+ m.directory r.path('test')
45
52
 
46
53
  template_files do |source, target|
47
54
  case
48
55
  when File.directory?(source)
49
- m.directory r[target]
56
+ m.directory r.path(target)
50
57
  next
51
58
  when source =~ /gemspec$/
52
59
  locals = gemspec.config.to_hash.merge(
@@ -54,38 +61,18 @@ module Tap::Generator::Generators
54
61
  :license => license,
55
62
  :history => history
56
63
  )
57
- m.template r[project_name + '.gemspec'], source, locals
64
+ m.template r.path("#{project_name}.gemspec"), source, locals
58
65
  next
59
- when source =~ /Rakefile$/
60
- next unless rakefile
61
- when source =~ /Rapfile$/
62
- next unless rapfile
66
+ when source =~ /tapfile$/
67
+ next unless tapfile
63
68
  when source =~ /MIT-LICENSE$/
64
69
  next unless license
65
70
  end
66
71
 
67
- m.template r[target], source, :project_name => project_name, :license => license
72
+ m.template r.path(target), source, :project_name => project_name, :license => license
68
73
  end
69
74
 
70
- m.file(r['History']) if history
71
- m.file(r['tap.yml']) do |file|
72
- Configurable::Utils.dump(Tap::Env.configurations, file) do |key, config|
73
- # get the description
74
- desc = config.attributes[:desc]
75
- doc = desc.to_s
76
- doc = desc.comment if doc.empty?
77
-
78
- # wrap as lines
79
- lines = Lazydoc::Utils.wrap(doc, 78).collect {|line| "# #{line}"}
80
- lines << "" unless lines.empty?
81
-
82
- # setup formatting
83
- default = config.default
84
- leader = key == 'root' || default == nil ? '# ' : ''
85
- config = YAML.dump({key => default})[5..-1].strip.gsub(/\n+/, "\n#{leader}")
86
- "#{lines.join("\n")}#{leader}#{config}\n\n"
87
- end if env
88
- end
75
+ m.file(r.path('History')) if history
89
76
  end
90
77
 
91
78
  end
@@ -0,0 +1,49 @@
1
+ require 'tap/generator/base'
2
+
3
+ module Tap
4
+ module Generator
5
+ module Generators
6
+ # :startdoc::generator make a faster tap
7
+ class Tap < Tap::Generator::Base
8
+
9
+ config :name, 'tap', &c.string # sets the tap executable name
10
+ config :profile, 'profile.sh', &c.string # sets the profile script name
11
+
12
+ def manifest(m)
13
+ load_paths = load_paths('lazydoc', 'configurable', 'tap')
14
+ bin_path = File.join(load_paths.last.chomp('lib'), 'bin/tapexe')
15
+
16
+ m.template name, 'tap.erb', {
17
+ :load_paths => load_paths,
18
+ :bin_path => bin_path
19
+ }
20
+
21
+ m.on(:generate) do
22
+ log :chmod, "0755 #{name}"
23
+ FileUtils.chmod(0755, name)
24
+ end
25
+
26
+ m.template profile, 'profile.erb', {
27
+ :generator => self.class,
28
+ :filename => profile
29
+ }
30
+ end
31
+
32
+ def load_paths(*gem_names)
33
+ gem_names.collect! do |gem_name|
34
+ load_path = $LOAD_PATH.find do |path|
35
+ path =~ /\/#{gem_name}[-\d\.]*\/lib$/
36
+ end
37
+
38
+ if load_path.nil?
39
+ raise "could not determine load path for: #{gem_name}"
40
+ end
41
+
42
+ File.expand_path(load_path)
43
+ end
44
+ end
45
+
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,49 @@
1
+ module Tap
2
+ module Generator
3
+ module Helpers
4
+ attr_reader :helper_registry
5
+
6
+ def helpers
7
+ return @helpers if @helpers
8
+
9
+ helpers = []
10
+ ancestors.each do |ancestor|
11
+ next unless ancestor.kind_of?(Helpers)
12
+ helpers.concat ancestor.helper_registry
13
+ end
14
+
15
+ helpers
16
+ end
17
+
18
+ def cache_helpers(on=true)
19
+ @helpers = nil
20
+ @helpers = self.helpers if on
21
+ end
22
+
23
+ protected
24
+
25
+ def helper(const_name='helper', &block)
26
+ helper = Module.new(&block)
27
+ const_set(const_name.to_s.camelize, helper) if const_name
28
+ helper_registry << helper
29
+ helper
30
+ end
31
+
32
+ private
33
+
34
+ def self.initialize(base)
35
+ base.instance_variable_set(:@helper_registry, [])
36
+ base.instance_variable_set(:@helpers, nil)
37
+ end
38
+
39
+ def self.extended(base)
40
+ Helpers.initialize(base)
41
+ end
42
+
43
+ def inherited(base)
44
+ super
45
+ Helpers.initialize(base)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -45,7 +45,7 @@ module Tap
45
45
  # Returns the path of path, relative to destination_root. If path
46
46
  # is destination_root, '.' will be returned.
47
47
  def relative_path(path)
48
- path = Root::Utils.relative_path(destination_root, path, destination_root) || path
48
+ path = destination_root.relative_path(path) || path
49
49
  path.empty? ? "." : path
50
50
  end
51
51
 
@@ -1,7 +1,7 @@
1
1
  module Tap
2
2
  module Generator
3
3
  MAJOR = 0
4
- MINOR = 3
4
+ MINOR = 7
5
5
  TINY = 0
6
6
 
7
7
  VERSION="#{MAJOR}.#{MINOR}.#{TINY}"
@@ -0,0 +1,67 @@
1
+ $:.unshift File.expand_path('../../tap/lib', __FILE__)
2
+ $:.unshift File.expand_path('../../tap-test/lib', __FILE__)
3
+ $:.unshift File.expand_path('../../tap-gen/lib', __FILE__)
4
+
5
+ require 'tap/version'
6
+ require 'tap/test/version'
7
+ require 'tap/generator/version'
8
+
9
+ Gem::Specification.new do |s|
10
+ s.name = 'tap-gen'
11
+ s.version = Tap::Generator::VERSION
12
+ s.author = 'Simon Chiang'
13
+ s.email = 'simon.a.chiang@gmail.com'
14
+ s.homepage = File.join(Tap::WEBSITE, 'tap-gen')
15
+ s.platform = Gem::Platform::RUBY
16
+ s.summary = 'Generators for Tap'
17
+ s.require_path = 'lib'
18
+ s.rubyforge_project = 'tap'
19
+ s.add_dependency('tap', ">= #{Tap::VERSION}")
20
+ s.add_development_dependency('tap-test', ">= #{Tap::Test::VERSION}")
21
+ s.has_rdoc = true
22
+ s.rdoc_options.concat %W{--main README -S -N --title Tap-Generator}
23
+
24
+ # list extra rdoc files here.
25
+ s.extra_rdoc_files = %W{
26
+ History
27
+ README
28
+ MIT-LICENSE
29
+ }
30
+
31
+ # list the files you want to include here. you can
32
+ # check this manifest using 'rap print_manifest'
33
+ s.files = %W{
34
+ lib/tap/generator/arguments.rb
35
+ lib/tap/generator/base.rb
36
+ lib/tap/generator/destroy.rb
37
+ lib/tap/generator/generate.rb
38
+ lib/tap/generator/generators/config.rb
39
+ lib/tap/generator/generators/env.rb
40
+ lib/tap/generator/generators/generator.rb
41
+ lib/tap/generator/generators/middleware.rb
42
+ lib/tap/generator/generators/resource.rb
43
+ lib/tap/generator/generators/root.rb
44
+ lib/tap/generator/generators/tap.rb
45
+ lib/tap/generator/generators/task.rb
46
+ lib/tap/generator/helpers.rb
47
+ lib/tap/generator/manifest.rb
48
+ lib/tap/generator/preview.rb
49
+ lib/tap/generator/version.rb
50
+ tap-gen.gemspec
51
+ tap.yml
52
+ templates/tap/generator/generators/generator/resource.erb
53
+ templates/tap/generator/generators/generator/test.erb
54
+ templates/tap/generator/generators/middleware/resource.erb
55
+ templates/tap/generator/generators/middleware/test.erb
56
+ templates/tap/generator/generators/root/MIT-LICENSE
57
+ templates/tap/generator/generators/root/README
58
+ templates/tap/generator/generators/root/gemspec
59
+ templates/tap/generator/generators/root/tap.yml
60
+ templates/tap/generator/generators/root/tapfile
61
+ templates/tap/generator/generators/root/test/test_helper.rb
62
+ templates/tap/generator/generators/tap/profile.erb
63
+ templates/tap/generator/generators/tap/tap.erb
64
+ templates/tap/generator/generators/task/resource.erb
65
+ templates/tap/generator/generators/task/test.erb
66
+ }
67
+ end
@@ -13,17 +13,20 @@ class <%= const.name %> < Tap::Generator::Base
13
13
  def manifest(m, *inputs)
14
14
 
15
15
  # make a directory
16
- # m.directory path
16
+ # m.directory 'path'
17
17
 
18
18
  # make a file
19
- # m.file path do |file|
19
+ # m.file 'path' do |file|
20
20
  # file << content
21
21
  # end
22
22
 
23
23
  # template a file in the templates directory using ERB.
24
24
  # The last argument defines a hash of local variables
25
25
  # for use in the template (here config is used).
26
- m.template "<%= const.const_name.underscore %>_file.txt", "template_file.erb", config.to_hash
26
+ m.template "<%= const.const_name.underscore %>_file.txt", 'template_file.erb', config.to_hash
27
+
28
+ # do something only on generate/destroy
29
+ # on(:generate) {}
27
30
  end
28
31
 
29
32
  end <% module_nest(const.nesting, ' ') { target } end %>
@@ -1,6 +1,6 @@
1
- require File.join(File.dirname(__FILE__), '<%= '../' * const.nesting_depth %>tap_test_helper.rb')
2
- require '<%= const.path %>'
3
- require 'tap/generator/preview.rb'
1
+ require File.expand_path('<%= '../' * const.nesting_depth %>../test_helper', __FILE__)
2
+ require '<%= const.relative_path %>'
3
+ require 'tap/generator/preview'
4
4
 
5
5
  class <%= const.name %>Test < Test::Unit::TestCase
6
6
 
@@ -1,5 +1,5 @@
1
- require File.join(File.dirname(__FILE__), '<%= '../' * const.nesting_depth %>tap_test_helper.rb')
2
- require '<%= const.path %>'
1
+ require File.expand_path('<%= '../' * const.nesting_depth %>../test_helper', __FILE__)
2
+ require '<%= const.relative_path %>'
3
3
 
4
4
  class <%= const.name %>Test < Test::Unit::TestCase
5
5
  acts_as_tap_test
@@ -1,4 +1,4 @@
1
- = <%= project_name.capitalize %>
1
+ = <%= titleize project_name %>
2
2
 
3
3
  == Description
4
4
 
@@ -1,17 +1,17 @@
1
1
  Gem::Specification.new do |s|
2
- s.name = "<%= project_name %>"
3
- s.version = "0.0.1"
4
- s.author = "<%= name %>"
5
- s.email = "<%= email %>"
6
- s.homepage = "<%= homepage %>"
2
+ s.name = '<%= project_name %>'
3
+ s.version = '0.0.1'
4
+ s.author = '<%= name %>'
5
+ s.email = '<%= email %>'
6
+ s.homepage = '<%= homepage %>'
7
7
  s.platform = Gem::Platform::RUBY
8
- s.summary = "<%= summary %>"
9
- s.require_path = "lib"
10
- s.rubyforge_project = "<%= rubyforge_project %>"
11
- s.add_dependency("tap", "= <%= Tap::VERSION %>")
12
- s.add_development_dependency("tap-test")
8
+ s.summary = '<%= summary %>'
9
+ s.require_path = 'lib'
10
+ s.rubyforge_project = '<%= rubyforge_project %>'
11
+ s.add_dependency('tap', '= <%= Tap::VERSION %>')
12
+ s.add_development_dependency('tap-test')
13
13
  s.has_rdoc = true
14
- s.rdoc_options.concat %W{--main README -S -N --title <%= project_name.capitalize %>}
14
+ s.rdoc_options.concat %W{--main README -S -N --title <%= titleize(project_name) %>}
15
15
 
16
16
  # list extra rdoc files here.
17
17
  s.extra_rdoc_files = %W{
@@ -1,21 +1,18 @@
1
- require 'rake'
2
- require 'rake/testtask'
3
- require 'rake/rdoctask'
4
- require 'rake/gempackagetask'
5
-
6
1
  #
7
2
  # Gem specification
8
3
  #
9
4
 
10
5
  def gemspec
11
- data = File.read('<%= project_name %>.gemspec')
12
- spec = nil
13
- Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
14
- spec
6
+ @gemspec ||= TOPLEVEL_BINDING.eval(File.read('<%= project_name %>.gemspec'))
15
7
  end
16
8
 
17
- Rake::GemPackageTask.new(gemspec) do |pkg|
18
- pkg.need_tar = true
9
+ desc 'build the gem'
10
+ task :gem, :dir => 'pkg' do |config|
11
+ output = `gem build '<%= project_name %>.gemspec'`
12
+ output =~ /File: (.*)$/
13
+
14
+ FileUtils.mkdir_p(config.dir) unless File.exists?(config.dir)
15
+ FileUtils.mv($1, File.join(config.dir, $1), :force => true)
19
16
  end
20
17
 
21
18
  desc 'Prints the gemspec manifest.'
@@ -27,18 +24,18 @@ task :print_manifest do
27
24
  files[File.expand_path(file)] = [File.exists?(file), file]
28
25
  files
29
26
  end
30
-
27
+
31
28
  # gather non-rdoc/pkg files for the project
32
29
  # and add to the files list if they are not
33
30
  # included already (marking by the absence
34
31
  # of a label)
35
32
  Dir.glob("**/*").each do |file|
36
- next if file =~ /^(rdoc|pkg|backup)/ || File.directory?(file)
37
-
33
+ next if file =~ /^(rdoc|pkg|test)/ || File.directory?(file)
34
+
38
35
  path = File.expand_path(file)
39
36
  files[path] = ["", file] unless files.has_key?(path)
40
37
  end
41
-
38
+
42
39
  # sort and output the results
43
40
  files.values.sort_by {|exists, file| file }.each do |entry|
44
41
  puts "%-5s %s" % entry
@@ -50,36 +47,31 @@ end
50
47
  #
51
48
 
52
49
  desc 'Generate documentation.'
53
- Rake::RDocTask.new(:rdoc) do |rdoc|
54
- spec = gemspec
50
+ task :rdoc, :rebuild => false, :dir => 'rdoc' do |config|
51
+ require 'rdoc/rdoc'
52
+ require 'cdoc'
55
53
 
56
- rdoc.rdoc_dir = 'rdoc'
57
- rdoc.options.concat(spec.rdoc_options)
58
- rdoc.rdoc_files.include( spec.extra_rdoc_files )
54
+ if config.rebuild && File.directory?(config.dir)
55
+ FileUtils.rm_r(config.dir)
56
+ end
59
57
 
60
- files = spec.files.select {|file| file =~ /^lib.*\.rb$/}
61
- rdoc.rdoc_files.include( files )
58
+ files = gemspec.files.select {|file| file =~ /^lib.*\.rb$/ }.uniq
59
+ files += gemspec.extra_rdoc_files
62
60
 
63
61
  # Using CDoc to template your RDoc will result in configurations being
64
62
  # listed with documentation in a subsection following attributes. Not
65
63
  # necessary, but nice.
66
- require 'cdoc'
67
- rdoc.template = 'cdoc/cdoc_html_template'
68
- rdoc.options << '--fmt' << 'cdoc'
64
+ cdoc_options = ['--fmt', 'cdoc', '--template', 'cdoc/cdoc_html_template']
65
+ args = ['-o', config.dir] + cdoc_options + gemspec.rdoc_options + files
66
+ RDoc::RDoc.new.document(args)
69
67
  end
70
68
 
71
69
  #
72
70
  # Test tasks
73
71
  #
74
72
 
75
- desc 'Default: Run tests.'
76
- task :default => :test
77
-
78
- desc 'Run tests.'
79
- Rake::TestTask.new(:test) do |t|
80
- t.test_files = Dir.glob( File.join('test', ENV['pattern'] || '**/*_test.rb') )
81
- t.ruby_opts = ['-rubygems']
82
- t.verbose = true
83
- t.warning = true
84
- end
85
-
73
+ desc 'Run the tests'
74
+ task :test do
75
+ tests = Dir.glob('test/**/*_test.rb')
76
+ sh('ruby', '-w', '-e', 'ARGV.dup.each {|test| load test}', *tests)
77
+ end