tap-gen 0.1.3 → 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 CHANGED
@@ -1,3 +1,14 @@
1
+ == 0.2.0 / 2009-06-17
2
+
3
+ Updates for Tap-0.18.0
4
+
5
+ * added actions to generators (via on)
6
+ * fixed handling of generators with no template dir
7
+ * fixed logging of paths not relative to pwd
8
+ * reworked task, generator generators as variations of
9
+ a resource generator
10
+ * added middleware generator
11
+
1
12
  == 0.1.3 / 2009-06-06
2
13
 
3
14
  * bug fix for tap-0.17.1
@@ -142,38 +142,61 @@ module Tap
142
142
  # Makes (or destroys) the root and each of the targets, relative
143
143
  # to root. Options are passed onto directory.
144
144
  def directories(root, targets, options={})
145
- directory(root, options)
145
+ results = [directory(root, options)]
146
146
  targets.each do |target|
147
- directory(File.join(root, target), options)
147
+ results << directory(File.join(root, target), options)
148
148
  end
149
+ results
149
150
  end
150
151
 
151
152
  # Makes (or destroys) the target by templating the source using
152
153
  # the specified attributes. Source is expanded relative to
153
154
  # template_dir. Options are passed onto file.
154
155
  def template(target, source, attributes={}, options={})
156
+ raise "no template dir is set" unless template_dir
157
+
155
158
  template_path = File.expand_path(source, template_dir)
156
- templater = Support::Templater.new(File.read(template_path), attributes)
159
+ templater = Templater.new(File.read(template_path), attributes)
157
160
 
158
161
  file(target, options) do |file|
159
- file << templater.build
162
+ file << templater.build(nil, template_path)
160
163
  end
161
164
  end
162
165
 
163
166
  # Yields each source file under template_dir to the block, with
164
167
  # a target path of the source relative to template_dir.
165
168
  def template_files
169
+ raise "no template dir is set" unless template_dir
170
+
171
+ targets = []
166
172
  Dir.glob(template_dir + "/**/*").sort.each do |source|
167
173
  next unless File.file?(source)
168
174
 
169
175
  target = Tap::Root::Utils.relative_path(template_dir, source)
170
176
  yield(source, target)
177
+ targets << target
178
+ end
179
+ targets
180
+ end
181
+
182
+ # Calls the block when specified by the action for self.
183
+ def on(*actions, &block)
184
+ if actions.include?(action)
185
+ block.call
186
+ else
187
+ nil
171
188
  end
172
189
  end
173
190
 
191
+ # Returns the action for self (ie :generate or :destroy)
192
+ def action
193
+ raise NotImplementedError
194
+ end
195
+
174
196
  # Logs the action with the relative filepath from Dir.pwd to path.
175
197
  def log_relative(action, path)
176
- log(action, Tap::Root::Utils.relative_path(Dir.pwd, path))
198
+ relative_path = Tap::Root::Utils.relative_path(Dir.pwd, path)
199
+ log(action, relative_path || path)
177
200
  end
178
201
  end
179
202
  end
@@ -55,6 +55,11 @@ module Tap
55
55
  target
56
56
  end
57
57
 
58
+ # Returns :destroy
59
+ def action
60
+ :destroy
61
+ end
62
+
58
63
  end
59
64
  end
60
65
  end
@@ -12,14 +12,20 @@ module Tap
12
12
  end
13
13
 
14
14
  name = argv.shift
15
- env, const = eeek('generator', name)
15
+ env, const = seek('generator', name, false)
16
16
 
17
17
  unless const
18
18
  raise "unknown generator: #{name}"
19
19
  end
20
20
 
21
- generator = const.constantize.parse(argv)
22
- generator.template_dir = env.class_path(:templates, generator) {|dir| File.directory?(dir) }
21
+ generator = const.constantize.parse!(argv)
22
+
23
+ # do not reassign dir unless a template directory
24
+ # is found, otherwise you get an error
25
+ if template_dir = env.class_path(:templates, generator) {|dir| File.directory?(dir) }
26
+ generator.template_dir = template_dir
27
+ end
28
+
23
29
  generator.extend(mod).process(*argv)
24
30
  end
25
31
  end
@@ -1,4 +1,4 @@
1
- autoload(:Tempfile, 'tempfile')
1
+ require 'tempfile'
2
2
 
3
3
  module Tap
4
4
  module Generator
@@ -62,6 +62,11 @@ module Tap
62
62
  target
63
63
  end
64
64
 
