GitHub Sale: sign up for any paid plan this week and pay nothing until January 1, 2009!  [ hide ]

public
Rubygem
Description: Resource-oriented open source Ruby framework for Web apps.
Homepage: http://rubywaves.com/
Clone URL: git://github.com/dyoder/waves.git
refactored generator and added unified task
automatthew (author)
Thu Sep 04 08:05:34 -0700 2008
commit  a13cfb2bce3d8346c25ace7cbd17157d418348e6
tree    f8518fa80ce5d454cc93de336f01d5e82fcd1037
parent  72ca8e53e8f171e735a3cb908ea3bad2654152bf
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
 
 
 
16
17
18
19
20
 
 
21
22
23
 
 
 
 
24
25
26
27
 
 
 
 
 
 
 
 
 
 
 
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
 
 
 
 
 
 
 
43
44
 
 
45
46
47
 
 
48
49
50
51
52
 
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 
 
 
72
73
74
75
76
 
 
 
77
78
79
80
81
82
83
84
85
86
87
 
...
1
 
 
 
 
 
 
 
 
 
 
 
 
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
 
 
 
32
33
34
 
 
35
36
37
38
39
 
40
 
41
42
43
44
45
46
47
48
49
50
51
52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
54
55
56
57
58
59
60
61
 
62
63
64
 
 
65
66
67
68
69
70
71
72
73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
75
76
77
 
 
 
 
78
79
80
81
82
83
84
 
 
 
 
 
 
85
86
0
@@ -1,86 +1,85 @@
0
 namespace :generate do
0
-
0
- desc 'Generate a new controller, with name=<name>'
0
- task :controller do |task|
0
- name = ENV['name']
0
- controller_name = name.camel_case
0
- app_name = ( ENV['app'] || Dir.pwd.split('/').last ).camel_case
0
-
0
- raise "Cannot generate Default yet" if controller_name == 'Default'
0
-
0
- filename = File.expand_path "controllers/#{name}.rb"
0
- if File.exist?(filename)
0
- $stderr.puts "#{filename} already exists"
0
- exit
0
+
0
+ # We're declaring these tasks first so we can add descriptions.
0
+ # The real work is done in the rule, below.
0
+ desc 'Generate new controller, with name=<name>'
0
+ task :controller
0
+
0
+ desc 'Generate new view, with name=<name>'
0
+ task :view
0
+
0
+ desc 'Generate new resource, with name=<name>'
0
+ task :resource
0
+
0
+ # Rake rules are awesome. In the main block, t.name is the task name that matched
0
+ # the regex. t.source is the string returned by the lambda argument to rule.
0
+ rule( /controller|view|resource/ => lambda { |task| basetask(task).camel_case << "s" } ) do |t|
0
+ content = class_template( app_name, t.source, constant_name )
0
+ name = basetask(t.name) << "s"
0
+ File.write( filename( name ), content )
0
+ end
0
+
0
+ desc 'Generate new helper, with name=<name>'
0
+ task :helper do |task|
0
+ content = module_template( app_name, "Helpers", constant_name) do
0
+ "include Waves::Helpers::Default"
0
     end
0
+ File.write( filename( "helpers" ), content )
0
+ end
0
+
0
+end
0
 
0
- controller = <<TEXT
0
-module #{app_name}
0
- module Controllers
0
- class #{controller_name} < Default
0
+desc "Generate resource, controller, view, and helper with name=<name>"
0
+task :generate => %w{ generate:resource generate:controller generate:view generate:helper }
0
 
0
- end
0
- end
0
+# Helper methods
0
+
0
+def app_name
0
+ ( ENV['app'] || Dir.pwd.split('/').last ).camel_case
0
 end
0
-TEXT
0
 
0
- File.write( filename, controller )
0
+def constant_name
0
+ str = ENV['name'].camel_case
0
+ raise "Cannot generate Default yet" if str == 'Default'
0
+ str
0
+end
0
+
0
+def filename( kind )
0
+ path = File.expand_path "#{kind}/#{ENV['name'].snake_case}.rb"
0
+ if File.exist?(path)
0
+ $stderr.puts " Problem encountered:\n #{path} already exists"
0
+ exit
0
   end
0
-
0
- desc 'Generate new view, with name=<name>'
0
- task :view do |task|
0
- name = ENV['name']
0
- view_name = name.camel_case
0
- app_name = ( ENV['app'] || Dir.pwd.split('/').last ).camel_case
0
-
0
- raise "Cannot generate Default yet" if view_name == 'Default'
0
-
0
- filename = File.expand_path "views/#{name}.rb"
0
- if File.exist?(filename)
0
- $stderr.puts "#{filename} already exists"
0
- exit
0
- end
0
+ path
0
+end
0
+
0
+# Rake only pretends to namespace tasks, so to get what we think of as
0
+# the task name, you must split and grab.
0
+def basetask(str)
0
+ str.split(":").last
0
+end
0
 
0
- view = <<TEXT
0
+def class_template(app_name, place, class_name)
0
+ str = <<TEXT
0
 module #{app_name}
0
- module Views
0
- class #{view_name} < Default
0
+ module #{place}
0
+ class #{class_name} < Default
0
 
0
     end
0
   end
0
 end
0
 TEXT
0
+end
0
 
0
- File.write( filename, view )
0
- end
0
-
0
- desc 'Generate a new helper, with name=<name>'
0
- task :helper do |task|
0
- name = ENV['name']
0
- helper_name = name.camel_case
0
- app_name = ( ENV['app'] || Dir.pwd.split('/').last ).camel_case
0
-
0
- raise "Cannot generate Default yet" if helper_name == 'Default'
0
-
0
- filename = File.expand_path "helpers/#{name}.rb"
0
- if File.exist?(filename)
0
- $stderr.puts "#{filename} already exists"
0
- exit
0
- end
0
-
0
- helper = <<TEXT
0
+# This method expects its block to return something usable as a string.
0
+def module_template(app_name, place, module_name, &block)
0
+ str = <<TEXT
0
 module #{app_name}
0
- module Helpers
0
- module #{helper_name}
0
- include Waves::Helpers::Default
0
-
0
+ module #{place}
0
+ module #{module_name}
0
+ #{block.call if block}
0
     end
0
   end
0
 end
0
 TEXT
0
-
0
- File.write( filename, helper )
0
- end
0
-
0
-
0
-end
0
\ No newline at end of file
0
+end

Comments

    No one has commented yet.