merb 0.3.7 → 0.4.0

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.
Files changed (173) hide show
  1. data/README +25 -26
  2. data/Rakefile +48 -36
  3. data/app_generators/merb/USAGE +5 -0
  4. data/app_generators/merb/merb_generator.rb +107 -0
  5. data/app_generators/merb/templates/Rakefile +99 -0
  6. data/{examples/skeleton/dist → app_generators/merb/templates}/app/controllers/application.rb +1 -1
  7. data/app_generators/merb/templates/app/controllers/exceptions.rb +13 -0
  8. data/{examples/skeleton/dist → app_generators/merb/templates}/app/helpers/global_helper.rb +0 -0
  9. data/{examples/skeleton/dist/app/mailers → app_generators/merb/templates/app/mailers/views}/layout/application.erb +0 -0
  10. data/app_generators/merb/templates/app/views/exceptions/internal_server_error.html.erb +207 -0
  11. data/app_generators/merb/templates/app/views/exceptions/not_acceptable.html.erb +38 -0
  12. data/app_generators/merb/templates/app/views/exceptions/not_found.html.erb +40 -0
  13. data/app_generators/merb/templates/app/views/layout/application.html.erb +11 -0
  14. data/app_generators/merb/templates/config/boot.rb +11 -0
  15. data/app_generators/merb/templates/config/dependencies.rb +41 -0
  16. data/{examples/skeleton/dist/conf → app_generators/merb/templates/config}/environments/development.rb +0 -0
  17. data/{examples/skeleton/dist/conf → app_generators/merb/templates/config}/environments/production.rb +0 -0
  18. data/{examples/skeleton/dist/conf → app_generators/merb/templates/config}/environments/test.rb +0 -0
  19. data/app_generators/merb/templates/config/merb.yml +64 -0
  20. data/app_generators/merb/templates/config/merb_init.rb +16 -0
  21. data/app_generators/merb/templates/config/plugins.yml +1 -0
  22. data/app_generators/merb/templates/config/router.rb +32 -0
  23. data/{lib/merb/core_ext/merb_array.rb → app_generators/merb/templates/config/upload.conf} +0 -0
  24. data/app_generators/merb/templates/public/images/merb.jpg +0 -0
  25. data/app_generators/merb/templates/public/merb.fcgi +6 -0
  26. data/app_generators/merb/templates/public/stylesheets/master.css +119 -0
  27. data/app_generators/merb/templates/script/destroy +28 -0
  28. data/app_generators/merb/templates/script/generate +28 -0
  29. data/{examples/skeleton → app_generators/merb/templates}/script/stop_merb +0 -0
  30. data/app_generators/merb/templates/script/win_script.cmd +1 -0
  31. data/app_generators/merb/templates/spec/spec.opts +6 -0
  32. data/app_generators/merb/templates/spec/spec_helper.rb +10 -0
  33. data/app_generators/merb/templates/test/test_helper.rb +13 -0
  34. data/app_generators/merb_plugin/USAGE +5 -0
  35. data/app_generators/merb_plugin/merb_plugin_generator.rb +64 -0
  36. data/app_generators/merb_plugin/templates/LICENSE +20 -0
  37. data/app_generators/merb_plugin/templates/README +4 -0
  38. data/app_generators/merb_plugin/templates/Rakefile +35 -0
  39. data/app_generators/merb_plugin/templates/TODO +5 -0
  40. data/app_generators/merb_plugin/templates/merbtasks.rb +6 -0
  41. data/app_generators/merb_plugin/templates/sampleplugin.rb +10 -0
  42. data/app_generators/merb_plugin/templates/sampleplugin_spec.rb +7 -0
  43. data/app_generators/merb_plugin/templates/spec_helper.rb +2 -0
  44. data/bin/merb +1 -1
  45. data/lib/autotest/discover.rb +3 -0
  46. data/lib/autotest/merb_rspec.rb +79 -0
  47. data/lib/merb.rb +72 -93
  48. data/lib/merb/{merb_abstract_controller.rb → abstract_controller.rb} +28 -5
  49. data/lib/merb/caching/action_cache.rb +65 -29
  50. data/lib/merb/caching/fragment_cache.rb +9 -4
  51. data/lib/merb/caching/store/file_cache.rb +22 -14
  52. data/lib/merb/caching/store/memory_cache.rb +26 -8
  53. data/lib/merb/{merb_constants.rb → constants.rb} +9 -7
  54. data/lib/merb/controller.rb +178 -0
  55. data/lib/merb/core_ext.rb +13 -11
  56. data/lib/merb/core_ext/array.rb +0 -0
  57. data/lib/merb/core_ext/{merb_class.rb → class.rb} +0 -0
  58. data/lib/merb/core_ext/{merb_enumerable.rb → enumerable.rb} +0 -0
  59. data/lib/merb/core_ext/get_args.rb +52 -0
  60. data/lib/merb/core_ext/{merb_hash.rb → hash.rb} +40 -11
  61. data/lib/merb/core_ext/{merb_inflections.rb → inflections.rb} +0 -0
  62. data/lib/merb/core_ext/{merb_inflector.rb → inflector.rb} +1 -1
  63. data/lib/merb/core_ext/{merb_kernel.rb → kernel.rb} +56 -3
  64. data/lib/merb/core_ext/mash.rb +88 -0
  65. data/lib/merb/core_ext/{merb_module.rb → module.rb} +0 -0
  66. data/lib/merb/core_ext/{merb_numeric.rb → numeric.rb} +0 -0
  67. data/lib/merb/core_ext/{merb_object.rb → object.rb} +10 -47
  68. data/lib/merb/core_ext/string.rb +56 -0
  69. data/lib/merb/core_ext/{merb_symbol.rb → symbol.rb} +0 -0
  70. data/lib/merb/dispatcher.rb +109 -0
  71. data/lib/merb/{merb_drb_server.rb → drb_server.rb} +0 -0
  72. data/lib/merb/erubis_ext.rb +10 -0
  73. data/lib/merb/exceptions.rb +173 -0
  74. data/lib/merb/generators/merb_app/merb_app.rb +5 -25
  75. data/lib/merb/generators/merb_generator_helpers.rb +317 -0
  76. data/lib/merb/generators/merb_plugin.rb +19 -0
  77. data/lib/merb/logger.rb +65 -0
  78. data/lib/merb/{merb_mail_controller.rb → mail_controller.rb} +102 -49
  79. data/lib/merb/{merb_mailer.rb → mailer.rb} +31 -27
  80. data/lib/merb/mixins/{basic_authentication_mixin.rb → basic_authentication.rb} +3 -3
  81. data/lib/merb/mixins/{controller_mixin.rb → controller.rb} +131 -112
  82. data/lib/merb/mixins/{erubis_capture_mixin.rb → erubis_capture.rb} +12 -21
  83. data/lib/merb/mixins/{form_control_mixin.rb → form_control.rb} +6 -12
  84. data/lib/merb/mixins/render.rb +401 -0
  85. data/lib/merb/mixins/responder.rb +378 -0
  86. data/lib/merb/mixins/{view_context_mixin.rb → view_context.rb} +65 -10
  87. data/lib/merb/mixins/web_controller.rb +29 -0
  88. data/lib/merb/{merb_handler.rb → mongrel_handler.rb} +59 -38
  89. data/lib/merb/part_controller.rb +19 -0
  90. data/lib/merb/plugins.rb +16 -0
  91. data/lib/merb/rack_adapter.rb +37 -0
  92. data/lib/merb/request.rb +421 -0
  93. data/lib/merb/router.rb +576 -0
  94. data/lib/merb/{merb_server.rb → server.rb} +275 -71
  95. data/lib/merb/session.rb +10 -10
  96. data/lib/merb/session/cookie_store.rb +125 -0
  97. data/lib/merb/session/{merb_mem_cache_session.rb → mem_cache_session.rb} +22 -9
  98. data/lib/merb/session/{merb_memory_session.rb → memory_session.rb} +15 -11
  99. data/lib/merb/template.rb +35 -8
  100. data/lib/merb/template/erubis.rb +16 -10
  101. data/lib/merb/template/haml.rb +33 -20
  102. data/lib/merb/template/markaby.rb +16 -14
  103. data/lib/merb/template/xml_builder.rb +8 -4
  104. data/lib/merb/test/{merb_fake_request.rb → fake_request.rb} +11 -5
  105. data/lib/merb/test/helper.rb +31 -0
  106. data/lib/merb/test/hpricot.rb +136 -0
  107. data/lib/merb/test/{merb_multipart.rb → multipart.rb} +1 -1
  108. data/lib/merb/test/rspec.rb +93 -0
  109. data/lib/merb/{merb_upload_handler.rb → upload_handler.rb} +5 -6
  110. data/lib/merb/{merb_upload_progress.rb → upload_progress.rb} +1 -1
  111. data/lib/merb/{merb_view_context.rb → view_context.rb} +27 -42
  112. data/lib/{merb_tasks.rb → tasks.rb} +0 -0
  113. data/lib/tasks/merb.rake +21 -11
  114. data/merb_default_generators/model/USAGE +0 -0
  115. data/merb_default_generators/model/model_generator.rb +16 -0
  116. data/merb_default_generators/model/templates/new_model_template.erb +5 -0
  117. data/merb_default_generators/resource_controller/USAGE +0 -0
  118. data/merb_default_generators/resource_controller/resource_controller_generator.rb +26 -0
  119. data/merb_default_generators/resource_controller/templates/controller.rb +30 -0
  120. data/merb_default_generators/resource_controller/templates/edit.html.erb +1 -0
  121. data/merb_default_generators/resource_controller/templates/helper.rb +5 -0
  122. data/merb_default_generators/resource_controller/templates/index.html.erb +1 -0
  123. data/merb_default_generators/resource_controller/templates/new.html.erb +1 -0
  124. data/merb_default_generators/resource_controller/templates/show.html.erb +1 -0
  125. data/merb_generators/controller/USAGE +5 -0
  126. data/merb_generators/controller/controller_generator.rb +16 -0
  127. data/merb_generators/controller/templates/controller.rb +8 -0
  128. data/merb_generators/controller/templates/helper.rb +5 -0
  129. data/merb_generators/controller/templates/index.html.erb +3 -0
  130. data/merb_generators/resource/USAGE +0 -0
  131. data/merb_generators/resource/resource_generator.rb +60 -0
  132. data/rspec_generators/merb_controller_test/merb_controller_test_generator.rb +67 -0
  133. data/rspec_generators/merb_controller_test/templates/controller_spec.rb +8 -0
  134. data/rspec_generators/merb_controller_test/templates/edit_spec.rb +12 -0
  135. data/rspec_generators/merb_controller_test/templates/helper_spec.rb +5 -0
  136. data/rspec_generators/merb_controller_test/templates/index_spec.rb +12 -0
  137. data/rspec_generators/merb_controller_test/templates/new_spec.rb +12 -0
  138. data/rspec_generators/merb_controller_test/templates/show_spec.rb +5 -0
  139. data/rspec_generators/merb_model_test/merb_model_test_generator.rb +26 -0
  140. data/rspec_generators/merb_model_test/templates/model_spec_template.erb +7 -0
  141. data/script/destroy +14 -0
  142. data/script/generate +14 -0
  143. data/test_unit_generators/merb_controller_test/merb_controller_test_generator.rb +53 -0
  144. data/test_unit_generators/merb_controller_test/templates/functional_test.rb +17 -0
  145. data/test_unit_generators/merb_controller_test/templates/helper_test.rb +9 -0
  146. data/test_unit_generators/merb_model_test/merb_model_test_generator.rb +29 -0
  147. data/test_unit_generators/merb_model_test/templates/model_test_unit_template.erb +9 -0
  148. metadata +172 -94
  149. data/examples/README_EXAMPLES +0 -10
  150. data/examples/skeleton/Rakefile +0 -68
  151. data/examples/skeleton/dist/app/views/layout/application.herb +0 -12
  152. data/examples/skeleton/dist/conf/database.yml +0 -23
  153. data/examples/skeleton/dist/conf/merb.yml +0 -57
  154. data/examples/skeleton/dist/conf/merb_init.rb +0 -24
  155. data/examples/skeleton/dist/conf/router.rb +0 -22
  156. data/examples/skeleton/dist/conf/upload.conf +0 -5
  157. data/examples/skeleton/dist/schema/migrations/001_add_sessions_table.rb +0 -14
  158. data/examples/skeleton/script/new_migration +0 -21
  159. data/lib/merb/core_ext/merb_string.rb +0 -18
  160. data/lib/merb/merb_controller.rb +0 -206
  161. data/lib/merb/merb_dispatcher.rb +0 -87
  162. data/lib/merb/merb_exceptions.rb +0 -319
  163. data/lib/merb/merb_part_controller.rb +0 -42
  164. data/lib/merb/merb_plugins.rb +0 -293
  165. data/lib/merb/merb_request.rb +0 -165
  166. data/lib/merb/merb_router.rb +0 -309
  167. data/lib/merb/merb_yaml_store.rb +0 -31
  168. data/lib/merb/mixins/render_mixin.rb +0 -283
  169. data/lib/merb/mixins/responder_mixin.rb +0 -159
  170. data/lib/merb/session/merb_ar_session.rb +0 -131
  171. data/lib/merb/vendor/paginator/README.txt +0 -84
  172. data/lib/merb/vendor/paginator/paginator.rb +0 -124
  173. data/lib/tasks/db.rake +0 -55
