base-generators 0.1.3 → 0.2.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 (32) hide show
  1. data/README.2.3.textile +33 -0
  2. data/README.3.textile +35 -0
  3. data/README.textile +5 -31
  4. data/VERSION +1 -1
  5. data/base-generators.gemspec +35 -5
  6. data/lib/common_generators.rb +3 -0
  7. data/lib/generators/common.rb +15 -0
  8. data/lib/generators/common/layout/layout_generator.rb +90 -0
  9. data/lib/generators/common/layout/templates/_block.html.haml +9 -0
  10. data/lib/generators/common/layout/templates/_flashes.html.haml +5 -0
  11. data/lib/generators/common/layout/templates/_header.html.haml +16 -0
  12. data/lib/generators/common/layout/templates/_secondary_navigation.html.haml +12 -0
  13. data/lib/generators/common/layout/templates/_sidebar.html.haml +15 -0
  14. data/lib/generators/common/layout/templates/base_helper.rb +58 -0
  15. data/lib/generators/common/layout/templates/bootstrap.rake +23 -0
  16. data/lib/generators/common/layout/templates/compass_config.rb +14 -0
  17. data/lib/generators/common/layout/templates/layout.html.haml +28 -0
  18. data/lib/generators/common/layout/templates/settings.yml +12 -0
  19. data/lib/generators/common/scaffold/scaffold_generator.rb +122 -0
  20. data/lib/generators/common/scaffold/templates/controller.rb +7 -0
  21. data/lib/generators/common/scaffold/templates/helper.rb +2 -0
  22. data/lib/generators/common/scaffold/templates/migration.rb +15 -0
  23. data/lib/generators/common/scaffold/templates/model.rb +5 -0
  24. data/lib/generators/common/scaffold/templates/rspec/model.rb +9 -0
  25. data/lib/generators/common/scaffold/templates/views/_collection.html.haml +22 -0
  26. data/lib/generators/common/scaffold/templates/views/_form.html.haml +4 -0
  27. data/lib/generators/common/scaffold/templates/views/edit.html.haml +8 -0
  28. data/lib/generators/common/scaffold/templates/views/index.html.haml +7 -0
  29. data/lib/generators/common/scaffold/templates/views/index.js.haml +1 -0
  30. data/lib/generators/common/scaffold/templates/views/new.html.haml +7 -0
  31. data/lib/generators/common/scaffold/templates/views/show.html.haml +8 -0
  32. metadata +44 -5
@@ -0,0 +1,33 @@
1
+ h1. Using Generators On Rails 2.3
2
+
3
+ h2. Installation
4
+
5
+ Easy, dude.
6
+ <pre>
7
+ gem install base-generators
8
+ </pre>
9
+
10
+ or
11
+ <pre>
12
+ ruby script/plugin install git://github.com/lucasefe/base-generators.git
13
+ </pre>
14
+
15
+ h2. Generators
16
+
17
+ It provides two generators (so far)
18
+
19
+ h3. base_bootstrap
20
+
21
+ This generator copies all the templates and helper methods needed for the base_scaffold generator to work.
22
+
23
+ <pre>
24
+ ruby script/generate base_bootstrap layout_name
25
+ </pre>
26
+
27
+ h3. base_scaffold
28
+
29
+ This generator provides a scaffold structure that implements "ajax":http://github.com/jquery/jquery/ "pagination":http://github.com/mislav/will_paginate, "search":http://github.com/binarylogic/searchlogic, and "base html style":http://github.com/pilu/web-app-theme. Most of the functionality is built with standard ruby gems. Clearly, I am not trying to reinvent the wheel, but to embrace our wonderful community.
30
+
31
+ <pre>
32
+ ruby script/generate base_scaffold Product name:string price:decimal notes:text enabled:boolean
33
+ </pre>
data/README.3.textile ADDED
@@ -0,0 +1,35 @@
1
+ h1. Using Generators On Rails 3
2
+
3
+ h2. Installation
4
+
5
+ Add this to your Gemfile:
6
+
7
+ <pre>
8
+ gem "base-generators"
9
+ </pre>
10
+
11
+ and do a simple:
12
+
13
+ <pre>
14
+ bundle install
15
+ </pre>
16
+
17
+ h2. Generators
18
+
19
+ I have chosen not to go with the older base_ prefix, because it is too generic. Instead, the new prefix is common, so you get the following two creatures.
20
+
21
+ h3. common:layout
22
+
23
+ This generator copies all the templates and helper methods needed for the base_scaffold generator to work.
24
+
25
+ <pre>
26
+ rails generate common:layout layout_name
27
+ </pre>
28
+
29
+ h3. common:scaffold
30
+
31
+ This generator provides a scaffold structure that implements "ajax":http://github.com/jquery/jquery/ "pagination":http://github.com/mislav/will_paginate, "search":http://github.com/binarylogic/searchlogic, and "base html style":http://github.com/pilu/web-app-theme. Most of the functionality is built with standard ruby gems. Clearly, I am not trying to reinvent the wheel, but to embrace our wonderful community.
32
+
33
+ <pre>
34
+ rails generate common:scaffold Product name:string price:decimal notes:text enabled:boolean
35
+ </pre>
data/README.textile CHANGED
@@ -1,34 +1,9 @@
1
1
  h1. BaseGenerators