65
+ # Returns :generate
66
+ def action
67
+ :generate
68
+ end
69
+
65
70
  protected
66
71
 
67
72
  # Ask the user interactively whether to force collision.
@@ -1,3 +1,5 @@
1
+ require 'tap/generator/base'
2
+
1
3
  module Tap::Generator::Generators
2
4
 
3
5
  # :startdoc::generator a new tap command
@@ -1,3 +1,5 @@
1
+ require 'tap/generator/base'
2
+
1
3
  module Tap::Generator::Generators
2
4
 
3
5
  # :startdoc::generator a config file generator
@@ -1,11 +1,11 @@
1
- require 'tap/generator/generators/task'
1
+ require 'tap/generator/generators/resource'
2
2
 
3
3
  module Tap::Generator::Generators
4
4
 
5
5
  # :startdoc::generator a generator task and test
6
6
  #
7
7
  # Generates a new generator.
8
- class Generator < Tap::Generator::Generators::Task
8
+ class Generator < Resource
9
9
 
10
10
  def manifest(m, const_name)
11
11
  super
@@ -0,0 +1,10 @@
1
+ require 'tap/generator/generators/resource'
2
+
3
+ module Tap::Generator::Generators
4
+
5
+ # :startdoc::generator middleware and a test
6
+ #
7
+ # Generates a new Tap::Middleware and an associated test file.
8
+ class Middleware < Resource
9
+ end
10
+ end
@@ -0,0 +1,23 @@
1
+ require 'tap/generator/base'
2
+ require 'tap/env'
3
+
4
+ module Tap::Generator::Generators
5
+ class Resource < Tap::Generator::Base
6
+
7
+ config :test, true, &c.switch # Specifies creation of a test file
8
+
9
+ def manifest(m, const_name)
10
+ const = Tap::Env::Constant.new(const_name.camelize)
11
+
12
+ task_path = path('lib', "#{const.path}.rb")
13
+ m.directory File.dirname(task_path)
14
+ m.template task_path, "resource.erb", :const => const
15
+
16
+ if test
17
+ test_path = path('test', "#{const.path}_test.rb")
18
+ m.directory File.dirname(test_path)
19
+ m.template test_path, "test.erb", :const => const
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  require 'tap/generator/base'
2
- require 'tap/constants'
2
+ require 'tap/version'
3
3
 
4
4
  module Tap::Generator::Generators
5
5
 
@@ -1,27 +1,10 @@
1
- require 'tap/env'
1
+ require 'tap/generator/generators/resource'
2
2
 
3
3
  module Tap::Generator::Generators
4
4
 
5
5
  # :startdoc::generator a task and test
6
6
  #
7
7
  # Generates a new Tap::Task and an associated test file.
8
- class Task < Tap::Generator::Base
9
-
10
- config :test, true, &c.switch # Specifies creation of a test file
11
-
12
- def manifest(m, const_name)
13
- const = Tap::Env::Constant.new(const_name.camelize)
14
-
15
- task_path = path('lib', "#{const.path}.rb")
16
- m.directory File.dirname(task_path)
17
- m.template task_path, "task.erb", :const => const
18
-
19
- if test
20
- test_path = path('test', "#{const.path}_test.rb")
21
- m.directory File.dirname(test_path)
22
- m.template test_path, "test.erb", :const => const
23
- end
24
- end
25
-
8
+ class Task < Resource
26
9
  end
27
10
  end
@@ -34,8 +34,12 @@ module Tap
34
34
  # content built to files.
35
35
  attr_accessor :preview
36
36
 
37
+ # The action for self (default :preview)
38
+ attr_accessor :action
39
+
37
40
  def self.extended(base) # :nodoc:
38
41
  base.instance_variable_set(:@preview, {})
42
+ base.instance_variable_set(:@action, :preview)
39
43
  end
40
44
 
41
45
  # Returns the path of path, relative to destination_root. If path
@@ -1,7 +1,7 @@
1
1
  require 'tap/generator/base'
2
2
 
3
- <% redirect do |target| %># :startdoc::generator <replace with manifest summary>
4
- # <replace with command line description>
3
+ <% redirect do |target| %># :startdoc::generator <replace with summary>
4
+ # <replace with description>
5
5
 
6
6
  # <%= const.name %> Documentation
7
7
  class <%= const.name %> < Tap::Generator::Base