@@ -1,12 +1,10 @@
1
- require File.dirname(__FILE__)+'/mixins/erubis_capture_mixin'
2
- require File.dirname(__FILE__)+'/mixins/view_context_mixin'
3
- require File.dirname(__FILE__)+'/mixins/form_control_mixin'
1
+
4
2
 
5
3
  module Merb
6
4
  PROTECTED_IVARS = %w[@_new_cookie
7
5
  @method
8
6
  @env
9
- @controller
7
+ @web_controller
10
8
  @_body
11
9
  @_fingerprint_before
12
10
  @_session
@@ -16,7 +14,18 @@ module Merb
16
14
  @_status
17
15
  @_view_context_cache
18
16
  @_response
19
- @_params]
17
+ @_params
18
+ @thrown_content
19
+ @_route
20
+ @_benchmarks
21
+ @_provided_formats
22
+ @_format_value
23
+ @_content_type
24
+ @_merb_unmatched
25
+ @_template_format
26
+ @_provided_formats
27
+ @template]
28
+
20
29
 
21
30
  module GlobalHelper
22
31
  end
@@ -26,18 +35,18 @@ module Merb
26
35
  class ViewContext
27
36
  include Merb::ViewContextMixin
28
37
  include Merb::FormControls
29
- include Merb::GlobalHelper
38
+ include Merb::WebControllerMixin
30
39
 