2
2
 
3
- BaseGenerators tries to ease the pain of starting a new app from scratch by automating tasks with generators.
3
+ BaseGenerators tries to ease the pain of starting a new app from scratch by automating tasks with generators. So far, it provides them for Rails 2.3 and Rails 3. Sadly, the interface for writing generators in Rails 3 has changed, so for that version everything is pretty different.
4
4
 
5
- h2. Installation
6
-
7
- Easy, dude.
8
-
9
- <pre>
10
- ruby script/plugin install git://github.com/lucasefe/base-generators.git
11
- </pre>
12
-
13
- h2. Generators
14
-
15
- It provides two generators (so far)
16
-
17
- h3. base_bootstrap
18
-
19
- This generator copies all the templates and helper methods needed for the base_scaffold generator to work.
20
-
21
- <pre>
22
- ruby script/generate base_bootstrap layout_name
23
- </pre>
24
-
25
- h3. base_scaffold
26
-
27
- This generator provides a scaffold structure that implements "ajax":http://github.com/jquery/jquery/ "pagination":http://github.com/mislav/will_paginate, "search":http://github.com/binarylogic/searchlogic, and "base html style":http://github.com/pilu/web-app-theme. Most of the functionality is built with standard ruby gems. Clearly, I am not trying to reinvent the wheel, but to embrace our wonderful community.
28
-
29
- <pre>
30
- ruby script/generate base_scaffold Product name:string price:decimal notes:text enabled:boolean
31
- </pre>
5
+ * "Using the generators on Rails 2.3":http://github.com/lucasefe/base-generators/blob/master/README.2.3.textile
6
+ * "Using the generators on Rails 3":http://github.com/lucasefe/base-generators/blob/master/README.3.textile
32
7
 
33
8
  h2. Dependencies
34
9
 
@@ -49,8 +24,7 @@ h2. Dependencies
49
24
  ** "jrails":http://github.com/aaronchi/jrails/raw/master/javascripts/jrails.js
50
25
  ** "livequery":http://github.com/brandonaaron/livequery/raw/master/jquery.livequery.js
51
26
 
52
-
53
- h2. PLUS: Easy bootstrap of your new app!
27
+ h2. PLUS: Easy bootstrap of your new app! (recommended only on Rails 2.3)
54
28
 
55
29
  If your starting with a new app, then you can rely on my own rails template to install the dependencies.
56
30
  *Warning*: Although it's base on other rails templates, it also includes my personal choices, so you may not agree with it.
@@ -63,4 +37,4 @@ h2. Disclaimer
63
37
 
64
38
  This is a work in progress, so don't complain about it. If you don't like something, contribute to fix it.
65
39
 
66
- (c) Copyright 2009 Lucas Florio. MIT License. Do whatever you want.
40
+ (c) Copyright 2008-2009-2010 Lucas Florio. Do whatever you want. MIT licensed.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.2.0
@@ -5,19 +5,23 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{base-generators}
8
- s.version = "0.1.3"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Lucas Efe"]
12
- s.date = %q{2010-04-26}
12
+ s.date = %q{2010-05-02}
13
13
  s.description = %q{BaseGenerators tries to ease the pain of starting a new app from scratch by automating tasks with generators.}
14
14
  s.email = %q{lucasefe@gmail.com}
15
15
  s.extra_rdoc_files = [
16
- "README.textile"
16
+ "README.2.3.textile",
17
+ "README.3.textile",
18
+ "README.textile"
17
19
  ]
