automatthew-rakegen 0.6.5 → 0.6.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/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: automatthew-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 -07:00
12
+ date: 2008-09-03 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -56,6 +56,8 @@ files:
56
56
  - lib/rakegen/polite_file.rb
57
57
  - lib/rakegen.rb
58
58
  - LICENSE
59
+ - Manifest
60
+ - rakegen.gemspec
59
61
  - README
60
62
  - test/helper.rb
61
63
  - test/test_polite_file.rb
@@ -66,10 +68,8 @@ files:
66
68
  - test/testdata/app/six.textile
67
69
  - test/testdata/app/three.rb
68
70
  - test/testdata/app/two.txt
69
- - Manifest
70
- - rakegen.gemspec
71
71
  has_rdoc: true
72
- homepage: ""
72
+ homepage: http://rakegen.rubyforge.org
73
73
  post_install_message:
74
74
  rdoc_options:
75
75
  - --line-numbers