31
40
  def initialize(controller)
41
+ @web_controller = controller
32
42
  @_merb_partial_locals = {}
33
- @controller = controller
34
- (@controller.instance_variables - PROTECTED_IVARS).each do |ivar|
35
- self.instance_variable_set(ivar, @controller.instance_variable_get(ivar))
43
+ (@web_controller.instance_variables - PROTECTED_IVARS).each do |ivar|
44
+ self.instance_variable_set(ivar, @web_controller.instance_variable_get(ivar))
36
45
  end
37
46
  begin
38
- self.class.class_eval("include Merb::#{@controller.class.name}Helper")
47
+ self.class.class_eval(" include Merb::GlobalHelper; include Merb::#{@web_controller.class.name}Helper")
39
48
  rescue NameError
40
- MERB_LOGGER.info("Missing Helper: Merb::#{@controller.class.name}Helper")
49
+ MERB_LOGGER.debug("Missing Helper: Merb::#{@web_controller.class.name}Helper")
41
50
  end
42
51
  end
43
52
 
@@ -46,46 +55,22 @@ module Merb
46
55
  self
47
56
  end
48
57
 
49
- # accessor for the view. refers to the current @controller object
58
+ # accessor for the view. refers to the current @web_controller object
50
59
  def controller
51
- @controller
52
- end
53
-
54
- def request
55
- @controller.request
56
- end
57
-
58
- def params
59
- @controller.params
60
- end
61
-
62
- def cookies
63
- @controller.cookies
64
- end
65
-
66
- def headers
67
- @controller.headers
60
+ @web_controller
68
61
  end
