merb-gen 0.9.2
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/LICENSE +20 -0
- data/README +10 -0
- data/Rakefile +47 -0
- data/TODO +4 -0
- data/app_generators/merb/USAGE +0 -0
- data/app_generators/merb/merb_generator.rb +36 -0
- data/app_generators/merb/templates/Rakefile +126 -0
- data/app_generators/merb/templates/app/controllers/application.rb +2 -0
- data/app_generators/merb/templates/app/controllers/exceptions.rb +13 -0
- data/app_generators/merb/templates/app/helpers/global_helpers.rb +5 -0
- data/app_generators/merb/templates/app/views/exceptions/internal_server_error.html.erb +216 -0
- data/app_generators/merb/templates/app/views/exceptions/not_acceptable.html.erb +55 -0
- data/app_generators/merb/templates/app/views/exceptions/not_found.html.erb +39 -0
- data/app_generators/merb/templates/app/views/layout/application.html.erb +11 -0
- data/app_generators/merb/templates/autotest/discover.rb +1 -0
- data/app_generators/merb/templates/autotest/merb.rb +149 -0
- data/app_generators/merb/templates/autotest/merb_rspec.rb +202 -0
- data/app_generators/merb/templates/config/environments/development.rb +6 -0
- data/app_generators/merb/templates/config/environments/production.rb +5 -0
- data/app_generators/merb/templates/config/environments/rake.rb +7 -0
- data/app_generators/merb/templates/config/environments/test.rb +5 -0
- data/app_generators/merb/templates/config/init.rb +58 -0
- data/app_generators/merb/templates/config/rack.rb +1 -0
- data/app_generators/merb/templates/config/router.rb +35 -0
- data/app_generators/merb/templates/public/images/merb.jpg +0 -0
- data/app_generators/merb/templates/public/merb.fcgi +22 -0
- data/app_generators/merb/templates/public/stylesheets/master.css +119 -0
- data/app_generators/merb/templates/spec/spec.opts +0 -0
- data/app_generators/merb/templates/spec/spec_helper.rb +11 -0
- data/app_generators/merb/templates/test/test_helper.rb +14 -0
- data/app_generators/merb_flat/merb_flat_generator.rb +22 -0
- data/app_generators/merb_flat/templates/README.txt +10 -0
- data/app_generators/merb_flat/templates/application.rb +15 -0
- data/app_generators/merb_flat/templates/config/framework.rb +5 -0
- data/app_generators/merb_flat/templates/config/init.rb +19 -0
- data/app_generators/merb_flat/templates/views/foo.html.erb +3 -0
- data/app_generators/merb_plugin/merb_plugin_generator.rb +22 -0
- data/app_generators/merb_plugin/templates/LICENSE +20 -0
- data/app_generators/merb_plugin/templates/README +4 -0
- data/app_generators/merb_plugin/templates/Rakefile +44 -0
- data/app_generators/merb_plugin/templates/TODO +5 -0
- data/app_generators/merb_plugin/templates/lib/%base_name%.rb +18 -0
- data/app_generators/merb_plugin/templates/lib/%base_name%/merbtasks.rb +6 -0
- data/app_generators/merb_plugin/templates/spec/%base_name%_spec.rb +7 -0
- data/app_generators/merb_plugin/templates/spec/spec_helper.rb +2 -0
- data/app_generators/merb_plugin/templates/test/%base_name%_test.rb +0 -0
- data/app_generators/merb_plugin/templates/test/test_helper.rb +2 -0
- data/app_generators/merb_very_flat/merb_very_flat_generator.rb +37 -0
- data/app_generators/merb_very_flat/templates/%app_file_name%.rb +15 -0
- data/app_generators/merb_very_flat/templates/README.txt +9 -0
- data/bin/merb-gen +103 -0
- data/lib/merb-gen.rb +38 -0
- data/lib/merb-gen/base.rb +62 -0
- data/lib/merb-gen/helpers.rb +108 -0
- data/merb_default_generators/model/USAGE +0 -0
- data/merb_default_generators/model/model_generator.rb +40 -0
- data/merb_default_generators/model/templates/app/models/%model_file_name%.rb +5 -0
- data/merb_default_generators/resource_controller/USAGE +0 -0
- data/merb_default_generators/resource_controller/resource_controller_generator.rb +74 -0
- data/merb_default_generators/resource_controller/templates/app/controllers/%controller_file_name%.rb +46 -0
- data/merb_default_generators/resource_controller/templates/app/helpers/%controller_file_name%_helper.rb +16 -0
- data/merb_default_generators/resource_controller/templates/app/views/%controller_file_name%/delete.html.erb +3 -0
- data/merb_default_generators/resource_controller/templates/app/views/%controller_file_name%/edit.html.erb +3 -0
- data/merb_default_generators/resource_controller/templates/app/views/%controller_file_name%/index.html.erb +3 -0
- data/merb_default_generators/resource_controller/templates/app/views/%controller_file_name%/new.html.erb +3 -0
- data/merb_default_generators/resource_controller/templates/app/views/%controller_file_name%/show.html.erb +3 -0
- data/merb_generators/controller/USAGE +0 -0
- data/merb_generators/controller/controller_generator.rb +59 -0
- data/merb_generators/controller/templates/app/controllers/%controller_file_name%.rb +18 -0
- data/merb_generators/controller/templates/app/helpers/%controller_file_name%_helper.rb +16 -0
- data/merb_generators/controller/templates/app/views/%controller_file_name%/index.html.erb +1 -0
- data/merb_generators/freezer/USAGE +0 -0
- data/merb_generators/freezer/freezer_generator.rb +25 -0
- data/merb_generators/freezer/templates/script/frozen-merb +43 -0
- data/merb_generators/part_controller/USAGE +0 -0
- data/merb_generators/part_controller/part_controller_generator.rb +58 -0
- data/merb_generators/part_controller/templates/app/helpers/%controller_file_name%_part_helper.rb +16 -0
- data/merb_generators/part_controller/templates/app/parts/%controller_file_name%_part.rb +18 -0
- data/merb_generators/part_controller/templates/app/parts/views/%controller_file_name%_part/index.html.erb +3 -0
- data/merb_generators/resource/USAGE +0 -0
- data/merb_generators/resource/resource_generator.rb +48 -0
- data/rspec_generators/merb_controller_test/merb_controller_test_generator.rb +49 -0
- data/rspec_generators/merb_controller_test/templates/spec/controllers/%controller_full_file_path%_spec.rb +7 -0
- data/rspec_generators/merb_controller_test/templates/spec/helpers/%controller_full_file_path%_helper_spec.rb +5 -0
- data/rspec_generators/merb_model_test/merb_model_test_generator.rb +35 -0
- data/rspec_generators/merb_model_test/templates/spec/models/%model_file_name%_spec.rb +7 -0
- data/rspec_generators/merb_resource_controller_test/merb_resource_controller_test_generator.rb +49 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/controllers/%controller_full_file_path%_spec.rb +7 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/helpers/%controller_full_file_path%_helpers.rb +5 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/views/%controller_full_file_path%/delete.html.erb_spec.rb +1 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/views/%controller_full_file_path%/edit.html.erb_spec.rb +1 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/views/%controller_full_file_path%/index.html.erb_spec.rb +1 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/views/%controller_full_file_path%/new.html.erb_spec.rb +1 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/views/%controller_full_file_path%/show.html.erb_spec.rb +1 -0
- data/test_unit_generators/merb_controller_test/merb_controller_test_generator.rb +47 -0
- data/test_unit_generators/merb_controller_test/templates/test/functional/%controller_full_file_path%_test.rb +17 -0
- data/test_unit_generators/merb_model_test/merb_model_test_generator.rb +34 -0
- data/test_unit_generators/merb_model_test/templates/test/unit/%model_file_name%_test.rb +9 -0
- data/test_unit_generators/merb_resource_controller_test/merb_resource_controller_test_generator.rb +31 -0
- metadata +253 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# make sure we're running inside Merb
|
|
2
|
+
if defined?(Merb::Plugins)
|
|
3
|
+
|
|
4
|
+
# Merb gives you a Merb::Plugins.config hash...feel free to put your stuff in your piece of it
|
|
5
|
+
Merb::Plugins.config[:<%= base_name %>] = {
|
|
6
|
+
:chickens => false
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
Merb::BootLoader.before_app_loads do
|
|
10
|
+
# require code that must be loaded before the application
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Merb::BootLoader.after_app_loads do
|
|
14
|
+
# code that can be required after the application loads
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
Merb::Plugins.add_rakefiles "<%= base_name %>/merbtasks"
|
|
18
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require "merb-gen/helpers"
|
|
2
|
+
require "merb-gen/base"
|
|
3
|
+
|
|
4
|
+
class MerbVeryFlatGenerator < Merb::GeneratorBase
|
|
5
|
+
attr_reader :app_file_name
|
|
6
|
+
|
|
7
|
+
def initialize(args, runtime_options = {})
|
|
8
|
+
@base = File.dirname(__FILE__)
|
|
9
|
+
@name = args.first
|
|
10
|
+
@app_file_name = File.basename(@name).snake_case
|
|
11
|
+
super
|
|
12
|
+
@destination_root = @name
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def manifest
|
|
16
|
+
record do |m|
|
|
17
|
+
|
|
18
|
+
@m = m
|
|
19
|
+
|
|
20
|
+
@assigns = { :app_file_name => app_file_name }
|
|
21
|
+
|
|
22
|
+
FileUtils.mkdir_p @name
|
|
23
|
+
copy_dirs
|
|
24
|
+
copy_files
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
protected
|
|
29
|
+
def banner
|
|
30
|
+
<<-EOS.split("\n").map{|x| x.strip}.join("\n")
|
|
31
|
+
Creates a very flat Merb application stub.
|
|
32
|
+
|
|
33
|
+
USAGE: #{spec.name} path --very-flat"
|
|
34
|
+
EOS
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Merb::Router.prepare do |r|
|
|
2
|
+
r.match('/').to(:controller => '<%= app_file_name %>', :action =>'index')
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
class <%= app_file_name.camel_case %> < Merb::Controller
|
|
6
|
+
def index
|
|
7
|
+
"hi"
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
Merb::Config.use { |c|
|
|
12
|
+
c[:framework] = {},
|
|
13
|
+
c[:session_store] = 'none',
|
|
14
|
+
c[:exception_details] = true
|
|
15
|
+
}
|
data/bin/merb-gen
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
at_exit { exit }
|
|
4
|
+
|
|
5
|
+
command = ARGV.shift if %w(generate destroy update).include?(ARGV[0])
|
|
6
|
+
|
|
7
|
+
%w(rubygems merb-core).each do |file|
|
|
8
|
+
require file
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# start merb
|
|
12
|
+
Merb.start :environment => 'development', :log_level => 'error'
|
|
13
|
+
|
|
14
|
+
# remove dependency
|
|
15
|
+
module Kernel
|
|
16
|
+
undef dependency if defined?(Kernel.dependency)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
%w(rubigen rubigen/scripts/generate rubigen/scripts/destroy
|
|
20
|
+
rubigen/scripts/update fileutils find merb-gen).each do |file|
|
|
21
|
+
require file
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
app_help = <<-EOF
|
|
25
|
+
Application Generators:
|
|
26
|
+
To generate an application use one of the following
|
|
27
|
+
merb-gen app app_name (for a standard application)
|
|
28
|
+
merb-gen app app_name --flat (for a flattened application)
|
|
29
|
+
merb-gen app app_name --very-flat (for a single file application)
|
|
30
|
+
merb-gen frozen-merb (script to run from frozen gems/framework)
|
|
31
|
+
merb-gen plugin plugin_name (creates a plugin gem skeleton)
|
|
32
|
+
|
|
33
|
+
Other Generators:
|
|
34
|
+
merb-gen generators
|
|
35
|
+
with no args will display all availble generators for the current configuration.
|
|
36
|
+
EOF
|
|
37
|
+
|
|
38
|
+
# merb-gen || merb-gen help || merb-gen help app || merb-gen app
|
|
39
|
+
if ARGV.empty? || (ARGV[0] == "help" && ARGV.length == 1) ||
|
|
40
|
+
(ARGV[0] == "help" && ARGV[1] == "app") || (ARGV[0] == "app" && ARGV.length == 1)
|
|
41
|
+
puts app_help
|
|
42
|
+
|
|
43
|
+
# merb-gen generators
|
|
44
|
+
elsif ARGV[0] == "generators"
|
|
45
|
+
# List all the Available Generators
|
|
46
|
+
RubiGen::Base.use_component_sources! Merb.generator_scope
|
|
47
|
+
RubiGen::Scripts::Generate.new.run([])
|
|
48
|
+
|
|
49
|
+
# merb-gen help foo
|
|
50
|
+
elsif ARGV[0] && ARGV[0] == "help"
|
|
51
|
+
begin
|
|
52
|
+
RubiGen::Base.use_component_sources! Merb.generator_scope
|
|
53
|
+
RubiGen::Base.lookup(ARGV[1])
|
|
54
|
+
Merb::ComponentGenerator.run ARGV[1], ARGV[2..-1], ARGV[1], command || "generate"
|
|
55
|
+
rescue RubiGen::GeneratorError
|
|
56
|
+
# List all the Available Generators
|
|
57
|
+
RubiGen::Base.use_component_sources! Merb.generator_scope
|
|
58
|
+
RubiGen::Scripts::Generate.new.run([])
|
|
59
|
+
rescue => e
|
|
60
|
+
puts e.message
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# merb-gen app myapp
|
|
64
|
+
elsif ARGV[0] && ARGV[0] == "app" && ARGV[1] && ARGV[1] !~ /^-/
|
|
65
|
+
app_type = case ARGV[2]
|
|
66
|
+
when "--flat"
|
|
67
|
+
"merb_flat"
|
|
68
|
+
when "--very-flat"
|
|
69
|
+
"merb_very_flat"
|
|
70
|
+
else
|
|
71
|
+
"merb"
|
|
72
|
+
end
|
|
73
|
+
Merb::ApplicationGenerator.run ARGV[1], ARGV[3..-1], app_type, command || "generate"
|
|
74
|
+
|
|
75
|
+
# merb-gen plugin foo
|
|
76
|
+
elsif ARGV[0] && ARGV[0] == "plugin"
|
|
77
|
+
Merb::ApplicationGenerator.run ARGV[1], ARGV[2..-1], "merb_plugin", command || "generate"
|
|
78
|
+
|
|
79
|
+
# merb-gen frozen-merb
|
|
80
|
+
elsif ARGV[0] && ARGV[0] == "frozen-merb"
|
|
81
|
+
Merb::ComponentGenerator.run "frozen-merb", ["frozen-merb"], "freezer", command || "generate"
|
|
82
|
+
|
|
83
|
+
# merb-gen controller foo
|
|
84
|
+
# merb-gen resource foo --test
|
|
85
|
+
elsif ARGV[1] && ARGV[1] !~ /^-/
|
|
86
|
+
Merb::ComponentGenerator.run ARGV[1], ARGV[1..-1], ARGV.first, command || "generate"
|
|
87
|
+
|
|
88
|
+
# catch all merb-gen -??? and display help instead of creating application in -???
|
|
89
|
+
elsif ARGV[0] && ARGV[0] =~ /^-/
|
|
90
|
+
puts app_help
|
|
91
|
+
|
|
92
|
+
else
|
|
93
|
+
begin
|
|
94
|
+
# May be a generator that takes no arguments.
|
|
95
|
+
RubiGen::Base.use_component_sources! Merb.generator_scope
|
|
96
|
+
RubiGen::Base.lookup(ARGV[0])
|
|
97
|
+
Merb::ComponentGenerator.run ARGV[0], ARGV[1..-1], ARGV.first, command || "generate"
|
|
98
|
+
rescue RubiGen::GeneratorError
|
|
99
|
+
puts app_help
|
|
100
|
+
rescue => e
|
|
101
|
+
puts e.message
|
|
102
|
+
end
|
|
103
|
+
end
|
data/lib/merb-gen.rb
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'rubigen'
|
|
2
|
+
module Merb
|
|
3
|
+
require File.join(File.dirname(__FILE__), "merb-gen", "base")
|
|
4
|
+
|
|
5
|
+
class ApplicationGenerator
|
|
6
|
+
def self.run(path, argv, generator, command)
|
|
7
|
+
if command == "destroy"
|
|
8
|
+
puts "destroying app"
|
|
9
|
+
FileUtils.rm_rf(File.expand_path(path))
|
|
10
|
+
puts "done"
|
|
11
|
+
exit
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
source = RubiGen::PathSource.new(:application,
|
|
15
|
+
File.join(File.dirname(__FILE__), "..", "app_generators"))
|
|
16
|
+
RubiGen::Base.reset_sources
|
|
17
|
+
RubiGen::Base.append_sources source
|
|
18
|
+
puts RubiGen::Scripts.const_get(command.capitalize).inspect
|
|
19
|
+
RubiGen::Scripts.const_get(command.capitalize).new.run([File.expand_path(path), *argv], :generator => generator, :backtrace => true)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class ComponentGenerator
|
|
24
|
+
def self.run(name, argv, generator, command)
|
|
25
|
+
app_root = Dir.pwd
|
|
26
|
+
|
|
27
|
+
# Merb.start :environment => 'development'
|
|
28
|
+
|
|
29
|
+
Gem.clear_paths
|
|
30
|
+
Gem.path.unshift(app_root / "gems")
|
|
31
|
+
|
|
32
|
+
require "rubigen/scripts/#{command}"
|
|
33
|
+
|
|
34
|
+
RubiGen::Base.use_component_sources! Merb.generator_scope
|
|
35
|
+
RubiGen::Scripts.const_get(command.capitalize).new.run(argv, :generator => generator, :destination => app_root)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), "helpers")
|
|
2
|
+
|
|
3
|
+
class Merb::GeneratorBase < RubiGen::Base
|
|
4
|
+
include Merb::GeneratorHelpers
|
|
5
|
+
attr_reader :name, :base, :choices, :assigns, :m
|
|
6
|
+
|
|
7
|
+
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
|
8
|
+
Config::CONFIG['ruby_install_name']) unless defined?(DEFAULT_SHEBANG)
|
|
9
|
+
|
|
10
|
+
default_options :shebang => DEFAULT_SHEBANG
|
|
11
|
+
|
|
12
|
+
def initialize(args, runtime_options = {})
|
|
13
|
+
super
|
|
14
|
+
usage if args.empty?
|
|
15
|
+
self.class.use_component_sources! Merb.generator_scope
|
|
16
|
+
@destination_root = Dir.pwd
|
|
17
|
+
@choices ||= []
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def manifest
|
|
21
|
+
record do |m|
|
|
22
|
+
@m = m
|
|
23
|
+
|
|
24
|
+
options["spec"] = true unless options["test"]
|
|
25
|
+
|
|
26
|
+
# Set directories that should be optional based on command-line args
|
|
27
|
+
@choices = %w(test spec)
|
|
28
|
+
|
|
29
|
+
# Set the assigns that should be used for path-interpolation and building templates
|
|
30
|
+
@assigns = {:base_name => File.basename(@name), :test_type => options["spec"] ? "rspec" : "test_unit"}
|
|
31
|
+
|
|
32
|
+
FileUtils.mkdir_p @name
|
|
33
|
+
copy_dirs
|
|
34
|
+
copy_files
|
|
35
|
+
|
|
36
|
+
display_framework_selections
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
protected
|
|
41
|
+
def banner
|
|
42
|
+
<<-EOS.split("\n").map{|x| x.strip}.join("\n")
|
|
43
|
+
Creates a Merb plugin stub.
|
|
44
|
+
|
|
45
|
+
USAGE: #{spec.name} --generate-plugin path"
|
|
46
|
+
EOS
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def add_options!(opts)
|
|
50
|
+
opts.on("-S", "--[no-]spec", "Generate with RSpec") {|s| @options["spec"] = true}
|
|
51
|
+
opts.on("-T", "--[no-]test", "Generate with Test::Unit") {|t| @options["test"] = true}
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def display_framework_selections
|
|
55
|
+
puts
|
|
56
|
+
puts "Your app will use the #{@assigns[:test_type]} test framework."
|
|
57
|
+
if Gem.cache.search("merb_#{@assigns[:test_type]}").size == 0
|
|
58
|
+
puts "You need to install the merb_#{@assigns[:test_type]} gem."
|
|
59
|
+
end
|
|
60
|
+
puts
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
MAIN_BINDING = binding unless defined?(MAIN_BINDING)
|
|
2
|
+
|
|
3
|
+
module Merb::GeneratorHelpers
|
|
4
|
+
|
|
5
|
+
# Remove "template/" from a file name
|
|
6
|
+
#
|
|
7
|
+
# ==== Parameters
|
|
8
|
+
# +path+<String>:: the path to relative-ize
|
|
9
|
+
# +dir+<String>:: a prefix directory to add into the relative-ized path
|
|
10
|
+
#
|
|
11
|
+
# ==== Returns
|
|
12
|
+
# String:: a relative-ized path
|
|
13
|
+
def relative(path, dir = nil)
|
|
14
|
+
path.gsub(/^#{base}\/templates(\/#{dir ? dir + "/" : ""})?/, "")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def interpolate_path(path)
|
|
18
|
+
path.gsub(/%([^\}]*)%/) {|x| assigns[$1.to_sym]}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Establishes the directories of the template layout
|
|
22
|
+
def copy_dirs
|
|
23
|
+
select_template_directories.map { |x| relative(x) }.each do |path|
|
|
24
|
+
m.directory interpolate_path(path)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Copies all files within each directory of the template layout
|
|
29
|
+
def copy_files
|
|
30
|
+
select_template_directories(true).each do |file|
|
|
31
|
+
# Remove "template/" from the glob filename
|
|
32
|
+
dir = relative(file)
|
|
33
|
+
|
|
34
|
+
# Get all the files under the directory that are not directories or in
|
|
35
|
+
# the list of excluded templates above.
|
|
36
|
+
files = Dir["#{file.empty? ? "." : file}/*"].reject { |f| File.directory?(f) }
|
|
37
|
+
|
|
38
|
+
next if files.empty?
|
|
39
|
+
|
|
40
|
+
# We want to templatize any files that contain <% %> characters
|
|
41
|
+
#--
|
|
42
|
+
# This is old code, should we need it:
|
|
43
|
+
# templates, to_copy = files.partition {|file| !(file =~ /\.erb$/) && File.read(file) =~ /<%.*%>/}
|
|
44
|
+
templates, to_copy = files.partition { |file| File.read(file) =~ /<%.*%>/ }
|
|
45
|
+
|
|
46
|
+
# Make the paths relative to the directory we're inspecting
|
|
47
|
+
[to_copy, templates].each do |paths|
|
|
48
|
+
paths.map! { |f| relative(f, dir) }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Copy the files over
|
|
52
|
+
to_copy.each do |filename|
|
|
53
|
+
m.file(
|
|
54
|
+
file_name(dir, filename),
|
|
55
|
+
file_name(interpolate_path(dir), filename)
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Copy the templates over
|
|
60
|
+
templates.each do |filename|
|
|
61
|
+
m.template(
|
|
62
|
+
file_name(dir, filename),
|
|
63
|
+
file_name(interpolate_path(dir), interpolate_path(filename))
|
|
64
|
+
)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
private
|
|
70
|
+
|
|
71
|
+
# Selects all *directories* in the 'templates' folder. This accounts for
|
|
72
|
+
# +choices+ and +options+.
|
|
73
|
+
#
|
|
74
|
+
# ==== Arguments
|
|
75
|
+
# +with_root+<true,false>:: whether or not to include the base/templates
|
|
76
|
+
# directory
|
|
77
|
+
#
|
|
78
|
+
# ==== Returns
|
|
79
|
+
# Array:: all directories found in the 'templates' folder.
|
|
80
|
+
def select_template_directories(with_root=false)
|
|
81
|
+
selected = Dir["#{base}/templates/**/*"].compact.select do |f|
|
|
82
|
+
File.directory?(f) &&
|
|
83
|
+
(!choices.include?(relative(f)) || options[relative(f)])
|
|
84
|
+
end
|
|
85
|
+
selected += ["#{base}/templates"] if with_root
|
|
86
|
+
return selected
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# This was extracted from +copy_files+. It appears to do the same thing as
|
|
90
|
+
# File.join, but it doesn't account for the OS.
|
|
91
|
+
#
|
|
92
|
+
# ==== Arguments
|
|
93
|
+
# +dir+<String>:: the directory to place the file in
|
|
94
|
+
# +name+<String>:: the name of said file
|
|
95
|
+
#
|
|
96
|
+
# ==== Returns
|
|
97
|
+
# String:: a string representing the path for some file
|
|
98
|
+
#
|
|
99
|
+
# ==== Examples
|
|
100
|
+
# > file_name("folder", "some_file.txt")
|
|
101
|
+
# => "folder/some_file.txt"
|
|
102
|
+
# > file_name("", "some_file.txt")
|
|
103
|
+
# => "some_file.txt"
|
|
104
|
+
def file_name(dir, name)
|
|
105
|
+
"#{dir}#{"/" unless dir.empty?}#{name}"
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
class ModelGenerator < Merb::GeneratorBase
|
|
2
|
+
attr_reader :model_attributes, :model_class_name, :model_file_name
|
|
3
|
+
|
|
4
|
+
def initialize(args, runtime_args = {})
|
|
5
|
+
@base = File.dirname(__FILE__)
|
|
6
|
+
super
|
|
7
|
+
@model_file_name = args.shift.snake_case
|
|
8
|
+
@model_class_name = @model_file_name.to_const_string
|
|
9
|
+
@model_attributes = Hash[*(args.map{|a| a.split(":") }.flatten)]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def manifest
|
|
13
|
+
record do |m|
|
|
14
|
+
|
|
15
|
+
@m = m
|
|
16
|
+
|
|
17
|
+
@assigns = {
|
|
18
|
+
:model_file_name => model_file_name,
|
|
19
|
+
:model_attributes => model_attributes,
|
|
20
|
+
:model_class_name => model_class_name
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
copy_dirs
|
|
24
|
+
copy_files
|
|
25
|
+
|
|
26
|
+
m.dependency "merb_model_test", [model_file_name], @assigns
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
protected
|
|
32
|
+
def banner
|
|
33
|
+
<<-EOS.split("\n").map{|x| x.strip}.join("\n")
|
|
34
|
+
Creates a basic Merb model stub.
|
|
35
|
+
|
|
36
|
+
USAGE: #{spec.name} my_model property1:type property1:type
|
|
37
|
+
EOS
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|