merb-gen 0.9.7 → 0.9.8
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/Rakefile +27 -9
- data/bin/merb-gen +21 -3
- data/lib/generators/merb/merb_flat.rb +83 -14
- data/lib/generators/merb/merb_full.rb +66 -20
- data/lib/generators/merb/merb_very_flat.rb +51 -10
- data/lib/generators/migration.rb +5 -2
- data/lib/generators/resource_controller.rb +2 -2
- data/lib/generators/templates/application/{merb → common}/Rakefile +15 -7
- data/lib/generators/templates/application/common/dotgitignore +18 -0
- data/lib/generators/templates/application/common/merb.thor +1221 -0
- data/lib/generators/templates/application/merb/app/views/exceptions/not_acceptable.html.erb +1 -1
- data/lib/generators/templates/application/merb/app/views/exceptions/not_found.html.erb +1 -1
- data/lib/generators/templates/application/merb/config/environments/development.rb +1 -0
- data/lib/generators/templates/application/merb/config/environments/staging.rb +7 -0
- data/lib/generators/templates/application/merb/config/environments/test.rb +2 -1
- data/lib/generators/templates/application/merb/config/init.rb +1 -4
- data/lib/generators/templates/application/merb/config/router.rb +13 -7
- data/lib/generators/templates/application/merb/public/favicon.ico +0 -0
- data/lib/generators/templates/application/merb/public/robots.txt +5 -0
- data/lib/generators/templates/application/merb_flat/{application.rb → application.rbt} +1 -1
- data/lib/generators/templates/application/merb_flat/config/init.rb +119 -2
- data/lib/generators/templates/application/merb_flat/test/test_helper.rb +19 -0
- data/lib/generators/templates/application/merb_plugin/Rakefile +17 -22
- data/lib/generators/templates/application/merb_plugin/spec/spec_helper.rb +0 -1
- data/lib/generators/templates/application/merb_plugin/test/test_helper.rb +0 -1
- data/lib/generators/templates/application/merb_very_flat/application.rbt +36 -2
- data/lib/generators/templates/application/merb_very_flat/test/test_helper.rb +19 -0
- data/spec/merb_flat_spec.rb +4 -4
- data/spec/spec_helper.rb +0 -1
- metadata +16 -7
- data/lib/generators/templates/application/merb/merb.thor +0 -822
data/LICENSE
CHANGED
data/Rakefile
CHANGED
@@ -17,7 +17,7 @@ GEM_EMAIL = "jonas.nicklas@gmail.com"
|
|
17
17
|
|
18
18
|
GEM_NAME = "merb-gen"
|
19
19
|
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
|
20
|
-
GEM_VERSION = (Merb::MORE_VERSION rescue "0.9.
|
20
|
+
GEM_VERSION = (Merb::MORE_VERSION rescue "0.9.8") + PKG_BUILD
|
21
21
|
|
22
22
|
RELEASE_NAME = "REL #{GEM_VERSION}"
|
23
23
|
|
@@ -38,8 +38,8 @@ spec = Gem::Specification.new do |s|
|
|
38
38
|
s.bindir = "bin"
|
39
39
|
s.executables = %w( merb-gen )
|
40
40
|
|
41
|
-
s.add_dependency "merb-core", ">= 0.9.
|
42
|
-
s.add_dependency "templater", ">= 0.
|
41
|
+
s.add_dependency "merb-core", ">= 0.9.8"
|
42
|
+
s.add_dependency "templater", ">= 0.3.0"
|
43
43
|
|
44
44
|
s.require_path = 'lib'
|
45
45
|
s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,bin,spec}/**/*")
|
@@ -50,15 +50,33 @@ Rake::GemPackageTask.new(spec) do |pkg|
|
|
50
50
|
end
|
51
51
|
|
52
52
|
desc "Install the gem"
|
53
|
-
task :install
|
54
|
-
|
53
|
+
task :install do
|
54
|
+
Merb::RakeHelper.install(GEM_NAME, :version => GEM_VERSION)
|
55
55
|
end
|
56
56
|
|
57
|
-
|
57
|
+
desc "Uninstall the gem"
|
58
|
+
task :uninstall do
|
59
|
+
Merb::RakeHelper.uninstall(GEM_NAME, :version => GEM_VERSION)
|
60
|
+
end
|
58
61
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
+
desc "Create a gemspec file"
|
63
|
+
task :gemspec do
|
64
|
+
File.open("#{GEM_NAME}.gemspec", "w") do |file|
|
65
|
+
file.puts spec.to_ruby
|
62
66
|
end
|
67
|
+
end
|
63
68
|
|
69
|
+
desc "Run all examples (or a specific spec with TASK=xxxx)"
|
70
|
+
Spec::Rake::SpecTask.new('spec') do |t|
|
71
|
+
t.spec_opts = ["-cfs"]
|
72
|
+
t.spec_files = begin
|
73
|
+
if ENV["TASK"]
|
74
|
+
ENV["TASK"].split(',').map { |task| "spec/**/#{task}_spec.rb" }
|
75
|
+
else
|
76
|
+
FileList['spec/**/*_spec.rb']
|
77
|
+
end
|
78
|
+
end
|
64
79
|
end
|
80
|
+
|
81
|
+
desc 'Default: run spec examples'
|
82
|
+
task :default => 'spec'
|
data/bin/merb-gen
CHANGED
@@ -3,8 +3,26 @@
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'merb-gen'
|
5
5
|
|
6
|
-
|
6
|
+
if ARGV[0] == "app"
|
7
7
|
Merb::Generators.run_cli(Dir.pwd, 'merb-gen', Merb::VERSION, ARGV)
|
8
|
-
|
8
|
+
else
|
9
|
+
Merb::BootLoader.after_app_loads do
|
10
|
+
Merb::Generators.run_cli(Dir.pwd, 'merb-gen', Merb::VERSION, ARGV)
|
11
|
+
end
|
12
|
+
|
13
|
+
Merb::Config.setup({
|
14
|
+
:log_level => :fatal,
|
15
|
+
:log_delimiter => " ~ ",
|
16
|
+
:log_auto_flush => false,
|
17
|
+
:reload_templates => false,
|
18
|
+
:reload_classes => false
|
19
|
+
})
|
9
20
|
|
10
|
-
Merb.
|
21
|
+
Merb::BootLoader::Logger.run
|
22
|
+
Merb::BootLoader::BuildFramework.run
|
23
|
+
Merb::BootLoader::Dependencies.run
|
24
|
+
|
25
|
+
Merb::BootLoader::BeforeAppLoads.run
|
26
|
+
Merb::BootLoader::ReloadClasses.run
|
27
|
+
Merb::BootLoader::AfterAppLoads.run
|
28
|
+
end
|
@@ -1,29 +1,98 @@
|
|
1
1
|
module Merb::Generators
|
2
|
-
|
3
2
|
class MerbFlatGenerator < NamedGenerator
|
4
|
-
|
3
|
+
#
|
4
|
+
# ==== Paths
|
5
|
+
#
|
6
|
+
|
5
7
|
def self.source_root
|
6
8
|
File.join(super, 'application', 'merb_flat')
|
7
9
|
end
|
8
|
-
|
10
|
+
|
11
|
+
def self.common_templates_dir
|
12
|
+
File.expand_path(File.join(File.dirname(__FILE__), '..',
|
13
|
+
'templates', 'application', 'common'))
|
14
|
+
end
|
15
|
+
|
16
|
+
def destination_root
|
17
|
+
File.join(@destination_root, base_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def common_templates_dir
|
21
|
+
self.class.common_templates_dir
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
# ==== Generator options
|
26
|
+
#
|
27
|
+
|
28
|
+
option :testing_framework, :default => :rspec,
|
29
|
+
:desc => 'Testing framework to use (one of: rspec, test_unit).'
|
30
|
+
option :orm, :default => :none,
|
31
|
+
:desc => 'Object-Relation Mapper to use (one of: none, activerecord, datamapper, sequel).'
|
32
|
+
option :template_engine, :default => :erb,
|
33
|
+
:desc => 'Template engine to prefer for this application (one of: erb, haml).'
|
34
|
+
|
9
35
|
desc <<-DESC
|
10
36
|
This generates a flat merb application: all code but config files and
|
11
37
|
templates fits in one application. This is something in between Sinatra
|
12
38
|
and "regular" Merb application.
|
13
39
|
DESC
|
14
|
-
|
40
|
+
|
15
41
|
first_argument :name, :required => true, :desc => "Application name"
|
16
|
-
|
17
|
-
|
18
|
-
|
42
|
+
|
43
|
+
#
|
44
|
+
# ==== Common directories & files
|
45
|
+
#
|
46
|
+
|
19
47
|
empty_directory :gems, 'gems'
|
20
|
-
|
21
|
-
|
22
|
-
|
48
|
+
file :thorfile do |file|
|
49
|
+
file.source = File.join(common_templates_dir, "merb.thor")
|
50
|
+
file.destination = "merb.thor"
|
51
|
+
end
|
52
|
+
|
53
|
+
template :rakefile do |template|
|
54
|
+
template.source = File.join(common_templates_dir, "Rakefile")
|
55
|
+
template.destination = "Rakefile"
|
56
|
+
end
|
57
|
+
|
58
|
+
template :gitignore do |template|
|
59
|
+
template.source = File.join(common_templates_dir, 'dotgitignore')
|
60
|
+
template.destination = ".gitignore"
|
61
|
+
end
|
62
|
+
|
63
|
+
directory :test_dir do |directory|
|
64
|
+
dir = testing_framework == :rspec ? "spec" : "test"
|
65
|
+
|
66
|
+
directory.source = File.join(source_root, dir)
|
67
|
+
directory.destination = dir
|
68
|
+
end
|
69
|
+
|
70
|
+
#
|
71
|
+
# ==== Layout specific things
|
72
|
+
#
|
73
|
+
|
74
|
+
file :readme, "README.txt"
|
75
|
+
|
76
|
+
template :application, "application.rb"
|
77
|
+
|
78
|
+
glob! "config"
|
79
|
+
glob! "views"
|
80
|
+
|
81
|
+
def class_name
|
82
|
+
self.name.gsub("-", "_").camel_case
|
23
83
|
end
|
24
|
-
|
25
84
|
end
|
26
|
-
|
85
|
+
|
27
86
|
add_private :app_flat, MerbFlatGenerator
|
28
|
-
|
29
|
-
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
@@ -1,39 +1,85 @@
|
|
1
1
|
module Merb::Generators
|
2
|
-
|
3
2
|
class MerbFullGenerator < NamedGenerator
|
3
|
+
#
|
4
|
+
# ==== Paths
|
5
|
+
#
|
4
6
|
|
5
7
|
def self.source_root
|
6
8
|
File.join(super, 'application', 'merb')
|
7
9
|
end
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
|
11
|
+
def self.common_templates_dir
|
12
|
+
File.expand_path(File.join(File.dirname(__FILE__), '..',
|
13
|
+
'templates', 'application', 'common'))
|
14
|
+
end
|
15
|
+
|
16
|
+
def destination_root
|
17
|
+
File.join(@destination_root, base_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def common_templates_dir
|
21
|
+
self.class.common_templates_dir
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
# ==== Generator options
|
26
|
+
#
|
27
|
+
|
28
|
+
option :testing_framework, :default => :rspec,
|
29
|
+
:desc => 'Testing framework to use (one of: rspec, test_unit).'
|
30
|
+
option :orm, :default => :none,
|
12
31
|
:desc => 'Object-Relation Mapper to use (one of: none, activerecord, datamapper, sequel).'
|
13
32
|
option :template_engine, :default => :erb,
|
14
33
|
:desc => 'Template engine to prefer for this application (one of: erb, haml).'
|
15
|
-
|
34
|
+
|
16
35
|
desc <<-DESC
|
17
36
|
This generates a Merb application with Ruby on Rails like structure.
|
18
37
|
Generator lets you configure your ORM and testing framework of choice.
|
19
38
|
DESC
|
20
|
-
|
21
|
-
glob!
|
22
|
-
|
23
|
-
empty_directory :gems, 'gems'
|
24
|
-
|
39
|
+
|
25
40
|
first_argument :name, :required => true, :desc => "Application name"
|
26
|
-
|
41
|
+
|
42
|
+
#
|
43
|
+
# ==== Common directories & files
|
44
|
+
#
|
45
|
+
|
46
|
+
empty_directory :gems, 'gems'
|
47
|
+
file :thorfile do |file|
|
48
|
+
file.source = File.join(common_templates_dir, "merb.thor")
|
49
|
+
file.destination = "merb.thor"
|
50
|
+
end
|
51
|
+
|
52
|
+
template :rakefile do |template|
|
53
|
+
template.source = File.join(common_templates_dir, "Rakefile")
|
54
|
+
template.destination = "Rakefile"
|
55
|
+
end
|
56
|
+
|
57
|
+
template :gitignore do |template|
|
58
|
+
template.source = File.join(common_templates_dir, 'dotgitignore')
|
59
|
+
template.destination = ".gitignore"
|
60
|
+
end
|
61
|
+
|
62
|
+
directory :test_dir do |directory|
|
63
|
+
dir = testing_framework == :rspec ? "spec" : "test"
|
64
|
+
|
65
|
+
directory.source = File.join(source_root, dir)
|
66
|
+
directory.destination = dir
|
67
|
+
end
|
68
|
+
|
69
|
+
#
|
70
|
+
# ==== Layout specific things
|
71
|
+
#
|
72
|
+
|
73
|
+
glob! "app"
|
74
|
+
glob! "autotest"
|
75
|
+
glob! "config"
|
76
|
+
glob! "public"
|
77
|
+
|
27
78
|
invoke :layout do |generator|
|
28
79
|
generator.new(destination_root, options, 'application')
|
29
80
|
end
|
30
|
-
|
31
|
-
def destination_root
|
32
|
-
File.join(@destination_root, base_name)
|
33
|
-
end
|
34
|
-
|
35
81
|
end
|
36
|
-
|
82
|
+
|
37
83
|
add_private :app_full, MerbFullGenerator
|
38
|
-
|
39
|
-
end
|
84
|
+
|
85
|
+
end
|
@@ -1,31 +1,72 @@
|
|
1
1
|
module Merb::Generators
|
2
|
-
|
2
|
+
|
3
3
|
class MerbVeryFlatGenerator < NamedGenerator
|
4
4
|
|
5
5
|
def self.source_root
|
6
6
|
File.join(super, 'application', 'merb_very_flat')
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
|
+
def self.common_templates_dir
|
10
|
+
File.expand_path(File.join(File.dirname(__FILE__), '..',
|
11
|
+
'templates', 'application', 'common'))
|
12
|
+
end
|
13
|
+
|
14
|
+
def destination_root
|
15
|
+
File.join(@destination_root, base_name)
|
16
|
+
end
|
17
|
+
|
18
|
+
def common_templates_dir
|
19
|
+
File.expand_path(File.join(File.dirname(__FILE__), '..',
|
20
|
+
'templates', 'application', 'common'))
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
option :testing_framework, :default => :rspec,
|
25
|
+
:desc => 'Testing framework to use (one of: rspec, test_unit).'
|
26
|
+
option :orm, :default => :none,
|
27
|
+
:desc => 'Object-Relation Mapper to use (one of: none, activerecord, datamapper, sequel).'
|
28
|
+
option :template_engine, :default => :erb,
|
29
|
+
:desc => 'Template engine to prefer for this application (one of: erb, haml).'
|
30
|
+
|
31
|
+
|
9
32
|
desc <<-DESC
|
10
33
|
This generates a very flat merb application: the whole application
|
11
34
|
fits in one file, very much like Sinatra or Camping.
|
12
35
|
DESC
|
13
|
-
|
36
|
+
|
14
37
|
first_argument :name, :required => true, :desc => "Application name"
|
15
|
-
|
38
|
+
|
16
39
|
template :application do |template|
|
17
40
|
template.source = 'application.rbt'
|
18
41
|
template.destination = "#{base_name}.rb"
|
19
42
|
end
|
20
43
|
|
21
|
-
|
22
|
-
|
44
|
+
template :gitignore do |template|
|
45
|
+
template.source = File.join(common_templates_dir, 'dotgitignore')
|
46
|
+
template.destination = ".gitignore"
|
47
|
+
end
|
48
|
+
|
49
|
+
directory :test_dir do |directory|
|
50
|
+
dir = testing_framework == :rspec ? "spec" : "test"
|
51
|
+
|
52
|
+
directory.source = dir
|
53
|
+
directory.destination = dir
|
54
|
+
end
|
55
|
+
|
56
|
+
template :rakefile do |template|
|
57
|
+
template.source = File.join(common_templates_dir, "Rakefile")
|
58
|
+
template.destination = "Rakefile"
|
59
|
+
end
|
60
|
+
|
61
|
+
file :thorfile do |file|
|
62
|
+
file.source = File.join(common_templates_dir, "merb.thor")
|
63
|
+
file.destination = "merb.thor"
|
64
|
+
end
|
65
|
+
|
23
66
|
def class_name
|
24
|
-
self.name.camel_case
|
67
|
+
self.name.gsub("-", "_").camel_case
|
25
68
|
end
|
26
|
-
|
27
69
|
end
|
28
|
-
|
70
|
+
|
29
71
|
add_private :app_very_flat, MerbVeryFlatGenerator
|
30
|
-
|
31
72
|
end
|
data/lib/generators/migration.rb
CHANGED
@@ -34,7 +34,8 @@ module Merb::Generators
|
|
34
34
|
|
35
35
|
def version
|
36
36
|
# TODO: handle ActiveRecord timestamped migrations
|
37
|
-
|
37
|
+
n = options[:delete] ? current_migration_nr : current_migration_nr + 1
|
38
|
+
format("%03d", n)
|
38
39
|
end
|
39
40
|
|
40
41
|
protected
|
@@ -44,7 +45,9 @@ module Merb::Generators
|
|
44
45
|
end
|
45
46
|
|
46
47
|
def current_migration_nr
|
47
|
-
current_migration_number = Dir["#{destination_directory}/*"].map
|
48
|
+
current_migration_number = Dir["#{destination_directory}/*"].map do |f|
|
49
|
+
File.basename(f).match(/^(\d+)/)[0].to_i
|
50
|
+
end.max.to_i
|
48
51
|
end
|
49
52
|
|
50
53
|
end
|
@@ -33,13 +33,13 @@ module Merb::Generators
|
|
33
33
|
end
|
34
34
|
|
35
35
|
[:index, :show, :edit, :new].each do |view|
|
36
|
-
template "view_#{view}_none".to_sym
|
36
|
+
template "view_#{view}_none".to_sym do |template|
|
37
37
|
template.source = "app/views/%file_name%/#{view}.html.erb"
|
38
38
|
template.destination = "app/views" / base_path / "#{file_name}/#{view}.html.erb"
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
template :controller_spec, :testing_framework => :rspec
|
42
|
+
template :controller_spec, :testing_framework => :rspec do |template|
|
43
43
|
template.source = 'spec/controllers/%file_name%_spec.rb'
|
44
44
|
template.destination = "spec/controllers" / base_path / "#{file_name}_spec.rb"
|
45
45
|
end
|
@@ -1,12 +1,9 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require 'rake'
|
3
2
|
require 'rake/rdoctask'
|
4
|
-
require 'rake/testtask'
|
5
|
-
require 'spec/rake/spectask'
|
6
|
-
require 'fileutils'
|
7
3
|
|
8
|
-
require
|
4
|
+
require 'merb-core'
|
9
5
|
require 'merb-core/tasks/merb'
|
6
|
+
|
10
7
|
include FileUtils
|
11
8
|
|
12
9
|
# Load the basic runtime dependencies; this will include
|
@@ -22,12 +19,23 @@ tasks_path = File.join(File.dirname(__FILE__), "lib", "tasks")
|
|
22
19
|
rake_files = Dir["#{tasks_path}/*.rake"]
|
23
20
|
rake_files.each{|rake_file| load rake_file }
|
24
21
|
|
25
|
-
desc "
|
22
|
+
desc "Start runner environment"
|
26
23
|
task :merb_env do
|
27
24
|
Merb.start_environment(:environment => init_env, :adapter => 'runner')
|
28
25
|
end
|
29
26
|
|
27
|
+
<% if testing_framework.to_sym == :rspec %>
|
28
|
+
require 'spec/rake/spectask'
|
29
|
+
require "merb-core/test/tasks/spectasks"
|
30
|
+
desc 'Default: run spec examples'
|
31
|
+
task :default => 'spec'
|
32
|
+
<% end %>
|
33
|
+
|
34
|
+
<% if testing_framework.to_sym == :test_unit %>
|
35
|
+
require 'rake/testtask'
|
36
|
+
<% end %>
|
37
|
+
|
30
38
|
##############################################################################
|
31
39
|
# ADD YOUR CUSTOM TASKS IN /lib/tasks
|
32
40
|
# NAME YOUR RAKE FILES file_name.rake
|
33
|
-
##############################################################################
|
41
|
+
##############################################################################
|