69
-
70
- def session
71
- @controller.session
72
- end
73
-
74
- def response
75
- @controller.response
76
- end
77
-
62
+
78
63
  alias_method :old_respond_to?, :respond_to?
79
64
 
80
65
  def respond_to?(sym, include_private=false)
81
- old_respond_to?(sym, include_private) || @controller.respond_to?(sym, include_private) || @_merb_partial_locals.key?(sym)
66
+ old_respond_to?(sym, include_private) || @web_controller.respond_to?(sym, include_private) || @_merb_partial_locals.key?(sym)
82
67
  end
83
68
 
84
69
  # catch any method calls that the controller responds to
85
70
  # and delegate them back to the controller.
86
71
  def method_missing(sym, *args, &blk)
87
- if @controller.respond_to? sym
88
- @controller.send(sym, *args, &blk)
72
+ if @web_controller.respond_to? sym
73
+ @web_controller.send(sym, *args, &blk)
89
74
  elsif @_merb_partial_locals.key? sym
90
75
  @_merb_partial_locals[sym]
91
76
  else
@@ -95,4 +80,4 @@ module Merb
95
80
 
96
81
  end
97
82
 
98
- end
83
+ end
File without changes
@@ -1,7 +1,7 @@
1
1
  def install_merb_script
2
2
  script_filepath = MERB_ROOT / 'script/merb'
