merb 0.3.7 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +25 -26
- data/Rakefile +48 -36
- data/app_generators/merb/USAGE +5 -0
- data/app_generators/merb/merb_generator.rb +107 -0
- data/app_generators/merb/templates/Rakefile +99 -0
- data/{examples/skeleton/dist → app_generators/merb/templates}/app/controllers/application.rb +1 -1
- data/app_generators/merb/templates/app/controllers/exceptions.rb +13 -0
- data/{examples/skeleton/dist → app_generators/merb/templates}/app/helpers/global_helper.rb +0 -0
- data/{examples/skeleton/dist/app/mailers → app_generators/merb/templates/app/mailers/views}/layout/application.erb +0 -0
- data/app_generators/merb/templates/app/views/exceptions/internal_server_error.html.erb +207 -0
- data/app_generators/merb/templates/app/views/exceptions/not_acceptable.html.erb +38 -0
- data/app_generators/merb/templates/app/views/exceptions/not_found.html.erb +40 -0
- data/app_generators/merb/templates/app/views/layout/application.html.erb +11 -0
- data/app_generators/merb/templates/config/boot.rb +11 -0
- data/app_generators/merb/templates/config/dependencies.rb +41 -0
- data/{examples/skeleton/dist/conf → app_generators/merb/templates/config}/environments/development.rb +0 -0
- data/{examples/skeleton/dist/conf → app_generators/merb/templates/config}/environments/production.rb +0 -0
- data/{examples/skeleton/dist/conf → app_generators/merb/templates/config}/environments/test.rb +0 -0
- data/app_generators/merb/templates/config/merb.yml +64 -0
- data/app_generators/merb/templates/config/merb_init.rb +16 -0
- data/app_generators/merb/templates/config/plugins.yml +1 -0
- data/app_generators/merb/templates/config/router.rb +32 -0
- data/{lib/merb/core_ext/merb_array.rb → app_generators/merb/templates/config/upload.conf} +0 -0
- data/app_generators/merb/templates/public/images/merb.jpg +0 -0
- data/app_generators/merb/templates/public/merb.fcgi +6 -0
- data/app_generators/merb/templates/public/stylesheets/master.css +119 -0
- data/app_generators/merb/templates/script/destroy +28 -0
- data/app_generators/merb/templates/script/generate +28 -0
- data/{examples/skeleton → app_generators/merb/templates}/script/stop_merb +0 -0
- data/app_generators/merb/templates/script/win_script.cmd +1 -0
- data/app_generators/merb/templates/spec/spec.opts +6 -0
- data/app_generators/merb/templates/spec/spec_helper.rb +10 -0
- data/app_generators/merb/templates/test/test_helper.rb +13 -0
- data/app_generators/merb_plugin/USAGE +5 -0
- data/app_generators/merb_plugin/merb_plugin_generator.rb +64 -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 +35 -0
- data/app_generators/merb_plugin/templates/TODO +5 -0
- data/app_generators/merb_plugin/templates/merbtasks.rb +6 -0
- data/app_generators/merb_plugin/templates/sampleplugin.rb +10 -0
- data/app_generators/merb_plugin/templates/sampleplugin_spec.rb +7 -0
- data/app_generators/merb_plugin/templates/spec_helper.rb +2 -0
- data/bin/merb +1 -1
- data/lib/autotest/discover.rb +3 -0
- data/lib/autotest/merb_rspec.rb +79 -0
- data/lib/merb.rb +72 -93
- data/lib/merb/{merb_abstract_controller.rb → abstract_controller.rb} +28 -5
- data/lib/merb/caching/action_cache.rb +65 -29
- data/lib/merb/caching/fragment_cache.rb +9 -4
- data/lib/merb/caching/store/file_cache.rb +22 -14
- data/lib/merb/caching/store/memory_cache.rb +26 -8
- data/lib/merb/{merb_constants.rb → constants.rb} +9 -7
- data/lib/merb/controller.rb +178 -0
- data/lib/merb/core_ext.rb +13 -11
- data/lib/merb/core_ext/array.rb +0 -0
- data/lib/merb/core_ext/{merb_class.rb → class.rb} +0 -0
- data/lib/merb/core_ext/{merb_enumerable.rb → enumerable.rb} +0 -0
- data/lib/merb/core_ext/get_args.rb +52 -0
- data/lib/merb/core_ext/{merb_hash.rb → hash.rb} +40 -11
- data/lib/merb/core_ext/{merb_inflections.rb → inflections.rb} +0 -0
- data/lib/merb/core_ext/{merb_inflector.rb → inflector.rb} +1 -1
- data/lib/merb/core_ext/{merb_kernel.rb → kernel.rb} +56 -3
- data/lib/merb/core_ext/mash.rb +88 -0
- data/lib/merb/core_ext/{merb_module.rb → module.rb} +0 -0
- data/lib/merb/core_ext/{merb_numeric.rb → numeric.rb} +0 -0
- data/lib/merb/core_ext/{merb_object.rb → object.rb} +10 -47
- data/lib/merb/core_ext/string.rb +56 -0
- data/lib/merb/core_ext/{merb_symbol.rb → symbol.rb} +0 -0
- data/lib/merb/dispatcher.rb +109 -0
- data/lib/merb/{merb_drb_server.rb → drb_server.rb} +0 -0
- data/lib/merb/erubis_ext.rb +10 -0
- data/lib/merb/exceptions.rb +173 -0
- data/lib/merb/generators/merb_app/merb_app.rb +5 -25
- data/lib/merb/generators/merb_generator_helpers.rb +317 -0
- data/lib/merb/generators/merb_plugin.rb +19 -0
- data/lib/merb/logger.rb +65 -0
- data/lib/merb/{merb_mail_controller.rb → mail_controller.rb} +102 -49
- data/lib/merb/{merb_mailer.rb → mailer.rb} +31 -27
- data/lib/merb/mixins/{basic_authentication_mixin.rb → basic_authentication.rb} +3 -3
- data/lib/merb/mixins/{controller_mixin.rb → controller.rb} +131 -112
- data/lib/merb/mixins/{erubis_capture_mixin.rb → erubis_capture.rb} +12 -21
- data/lib/merb/mixins/{form_control_mixin.rb → form_control.rb} +6 -12
- data/lib/merb/mixins/render.rb +401 -0
- data/lib/merb/mixins/responder.rb +378 -0
- data/lib/merb/mixins/{view_context_mixin.rb → view_context.rb} +65 -10
- data/lib/merb/mixins/web_controller.rb +29 -0
- data/lib/merb/{merb_handler.rb → mongrel_handler.rb} +59 -38
- data/lib/merb/part_controller.rb +19 -0
- data/lib/merb/plugins.rb +16 -0
- data/lib/merb/rack_adapter.rb +37 -0
- data/lib/merb/request.rb +421 -0
- data/lib/merb/router.rb +576 -0
- data/lib/merb/{merb_server.rb → server.rb} +275 -71
- data/lib/merb/session.rb +10 -10
- data/lib/merb/session/cookie_store.rb +125 -0
- data/lib/merb/session/{merb_mem_cache_session.rb → mem_cache_session.rb} +22 -9
- data/lib/merb/session/{merb_memory_session.rb → memory_session.rb} +15 -11
- data/lib/merb/template.rb +35 -8
- data/lib/merb/template/erubis.rb +16 -10
- data/lib/merb/template/haml.rb +33 -20
- data/lib/merb/template/markaby.rb +16 -14
- data/lib/merb/template/xml_builder.rb +8 -4
- data/lib/merb/test/{merb_fake_request.rb → fake_request.rb} +11 -5
- data/lib/merb/test/helper.rb +31 -0
- data/lib/merb/test/hpricot.rb +136 -0
- data/lib/merb/test/{merb_multipart.rb → multipart.rb} +1 -1
- data/lib/merb/test/rspec.rb +93 -0
- data/lib/merb/{merb_upload_handler.rb → upload_handler.rb} +5 -6
- data/lib/merb/{merb_upload_progress.rb → upload_progress.rb} +1 -1
- data/lib/merb/{merb_view_context.rb → view_context.rb} +27 -42
- data/lib/{merb_tasks.rb → tasks.rb} +0 -0
- data/lib/tasks/merb.rake +21 -11
- data/merb_default_generators/model/USAGE +0 -0
- data/merb_default_generators/model/model_generator.rb +16 -0
- data/merb_default_generators/model/templates/new_model_template.erb +5 -0
- data/merb_default_generators/resource_controller/USAGE +0 -0
- data/merb_default_generators/resource_controller/resource_controller_generator.rb +26 -0
- data/merb_default_generators/resource_controller/templates/controller.rb +30 -0
- data/merb_default_generators/resource_controller/templates/edit.html.erb +1 -0
- data/merb_default_generators/resource_controller/templates/helper.rb +5 -0
- data/merb_default_generators/resource_controller/templates/index.html.erb +1 -0
- data/merb_default_generators/resource_controller/templates/new.html.erb +1 -0
- data/merb_default_generators/resource_controller/templates/show.html.erb +1 -0
- data/merb_generators/controller/USAGE +5 -0
- data/merb_generators/controller/controller_generator.rb +16 -0
- data/merb_generators/controller/templates/controller.rb +8 -0
- data/merb_generators/controller/templates/helper.rb +5 -0
- data/merb_generators/controller/templates/index.html.erb +3 -0
- data/merb_generators/resource/USAGE +0 -0
- data/merb_generators/resource/resource_generator.rb +60 -0
- data/rspec_generators/merb_controller_test/merb_controller_test_generator.rb +67 -0
- data/rspec_generators/merb_controller_test/templates/controller_spec.rb +8 -0
- data/rspec_generators/merb_controller_test/templates/edit_spec.rb +12 -0
- data/rspec_generators/merb_controller_test/templates/helper_spec.rb +5 -0
- data/rspec_generators/merb_controller_test/templates/index_spec.rb +12 -0
- data/rspec_generators/merb_controller_test/templates/new_spec.rb +12 -0
- data/rspec_generators/merb_controller_test/templates/show_spec.rb +5 -0
- data/rspec_generators/merb_model_test/merb_model_test_generator.rb +26 -0
- data/rspec_generators/merb_model_test/templates/model_spec_template.erb +7 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/test_unit_generators/merb_controller_test/merb_controller_test_generator.rb +53 -0
- data/test_unit_generators/merb_controller_test/templates/functional_test.rb +17 -0
- data/test_unit_generators/merb_controller_test/templates/helper_test.rb +9 -0
- data/test_unit_generators/merb_model_test/merb_model_test_generator.rb +29 -0
- data/test_unit_generators/merb_model_test/templates/model_test_unit_template.erb +9 -0
- metadata +172 -94
- data/examples/README_EXAMPLES +0 -10
- data/examples/skeleton/Rakefile +0 -68
- data/examples/skeleton/dist/app/views/layout/application.herb +0 -12
- data/examples/skeleton/dist/conf/database.yml +0 -23
- data/examples/skeleton/dist/conf/merb.yml +0 -57
- data/examples/skeleton/dist/conf/merb_init.rb +0 -24
- data/examples/skeleton/dist/conf/router.rb +0 -22
- data/examples/skeleton/dist/conf/upload.conf +0 -5
- data/examples/skeleton/dist/schema/migrations/001_add_sessions_table.rb +0 -14
- data/examples/skeleton/script/new_migration +0 -21
- data/lib/merb/core_ext/merb_string.rb +0 -18
- data/lib/merb/merb_controller.rb +0 -206
- data/lib/merb/merb_dispatcher.rb +0 -87
- data/lib/merb/merb_exceptions.rb +0 -319
- data/lib/merb/merb_part_controller.rb +0 -42
- data/lib/merb/merb_plugins.rb +0 -293
- data/lib/merb/merb_request.rb +0 -165
- data/lib/merb/merb_router.rb +0 -309
- data/lib/merb/merb_yaml_store.rb +0 -31
- data/lib/merb/mixins/render_mixin.rb +0 -283
- data/lib/merb/mixins/responder_mixin.rb +0 -159
- data/lib/merb/session/merb_ar_session.rb +0 -131
- data/lib/merb/vendor/paginator/README.txt +0 -84
- data/lib/merb/vendor/paginator/paginator.rb +0 -124
- data/lib/tasks/db.rake +0 -55
data/README
CHANGED
@@ -5,15 +5,22 @@
|
|
5
5
|
Install these gems first:
|
6
6
|
|
7
7
|
* mongrel
|
8
|
-
* erubis
|
9
8
|
* json
|
9
|
+
* json_pure
|
10
|
+
* erubis
|
10
11
|
* mime-types
|
11
|
-
* archive-tar-minitar
|
12
12
|
* rspec
|
13
|
+
* hpricot
|
14
|
+
* mocha
|
15
|
+
* rubigen
|
16
|
+
* haml
|
17
|
+
* markaby
|
18
|
+
* mailfactory
|
19
|
+
* activerecord (if you want to store sessions in a database)
|
13
20
|
|
14
21
|
Then you can build the merb gem from svn trunk like so:
|
15
22
|
|
16
|
-
$ sudo gem install mongrel erubis
|
23
|
+
$ sudo gem install mongrel json json_pure erubis mime-types rspec hpricot mocha rubigen haml markaby mailfactory -y
|
17
24
|
$ svn co http://svn.devjavu.com/merb/trunk merb
|
18
25
|
$ cd merb
|
19
26
|
$ rake install
|
@@ -61,8 +68,8 @@ The <tt>r.default_routes</tt> routes adds the standard routes:
|
|
61
68
|
Classes with built in render method and template handling
|
62
69
|
with instance vars available in the views automatically. Merb also supports
|
63
70
|
layouts. It will look for a layout named after your controller class first and
|
64
|
-
then fall back to application.
|
65
|
-
You can use render <tt>:layout => :none</tt>.
|
71
|
+
then fall back to application.html.erb if no layout exists named after your
|
72
|
+
controller. You can use render <tt>:layout => :none</tt>.
|
66
73
|
|
67
74
|
Merb does not automatically render for you in your controller actions, you have
|
68
75
|
to call render yourself. I consider this a big advantage over the way rails does
|
@@ -246,14 +253,14 @@ memory_session set to true. See generated app for migration too add session tabl
|
|
246
253
|
|
247
254
|
=== Helpers
|
248
255
|
|
249
|
-
|
256
|
+
app/helpers/global_helper.rb will be available to all of your views.
|
250
257
|
Helpers named after your controller plus _helper.rb will be included in the views
|
251
258
|
for that controller only.
|
252
259
|
|
253
260
|
=== The +merb+ server
|
254
261
|
|
255
262
|
right now you add your routes in
|
256
|
-
the appdir/
|
263
|
+
the appdir/config/router.rb file. So by default it runs on port 4000
|
257
264
|
|
258
265
|
$ cd /path/to/your/merb/app
|
259
266
|
$ merb
|
@@ -298,29 +305,21 @@ A file upload will have a hash of params like this:
|
|
298
305
|
|
299
306
|
== Merb app layout
|
300
307
|
|
301
|
-
A Merb app contains everything it needs to run in production in the
|
302
|
-
MERB_ROOT/dist directory. So for deployment you only need to deploy the dist dir. This
|
303
|
-
keeps your test code and development plugins separate from your main app and lets you
|
304
|
-
not deploy them to the live server. You deal with two things with this setup, MERB_ROOT
|
305
|
-
and DIST_ROOT. MERB_ROOT is the root of the whole tree. And DISTROOT is MERB_ROOT+/dist
|
306
|
-
You will cd into MERB_ROOT to run the merb command line. ANd when you deploy live you
|
307
|
-
will put the dist dir into another empty MERB_ROOT on the production server.
|
308
|
-
|
309
308
|
merb_app:
|
309
|
+
|
310
|
+
app
|
311
|
+
controllers
|
312
|
+
models
|
313
|
+
views
|
314
|
+
parts
|
315
|
+
mailers
|
316
|
+
config
|
317
|
+
lib
|
318
|
+
public
|
319
|
+
schema
|
310
320
|
Rakefile
|
311
|
-
README
|
312
321
|
scripts
|
313
322
|
test
|
314
323
|
spec
|
315
324
|
unit
|
316
325
|
plugins
|
317
|
-
dist
|
318
|
-
app
|
319
|
-
controllers
|
320
|
-
models
|
321
|
-
views
|
322
|
-
conf
|
323
|
-
lib
|
324
|
-
public
|
325
|
-
plugins
|
326
|
-
schema
|
data/Rakefile
CHANGED
@@ -13,13 +13,11 @@ require __DIR__+'/tools/rakehelp'
|
|
13
13
|
require __DIR__+'/tools/annotation_extract'
|
14
14
|
include FileUtils
|
15
15
|
|
16
|
-
|
17
16
|
NAME = "merb"
|
18
|
-
VERS = "0.
|
17
|
+
VERS = "0.4.0"
|
19
18
|
CLEAN.include ['**/.*.sw?', '*.gem', '.config']
|
20
19
|
|
21
|
-
setup_clean [ "pkg", "lib/*.bundle", "*.gem",
|
22
|
-
"doc", ".config", "examples/sample_app/dist/public/files/**/*", 'examples/sample_app/log/*', 'coverage']
|
20
|
+
setup_clean [ "pkg", "lib/*.bundle", "*.gem", "doc/rdoc", ".config", 'coverage', "cache"]
|
23
21
|
|
24
22
|
|
25
23
|
desc "Packages up Merb."
|
@@ -35,7 +33,7 @@ Rake::RDocTask.new do |rdoc|
|
|
35
33
|
rdoc.main = "README" # page to start on
|
36
34
|
rdoc.title = "Merb Docs"
|
37
35
|
rdoc.template = __DIR__+"/tools/allison/allison.rb"
|
38
|
-
rdoc.rdoc_dir = 'doc' # rdoc output folder
|
36
|
+
rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
|
39
37
|
rdoc.options << '--line-numbers' << '--inline-source'
|
40
38
|
end
|
41
39
|
|
@@ -58,11 +56,11 @@ spec = Gem::Specification.new do |s|
|
|
58
56
|
|
59
57
|
s.add_dependency('mongrel')
|
60
58
|
s.add_dependency('erubis')
|
61
|
-
s.add_dependency('json')
|
62
59
|
s.add_dependency('mime-types')
|
60
|
+
s.add_dependency('rubigen')
|
63
61
|
s.required_ruby_version = '>= 1.8.4'
|
64
62
|
|
65
|
-
s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{bin,test,lib,examples}/**/*")
|
63
|
+
s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{bin,test,lib,examples,app_generators,merb_generators,merb_default_generators,rspec_generators,test_unit_generators,script}/**/*")
|
66
64
|
|
67
65
|
s.require_path = "lib"
|
68
66
|
s.bindir = "bin"
|
@@ -75,64 +73,56 @@ end
|
|
75
73
|
|
76
74
|
task :install do
|
77
75
|
sh %{rake package}
|
78
|
-
sh %{sudo gem install pkg/#{NAME}-#{VERS}}
|
76
|
+
sh %{sudo gem install pkg/#{NAME}-#{VERS} --no-rdoc --no-ri}
|
79
77
|
end
|
80
78
|
|
81
79
|
task :uninstall => [:clean] do
|
82
80
|
sh %{sudo gem uninstall #{NAME}}
|
83
81
|
end
|
84
82
|
|
83
|
+
desc "run webgen"
|
84
|
+
task :doc_webgen do
|
85
|
+
sh %{cd doc/site ; webgen}
|
86
|
+
end
|
87
|
+
|
85
88
|
desc "rdoc to rubyforge"
|
86
89
|
task :doc_rforge do
|
87
90
|
sh %{rake doc}
|
91
|
+
sh %{rake doc_webgen}
|
88
92
|
sh %{sudo chmod -R 755 doc}
|
89
|
-
sh %{scp -r -p doc/* ezmobius@rubyforge.org:/var/www/gforge-projects/merb}
|
90
|
-
|
91
|
-
|
92
|
-
desc 'Run unit tests'
|
93
|
-
Rake::TestTask.new('test_unit') do |t|
|
94
|
-
t.libs << 'test'
|
95
|
-
t.pattern = 'test/unit/*_test.rb'
|
96
|
-
t.verbose = true
|
97
|
-
end
|
98
|
-
|
99
|
-
desc 'Run functional tests'
|
100
|
-
Rake::TestTask.new('test_functional') do |t|
|
101
|
-
t.libs << 'test'
|
102
|
-
t.pattern = 'test/functional/*_test.rb'
|
103
|
-
t.verbose = true
|
104
|
-
end
|
105
|
-
|
106
|
-
desc 'Run all tests'
|
107
|
-
Rake::TestTask.new('test') do |t|
|
108
|
-
t.libs << 'test'
|
109
|
-
t.pattern = 'test/**/*_test.rb'
|
110
|
-
t.verbose = true
|
93
|
+
sh %{scp -r -p doc/site/output/* ezmobius@rubyforge.org:/var/www/gforge-projects/merb}
|
94
|
+
sh %{scp -r -p doc/rdoc/* ezmobius@rubyforge.org:/var/www/gforge-projects/merb/rdoc}
|
111
95
|
end
|
112
96
|
|
113
|
-
desc 'Run all
|
97
|
+
desc 'Run all specs and then rcov'
|
114
98
|
task :aok do
|
115
99
|
sh %{rake specs;rake rcov}
|
116
100
|
end
|
117
101
|
|
118
102
|
desc "Run all specs"
|
119
103
|
Spec::Rake::SpecTask.new('specs') do |t|
|
120
|
-
t.spec_opts = ["--format", "specdoc"]
|
104
|
+
t.spec_opts = ["--format", "specdoc", "--colour"]
|
105
|
+
t.spec_files = Dir['spec/**/*_spec.rb'].sort
|
106
|
+
end
|
107
|
+
|
108
|
+
desc "Run a specific spec with TASK=xxxx"
|
109
|
+
Spec::Rake::SpecTask.new('spec') do |t|
|
110
|
+
t.spec_opts = ["--format", "specdoc", "--colour"]
|
121
111
|
t.libs = ['lib', 'server/lib' ]
|
122
|
-
t.spec_files =
|
112
|
+
t.spec_files = ["spec/merb/#{ENV['TASK']}_spec.rb"]
|
123
113
|
end
|
124
114
|
|
125
115
|
desc "Run all specs output html"
|
126
116
|
Spec::Rake::SpecTask.new('specs_html') do |t|
|
127
117
|
t.spec_opts = ["--format", "html"]
|
128
118
|
t.libs = ['lib', 'server/lib' ]
|
129
|
-
t.spec_files = Dir['
|
119
|
+
t.spec_files = Dir['spec/**/*_spec.rb'].sort
|
130
120
|
end
|
131
121
|
|
132
122
|
desc "RCov"
|
133
123
|
Spec::Rake::SpecTask.new('rcov') do |t|
|
134
|
-
t.spec_opts = ["--format", "specdoc"]
|
135
|
-
t.spec_files = Dir['
|
124
|
+
t.spec_opts = ["--format", "specdoc", "--colour"]
|
125
|
+
t.spec_files = Dir['spec/**/*_spec.rb'].sort
|
136
126
|
t.libs = ['lib', 'server/lib' ]
|
137
127
|
t.rcov = true
|
138
128
|
end
|
@@ -158,3 +148,25 @@ desc "Add new files to subversion"
|
|
158
148
|
task :svn_add do
|
159
149
|
system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add"
|
160
150
|
end
|
151
|
+
|
152
|
+
|
153
|
+
# Run specific tests or test files
|
154
|
+
#
|
155
|
+
# Based on a technique popularized by Geoffrey Grosenbach
|
156
|
+
rule "" do |t|
|
157
|
+
spec_cmd = (RUBY_PLATFORM =~ /java/) ? 'jruby -S spec' : 'spec'
|
158
|
+
# spec:spec_file:spec_name
|
159
|
+
if /spec:(.*)$/.match(t.name)
|
160
|
+
arguments = t.name.split(":")
|
161
|
+
file_name = arguments[1]
|
162
|
+
spec_name = arguments[2..-1]
|
163
|
+
|
164
|
+
if File.exist?("spec/merb/#{file_name}_spec.rb")
|
165
|
+
run_file_name = "spec/merb/#{file_name}_spec.rb"
|
166
|
+
end
|
167
|
+
|
168
|
+
example = !spec_name.empty? ? " -e '#{spec_name}'" : ""
|
169
|
+
|
170
|
+
sh "#{spec_cmd} #{run_file_name} --format specdoc --colour #{example}"
|
171
|
+
end
|
172
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
class MerbGenerator < RubiGen::Base
|
2
|
+
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
3
|
+
Config::CONFIG['ruby_install_name']) unless defined? DEFAULT_SHEBANG
|
4
|
+
|
5
|
+
default_options :shebang => DEFAULT_SHEBANG
|
6
|
+
|
7
|
+
attr_reader :name
|
8
|
+
|
9
|
+
def initialize(runtime_args, runtime_options = {})
|
10
|
+
super
|
11
|
+
usage if args.empty?
|
12
|
+
@name = args.shift
|
13
|
+
@destination_root = File.expand_path(@name)
|
14
|
+
extract_options
|
15
|
+
end
|
16
|
+
|
17
|
+
def manifest
|
18
|
+
script_options = { :chmod => 0755, :shebang => options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang] }
|
19
|
+
|
20
|
+
record do |m|
|
21
|
+
# Ensure appropriate folder(s) exists
|
22
|
+
m.directory ''
|
23
|
+
BASEDIRS.each { |path| m.directory path }
|
24
|
+
|
25
|
+
# copy skeleton
|
26
|
+
m.file_copy_each %w( Rakefile )
|
27
|
+
m.file_copy_each %w( application.rb exceptions.rb ), "app/controllers"
|
28
|
+
m.file_copy_each %w( global_helper.rb ), "app/helpers"
|
29
|
+
m.file_copy_each %w( application.erb ), "app/mailers/views/layout"
|
30
|
+
m.file_copy_each %w( application.html.erb ), "app/views/layout"
|
31
|
+
m.file_copy_each %w( internal_server_error.html.erb not_found.html.erb not_acceptable.html.erb ), "app/views/exceptions"
|
32
|
+
m.file_copy_each %w( merb.jpg ), "public/images"
|
33
|
+
m.file_copy_each %w( master.css ), "public/stylesheets"
|
34
|
+
m.file_copy_each %w( merb.fcgi ), "public"
|
35
|
+
m.file_copy_each %w( boot.rb merb_init.rb router.rb upload.conf dependencies.rb), "config"
|
36
|
+
m.file_copy_each %w( development.rb production.rb test.rb ), "config/environments"
|
37
|
+
m.file_copy_each %w( spec_helper.rb ), "spec"
|
38
|
+
m.file_copy_each %w( test_helper.rb), "test"
|
39
|
+
|
40
|
+
# build default config
|
41
|
+
m.template "config/merb.yml", "config/merb.yml", :assigns => {:key => "#{@name.upcase}#{rand(9999)}"}
|
42
|
+
|
43
|
+
# build scripts
|
44
|
+
%w( stop_merb generate destroy ).each do |file|
|
45
|
+
m.file "script/#{file}", "script/#{file}", script_options
|
46
|
+
m.template "script/win_script.cmd", "script/#{file}.cmd", :assigns => { :filename => file } if windows
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def windows
|
52
|
+
(RUBY_PLATFORM =~ /dos|win32|cygwin/i) || (RUBY_PLATFORM =~ /(:?mswin|mingw)/)
|
53
|
+
end
|
54
|
+
|
55
|
+
protected
|
56
|
+
def banner
|
57
|
+
<<-EOS
|
58
|
+
Creates a Merb application stub.
|
59
|
+
|
60
|
+
USAGE: #{spec.name} -g path"
|
61
|
+
EOS
|
62
|
+
end
|
63
|
+
|
64
|
+
def add_options!(opts)
|
65
|
+
# opts.separator ''
|
66
|
+
# opts.separator 'Options:'
|
67
|
+
# # For each option below, place the default
|
68
|
+
# # at the top of the file next to "default_options"
|
69
|
+
# opts.on("-r", "--ruby=path", String,
|
70
|
+
# "Path to the Ruby binary of your choice (otherwise scripts use env, dispatchers current path).",
|
71
|
+
# "Default: #{DEFAULT_SHEBANG}") { |options[:shebang]| }
|
72
|
+
# opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
73
|
+
end
|
74
|
+
|
75
|
+
def extract_options
|
76
|
+
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
77
|
+
# Templates can access these value via the attr_reader-generated methods, but not the
|
78
|
+
# raw instance variable value.
|
79
|
+
# @author = options[:author]
|
80
|
+
end
|
81
|
+
|
82
|
+
# Installation skeleton. Intermediate directories are automatically
|
83
|
+
# created so don't sweat their absence here.
|
84
|
+
BASEDIRS = %w(
|
85
|
+
app/controllers
|
86
|
+
app/models
|
87
|
+
app/helpers
|
88
|
+
app/mailers/helpers
|
89
|
+
app/mailers/views
|
90
|
+
app/mailers/views/layout
|
91
|
+
app/parts
|
92
|
+
app/views/layout
|
93
|
+
app/views/exceptions
|
94
|
+
config/environments
|
95
|
+
lib
|
96
|
+
log
|
97
|
+
public/images
|
98
|
+
public/javascripts
|
99
|
+
public/stylesheets
|
100
|
+
script
|
101
|
+
spec/models
|
102
|
+
spec/controllers
|
103
|
+
test/unit
|
104
|
+
gems
|
105
|
+
)
|
106
|
+
|
107
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/rdoctask'
|
3
|
+
require 'rake/testtask'
|
4
|
+
require 'spec/rake/spectask'
|
5
|
+
require 'fileutils'
|
6
|
+
require 'rubygems'
|
7
|
+
|
8
|
+
MERB_ENV = ENV['MERB_ENV'] if ENV['MERB_ENV']
|
9
|
+
|
10
|
+
if File.directory?( File.join(File.dirname(__FILE__), "framework"))
|
11
|
+
$:.unshift('framework')
|
12
|
+
require File.join(File.dirname(__FILE__), "framework/merb")
|
13
|
+
else
|
14
|
+
require 'merb'
|
15
|
+
end
|
16
|
+
require MERB_FRAMEWORK_ROOT+'/tasks'
|
17
|
+
MERB_ROOT = File.dirname(__FILE__)
|
18
|
+
include FileUtils
|
19
|
+
|
20
|
+
# Get Merb plugins and dependencies
|
21
|
+
require File.dirname(__FILE__)+'/config/dependencies.rb'
|
22
|
+
Merb::Plugins.rakefiles.each {|r| require r }
|
23
|
+
|
24
|
+
#desc "Packages up Merb."
|
25
|
+
#task :default => [:package]
|
26
|
+
|
27
|
+
desc "load merb_init.rb"
|
28
|
+
task :merb_init do
|
29
|
+
require 'merb'
|
30
|
+
require File.dirname(__FILE__)+'/config/merb_init.rb'
|
31
|
+
end
|
32
|
+
|
33
|
+
task :uninstall => [:clean] do
|
34
|
+
sh %{sudo gem uninstall #{NAME}}
|
35
|
+
end
|
36
|
+
|
37
|
+
desc 'Run unit tests'
|
38
|
+
Rake::TestTask.new('test_unit') do |t|
|
39
|
+
t.libs << 'test'
|
40
|
+
t.pattern = 'test/unit/*_test.rb'
|
41
|
+
t.verbose = true
|
42
|
+
end
|
43
|
+
|
44
|
+
desc 'Run functional tests'
|
45
|
+
Rake::TestTask.new('test_functional') do |t|
|
46
|
+
t.libs << 'test'
|
47
|
+
t.pattern = 'test/functional/*_test.rb'
|
48
|
+
t.verbose = true
|
49
|
+
end
|
50
|
+
|
51
|
+
desc 'Run all tests'
|
52
|
+
Rake::TestTask.new('test') do |t|
|
53
|
+
t.libs << 'test'
|
54
|
+
t.pattern = 'test/**/*_test.rb'
|
55
|
+
t.verbose = true
|
56
|
+
end
|
57
|
+
|
58
|
+
desc "Run all specs"
|
59
|
+
Spec::Rake::SpecTask.new('specs') do |t|
|
60
|
+
t.spec_opts = ["--format", "specdoc", "--colour"]
|
61
|
+
t.spec_files = Dir['spec/**/*_spec.rb'].sort
|
62
|
+
end
|
63
|
+
|
64
|
+
desc "Run a specific spec with TASK=xxxx"
|
65
|
+
Spec::Rake::SpecTask.new('spec') do |t|
|
66
|
+
t.spec_opts = ["--format", "specdoc", "--colour"]
|
67
|
+
t.libs = ['lib', 'server/lib' ]
|
68
|
+
t.spec_files = ["spec/merb/#{ENV['TASK']}_spec.rb"]
|
69
|
+
end
|
70
|
+
|
71
|
+
desc "Run all specs output html"
|
72
|
+
Spec::Rake::SpecTask.new('specs_html') do |t|
|
73
|
+
t.spec_opts = ["--format", "html"]
|
74
|
+
t.libs = ['lib', 'server/lib' ]
|
75
|
+
t.spec_files = Dir['spec/**/*_spec.rb'].sort
|
76
|
+
end
|
77
|
+
|
78
|
+
desc "RCov"
|
79
|
+
Spec::Rake::SpecTask.new('rcov') do |t|
|
80
|
+
t.spec_opts = ["--format", "specdoc", "--colour"]
|
81
|
+
t.spec_files = Dir['spec/**/*_spec.rb'].sort
|
82
|
+
t.libs = ['lib', 'server/lib' ]
|
83
|
+
t.rcov = true
|
84
|
+
end
|
85
|
+
|
86
|
+
desc 'Run all tests, specs and finish with rcov'
|
87
|
+
task :aok do
|
88
|
+
sh %{rake rcov}
|
89
|
+
sh %{rake spec}
|
90
|
+
end
|
91
|
+
|
92
|
+
##############################################################################
|
93
|
+
# SVN
|
94
|
+
##############################################################################
|
95
|
+
|
96
|
+
desc "Add new files to subversion"
|
97
|
+
task :svn_add do
|
98
|
+
system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add"
|
99
|
+
end
|