18
20
  s.files = [
19
21
  ".gitignore",
20
22
  "MIT-LICENSE",
23
+ "README.2.3.textile",
24
+ "README.3.textile",
21
25
  "README.textile",
22
26
  "Rakefile",
23
27
  "VERSION",
@@ -45,6 +49,32 @@ Gem::Specification.new do |s|
45
49
  "generators/base_scaffold/templates/view_index.js.haml",
46
50
  "generators/base_scaffold/templates/view_new.haml",
47
51
  "generators/base_scaffold/templates/view_show.haml",
52
+ "lib/common_generators.rb",
53
+ "lib/generators/common.rb",
54
+ "lib/generators/common/layout/layout_generator.rb",
55
+ "lib/generators/common/layout/templates/_block.html.haml",
56
+ "lib/generators/common/layout/templates/_flashes.html.haml",
57
+ "lib/generators/common/layout/templates/_header.html.haml",
58
+ "lib/generators/common/layout/templates/_secondary_navigation.html.haml",
59
+ "lib/generators/common/layout/templates/_sidebar.html.haml",
60
+ "lib/generators/common/layout/templates/base_helper.rb",
61
+ "lib/generators/common/layout/templates/bootstrap.rake",
62
+ "lib/generators/common/layout/templates/compass_config.rb",
63
+ "lib/generators/common/layout/templates/layout.html.haml",
64
+ "lib/generators/common/layout/templates/settings.yml",
65
+ "lib/generators/common/scaffold/scaffold_generator.rb",
66
+ "lib/generators/common/scaffold/templates/controller.rb",
67
+ "lib/generators/common/scaffold/templates/helper.rb",
68
+ "lib/generators/common/scaffold/templates/migration.rb",
69
+ "lib/generators/common/scaffold/templates/model.rb",
70
+ "lib/generators/common/scaffold/templates/rspec/model.rb",
71
+ "lib/generators/common/scaffold/templates/views/_collection.html.haml",
72
+ "lib/generators/common/scaffold/templates/views/_form.html.haml",
73
+ "lib/generators/common/scaffold/templates/views/edit.html.haml",
74
+ "lib/generators/common/scaffold/templates/views/index.html.haml",
75
+ "lib/generators/common/scaffold/templates/views/index.js.haml",
76
+ "lib/generators/common/scaffold/templates/views/new.html.haml",
77
+ "lib/generators/common/scaffold/templates/views/show.html.haml",
48
78
  "rails/init.rb",
49
79
  "rails_template.rb",
50
80
  "tasks/scaffold_it_tasks.rake",
@@ -55,7 +85,7 @@ Gem::Specification.new do |s|
55
85
  s.homepage = %q{http://github.com/lucasefe/base-generators}
56
86
  s.rdoc_options = ["--charset=UTF-8"]
57
87
  s.require_paths = ["lib"]
58
- s.rubygems_version = %q{1.3.6}
88
+ s.rubygems_version = %q{1.3.6.1}
59
89
  s.summary = %q{Rails Generators using SearchLogic, Formtastic, jquery and many more.}
60
90
  s.test_files = [
61
91
  "test/scaffold_it_test.rb",
@@ -66,7 +96,7 @@ Gem::Specification.new do |s|
66
96
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
67
97
  s.specification_version = 3
68
98
 
69
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
99
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
70
100
  s.add_runtime_dependency(%q<searchlogic>, [">= 2.4.19"])
71
101
  s.add_runtime_dependency(%q<inherited_resources>, ["= 1.0.6"])
72
102
  s.add_runtime_dependency(%q<formtastic>, ["= 0.9.8"])
@@ -0,0 +1,3 @@
1
+ module CommonGenerators
2
+
3
+ end
@@ -0,0 +1,15 @@
1
+ require 'rails/generators/base'
2
+
3
+ module Common
4
+ module Generators
5
+ class Base < Rails::Generators::Base #:nodoc:
6
+ def self.source_root
7
+ @_common_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'common', generator_name, 'templates'))
8
+ end
9
+
10
+ def self.banner
11
+ "#{$0} common:#{generator_name} #{self.arguments.map{ |a| a.usage }.join(' ')} [options]"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,90 @@
1
+ require 'generators/common'
2
+
3
+ module Common
4
+ module Generators
5
+ class LayoutGenerator < Base
6
+ argument :layout_name,
7
+ :type => :string,
8
+ :banner => 'Layout name',
9
+ :default => 'application'
10
+
11
+ def copy_layout
12
+ template 'layout.html.haml', "app/views/layouts/#{layout_name}.html.haml"
13
+ template 'base_helper.rb', "app/helpers/#{layout_name}_helper.rb"
14
+ end
15
+ def copy_misc
16
+ template 'bootstrap.rake', "lib/tasks/bootstrap.rake"
17
+ template 'settings.yml', "config/settings.yml"
18
+ end
19
+ def copy_partials_to_common_directory
20
+ %w(
21
+ block
22
+ header
23
+ flashes
24
+ secondary_navigation
25
+ sidebar
26
+ ).each do |partial|
27
+ template "_#{partial}.html.haml", "app/views/common/_#{partial}.html.haml"
28
+ end
29
+ end
30
+ def create_initializers
31
+ template 'compass_config.rb', 'config/compass.rb'
32
+ initializer('load_settings.rb', %q(APP_CONFIG = YAML.load(ERB.new(File.read("#{Rails.root}/config/settings.yml")).result)[Rails.env].symbolize_keys))
33
+ initializer 'requires.rb',
34
+ %q{
35
+ Dir[File.join(Rails.root, 'lib', '*.rb')].each do |f|
36
+ require f
37
+ end
38
+ }
39
+
40
+ initializer('compass.rb', %q(
41
+ # encoding: utf-8
42
+ require 'compass'
43
+ rails_root = (defined?(Rails) ? Rails.root : Rails.root).to_s
44
+ Compass.add_project_configuration(File.join(rails_root, "config", "compass.rb"))
45
+ Compass.configure_sass_plugin!
46
+ Compass.handle_configuration_change!
47
+ ))
48
+ end
49
+ def delete_unneeded_files
50
+ run "rm README"
51
+ run "rm public/index.html"
52
+ run "rm public/favicon.ico"
53
+ run "rm public/robots.txt"
54
+ run "rm -f public/javascripts/*"
55
+
56
+ run "cp config/database.yml config/database.yml.example"
57
+ run "touch tmp/.gitignore log/.gitignore vendor/.gitignore"
58
+ run %{find . -type d -empty | grep -v "vendor" | grep -v ".git" | grep -v "tmp" | xargs -I xxx touch xxx/.gitignore}
59
+ end
60
+ def set_dependencies
61
+ run "curl -L http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js > public/javascripts/jquery.js"
62
+ run "curl -L http://github.com/malsup/form/raw/master/jquery.form.js?v2.40 > public/javascripts/jquery.form.js"
63
+ run "curl -L http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js > public/javascripts/jquery-ui.js"
64
+ run "curl -L http://github.com/brandonaaron/livequery/raw/master/jquery.livequery.js > public/javascripts/jquery.livequery.js"
65
+
66
+ gem "inherited_resources", ">= 1.1.0"
67
+ gem 'formtastic', :branch => 'rails3', :git => 'git://github.com/justinfrench/formtastic.git'
68
+ gem "web-app-theme", :git => "git://github.com/lucasefe/web-app-theme.git"
69
+ gem 'validation_reflection'
70
+ gem 'will_paginate', :git => 'git://github.com/mislav/will_paginate.git', :branch => 'rails3'
71
+ gem 'show_for'
72
+
73
+ gem 'webrat', :group => :test
74
+ gem "cucumber", ">= 0.6.2", :group => :test
75
+ gem 'faker', :group => :test
76
+ gem 'factory_girl', :group => :test
77
+
78
+ gem "haml", "3.0.0.rc.2"
79
+ gem 'compass', '0.10.0.rc4'
80
+ gem 'compass-960-plugin'
81
+
82
+ in_root { run "bundle install" }
83
+
84
+ generate("responders_install")
85
+ generate("web_app_theme:theme --no-layout --theme=reidb-greenish")
86
+ generate("formtastic:install")
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,9 @@
1
+ #block-tables.block
2
+ .secondary_navigation
3
+ = render :partial => 'common/secondary_navigation'
4
+ .content
5
+ %h2.title= title
6
+ .inner
7
+ - unless options[:no_flash] == true
8
+ = flashes
9
+ = content
@@ -0,0 +1,5 @@
1
+ - unless flash.blank?
2
+ .flash
3
+ - flash.keys.each do |level|
4
+ .message{:class => level.to_s}
5
+ %p= flash[level]
@@ -0,0 +1,16 @@
1
+ #header
2
+ %h1= link_to APP_CONFIG[:site_name]
3
+ #user-navigation
4
+ %ul
5
+ %li= link_to "Profile"
6
+ %li.logout= link_to "Logout"
7
+ .clear
8
+ #main-navigation
9
+ %ul
10
+ %li= link_to "Dashboard"
11
+ %li= link_to "Menu 1"
12
+ %li= link_to "Menu 2"
13
+ %li= link_to "Menu 3"
14
+ .clear
15
+
16
+
@@ -0,0 +1,12 @@
1
+ .secondary-navigation
2
+ %ul
3
+ %li
4
+ %a{ :href => "#" }
5
+ Sub Object 1
6
+ %li
7
+ %a{ :href => "#" }
8
+ Sub Object 2
9
+ %li
10
+ %a{ :href => "#" }
11
+ Sub Object 3
12
+ .clear
@@ -0,0 +1,15 @@
1
+ - show_content_if yield(:actions) do |content|
2
+ .block
3
+ %h3.toggle-block Actions
4
+ .sidebar-block
5
+ %ul.navigation
6
+ = content
7
+ .clear
8
+
9
+ - show_content_if yield(:search) do |content|
10
+ .block
11
+ %h3.toggle-block
12
+ %a{:title => "Click to show/hide search box"} Search
13
+ .sidebar-block{:style => 'display:none;'}
14
+ = content
15
+ .clear
@@ -0,0 +1,58 @@
1
+ module <%= layout_name.classify %>Helper
2
+ mattr_accessor :default_secondary_navigation_path
3
+ @@default_secondary_navigation_path = 'common/secondary_navigation'
4
+ def title(page_title, show_title = true)
5
+ @content_for_title = page_title.to_s
6
+ @show_title = show_title
7
+ end
8
+
9
+ def show_title?
10
+ @show_title
11
+ end
12
+ def nav_link(title, url, options = {})
13
+ link = link_to(title, url)
14
+ # solo si LockDown me deja!
15
+ unless link.blank?
16
+ # Activo el item?
17
+ options = params[:controller].include?(options[:controller] || title.underscore) ? {:class => "active"} : {}
18
+ haml_tag :li, options do
19
+ haml_concat link
20
+ end
21
+ end
22
+ end
23
+ def stylesheet(*args)
24
+ content_for(:head) { stylesheet_link_tag(*args) }
25
+ end
26
+
27
+ def javascript(*args)
28
+ content_for(:head) { javascript_include_tag(*args) }
29
+ end
30
+ def show_content_if(content, &block)
31
+ if content.present?
32
+ yield(content)
33
+ end
34
+ end
35
+ def sidebar_link(name, options = {}, html_options = nil)
36
+ content_tag(:li, link_to(name, options, html_options))
37
+ end
38
+ def navigation_block(nav = nil)
39
+ render(:partial => (nav||@@default_secondary_navigation_path))
40
+ end
41
+ def flashes
42
+ render :partial => 'common/flashes'
43
+ end
44
+ def block(title, options = {}, &block)
45
+ content = capture(&block)
46
+ out = render :partial => 'common/block', :locals => {
47
+ :title => title,
48
+ :content => content,
49
+ :options => options
50
+ }
51
+ out
52
+ end
53
+ def block_form(title, &block)
54
+ content = capture(&block)
55
+ out = render :partial => 'common/block_form', :locals => { :title => title, :content => content}
56
+ out
57
+ end
58
+ end
@@ -0,0 +1,23 @@
1
+ namespace :app do
2
+ namespace :development do
3
+ desc "Resets the environment!"
4
+ task :reset => [ "db:drop", "db:create", "db:migrate", :bootstrap ]
5
+ desc "Bootstrap"
6
+ task :bootstrap => [ :environment ]
7
+ end
8
+ namespace :staging do
9
+ desc "Resets the environment!"
10
+ task :reset => [ "db:drop", "db:create", "db:migrate", :bootstrap ]
11
+ desc "Bootstrap"
12
+ task :bootstrap => [ :environment ]
13
+ end
14
+ namespace :production do
15
+ desc "Resets the environment!"
16
+ task :reset => [ "db:drop", "db:create", "db:migrate", :bootstrap ]
17
+ desc "Bootstrap"
18
+ task :bootstrap => [ :environment ]
19
+ end
20
+ end
21
+
22
+ desc "Alias de app:development:reset"
23
+ task :adr => [ "app:development:reset" ]
@@ -0,0 +1,14 @@
1
+ # This configuration file works with both the Compass command line tool and within Rails.
2
+ require 'ninesixty'
3
+ # Require any additional compass plugins here.
4
+
5
+ project_type = :rails
6
+ project_path = Rails.root if defined?(Rails.root)
7
+ # Set this to the root of your project when deployed:
8
+ http_path = "/"
9
+ css_dir = "public/stylesheets/compiled"
10
+ sass_dir = "app/stylesheets"
11
+ environment = Compass::AppIntegration::Rails.env
12
+ # To enable relative paths to assets via compass helper functions. Uncomment:
13
+ # relative_assets = true
14
+ preferred_syntax = :sass
@@ -0,0 +1,28 @@
1
+ !!! Strict
2
+ %html{ :lang => "en", :xmlns => "http://www.w3.org/1999/xhtml" }
3
+ %head
4
+ %meta{ :content => "text/html; charset=utf-8", "http-equiv" => "Content-Type" }
5
+ %title
6
+ = h(yield(:title) || APP_CONFIG[:site_name] || "APP Name")
7
+ = stylesheet_link_tag 'web_app_theme', "themes/reidb-greenish/style"
8
+ = stylesheet_link_tag 'formtastic', "formtastic_changes"
9
+ = javascript_include_tag 'jquery'
10
+ = javascript_include_tag 'jquery-ui'
11
+ = javascript_include_tag 'jquery.form'
12
+ = javascript_include_tag 'jrails'
13
+ = javascript_include_tag 'jquery.livequery'
14
+ = yield(:head)
15
+ = javascript_include_tag 'application'
16
+ %body
17
+ #container
18
+ = render :partial => 'common/header'
19
+ #wrapper
20
+ #main
21
+ = yield
22
+ #footer
23
+ .block
24
+ %p
25
+ Copyright &copy; 2009 Your Site.
26
+ #sidebar
27
+ = render :partial => 'common/sidebar'
28
+ .clear
@@ -0,0 +1,12 @@
1
+ development: &non_production_settings
2
+ site_name: App From Hell!
3
+ admin_email: some@example.com
4
+
5
+ test:
6
+ <<: *non_production_settings
7
+
8
+ staging:
9
+ <<: *non_production_settings
10
+
11
+ production:
12
+ <<: *non_production_settings
@@ -0,0 +1,122 @@
1
+ require 'generators/common'
2
+ require 'rails/generators/migration'
3
+ require 'rails/generators/generated_attribute'
4
+
5
+ module Common
6
+ module Generators
7
+ class ScaffoldGenerator < Base
8
+ include Rails::Generators::Migration
9
+ no_tasks { attr_accessor :model_name, :model_attributes, :controller_actions }
10
+
11
+ class_option :skip_model, :desc => 'Don\'t generate a model or migration file.', :type => :boolean
12
+ class_option :skip_controller, :desc => 'Don\'t generate controller, helper, or views.', :type => :boolean
13
+ class_option :skip_migration, :desc => 'Dont generate migration file for model.', :type => :boolean
14
+
15
+ argument :model_name, :type => :string, :required => true, :banner => 'ModelName'
16
+ argument :args_for_c_m, :type => :array, :default => [], :banner => 'controller_actions and model:attributes'
17
+
18
+ # complete:scaffold Admin:User login:string email:string time_zone:string
19
+
20
+ def initialize(*args, &block)
21
+ super
22
+ @controller_actions = []
23
+ args_for_c_m.each do |arg|
24
+ if arg == '!'
25
+ options[:invert] = true
26
+ elsif arg.include?(':')
27
+ model_attributes << Rails::Generators::GeneratedAttribute.new(*arg.split(':'))
28
+ else
29
+ @controller_actions << arg
30
+ @controller_actions << 'create' if arg == 'new'
31
+ @controller_actions << 'update' if arg == 'edit'
32
+ end
33
+ end
34
+ if options.invert? || @controller_actions.empty?
35
+ @controller_actions = all_actions - @controller_actions
36
+ end
37
+ end
38
+ def create_model
39
+ unless options.skip_model?
40
+ template 'model.rb', "app/models/#{singular_name_path}.rb"
41
+ template "rspec/model.rb", "spec/models/#{singular_name_path}_spec.rb"
42
+ end
43
+ end
44
+ def create_controller
45
+ unless options.skip_controller?
46
+ template 'controller.rb', "app/controllers/#{plural_name_path}_controller.rb"
47
+ template 'helper.rb', "app/helpers/#{plural_name_path}_helper.rb"
48
+ end
49
+ end
50
+ def create_views
51
+ unless options.skip_controller?
52
+ @controller_actions.each do |action|
53
+ if %w[index show new edit].include?(action) # Actions with templates
54
+ template "views/#{action}.html.haml", "app/views/#{plural_name_path}/#{action}.html.haml"
55
+ end
56
+ end
57
+ template "views/_form.html.haml", "app/views/#{plural_name_path}/_form.html.haml"
58
+ template "views/_collection.html.haml", "app/views/#{plural_name_path}/_#{collection_name}.html.haml"
59
+ route "resources #{plural_name.to_sym.inspect}"
60
+ end
61
+ end
62
+ def create_migrations
63
+ unless options.skip_model? || options.skip_migration?
64
+ migration_template 'migration.rb', "db/migrate/create_#{plural_name}.rb"
65
+ end
66
+ end
67
+
68
+ private
69
+ def namespaced?
70
+ class_name.include?("::")
71
+ end
72
+ # Admin::User
73
+ def class_name
74
+ model_name.camelize
75
+ end
76
+ def plural_class_name
77
+ class_name.pluralize
78
+ end
79
+ # admin/user
80
+ def singular_name_path
81
+ model_name.gsub("::", "/").underscore
82
+ end
83
+ # user
84
+ def singular_name
85
+ singular_name_path.gsub("/", "_")
86
+ end
87
+ # admin/users
88
+ def plural_name
89
+ singular_name.pluralize
90
+ end
91
+ # users
92
+ def plural_name_path
93
+ singular_name_path.pluralize
94
+ end
95
+ def instance_name
96
+ model_name.split("::").last.underscore
97
+ end
98
+ def collection_name
99
+ instance_name.pluralize
100
+ end
101
+ def model_attributes
102
+ @model_attributes ||= []
103
+ end
104
+ def all_actions
105
+ %w[ index show new create edit update destroy ]
106
+ end
107
+ def all_partials
108
+ %w[ _collection ]
109
+ end
110
+ def spec_helper_path
111
+ "/.." * class_name.split("::").size + 'spec_helper'
112
+ end
113
+ def self.next_migration_number(dirname) #:nodoc:
114
+ if ActiveRecord::Base.timestamped_migrations
115
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
116
+ else
117
+ "%.3d" % (current_migration_number(dirname) + 1)
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,7 @@
1
+ class <%= plural_class_name %>Controller < InheritedResources::Base
2
+ respond_to :html, :xml, :js, :json
3
+ protected
4
+ def collection
5
+ @<%= collection_name %> ||= <%= class_name %>.paginate(:page => params[:page], :per_page => 10)
6
+ end
7
+ end
@@ -0,0 +1,2 @@
1
+ module <%= plural_class_name %>Helper
2
+ end
@@ -0,0 +1,15 @@
1
+ class Create<%= plural_class_name.gsub("::", "") %> < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :<%= plural_name %>, :force => true do |t|
4
+ <% model_attributes.each do |attribute| -%>
5
+ t.<%= attribute.type %> :<%= attribute.name %>
6
+ <% end -%>
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table :<%= plural_name %>
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ class <%= class_name %> < ActiveRecord::Base
2
+ <%- unless model_attributes.empty? -%>
3
+ attr_accessible <%= model_attributes.map { |a| ":#{a.name}" }.join(", ") %>
4
+ <%- end -%>
5
+ end
@@ -0,0 +1,9 @@
1
+ require File.dirname(__FILE__) + '<%= spec_helper_path %>'
2
+
3
+ describe <%= class_name %> do
4
+ subject { <%= class_name %>.new }
5
+ it { should be_valid }
6
+ <%- model_attributes.each do |f| -%>
7
+ it { should respond_to(:<%= f.name %>)}
8
+ <%- end -%>
9
+ end
@@ -0,0 +1,22 @@
1
+ #results
2
+ %table.table
3
+ %tr
4
+ <% for attribute in model_attributes -%>
5
+ %th<%= (attribute == model_attributes.first) ? ".first" : "" %> <%= attribute.name.humanize %>
6
+ <% end -%>
7
+ %th.last
8
+ - <%= collection_name %>.each do |<%= instance_name %>|
9
+ %tr{:class => cycle('odd', 'even')}
10
+ <%- for attribute in model_attributes %>
11
+ %td= h <%= instance_name %>.<%= attribute.name %>
12
+ <%- end -%>
13
+ %td.last
14
+ = link_to 'Show', resource_url(<%= instance_name %>)
15
+ = link_to 'Edit', edit_resource_url(<%= instance_name %>)
16
+ = link_to 'Destroy', resource_url(<%= instance_name %>), :confirm => 'Are you sure?', :method => :delete
17
+
18
+ .actions-bar
19
+ = will_paginate <%= collection_name %>
20
+ .clear
21
+
22
+
@@ -0,0 +1,4 @@
1
+ - f.inputs do
2
+ <%- for attribute in model_attributes -%>
3
+ = f.input :<%= attribute.name %>
4
+ <% end -%>
@@ -0,0 +1,8 @@
1
+ = block "Editing <%= singular_name.underscore.humanize %>" do
2
+ - semantic_form_for(@<%= instance_name %>, :url => resource_url, :html => { :method => :put}) do |f|
3
+ = render :partial => "form", :locals => { :f => f }
4
+ = f.buttons
5
+
6
+ - content_for :actions do
7
+ = sidebar_link 'Show', resource_url
8
+ = sidebar_link 'View All', collection_url
@@ -0,0 +1,7 @@
1
+ - javascript 'common'
2
+
3
+ = block '<%= plural_name.underscore.humanize %>' do
4
+ = render :partial => '<%= collection_name %>', :locals => { :<%= collection_name %> => @<%= collection_name %> }
5
+
6
+ - content_for :actions do
7
+ = sidebar_link 'New <%= singular_name.underscore.humanize %>', new_resource_url
@@ -0,0 +1 @@
1
+ = render :partial => '<%= collection_name %>', :locals => { :<%= collection_name %> => @<%= collection_name %> }
@@ -0,0 +1,7 @@
1
+ = block "New <%= singular_name.underscore.humanize %>" do
2
+ - semantic_form_for(@<%= instance_name %>, :url => collection_url) do |f|
3
+ = render :partial => "form", :locals => { :f => f }
4
+ = f.buttons
5
+
6
+ - content_for :actions do
7
+ = sidebar_link 'View All', collection_url
@@ -0,0 +1,8 @@
1
+ = block "<%= singular_name.underscore.humanize %>" do
2
+ = show_for @<%= singular_name %> do |a|
3
+ <% for attribute in model_attributes %>
4
+ = a.attribute :<%= attribute.name %>
5
+ <% end -%>
6
+ - content_for :actions do
7
+ = sidebar_link 'Edit', edit_resource_url
8
+ = sidebar_link 'View All', collection_url
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 3
9
- version: 0.1.3
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Lucas Efe
@@ -14,13 +14,14 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-26 00:00:00 -03:00
17
+ date: 2010-05-02 00:00:00 -03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: searchlogic
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
24
25
  requirements:
25
26
  - - ">="
26
27
  - !ruby/object:Gem::Version
@@ -35,6 +36,7 @@ dependencies:
35
36
  name: inherited_resources
36
37
  prerelease: false
37
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
38
40
  requirements:
39
41
  - - "="
40
42
  - !ruby/object:Gem::Version
@@ -49,6 +51,7 @@ dependencies:
49
51
  name: formtastic
50
52
  prerelease: false
51
53
  requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
52
55
  requirements:
53
56
  - - "="
54
57
  - !ruby/object:Gem::Version
@@ -63,6 +66,7 @@ dependencies:
63
66
  name: validation_reflection
64
67
  prerelease: false
65
68
  requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
66
70
  requirements:
67
71
  - - "="
68
72
  - !ruby/object:Gem::Version
@@ -77,6 +81,7 @@ dependencies:
77
81
  name: show_for
78
82
  prerelease: false
79
83
  requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
80
85
  requirements:
81
86
  - - "="
82
87
  - !ruby/object:Gem::Version
@@ -91,6 +96,7 @@ dependencies:
91
96
  name: will_paginate
92
97
  prerelease: false
93
98
  requirement: &id006 !ruby/object:Gem::Requirement
99
+ none: false
94
100
  requirements:
95
101
  - - "="
96
102
  - !ruby/object:Gem::Version
@@ -105,6 +111,7 @@ dependencies:
105
111
  name: haml
106
112
  prerelease: false
107
113
  requirement: &id007 !ruby/object:Gem::Requirement
114
+ none: false
108
115
  requirements:
109
116
  - - "="
110
117
  - !ruby/object:Gem::Version
@@ -122,10 +129,14 @@ executables: []
122
129
  extensions: []
123
130
 
124
131
  extra_rdoc_files:
132
+ - README.2.3.textile
133
+ - README.3.textile
125
134
  - README.textile
126
135
  files:
127
136
  - .gitignore
128
137
  - MIT-LICENSE
138
+ - README.2.3.textile
139
+ - README.3.textile
129
140
  - README.textile
130
141
  - Rakefile
131
142
  - VERSION
@@ -153,6 +164,32 @@ files:
153
164
  - generators/base_scaffold/templates/view_index.js.haml
154
165
  - generators/base_scaffold/templates/view_new.haml
155
166
  - generators/base_scaffold/templates/view_show.haml
167
+ - lib/common_generators.rb
168
+ - lib/generators/common.rb
169
+ - lib/generators/common/layout/layout_generator.rb
170
+ - lib/generators/common/layout/templates/_block.html.haml
171
+ - lib/generators/common/layout/templates/_flashes.html.haml
172
+ - lib/generators/common/layout/templates/_header.html.haml
173
+ - lib/generators/common/layout/templates/_secondary_navigation.html.haml
174
+ - lib/generators/common/layout/templates/_sidebar.html.haml
175
+ - lib/generators/common/layout/templates/base_helper.rb
176
+ - lib/generators/common/layout/templates/bootstrap.rake
177
+ - lib/generators/common/layout/templates/compass_config.rb
178
+ - lib/generators/common/layout/templates/layout.html.haml
179
+ - lib/generators/common/layout/templates/settings.yml
180
+ - lib/generators/common/scaffold/scaffold_generator.rb
181
+ - lib/generators/common/scaffold/templates/controller.rb
182
+ - lib/generators/common/scaffold/templates/helper.rb
183
+ - lib/generators/common/scaffold/templates/migration.rb
184
+ - lib/generators/common/scaffold/templates/model.rb
185
+ - lib/generators/common/scaffold/templates/rspec/model.rb
186
+ - lib/generators/common/scaffold/templates/views/_collection.html.haml
187
+ - lib/generators/common/scaffold/templates/views/_form.html.haml
188
+ - lib/generators/common/scaffold/templates/views/edit.html.haml
189
+ - lib/generators/common/scaffold/templates/views/index.html.haml
190
+ - lib/generators/common/scaffold/templates/views/index.js.haml
191
+ - lib/generators/common/scaffold/templates/views/new.html.haml
192
+ - lib/generators/common/scaffold/templates/views/show.html.haml
156
193
  - rails/init.rb
157
194
  - rails_template.rb
158
195
  - tasks/scaffold_it_tasks.rake
@@ -169,6 +206,7 @@ rdoc_options:
169
206
  require_paths:
170
207
  - lib
171
208
  required_ruby_version: !ruby/object:Gem::Requirement
209
+ none: false
172
210
  requirements:
173
211
  - - ">="
174
212
  - !ruby/object:Gem::Version
@@ -176,6 +214,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
176
214
  - 0
177
215
  version: "0"
178
216
  required_rubygems_version: !ruby/object:Gem::Requirement
217
+ none: false
179
218
  requirements:
180
219
  - - ">="
181
220
  - !ruby/object:Gem::Version
@@ -185,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
224
  requirements: []
186
225
 
187
226
  rubyforge_project:
188
- rubygems_version: 1.3.6
227
+ rubygems_version: 1.3.6.1
189
228
  signing_key:
190
229
  specification_version: 3
191
230
  summary: Rails Generators using SearchLogic, Formtastic, jquery and many more.