3
3
  FileUtils.rm script_filepath if File.exist? script_filepath
4
- tmpl = "#!/usr/bin/env ruby\nrequire File.expand_path(File.dirname(__FILE__)+'/../dist/framework/merb/merb_server')\nMerb::Server.run\n"
4
+ tmpl = "#!/usr/bin/env ruby\nrequire File.expand_path(File.dirname(__FILE__)+'/../framework/merb/server')\nMerb::Server.run\n"
5
5
  File.open(script_filepath, 'wb') {|f|
6
6
  f.write tmpl
7
7
  f.chmod(0744)
@@ -9,36 +9,46 @@ def install_merb_script
9
9
  end
10
10
 
11
11
  namespace :merb do
12
- desc "freeze the merb framework into dist/merb for portability"
12
+ desc "freeze the merb framework into merb for portability"
13
13
  task :freeze do
14
- FileUtils.rm_rf MERB_ROOT / 'dist/framework'
15
- FileUtils.cp_r MERB_FRAMEWORK_ROOT, (MERB_ROOT / 'dist/framework')
14
+ FileUtils.rm_rf MERB_ROOT / 'framework'
15
+ FileUtils.cp_r MERB_FRAMEWORK_ROOT, (MERB_ROOT / 'framework')
16
16
  install_merb_script
17
17
 
18
- puts " Freezing Merb Framework into dist/framework"
18
+ puts " Freezing Merb Framework into framework"
19
19
  puts " Use script/merb to start instead of plain merb"
20
20
  end
21
21
  desc "unfreeze this app from the framework and use system gem."
22
22
  task :unfreeze do
23
- FileUtils.rm_rf MERB_ROOT / 'dist/framework'
23
+ FileUtils.rm_rf MERB_ROOT / 'framework'
24
24
  FileUtils.rm MERB_ROOT / 'script/merb'
25
25
 
26
26
  puts " Removed: "
27
- puts " - #{MERB_ROOT / 'dist/framework'} (recursive) "
27
+ puts " - #{MERB_ROOT / 'framework'} (recursive) "
28
28
  puts " - #{MERB_ROOT / 'script/merb'}"
29
29
  end
30
30
 
31
- desc "freeze the merb framework from svn"
31
+ desc "freeze the merb framework from svn, use REVISION=# to freeze a specific revision"
32
32
  task :freeze_from_svn do
33
- install_path = MERB_ROOT / 'dist/framework'
33
+ install_path = MERB_ROOT / 'framework'
34
+ revision = ENV['REVISION'] || 'HEAD'
34
35
  puts " Removing old framework" if File.exist? install_path
35
36
  FileUtils.rm_rf install_path
36
37
 
37
- puts " Freezing Merb Framework from svn"
38
- system "svn co http://svn.devjavu.com/merb/trunk/lib #{install_path}"
38
+ puts " Freezing Merb Framework from svn, revision #{revision}"
39
+ system "svn co -r #{revision} http://svn.devjavu.com/merb/trunk/lib #{install_path}"
39
40
  install_merb_script
40
41
 
41
42
  puts " Use script/merb to start instead of plain merb"
42
43
  end
43
44
 
45
+ end
46
+
47
+ desc "Setup the Merb Environment by requiring merb and loading your merb_init.rb"
48
+ task :merb_env do
49
+ require 'rubygems'
50
+ require 'merb'
51
+ Merb::Server.config[:environment] = ENV['MERB_ENV'] if ENV['MERB_ENV']
52
+ MERB_ENV = Merb::Server.config[:environment].nil? ? 'development' : Merb::Server.config[:environment]
53
+ load MERB_ROOT+'/config/merb_init.rb'
44
54
  end
File without changes
@@ -0,0 +1,16 @@
1
+ require 'merb/generators/merb_generator_helpers'
2
+
3
+ class ModelGenerator < Merb::GeneratorHelpers::ModelGeneratorBase
4
+
5
+ def initialize( *args )
6
+ super( *args )
7
+ options[:skip_migration] = true
8
+ @model_template_name = "new_model_template.erb"
9
+ @model_test_generator_name = "merb_model_test"
10
+ end
11
+
12
+ def self.superclass
13
+ RubiGen::Base
14
+ end
15
+
16
+ end
@@ -0,0 +1,5 @@
1
+ class <%= class_name %>
2
+ <% unless table_attributes.empty? -%>
3
+ attr_accessor <%= table_attributes.map{|a| ":#{a.name}" }.compact.uniq.join(", ") %>
4
+ <% end -%>
5
+ end
@@ -0,0 +1,26 @@
1
+ require 'merb/generators/merb_generator_helpers'
2
+
3
+ class ResourceControllerGenerator < Merb::GeneratorHelpers::ControllerGeneratorBase
4
+
5
+ def initialize(*args)
6
+ runtime_options = args.last.is_a?(Hash) ? args.pop : {}
7
+ name, *actions = args.flatten
8
+ runtime_options[:actions] = %w[index show new edit]
9
+ runtime_options[:test_stub_generator] = "merb_controller_test"
10
+ super( [name], runtime_options )
11
+ end
12
+
13
+ def self.superclass
14
+ RubiGen::Base
15
+ end
16
+
17
+ protected
18
+ def banner
19
+ <<-EOS
20
+ Creates a Merb controller, views and specs using Active Record Models
21
+
22
+ USAGE: #{$0} #{spec.name} resource_name"
23
+ EOS
24
+ end
25
+
26
+ end
@@ -0,0 +1,30 @@
1
+ <% klass = class_name.singularize -%>
2
+ <% ivar = class_name.snake_case.singularize -%>
3
+ class <%= class_name %> < Application
4
+ provides :xml, :js, :yaml
5
+
6
+ def index
7
+ render
8
+ end
9
+
10
+ def show
11
+ render
12
+ end
13
+
14
+ def new
15
+ render
16
+ end
17
+
18
+ def edit
19
+ render
20
+ end
21
+
22
+ def create
23
+ end
24
+
25
+ def update
26
+ end
27
+
28
+ def destroy
29
+ end
30
+ end
@@ -0,0 +1 @@
1
+ Edit Action for <%= class_name %>
@@ -0,0 +1,5 @@
1
+ module Merb
2
+ module <%= class_name %>Helper
3
+
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ Index Action for <%= class_name %>
@@ -0,0 +1 @@
1
+ New Action for <%= class_name %>
@@ -0,0 +1 @@
1
+ Show Action for <%= class_name %>
@@ -0,0 +1,5 @@
1
+ Description:
2
+
3
+
4
+ Usage:
5
+
@@ -0,0 +1,16 @@
1
+ require 'merb/generators/merb_generator_helpers'
2
+
3
+ class ControllerGenerator < Merb::GeneratorHelpers::ControllerGeneratorBase
4
+
5
+ def initialize(*args)
6
+ runtime_options = args.last.is_a?(Hash) ? args.pop : {}
7
+ name, *actions = args.flatten
8
+ runtime_options[:actions] = actions.empty? ? %w[index] : actions
9
+ super( [name], runtime_options )
10
+ end
11
+
12
+ def self.superclass
13
+ RubiGen::Base
14
+ end
15
+
16
+ end
@@ -0,0 +1,8 @@
1
+ class <%= class_name %> < Application
2
+ <% actions.each do |action| -%>
3
+
4
+ def <%= action %>
5
+ render
6
+ end
7
+ <% end -%>
8
+ end
@@ -0,0 +1,5 @@
1
+ module Merb
2
+ module <%= class_name %>Helper
3
+
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ <h1><%= class_name %> controller, index action</h1>
2
+
3
+ <p>Edit this file in <tt>app/views/<%= file_name %>/index.html.erb</tt></p>
File without changes
@@ -0,0 +1,60 @@
1
+ require 'merb'
2
+ class ResourceGenerator < RubiGen::Base
3
+
4
+ default_options :author => nil
5
+
6
+ attr_reader :name, :class_name, :file_name, :provided_args
7
+
8
+ def initialize(runtime_args, runtime_options = {})
9
+ super
10
+ usage if args.empty?
11
+ # @name = args.shift
12
+ @provided_args = runtime_args
13
+ # @class_name = args.first.camel_case
14
+ extract_options
15
+ end
16
+
17
+ def manifest
18
+ record do |m|
19
+ m.dependency "model", provided_args.dup, options.dup
20
+ m.dependency "resource_controller", provided_args.dup, options.dup
21
+ end
22
+ end
23
+
24
+ protected
25
+ def banner
26
+ <<-EOS
27
+ Creates a full resource. This includes:
28
+
29
+ Model: A model class
30
+ Migration: if required
31
+ Model Test or Spec stub
32
+ Resource Controller and views
33
+ Controller Test of Spec stubs
34
+
35
+ Example
36
+
37
+ ruby script/generate resource post title:string content:text created_at:datetime
38
+
39
+ USAGE: #{$0} #{spec.name} name"
40
+ EOS
41
+ end
42
+
43
+ def add_options!(opts)
44
+ # opts.separator ''
45
+ # opts.separator 'Options:'
46
+ # For each option below, place the default
47
+ # at the top of the file next to "default_options"
48
+ # opts.on("-a", "--author=\"Your Name\"", String,
49
+ # "Some comment about this option",
50
+ # "Default: none") { |options[:author]| }
51
+ # opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
52
+ end
53
+
54
+ def extract_options
55
+ # for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
56
+ # Templates can access these value via the attr_reader-generated methods, but not the
57
+ # raw instance variable value.
58
+ # @author = options[:author]
59
+ end
60
+ end
@@ -0,0 +1,67 @@
1
+ require 'merb'
2
+ class MerbControllerTestGenerator < RubiGen::Base
3
+
4
+ default_options :author => nil
5
+
6
+ attr_reader :name, :class_name, :file_name, :template_actions
7
+
8
+ def initialize(runtime_args, runtime_options = {})
9
+ super
10
+ usage if args.empty?
11
+ @name = args.shift
12
+ @class_name = @name.camel_case
13
+ @file_name = @name.snake_case #.pluralize
14
+ @template_actions = runtime_options[:template_actions] || []
15
+ @engine = runtime_options[:engine] || "erb" # set by subclasses only
16
+ extract_options
17
+ end
18
+
19
+ def manifest
20
+ record do |m|
21
+ m.directory 'spec/controllers'
22
+ m.template "controller_spec.rb", "spec/controllers/#{file_name}_spec.rb"
23
+
24
+ m.directory "spec/views/#{file_name}"
25
+
26
+
27
+ # Setup the view stubs for each view
28
+ @template_actions.each do |the_action|
29
+ template_name = "#{the_action}.html.#{@engine}"
30
+ if File.exists?(File.join(MERB_ROOT, "app", "views", file_name, template_name))
31
+ m.template "#{the_action}_spec.rb", "spec/views/#{file_name}/#{the_action}_html_spec.rb"
32
+ end
33
+ end
34
+
35
+
36
+ m.directory 'spec/helpers'
37
+ m.template "helper_spec.rb", "spec/helpers/#{file_name}_helper_spec.rb"
38
+ end
39
+ end
40
+
41
+ protected
42
+ def banner
43
+ <<-EOS
44
+ Creates a ...
45
+
46
+ USAGE: #{$0} #{spec.name} name"
47
+ EOS
48
+ end
49
+
50
+ def add_options!(opts)
51
+ # opts.separator ''
52
+ # opts.separator 'Options:'
53
+ # For each option below, place the default
54
+ # at the top of the file next to "default_options"
55
+ # opts.on("-a", "--author=\"Your Name\"", String,
56
+ # "Some comment about this option",
57
+ # "Default: none") { |options[:author]| }
58
+ # opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
59
+ end
60
+
61
+ def extract_options
62
+ # for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
63
+ # Templates can access these value via the attr_reader-generated methods, but not the
64
+ # raw instance variable value.
65
+ # @author = options[:author]
66
+ end
67
+ end