tbh-scaffolds 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ vendor/bundle
6
+ rails_app
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in tbh-scaffolds.gemspec
4
+ gemspec
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,16 @@
1
+ require 'rails/generators/erb/controller/controller_generator'
2
+
3
+ module Haml
4
+ module Generators
5
+ class ControllerGenerator < Erb::Generators::ControllerGenerator
6
+ source_root File.expand_path("../templates", __FILE__)
7
+
8
+ protected
9
+
10
+ def handler
11
+ :haml
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,2 @@
1
+ %h1 <%= class_name %>#<%= @action %>
2
+ %p Find me in <%= @path %>
@@ -0,0 +1,16 @@
1
+ require 'generators/haml/controller/controller_generator'
2
+
3
+ module Haml
4
+ module Generators
5
+ class MailerGenerator < ControllerGenerator
6
+ source_root File.expand_path("../templates", __FILE__)
7
+
8
+ protected
9
+
10
+ def format
11
+ :text
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ <%= class_name %>#<%= @action %>
2
+
3
+ = @greeting + ", find me in <%= @path %>"
@@ -0,0 +1,36 @@
1
+ require 'rails/generators/erb/scaffold/scaffold_generator'
2
+
3
+ module Haml
4
+ module Generators
5
+ class ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
6
+ source_root File.expand_path("../templates", __FILE__)
7
+
8
+ def copy_view_files
9
+ available_views.each do |view|
10
+ filename = filename_with_extensions(view)
11
+ template "#{view}.html.haml", File.join("app/views", controller_file_path, filename)
12
+ end
13
+ end
14
+
15
+ hook_for :form_builder, :as => :scaffold
16
+
17
+ def copy_form_file
18
+ if options[:form_builder].nil?
19
+ filename = filename_with_extensions("_form")
20
+ template "_form.html.haml", File.join("app/views", controller_file_path, filename)
21
+ end
22
+ end
23
+
24
+ protected
25
+
26
+ def available_views
27
+ %w(index edit show new)
28
+ end
29
+
30
+ def handler
31
+ :haml
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,34 @@
1
+ = form_for @<%= singular_table_name %> do |f|
2
+
3
+ <% attributes.each do |attribute| -%>
4
+ - if @<%= singular_table_name %>.errors[:<%= attribute.name %>].any?
5
+ .clearfix.error
6
+ = f.label :<%= attribute.name %>
7
+ .input
8
+ <% if [:date_select, :datetime_select, :time_select].include?(attribute.field_type) -%>
9
+ = f.<%= attribute.field_type %> :<%= attribute.name %>, {}, :class => 'small error'
10
+ <% elsif [:text_area].include?(attribute.field_type) -%>
11
+ = f.<%= attribute.field_type %> :<%= attribute.name %>, :class => 'xxlarge error'
12
+ <% else -%>
13
+ = f.<%= attribute.field_type %> :<%= attribute.name %>, :class => 'error'
14
+ <% end -%>
15
+ %span.help-inline
16
+ - @<%= singular_table_name %>.errors[:<%= attribute.name %>].each do |msg|
17
+ %p.error= msg
18
+ - else
19
+ .clearfix
20
+ = f.label :<%= attribute.name %>
21
+ .input
22
+ <% if [:date_select, :datetime_select, :time_select].include?(attribute.field_type) -%>
23
+ = f.<%= attribute.field_type %> :<%= attribute.name %>, {}, :class => 'small'
24
+ <% elsif [:text_area].include?(attribute.field_type) -%>
25
+ = f.<%= attribute.field_type %> :<%= attribute.name %>, :class => 'xxlarge'
26
+ <% else -%>
27
+ = f.<%= attribute.field_type %> :<%= attribute.name %>
28
+ <% end -%>
29
+
30
+ <% end -%>
31
+
32
+ .actions
33
+ = f.submit 'Save', :class => 'btn primary'
34
+ = link_to 'Back', <%= index_helper %>_path, :class => 'btn'
@@ -0,0 +1,4 @@
1
+ %h1 Editing <%= singular_table_name %>
2
+
3
+ = render 'form'
4
+
@@ -0,0 +1,26 @@
1
+ %h1 <%= plural_table_name.capitalize %>
2
+
3
+ %table.scaffold.common-table.zebra-stripped.sortable
4
+ %thead
5
+ %tr
6
+ <% for attribute in attributes -%>
7
+ %th <%= attribute.human_name %>
8
+ <% end -%>
9
+ %th.button_column
10
+ %th.button_column
11
+ %th.button_column
12
+
13
+ %tbody
14
+ - @<%= plural_table_name %>.each do |<%= singular_table_name %>|
15
+ %tr
16
+ <% for attribute in attributes -%>
17
+ %td= <%= singular_table_name %>.<%= attribute.name %>
18
+ <% end -%>
19
+ %td.button_column= link_to 'Show', <%= singular_table_name %>, :class => 'btn info float_left'
20
+ %td.button_column= link_to 'Edit', edit_<%= singular_table_name %>_path(<%= singular_table_name %>), :class => 'btn primary float_left'
21
+ %td.button_column= link_to 'Destroy', <%= singular_table_name %>, :confirm => 'Are you sure?', :method => :delete, :class => 'btn danger float_left'
22
+
23
+ %br
24
+
25
+ .actions
26
+ = link_to 'New <%= human_name %>', new_<%= singular_table_name %>_path, :class => 'btn primary '
@@ -0,0 +1,4 @@
1
+ %h1 New <%= singular_table_name %>
2
+
3
+ = render 'form'
4
+
@@ -0,0 +1,13 @@
1
+ - if notice
2
+ .alert-message.success
3
+ %a.close(href='#') x
4
+ %p= notice
5
+
6
+ <% for attribute in attributes -%>
7
+ %p
8
+ %b <%= attribute.human_name %>:
9
+ = @<%= singular_table_name %>.<%= attribute.name %>
10
+ <% end -%>
11
+
12
+ = link_to 'Edit', edit_<%= singular_table_name %>_path(@<%= singular_table_name %>), :class => 'btn primary'
13
+ = link_to 'Back', <%= index_helper %>_path, :class => 'btn'
@@ -0,0 +1,23 @@
1
+ require "tbh-scaffolds/version"
2
+
3
+ module Tbh
4
+ module Scaffolds
5
+ class Engine < ::Rails::Engine
6
+ end
7
+ end
8
+
9
+ module Rails
10
+ class Railtie < ::Rails::Railtie
11
+ if ::Rails.version.to_f >= 3.1
12
+ config.app_generators.template_engine :haml
13
+ else
14
+ config.generators.template_engine :haml
15
+ end
16
+
17
+ config.before_initialize do
18
+ Haml.init_rails(binding)
19
+ Haml::Template.options[:format] = :html5
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ module Tbh
2
+ module Scaffolds
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "tbh-scaffolds/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "tbh-scaffolds"
7
+ s.version = Tbh::Scaffolds::VERSION
8
+ s.authors = ["Max Gonzih"]
9
+ s.email = ["gonzih@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Twitter Bootstrap Haml Scaffolds}
12
+ s.description = %q{Scaffolds templates based on Twitter Bootstrap framework}
13
+
14
+ s.rubyforge_project = "tbh-scaffolds"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ s.add_development_dependency "rake"
23
+ s.add_runtime_dependency "haml"
24
+ end
@@ -0,0 +1,58 @@
1
+ TestApp.routes.draw do |map|
2
+ # The priority is based upon order of creation:
3
+ # first created -> highest priority.
4
+
5
+ # Sample of regular route:
6
+ # match 'products/:id' => 'catalog#view'
7
+ # Keep in mind you can assign values other than :controller and :action
8
+
9
+ # Sample of named route:
10
+ # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
11
+ # This route can be invoked with purchase_url(:id => product.id)
12
+
13
+ # Sample resource route (maps HTTP verbs to controller actions automatically):
14
+ # resources :products
15
+
16
+ # Sample resource route with options:
17
+ # resources :products do
18
+ # member do
19
+ # get :short
20
+ # post :toggle
21
+ # end
22
+ #
23
+ # collection do
24
+ # get :sold
25
+ # end
26
+ # end
27
+
28
+ # Sample resource route with sub-resources:
29
+ # resources :products do
30
+ # resources :comments, :sales
31
+ # resource :seller
32
+ # end
33
+
34
+ # Sample resource route with more complex sub-resources
35
+ # resources :products do
36
+ # resources :comments
37
+ # resources :sales do
38
+ # get :recent, :on => :collection
39
+ # end
40
+ # end
41
+
42
+ # Sample resource route within a namespace:
43
+ # namespace :admin do
44
+ # # Directs /admin/products/* to Admin::ProductsController
45
+ # # (app/controllers/admin/products_controller.rb)
46
+ # resources :products
47
+ # end
48
+
49
+ # You can have the root of your site routed with "root"
50
+ # just remember to delete public/index.html.
51
+ # root :to => "welcome#index"
52
+
53
+ # See how all your routes lay out with "rake routes"
54
+
55
+ # This is a legacy wild controller route that's not recommended for RESTful applications.
56
+ # Note: This route will make all actions in every controller accessible via GET requests.
57
+ # match ':controller(/:action(/:id(.:format)))'
58
+ end
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+ require 'lib/generators/haml/testing_helper'
3
+
4
+ class Haml::Generators::ControllerGeneratorTest < Rails::Generators::TestCase
5
+ destination File.join(Rails.root)
6
+ tests Rails::Generators::ControllerGenerator
7
+ arguments %w(Account foo bar --template-engine haml)
8
+
9
+ setup :prepare_destination
10
+ setup :copy_routes
11
+
12
+ test "should invoke template engine" do
13
+ run_generator
14
+ assert_file "app/views/account/foo.html.haml", %r(app/views/account/foo\.html\.haml)
15
+ assert_file "app/views/account/bar.html.haml", %r(app/views/account/bar\.html\.haml)
16
+ end
17
+ end
@@ -0,0 +1,24 @@
1
+ require 'test_helper'
2
+ require 'lib/generators/haml/testing_helper'
3
+
4
+ class Haml::Generators::MailerGeneratorTest < Rails::Generators::TestCase
5
+ destination File.join(Rails.root)
6
+ tests Rails::Generators::MailerGenerator
7
+ arguments %w(notifier foo bar --template-engine haml)
8
+
9
+ setup :prepare_destination
10
+ setup :copy_routes
11
+
12
+ test "should invoke template engine" do
13
+ run_generator
14
+ assert_file "app/views/notifier/foo.text.haml" do |view|
15
+ assert_match %r(app/views/notifier/foo\.text\.haml), view
16
+ assert_match /\= @greeting/, view
17
+ end
18
+
19
+ assert_file "app/views/notifier/bar.text.haml" do |view|
20
+ assert_match %r(app/views/notifier/bar\.text\.haml), view
21
+ assert_match /\= @greeting/, view
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,31 @@
1
+ require 'test_helper'
2
+ require 'lib/generators/haml/testing_helper'
3
+
4
+ class Haml::Generators::ScaffoldGeneratorTest < Rails::Generators::TestCase
5
+ destination File.join(Rails.root)
6
+ tests Rails::Generators::ScaffoldGenerator
7
+ arguments %w(product_line title:string price:integer --template-engine haml)
8
+
9
+ setup :prepare_destination
10
+ setup :copy_routes
11
+
12
+ test "should invoke template engine" do
13
+ run_generator
14
+
15
+ %w(index edit new show _form).each { |view| assert_file "app/views/product_lines/#{view}.html.haml" }
16
+ assert_no_file "app/views/layouts/product_lines.html.haml"
17
+ end
18
+
19
+ test "should revoke template engine" do
20
+ run_generator
21
+ run_generator ["product_line"], :behavior => :revoke
22
+
23
+ assert_no_file "app/views/product_lines"
24
+ assert_no_file "app/views/layouts/product_lines.html.haml"
25
+ end
26
+
27
+ test "should invoke form builder" do
28
+ run_generator %w(product_line title:string price:integer --template-engine haml --form-builder some-form-builder)
29
+ assert_no_file "app/views/product_lines/_form.html.haml"
30
+ end
31
+ end
@@ -0,0 +1 @@
1
+ require_generators :haml => ['scaffold', 'controller', 'mailer']
@@ -0,0 +1,75 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'rails/all'
4
+ require 'rails/generators'
5
+ require 'rails/generators/test_case'
6
+
7
+ class TestApp < Rails::Application
8
+ config.root = File.dirname(__FILE__)
9
+ end
10
+ Rails.application = TestApp
11
+
12
+ module Rails
13
+ def self.root
14
+ @root ||= File.expand_path(File.join(File.dirname(__FILE__), '..', 'tmp', 'rails'))
15
+ end
16
+ end
17
+ Rails.application.config.root = Rails.root
18
+
19
+ # Call configure to load the settings from
20
+ # Rails.application.config.generators to Rails::Generators
21
+ Rails::Generators.configure!
22
+
23
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
24
+
25
+ def copy_routes
26
+ routes = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', 'routes.rb'))
27
+ destination = File.join(Rails.root, "config")
28
+ FileUtils.mkdir_p(destination)
29
+ FileUtils.cp File.expand_path(routes), destination
30
+ end
31
+
32
+ # Asserts the given class exists in the given content. When a block is given,
33
+ # it yields the content of the class.
34
+ #
35
+ # assert_file "test/functional/accounts_controller_test.rb" do |controller_test|
36
+ # assert_class "AccountsControllerTest", controller_test do |klass|
37
+ # assert_match /context "index action"/, klass
38
+ # end
39
+ # end
40
+ #
41
+ def assert_class(klass, content)
42
+ assert content =~ /class #{klass}(\(.+\))?(.*?)\nend/m, "Expected to have class #{klass}"
43
+ yield $2.strip if block_given?
44
+ end
45
+
46
+ def generator_list
47
+ {
48
+ :rails => ['scaffold', 'controller', 'mailer'],
49
+ :haml => ['scaffold', 'controller', 'mailer']
50
+ }
51
+ end
52
+
53
+ def path_prefix(name)
54
+ case name
55
+ when :rails
56
+ 'rails/generators'
57
+ else
58
+ 'generators'
59
+ end
60
+ end
61
+
62
+ def require_generators(generator_list)
63
+ generator_list.each do |name, generators|
64
+ generators.each do |generator_name|
65
+ if name.to_s == 'rails' && generator_name.to_s == 'mailer'
66
+ require File.join(path_prefix(name), generator_name.to_s, "#{generator_name}_generator")
67
+ else
68
+ require File.join(path_prefix(name), name.to_s, generator_name.to_s, "#{generator_name}_generator")
69
+ end
70
+ end
71
+ end
72
+ end
73
+ alias :require_generator :require_generators
74
+
75
+ require_generators generator_list