@@ -0,0 +1,18 @@
1
+ require 'tap/middleware'
2
+
3
+ <% redirect do |target| %># :startdoc::middleware <replace with summary>
4
+ # <replace with description>
5
+
6
+ # <%= const.name %> Documentation
7
+ class <%= const.name %> < Tap::Middleware
8
+
9
+ attr_reader :stack
10
+
11
+ def initialize(stack)
12
+ @stack = stack
13
+ end
14
+
15
+ def call(node, inputs=[])
16
+ stack.call(node, inputs)
17
+ end
18
+ end <% module_nest(const.nesting, ' ') { target } end %>
@@ -0,0 +1,15 @@
1
+ require File.join(File.dirname(__FILE__), '<%= '../' * const.nesting_depth %>tap_test_helper.rb')
2
+ require '<%= const.path %>'
3
+
4
+ class <%= const.name %>Test < Test::Unit::TestCase
5
+ acts_as_tap_test
6
+
7
+ def test_<%= const.basename %>_calls_stack
8
+ runlist = []
9
+ n = app.node {|input| runlist << input}
10
+ m = app.use(<%= const.const_name %>)
11
+
12
+ m.call(n, ['input'])
13
+ assert_equal ['input'], runlist
14
+ end
15
+ end
@@ -20,8 +20,7 @@ Gem::Specification.new do |s|
20
20
  <%= license ? " MIT-LICENSE\n" : '' %>
21
21
  }
22
22
 
23
- # list the files you want to include here. you can
24
- # check this manifest using 'rap print_manifest'
23
+ # list the files you want to include here.
25
24
  s.files = %W{
26
25
  tap.yml
27
26
  }
@@ -0,0 +1,15 @@
1
+ require 'tap/task'
2
+
3
+ <% redirect do |target| %># :startdoc::task <replace with summary>
4
+ # <replace with description>
5
+
6
+ # <%= const.name %> Documentation
7
+ class <%= const.name %> < Tap::Task
8
+
9
+ config :message, 'goodnight' # A sample config
10
+
11
+ def process(name)
12
+ log message, name
13
+ "#{message} #{name}"
14
+ end
15
+ end <% module_nest(const.nesting, ' ') { target } end %>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tap-gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Chiang
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-06 00:00:00 -06:00
12
+ date: 2009-06-17 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.17.1
23
+ version: 0.18.0
24
24
  version:
25
25
  description:
26
26
  email: simon.a.chiang@gmail.com
@@ -43,21 +43,25 @@ files:
43
43
  - lib/tap/generator/generators/command.rb
44
44
  - lib/tap/generator/generators/config.rb
45
45
  - lib/tap/generator/generators/generator.rb
46
+ - lib/tap/generator/generators/middleware.rb
47
+ - lib/tap/generator/generators/resource.rb
46
48
  - lib/tap/generator/generators/root.rb
47
49
  - lib/tap/generator/generators/task.rb
48
50
  - lib/tap/generator/manifest.rb
49
51
  - lib/tap/generator/preview.rb
50
52
  - tap.yml
51
53
  - templates/tap/generator/generators/command/command.erb
52
- - templates/tap/generator/generators/generator/task.erb
54
+ - templates/tap/generator/generators/generator/resource.erb
53
55
  - templates/tap/generator/generators/generator/test.erb
56
+ - templates/tap/generator/generators/middleware/resource.erb
57
+ - templates/tap/generator/generators/middleware/test.erb
54
58
  - templates/tap/generator/generators/root/MIT-LICENSE
55
59
  - templates/tap/generator/generators/root/README
56
60
  - templates/tap/generator/generators/root/Rakefile
57
61
  - templates/tap/generator/generators/root/Rapfile
58
62
  - templates/tap/generator/generators/root/gemspec
59
63
  - templates/tap/generator/generators/root/test/tap_test_helper.rb
60
- - templates/tap/generator/generators/task/task.erb
64
+ - templates/tap/generator/generators/task/resource.erb
61
65
  - templates/tap/generator/generators/task/test.erb
62
66
  - History
63
67
  - README
@@ -1,16 +0,0 @@
1
- require 'tap/task'
2
-
3
- <% redirect do |target| %># :startdoc::task <replace with manifest summary>
4
- # <replace with command line description>
5
-
6
- # <%= const.name %> Documentation
7
- class <%= const.name %> < Tap::Task
8
-
9
- # <config file documentation>
10
- config :message, 'goodnight' # a sample config
11
-
12
- def process(name)
13
- log message, name
14
- "#{message} #{name}"
15
- end
16
- end <% module_nest(const.nesting, ' ') { target } end %>