thorero-gen 0.9.4

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 (152) hide show
  1. data/LICENSE +20 -0
  2. data/README +21 -0
  3. data/Rakefile +65 -0
  4. data/TODO +13 -0
  5. data/bin/merb-gen +10 -0
  6. data/lib/merb-gen.rb +37 -0
  7. data/lib/merb-gen/controller.rb +69 -0
  8. data/lib/merb-gen/freezer.rb +19 -0
  9. data/lib/merb-gen/generator.rb +55 -0
  10. data/lib/merb-gen/helper.rb +53 -0
  11. data/lib/merb-gen/merb.rb +27 -0
  12. data/lib/merb-gen/merb/merb_flat.rb +31 -0
  13. data/lib/merb-gen/merb/merb_full.rb +35 -0
  14. data/lib/merb-gen/merb/merb_very_flat.rb +33 -0
  15. data/lib/merb-gen/merb_plugin.rb +33 -0
  16. data/lib/merb-gen/migration.rb +69 -0
  17. data/lib/merb-gen/model.rb +67 -0
  18. data/lib/merb-gen/part_controller.rb +55 -0
  19. data/lib/merb-gen/resource.rb +32 -0
  20. data/lib/merb-gen/resource_controller.rb +91 -0
  21. data/lib/merb-gen/session_migration.rb +44 -0
  22. data/lib/merb-gen/slice.rb +25 -0
  23. data/lib/merb-gen/slice/full.rb +31 -0
  24. data/lib/merb-gen/slice/thin.rb +31 -0
  25. data/lib/merb-gen/slice/very_thin.rb +31 -0
  26. data/spec/controller_spec.rb +94 -0
  27. data/spec/merb_spec.rb +28 -0
  28. data/spec/migration_spec.rb +47 -0
  29. data/spec/model_spec.rb +95 -0
  30. data/spec/resource_controller_spec.rb +98 -0
  31. data/spec/spec_helper.rb +7 -0
  32. data/templates/application/merb/Rakefile +76 -0
  33. data/templates/application/merb/app/controllers/application.rb +2 -0
  34. data/templates/application/merb/app/controllers/exceptions.rb +13 -0
  35. data/templates/application/merb/app/helpers/global_helpers.rb +5 -0
  36. data/templates/application/merb/app/views/exceptions/internal_server_error.html.erb +216 -0
  37. data/templates/application/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  38. data/templates/application/merb/app/views/exceptions/not_found.html.erb +47 -0
  39. data/templates/application/merb/app/views/layout/application.html.erb +11 -0
  40. data/templates/application/merb/autotest/discover.rb +1 -0
  41. data/templates/application/merb/autotest/merb.rb +149 -0
  42. data/templates/application/merb/autotest/merb_rspec.rb +166 -0
  43. data/templates/application/merb/config/environments/development.rb +7 -0
  44. data/templates/application/merb/config/environments/production.rb +7 -0
  45. data/templates/application/merb/config/environments/rake.rb +7 -0
  46. data/templates/application/merb/config/environments/test.rb +6 -0
  47. data/templates/application/merb/config/init.rb +164 -0
  48. data/templates/application/merb/config/rack.rb +12 -0
  49. data/templates/application/merb/config/router.rb +35 -0
  50. data/templates/application/merb/public/images/merb.jpg +0 -0
  51. data/templates/application/merb/public/merb.fcgi +22 -0
  52. data/templates/application/merb/public/stylesheets/master.css +119 -0
  53. data/templates/application/merb/spec/spec.opts +0 -0
  54. data/templates/application/merb/spec/spec_helper.rb +13 -0
  55. data/templates/application/merb/test/test_helper.rb +14 -0
  56. data/templates/application/merb_flat/README.txt +10 -0
  57. data/templates/application/merb_flat/application.rb +15 -0
  58. data/templates/application/merb_flat/config/framework.rb +7 -0
  59. data/templates/application/merb_flat/config/init.rb +18 -0
  60. data/templates/application/merb_flat/views/foo.html.erb +3 -0
  61. data/templates/application/merb_plugin/LICENSE +20 -0
  62. data/templates/application/merb_plugin/README +4 -0
  63. data/templates/application/merb_plugin/Rakefile +59 -0
  64. data/templates/application/merb_plugin/TODO +5 -0
  65. data/templates/application/merb_plugin/lib/%base_name%.rb +18 -0
  66. data/templates/application/merb_plugin/lib/%base_name%/merbtasks.rb +6 -0
  67. data/templates/application/merb_plugin/spec/%base_name%_spec.rb +7 -0
  68. data/templates/application/merb_plugin/spec/spec_helper.rb +2 -0
  69. data/templates/application/merb_plugin/test/%base_name%_test.rb +0 -0
  70. data/templates/application/merb_plugin/test/test_helper.rb +2 -0
  71. data/templates/application/merb_very_flat/application.rbt +17 -0
  72. data/templates/application/slice/full/LICENSE +20 -0
  73. data/templates/application/slice/full/README +170 -0
  74. data/templates/application/slice/full/Rakefile +48 -0
  75. data/templates/application/slice/full/TODO +15 -0
  76. data/templates/application/slice/full/app/controllers/application.rb +5 -0
  77. data/templates/application/slice/full/app/controllers/main.rb +7 -0
  78. data/templates/application/slice/full/app/helpers/application_helper.rb +64 -0
  79. data/templates/application/slice/full/app/views/layout/%underscored_base_name%.html.erb +16 -0
  80. data/templates/application/slice/full/app/views/main/index.html.erb +1 -0
  81. data/templates/application/slice/full/lib/%base_name%.rb +78 -0
  82. data/templates/application/slice/full/lib/%base_name%/merbtasks.rb +166 -0
  83. data/templates/application/slice/full/lib/%base_name%/slicetasks.rb +18 -0
  84. data/templates/application/slice/full/public/javascripts/master.js +0 -0
  85. data/templates/application/slice/full/public/stylesheets/master.css +2 -0
  86. data/templates/application/slice/full/spec/%base_name%_spec.rb +130 -0
  87. data/templates/application/slice/full/spec/controllers/main_spec.rb +61 -0
  88. data/templates/application/slice/full/spec/spec_helper.rb +44 -0
  89. data/templates/application/slice/full/stubs/app/controllers/application.rb +2 -0
  90. data/templates/application/slice/full/stubs/app/controllers/main.rb +2 -0
  91. data/templates/application/slice/thin/LICENSE +20 -0
  92. data/templates/application/slice/thin/README +130 -0
  93. data/templates/application/slice/thin/Rakefile +46 -0
  94. data/templates/application/slice/thin/TODO +7 -0
  95. data/templates/application/slice/thin/application.rb +36 -0
  96. data/templates/application/slice/thin/lib/%base_name%.rb +93 -0
  97. data/templates/application/slice/thin/lib/%base_name%/merbtasks.rb +106 -0
  98. data/templates/application/slice/thin/lib/%base_name%/slicetasks.rb +18 -0
  99. data/templates/application/slice/thin/public/javascripts/master.js +0 -0
  100. data/templates/application/slice/thin/public/stylesheets/master.css +2 -0
  101. data/templates/application/slice/thin/stubs/application.rb +9 -0
  102. data/templates/application/slice/thin/views/layout/%underscored_base_name%.html.erb +16 -0
  103. data/templates/application/slice/thin/views/main/index.html.erb +1 -0
  104. data/templates/application/slice/very_thin/LICENSE +20 -0
  105. data/templates/application/slice/very_thin/README +110 -0
  106. data/templates/application/slice/very_thin/Rakefile +46 -0
  107. data/templates/application/slice/very_thin/TODO +7 -0
  108. data/templates/application/slice/very_thin/application.rb +36 -0
  109. data/templates/application/slice/very_thin/lib/%base_name%.rb +89 -0
  110. data/templates/application/slice/very_thin/lib/%base_name%/merbtasks.rb +106 -0
  111. data/templates/application/slice/very_thin/lib/%base_name%/slicetasks.rb +18 -0
  112. data/templates/component/controller/app/controllers/%file_name%.rb +11 -0
  113. data/templates/component/controller/app/views/%file_name%/index.html.erb +1 -0
  114. data/templates/component/controller/spec/controllers/%file_name%_spec.rb +7 -0
  115. data/templates/component/controller/test/controllers/%file_name%_test.rb +17 -0
  116. data/templates/component/freezer/script/frozen_merb +43 -0
  117. data/templates/component/helper/app/helpers/%file_name%_helper.rb +7 -0
  118. data/templates/component/helper/spec/helpers/%file_name%_helper_spec.rb +5 -0
  119. data/templates/component/migration/activerecord/schema/migrations/%file_name%.rb +19 -0
  120. data/templates/component/migration/datamapper/schema/migrations/%file_name%.rb +7 -0
  121. data/templates/component/migration/sequel/schema/migrations/%file_name%.rb +24 -0
  122. data/templates/component/model/activerecord/app/models/%file_name%.rb +2 -0
  123. data/templates/component/model/datamapper/app/models/%file_name%.rb +6 -0
  124. data/templates/component/model/none/app/models/%file_name%.rb +5 -0
  125. data/templates/component/model/rspec/spec/models/%file_name%_spec.rb +7 -0
  126. data/templates/component/model/sequel/app/models/%file_name%.rb +2 -0
  127. data/templates/component/model/test_unit/test/models/%file_name%_test.rb +9 -0
  128. data/templates/component/part_controller/app/parts/%file_name%_part.rb +9 -0
  129. data/templates/component/part_controller/app/parts/views/%file_name%_part/index.html.erb +3 -0
  130. data/templates/component/resource_controller/activerecord/app/controllers/%file_name%.rb +57 -0
  131. data/templates/component/resource_controller/activerecord/app/views/%file_name%/edit.html.erb +3 -0
  132. data/templates/component/resource_controller/activerecord/app/views/%file_name%/index.html.erb +3 -0
  133. data/templates/component/resource_controller/activerecord/app/views/%file_name%/new.html.erb +3 -0
  134. data/templates/component/resource_controller/activerecord/app/views/%file_name%/show.html.erb +3 -0
  135. data/templates/component/resource_controller/datamapper/app/controllers/%file_name%.rb +59 -0
  136. data/templates/component/resource_controller/datamapper/app/views/%file_name%/edit.html.erb +21 -0
  137. data/templates/component/resource_controller/datamapper/app/views/%file_name%/index.html.erb +24 -0
  138. data/templates/component/resource_controller/datamapper/app/views/%file_name%/new.html.erb +20 -0
  139. data/templates/component/resource_controller/datamapper/app/views/%file_name%/show.html.erb +14 -0
  140. data/templates/component/resource_controller/none/app/controllers/%file_name%.rb +36 -0
  141. data/templates/component/resource_controller/none/app/views/%file_name%/edit.html.erb +3 -0
  142. data/templates/component/resource_controller/none/app/views/%file_name%/index.html.erb +3 -0
  143. data/templates/component/resource_controller/none/app/views/%file_name%/new.html.erb +3 -0
  144. data/templates/component/resource_controller/none/app/views/%file_name%/show.html.erb +3 -0
  145. data/templates/component/resource_controller/sequel/app/controllers/%file_name%.rb +59 -0
  146. data/templates/component/resource_controller/sequel/app/views/%file_name%/edit.html.erb +3 -0
  147. data/templates/component/resource_controller/sequel/app/views/%file_name%/index.html.erb +3 -0
  148. data/templates/component/resource_controller/sequel/app/views/%file_name%/new.html.erb +3 -0
  149. data/templates/component/resource_controller/sequel/app/views/%file_name%/show.html.erb +3 -0
  150. data/templates/component/session_migration/activerecord/schema/migrations/%version%_sessions.rb +12 -0
  151. data/templates/component/session_migration/sequel/schema/migrations/%version%_sessions.rb +16 -0
  152. metadata +362 -0
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2007 Yehuda Katz
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,21 @@
1
+ ==== merb-gen
2
+
3
+ merb-gen is a part of the Merb More package. It provides application, plugin, and component
4
+ generators for Merb.
5
+
6
+ ==== Usage
7
+
8
+ To generate directory structure for a new merb app, run merb-gen app <app-name>.
9
+ For instance, <tt>merb-gen app foo</tt> would create a new foo merb app inside of the foo directory.
10
+
11
+ Use <tt>--flat</tt> to generate a flattened application (very simple directory structure)
12
+ and <tt>--very-flat</tt> to generate a single file application.
13
+
14
+ To generate a new merb plugin, run merb-gen plugin &lt;plugin_name&gt;.
15
+
16
+ To see what generators are available, run merb-gen generators.
17
+
18
+ ==== Custom generators
19
+
20
+ If you want to create your custom generators to use with Merb, and don't want to create a gem,
21
+ you should put them in ~/.rubigen/merb_generators/.
data/Rakefile ADDED
@@ -0,0 +1,65 @@
1
+ require 'rubygems'
2
+ require 'rake/gempackagetask'
3
+ require "extlib"
4
+ require 'merb-core/tasks/merb_rake_helper'
5
+ require "spec/rake/spectask"
6
+
7
+ ##############################################################################
8
+ # Package && release
9
+ ##############################################################################
10
+ RUBY_FORGE_PROJECT = "thorero"
11
+ PROJECT_URL = "http://merbivore.com"
12
+ PROJECT_SUMMARY = "Merb gen: generators suite for Merb."
13
+ PROJECT_DESCRIPTION = PROJECT_SUMMARY
14
+
15
+ GEM_AUTHOR = "Jonas Nicklas"
16
+ GEM_EMAIL = "jonas.nicklas@gmail.com"
17
+
18
+ GEM_NAME = "thorero-gen"
19
+ PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
20
+ GEM_VERSION = (Merb::MORE_VERSION rescue "0.9.4") + PKG_BUILD
21
+
22
+ RELEASE_NAME = "REL #{GEM_VERSION}"
23
+
24
+ require "extlib/tasks/release"
25
+
26
+ spec = Gem::Specification.new do |s|
27
+ s.rubyforge_project = RUBY_FORGE_PROJECT
28
+ s.name = GEM_NAME
29
+ s.version = GEM_VERSION
30
+ s.platform = Gem::Platform::RUBY
31
+ s.has_rdoc = true
32
+ s.extra_rdoc_files = ["README", "LICENSE", 'TODO']
33
+ s.summary = PROJECT_SUMMARY
34
+ s.description = PROJECT_DESCRIPTION
35
+ s.author = GEM_AUTHOR
36
+ s.email = GEM_EMAIL
37
+ s.homepage = PROJECT_URL
38
+ s.bindir = "bin"
39
+ s.executables = %w( merb-gen )
40
+
41
+ s.add_dependency "merb-core", ">= 0.9.4"
42
+ s.add_dependency "templater", ">= 0.1.2"
43
+
44
+ s.require_path = 'lib'
45
+ s.autorequire = GEM_NAME
46
+ s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,bin,spec,templates}/**/*")
47
+ end
48
+
49
+ Rake::GemPackageTask.new(spec) do |pkg|
50
+ pkg.gem_spec = spec
51
+ end
52
+
53
+ desc "Install the gem"
54
+ task :install => [:package] do
55
+ sh %{#{sudo} gem install #{install_home} pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources}
56
+ end
57
+
58
+ namespace :jruby do
59
+
60
+ desc "Run :package and install the resulting .gem with jruby"
61
+ task :install => :package do
62
+ sh %{#{sudo} jruby -S gem install #{install_home} pkg/#{GEM_NAME}-#{GEM_VERSION}.gem --no-rdoc --no-ri}
63
+ end
64
+
65
+ end
data/TODO ADDED
@@ -0,0 +1,13 @@
1
+ Merb-gen is now ported to templater, instead of rubigen. Some things are left to do, including:
2
+
3
+ * Integrate with Merb::Config[:framework], so that stuff gets placed in the correct directories
4
+ * Allow some system for plugins to add their own generators.
5
+ * Move ORM specific templates/code into respective plugin (this requires a change in templater so that absolute paths can be specified for templates)
6
+ * Move test_unit stuff into merb-test-unit
7
+ * Move part controller generator into merb-parts
8
+ * Automatically infer ORM and testing framework (this should be easy, really)
9
+ * Add migration generators
10
+ * Add generators for session migrations
11
+ * Change ActiveRecord migrations to use new datestamp format
12
+
13
+ * Fix remaining stuff in templater (see separate TODO)
data/bin/merb-gen ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'merb-gen'
5
+
6
+ Merb::BootLoader.after_app_loads do
7
+ Merb::Generators.run_cli(Dir.pwd, 'merb-gen', Merb::VERSION, ARGV)
8
+ end
9
+
10
+ Merb.start :environment => 'development', :log_level => 'error'
data/lib/merb-gen.rb ADDED
@@ -0,0 +1,37 @@
1
+ require 'rubygems'
2
+ require 'merb-core'
3
+ require 'sha1'
4
+ gem 'templater', '>= 0.1.2'
5
+ require 'templater'
6
+
7
+ path = File.join(File.dirname(__FILE__), "merb-gen")
8
+
9
+ require path / "generator"
10
+ require path / "merb"
11
+ require path / "merb" / "merb_full"
12
+ require path / "merb" / "merb_flat"
13
+ require path / "merb" / "merb_very_flat"
14
+ require path / "slice"
15
+ require path / "slice" / "full"
16
+ require path / "slice" / "thin"
17
+ require path / "slice" / "very_thin"
18
+ require path / "merb_plugin"
19
+ require path / "controller"
20
+ require path / "helper"
21
+ require path / "part_controller"
22
+ require path / "migration"
23
+ require path / "session_migration"
24
+ require path / "model"
25
+ require path / "resource_controller"
26
+ require path / "resource"
27
+ require path / "freezer"
28
+
29
+ # Require all generators that plugins have added to merb, after the app has loaded.
30
+ Merb::BootLoader.after_app_loads do
31
+ # TODO: remove this if statement once generator hooks are added to merb-core proper
32
+ if Merb.respond_to?(:generators)
33
+ Merb.generators.each do |file|
34
+ require file
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,69 @@
1
+ module Merb::Generators
2
+
3
+ class ControllerGenerator < ComponentGenerator
4
+
5
+ def self.source_root
6
+ File.join(super, 'controller')
7
+ end
8
+
9
+ desc <<-DESC
10
+ Generates a new controller.
11
+ DESC
12
+
13
+ option :testing_framework, :desc => 'Testing framework to use (one of: spec, test_unit)'
14
+
15
+ first_argument :name, :required => true, :desc => "controller name"
16
+
17
+ invoke :helper
18
+
19
+ template :controller do
20
+ source('app/controllers/%file_name%.rb')
21
+ destination("app/controllers/#{file_name}.rb")
22
+ end
23
+
24
+ template :index do
25
+ source('app/views/%file_name%/index.html.erb')
26
+ destination("app/views/#{file_name}/index.html.erb")
27
+ end
28
+
29
+ template :controller_spec, :testing_framework => :rspec do
30
+ source('spec/controllers/%file_name%_spec.rb')
31
+ destination("spec/controllers/#{file_name}_spec.rb")
32
+ end
33
+
34
+ template :controller_test_unit, :testing_framework => :test_unit do
35
+ source('test/controllers/%file_name%_test.rb')
36
+ destination("test/controllers/#{file_name}_test.rb")
37
+ end
38
+
39
+ def controller_modules
40
+ chunks[0..-2]
41
+ end
42
+
43
+ def controller_class_name
44
+ chunks.last
45
+ end
46
+
47
+ def full_class_name
48
+ chunks.join('::')
49
+ end
50
+
51
+ def test_class_name
52
+ controller_class_name + "Test"
53
+ end
54
+
55
+ def file_name
56
+ controller_class_name.snake_case
57
+ end
58
+
59
+ protected
60
+
61
+ def chunks
62
+ name.gsub('/', '::').split('::').map { |c| c.camel_case }
63
+ end
64
+
65
+ end
66
+
67
+ add :controller, ControllerGenerator
68
+
69
+ end
@@ -0,0 +1,19 @@
1
+ module Merb::Generators
2
+
3
+ class FreezerGenerator < ComponentGenerator
4
+
5
+ def self.source_root
6
+ File.join(super, 'freezer')
7
+ end
8
+
9
+ desc <<-DESC
10
+ Generates Merb freezer scripts.
11
+ DESC
12
+
13
+ template :freezer, 'script/frozen_merb', 'script/frozen_merb'
14
+
15
+ end
16
+
17
+ add :freezer, FreezerGenerator
18
+
19
+ end
@@ -0,0 +1,55 @@
1
+ module Merb
2
+
3
+ module Generators
4
+
5
+ extend Templater::Manifold
6
+
7
+ desc <<-DESC
8
+ Generate components for your application or entirely new applications.
9
+ DESC
10
+
11
+ class Generator < Templater::Generator
12
+
13
+ def initialize(*args)
14
+ super
15
+ options[:orm] ||= Merb.orm_generator_scope
16
+ options[:testing_framework] ||= Merb.test_framework_generator_scope
17
+
18
+ options[:orm] = :none if options[:orm] == :merb_default # FIXME: temporary until this is fixed in merb-core
19
+ end
20
+
21
+ # Inside a template, wraps a block of code properly in modules, keeping the indentation correct
22
+ # TODO: spec me
23
+ def with_modules(modules, options={}, &block)
24
+ indent = options[:indent] || 0
25
+ text = capture(&block)
26
+ modules.each_with_index do |mod, i|
27
+ concat((" " * (indent + i)) + "module #{mod}\n", block.binding)
28
+ end
29
+ text = text.to_a.map{ |line| (" " * modules.size) + line }.join
30
+ concat(text, block.binding)
31
+ modules.reverse.each_with_index do |mod, i|
32
+ concat((" " * (indent + modules.size - i - 1)) + "end # #{mod}\n", block.binding)
33
+ end
34
+ end
35
+
36
+ def self.source_root
37
+ File.join(File.dirname(__FILE__), '..', '..', 'templates')
38
+ end
39
+ end
40
+
41
+ class ApplicationGenerator < Generator
42
+ def self.source_root
43
+ File.join(super, 'application')
44
+ end
45
+ end
46
+
47
+ class ComponentGenerator < Generator
48
+ def self.source_root
49
+ File.join(super, 'component')
50
+ end
51
+ end
52
+
53
+ end
54
+
55
+ end
@@ -0,0 +1,53 @@
1
+ module Merb::Generators
2
+
3
+ class HelperGenerator < ComponentGenerator
4
+
5
+ def self.source_root
6
+ File.join(super, 'helper')
7
+ end
8
+
9
+ desc <<-DESC
10
+ Generates a new helper.
11
+ DESC
12
+
13
+ option :testing_framework, :desc => 'Testing framework to use (one of: spec, test_unit)'
14
+
15
+ first_argument :name, :required => true, :desc => "helper name"
16
+
17
+ template :helper do
18
+ source('app/helpers/%file_name%_helper.rb')
19
+ destination("app/helpers/#{file_name}_helper.rb")
20
+ end
21
+
22
+ template :helper_spec, :testing_framework => :rspec do
23
+ source('spec/helpers/%file_name%_helper_spec.rb')
24
+ destination("spec/helpers/#{file_name}_helper_spec.rb")
25
+ end
26
+
27
+ def helper_modules
28
+ chunks[0..-2]
29
+ end
30
+
31
+ def helper_class_name
32
+ chunks.last
33
+ end
34
+
35
+ def full_class_name
36
+ chunks.join('::')
37
+ end
38
+
39
+ def file_name
40
+ helper_class_name.snake_case
41
+ end
42
+
43
+ protected
44
+
45
+ def chunks
46
+ name.gsub('/', '::').split('::').map { |c| c.camel_case }
47
+ end
48
+
49
+ end
50
+
51
+ add :helper, HelperGenerator
52
+
53
+ end
@@ -0,0 +1,27 @@
1
+ module Merb::Generators
2
+
3
+ class MerbGenerator < ApplicationGenerator
4
+
5
+ def self.source_root
6
+ File.join(super, 'merb')
7
+ end
8
+
9
+ option :testing_framework, :default => :rspec, :desc => 'Testing framework to use (one of: spec, test_unit)'
10
+ option :orm, :default => :none, :desc => 'Object-Relation Mapper to use (one of: none, activerecord, datamapper, sequel)'
11
+ option :flat, :as => :boolean, :desc => "Generate a flat application: one file + configs + templates directory."
12
+ option :very_flat, :as => :boolean, :desc => "Generate a very flat, Sinatra-like one file application."
13
+
14
+ desc <<-DESC
15
+ Generates a merb application.
16
+ DESC
17
+
18
+ first_argument :name, :required => true, :desc => "Application name"
19
+
20
+ invoke :app_full, :flat => nil, :very_flat => nil
21
+ invoke :app_flat, :flat => true
22
+ invoke :app_very_flat, :very_flat => true
23
+ end
24
+
25
+ add :app, MerbGenerator
26
+
27
+ end
@@ -0,0 +1,31 @@
1
+ module Merb::Generators
2
+
3
+ class MerbFlatGenerator < ApplicationGenerator
4
+
5
+ def self.source_root
6
+ File.join(super, 'merb_flat')
7
+ end
8
+
9
+ desc <<-DESC
10
+ This generates a flat merb application: all code but config files and
11
+ templates fits in one application. This is something in between Sinatra
12
+ and "regular" Merb application.
13
+ DESC
14
+
15
+ first_argument :name, :required => true, :desc => "Application name"
16
+
17
+ glob!
18
+
19
+ def app_name
20
+ self.name.snake_case
21
+ end
22
+
23
+ def destination_root
24
+ File.join(@destination_root, app_name)
25
+ end
26
+
27
+ end
28
+
29
+ add_private :app_flat, MerbFlatGenerator
30
+
31
+ end
@@ -0,0 +1,35 @@
1
+ module Merb::Generators
2
+
3
+ class MerbFullGenerator < ApplicationGenerator
4
+
5
+ def self.source_root
6
+ File.join(super, 'merb')
7
+ end
8
+
9
+ option :testing_framework, :default => :rspec,
10
+ :desc => 'Testing framework to use (one of: spec, test_unit).'
11
+ option :orm, :default => :none,
12
+ :desc => 'Object-Relation Mapper to use (one of: none, activerecord, datamapper, sequel).'
13
+
14
+ desc <<-DESC
15
+ This generates a Merb application with Ruby on Rails like structure.
16
+ Generator lets you configure your ORM and testing framework of choice.
17
+ DESC
18
+
19
+ glob!
20
+
21
+ first_argument :name, :required => true, :desc => "Application name"
22
+
23
+ def app_name
24
+ self.name.snake_case
25
+ end
26
+
27
+ def destination_root
28
+ File.join(@destination_root, app_name)
29
+ end
30
+
31
+ end
32
+
33
+ add_private :app_full, MerbFullGenerator
34
+
35
+ end