rakegen 0.6.5 → 0.6.6

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest CHANGED
@@ -2,6 +2,8 @@ CHANGELOG
2
2
  lib/rakegen/polite_file.rb
3
3
  lib/rakegen.rb
4
4
  LICENSE
5
+ Manifest
6
+ rakegen.gemspec
5
7
  README
6
8
  test/helper.rb
7
9
  test/test_polite_file.rb
@@ -12,4 +14,3 @@ test/testdata/app/one
12
14
  test/testdata/app/six.textile
13
15
  test/testdata/app/three.rb
14
16
  test/testdata/app/two.txt
15
- Manifest
data/README CHANGED
@@ -12,8 +12,8 @@ Rakegen is a Rake extension for generating and updating projects from templates.
12
12
  gen.executables = %w{ bin/waves-console bin/waves-server }
13
13
  end
14
14
 
15
- This will define a task named, naturally enough, "generate:app". You can invoke it in the usual way, with <tt>rake generate_app</tt>, or you can call it from Ruby:
15
+ This will define a task named, naturally enough, "generate:app". If you define the generator in a rakefile, you can run it with <tt>rake generate:app</tt>. If you're building your own executable, you can call it from Ruby:
16
16
 
17
- Rake::Task["generate:app"].invoke
18
-
19
- At the moment, Rakegen happily clobbers any copyable files with mod dates older than the associated template file. Files produced by template processing always get clobbered. Soon to come is a more courteous file task that asks if you want to clobber or skip.
17
+ generator.invoke
18
+
19
+ Rakegen asks you before clobbering existing files.
@@ -39,9 +39,26 @@ class Rakegen < Rake::TaskLib
39
39
 
40
40
  attr_accessor :executables
41
41
 
42
- # Create a Rakegen task named <em>task_name</em>. Default task name is +app+.
43
- def initialize(name=:app)
44
- @name = name
42
+ # Create a generator. The task_name becomes the primary Rake task, which has dependency
43
+ # tasks that get all the work done. You can use a string to supply a namespaced task name,
44
+ # such as "waves:app".
45
+ #
46
+ # In the required block, you must define the source and target directories. You may also define
47
+ # a list of excludes, a list of executables, assign variables for templates, and lambdas for processing
48
+ # different kinds of templates, keyed by the file extension.
49
+ #
50
+ # generator = Rakegen.new do |gen|
51
+ # gen.source = "some/place"
52
+ # gen.target = "some/where/else"
53
+ # gen.excludes = "**/*.yaml"
54
+ # gen.executables = %w{ bin/console bin/server }
55
+ # gen.template_assigns[:monkey] = "howler"
56
+ # gen.template_processors[:erb] = lambda { |src, tgt| MyErb.process(src, tgt) }
57
+ # end
58
+ #
59
+
60
+ def initialize(task_name = :app)
61
+ @name = task_name
45
62
  @excludes = []
46
63
  @executables = []
47
64
  @template_processors = {}
@@ -54,7 +71,10 @@ class Rakegen < Rake::TaskLib
54
71
  end
55
72
  end
56
73
 
57
- yield self # if block_given?
74
+ yield self
75
+
76
+ raise "You must supply a source." unless @source
77
+ raise "You must supply a target." unless @target
58
78
 
59
79
  Dir.chdir(@source) do
60
80
  @files = Rake::FileList.new("**/*").exclude(*@excludes).to_a
@@ -75,6 +95,19 @@ class Rakegen < Rake::TaskLib
75
95
  define
76
96
  end
77
97
 
98
+ # Invoke the primary task. In other words, run the generator.
99
+ def invoke
100
+ Rake::Task[name].invoke
101
+ end
102
+
103
+ # A rake file-based task that assesses neededness of target files based on user confirmation,
104
+ # rather than relative timestamps. As with Rake#file, you can do arbitrary stuff
105
+ # in the block:
106
+ #
107
+ # polite_file "some/target/file" do
108
+ # str = File.read("/etc/profile").reverse
109
+ # File.write( "some/target/file", str)
110
+ # end
78
111
 
79
112
  def polite_file(args, &block)
80
113
  PoliteFileTask.define_task(args, &block)
@@ -85,12 +118,14 @@ class Rakegen < Rake::TaskLib
85
118
  path ? File.join(@source, path) : @source
86
119
  end
87
120
 
88
- # If given a path, joins it to @targe. Otherwise returns @target
121
+ # If given a path, joins it to @target. Otherwise returns @target
89
122
  def target(path=nil)
90
123
  path ? File.join(@target, path) : @target
91
124
  end
92
125
 
93
- # Define the necessary Rakegen tasks
126
+ private
127
+
128
+ # Define all the generator's dependent tasks
94
129
  def define
95
130
  desc "Create or update project using Rakegen"
96
131
  task name => @all_files.map { |f| target(f) }
@@ -1,6 +1,6 @@
1
1
  class PoliteFileTask < Rake::FileTask
2
2
 
3
- # Is this file task needed? Yes if doesn't exist (or different content, TBI)
3
+ # Is this file task needed? Yes if doesn't exist or if the user agrees to clobber.
4
4
  def needed?
5
5
  return true unless File.exist?(name)
6
6
  return confirm?
@@ -1,20 +1,20 @@
1
1
 
2
- # Gem::Specification for Rakegen-0.6.5
2
+ # Gem::Specification for Rakegen-0.6.6
3
3
  # Originally generated by Echoe
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = %q{rakegen}
7
- s.version = "0.6.5"
7
+ s.version = "0.6.6"
8
8
 
9
9
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
10
  s.authors = ["Matthew King"]
11
- s.date = %q{2008-09-01}
11
+ s.date = %q{2008-09-03}
12
12
  s.description = %q{Generation and updation of projects from templates. Rake-powered, for sustainable blah blah.}
13
13
  s.email = %q{automatthew@gmail.com}
14
14
  s.extra_rdoc_files = ["CHANGELOG", "lib/rakegen/polite_file.rb", "lib/rakegen.rb", "LICENSE", "README"]
15
- s.files = ["CHANGELOG", "lib/rakegen/polite_file.rb", "lib/rakegen.rb", "LICENSE", "README", "test/helper.rb", "test/test_polite_file.rb", "test/test_rakegen.rb", "test/testdata/app/alpha/beta/five.erb", "test/testdata/app/four.erb", "test/testdata/app/one", "test/testdata/app/six.textile", "test/testdata/app/three.rb", "test/testdata/app/two.txt", "Manifest", "rakegen.gemspec"]
15
+ s.files = ["CHANGELOG", "lib/rakegen/polite_file.rb", "lib/rakegen.rb", "LICENSE", "Manifest", "rakegen.gemspec", "README", "test/helper.rb", "test/test_polite_file.rb", "test/test_rakegen.rb", "test/testdata/app/alpha/beta/five.erb", "test/testdata/app/four.erb", "test/testdata/app/one", "test/testdata/app/six.textile", "test/testdata/app/three.rb", "test/testdata/app/two.txt"]
16
16
  s.has_rdoc = true
17
- s.homepage = %q{}
17
+ s.homepage = %q{http://rakegen.rubyforge.org}
18
18
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rakegen", "--main", "README"]
19
19
  s.require_paths = ["lib"]
20
20
  s.rubyforge_project = %q{rakegen}
@@ -49,7 +49,7 @@ end
49
49
  # require dep
50
50
  # end
51
51
  #
52
- # Version = '0.6.5'
52
+ # Version = '0.6.6'
53
53
  #
54
54
  # task :default => [:test]
55
55
  #
@@ -61,6 +61,7 @@ end
61
61
  # p.summary = "Generation and updation of projects from templates. Rake-powered, for sustainable blah blah."
62
62
  # p.author = "Matthew King"
63
63
  # p.email = "automatthew@gmail.com"
64
+ # p.url = "http://rakegen.rubyforge.org"
64
65
  # p.ignore_pattern = /^(\.git).+/
65
66
  # p.test_pattern = "test/test_*.rb"
66
67
  # p.dependencies << "rake"
@@ -33,7 +33,7 @@ context "A file_copy task" do
33
33
  Rake::Task[@target].needed?.should == true
34
34
  end
35
35
 
36
- specify "should ask if file exists (no idea how to test Highline stuff)" do
36
+ specify "should ask if file exists" do
37
37
  File.open(@target, "w") { |f| f.print "two" }
38
38
  # run in shell and answer "n". Also, find better way to test.
39
39
  puts "Answer no to the next prompt"
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), "helper")
2
2
 
3
- context "Simple rakegen" do
3
+ context "A Simple rakegen" do
4
4
 
5
5
  before(:each) do
6
6
  @target = File.join(TEST_DIR, "app_target")
@@ -37,36 +37,36 @@ context "Simple rakegen" do
37
37
  rm_r @target if File.exist?(@target)
38
38
  end
39
39
 
40
- specify "should have all directories in the directories list" do
40
+ specify "includes all directories in the directories list" do
41
41
  @generator.directories.to_a.should == @directories
42
42
  # @generator.template_files.should == 1
43
43
  end
44
44
 
45
- specify "should have all non-erb files in the copy list" do
45
+ specify "includes all non-erb files in the copy list" do
46
46
  @generator.copy_files.to_a.should == @copy_files
47
47
  end
48
-
49
- specify "should have all .erb files in the template list" do
48
+
49
+ specify "includes all .erb files in the template list" do
50
50
  @generator.template_files.should == @template_files
51
51
  end
52
52
 
53
- specify "should have an empty excludes list" do
53
+ specify "has an empty excludes list" do
54
54
  @generator.excludes.should == ["**/two.*"]
55
55
  end
56
56
 
57
- specify "should have an executables list" do
57
+ specify "has an executables list" do
58
58
  @generator.executables.should == ["one"]
59
59
  end
60
60
 
61
- specify "should have a working erb template_processor" do
61
+ specify "has a working erb template_processor" do
62
62
  @generator.template_processors["erb"].should.respond_to :call
63
63
  @generator.template_processors["erb"].call("#{TEST_APP}/four.erb", "#{TEST_DIR}/catch.txt")
64
64
  File.open("#{TEST_DIR}/catch.txt", "r").read.should == "Yossarian jumped."
65
65
  rm "#{TEST_DIR}/catch.txt"
66
66
  end
67
67
 
68
- specify "should copy or process all files and directories" do
69
- Rake::Task["waves:app"].invoke
68
+ specify "can copy or process all files and directories using #invoke" do
69
+ @generator.invoke
70
70
  @copy_files.each do |f|
71
71
  assert File.exist?(File.join(@target, f))
72
72
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rakegen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 0.6.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew King
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-01 00:00:00 -05:00
12
+ date: 2008-09-03 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -59,6 +59,8 @@ files:
59
59
  - lib/rakegen/polite_file.rb
60
60
  - lib/rakegen.rb
61
61
  - LICENSE
62
+ - Manifest
63
+ - rakegen.gemspec
62
64
  - README
63
65
  - test/helper.rb
64
66
  - test/test_polite_file.rb
@@ -69,10 +71,8 @@ files:
69
71
  - test/testdata/app/six.textile
70
72
  - test/testdata/app/three.rb
71
73
  - test/testdata/app/two.txt
72
- - Manifest
73
- - rakegen.gemspec
74
74
  has_rdoc: true
75
- homepage: ""
75
+ homepage: http://rakegen.rubyforge.org
76
76
  post_install_message:
77
77
  rdoc_options:
78
78
  - --line-numbers