wizardly 0.1.8.9
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +33 -0
- data/LICENSE +20 -0
- data/README.rdoc +645 -0
- data/init.rb +1 -0
- data/lib/jeffp-wizardly.rb +1 -0
- data/lib/validation_group.rb +147 -0
- data/lib/wizardly.rb +31 -0
- data/lib/wizardly/action_controller.rb +36 -0
- data/lib/wizardly/wizard.rb +16 -0
- data/lib/wizardly/wizard/button.rb +35 -0
- data/lib/wizardly/wizard/configuration.rb +194 -0
- data/lib/wizardly/wizard/configuration/methods.rb +422 -0
- data/lib/wizardly/wizard/dsl.rb +27 -0
- data/lib/wizardly/wizard/page.rb +62 -0
- data/lib/wizardly/wizard/text_helpers.rb +16 -0
- data/lib/wizardly/wizard/utils.rb +11 -0
- data/rails_generators/wizardly_app/USAGE +6 -0
- data/rails_generators/wizardly_app/templates/wizardly.rake +37 -0
- data/rails_generators/wizardly_app/wizardly_app_generator.rb +41 -0
- data/rails_generators/wizardly_controller/USAGE +3 -0
- data/rails_generators/wizardly_controller/templates/controller.rb.erb +34 -0
- data/rails_generators/wizardly_controller/templates/helper.rb.erb +14 -0
- data/rails_generators/wizardly_controller/wizardly_controller_generator.rb +57 -0
- data/rails_generators/wizardly_scaffold/USAGE +4 -0
- data/rails_generators/wizardly_scaffold/templates/form.html.erb +23 -0
- data/rails_generators/wizardly_scaffold/templates/form.html.haml.erb +22 -0
- data/rails_generators/wizardly_scaffold/templates/helper.rb.erb +30 -0
- data/rails_generators/wizardly_scaffold/templates/images/back.png +0 -0
- data/rails_generators/wizardly_scaffold/templates/images/cancel.png +0 -0
- data/rails_generators/wizardly_scaffold/templates/images/finish.png +0 -0
- data/rails_generators/wizardly_scaffold/templates/images/next.png +0 -0
- data/rails_generators/wizardly_scaffold/templates/images/skip.png +0 -0
- data/rails_generators/wizardly_scaffold/templates/layout.html.erb +15 -0
- data/rails_generators/wizardly_scaffold/templates/layout.html.haml.erb +10 -0
- data/rails_generators/wizardly_scaffold/templates/style.css +54 -0
- data/rails_generators/wizardly_scaffold/wizardly_scaffold_generator.rb +109 -0
- metadata +90 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
module Wizardly
|
2
|
+
module Wizard
|
3
|
+
module TextHelpers
|
4
|
+
private
|
5
|
+
def underscore_button_name(name)
|
6
|
+
name.to_s.strip.squeeze(' ').gsub(/ /, '_').downcase
|
7
|
+
end
|
8
|
+
def button_name_to_symbol(str)
|
9
|
+
underscore_button_name(str).to_sym
|
10
|
+
end
|
11
|
+
def symbol_to_button_name(sym)
|
12
|
+
sym.to_s.gsub(/_/, ' ').squeeze(' ').titleize
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
namespace :wizardly do
|
3
|
+
desc "Display wizard configuration details"
|
4
|
+
task :config => :environment do
|
5
|
+
name = ENV['name']
|
6
|
+
return print_usage unless name
|
7
|
+
begin
|
8
|
+
name = name.strip.camelize
|
9
|
+
name += 'Controller' unless name.match('Controller$')
|
10
|
+
controller = name.constantize
|
11
|
+
begin
|
12
|
+
c = controller.wizard_config
|
13
|
+
begin
|
14
|
+
puts
|
15
|
+
puts c.print_config
|
16
|
+
rescue Exception=>e
|
17
|
+
puts "Problem printing configuration."
|
18
|
+
puts "#{e.class.name} -- #{e.message}"
|
19
|
+
puts
|
20
|
+
end
|
21
|
+
rescue Exception=>e
|
22
|
+
puts "{#{name}} is not a 'wizardly' controller.\nMake sure 'wizard_for_model' is defined in the controller class."
|
23
|
+
puts "#{e.class.name} -- #{e.message}"
|
24
|
+
puts
|
25
|
+
end
|
26
|
+
rescue Exception=>e
|
27
|
+
puts "{#{name}} does not reference a controller class."
|
28
|
+
puts "#{e.class.name} -- #{e.message}"
|
29
|
+
puts
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def print_usage
|
34
|
+
puts "Usage: rake wizardly:config name={controller_name}"
|
35
|
+
puts
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#require 'wizardly'
|
2
|
+
|
3
|
+
class WizardlyAppGenerator < Rails::Generator::Base
|
4
|
+
|
5
|
+
def initialize(runtime_args, runtime_options = {})
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def manifest
|
10
|
+
record do |m|
|
11
|
+
m.directory "lib/tasks"
|
12
|
+
|
13
|
+
m.file "wizardly.rake", "lib/tasks/wizardly.rake"
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def controller_class_name
|
19
|
+
"#{controller_name.camelize}Controller"
|
20
|
+
end
|
21
|
+
def model_class_name
|
22
|
+
"#{model_name.camelize}"
|
23
|
+
end
|
24
|
+
def action_methods
|
25
|
+
@wizard_config.print_page_action_methods
|
26
|
+
end
|
27
|
+
def callback_methods
|
28
|
+
@wizard_config.print_callbacks
|
29
|
+
end
|
30
|
+
def helper_methods
|
31
|
+
@wizard_config.print_helpers
|
32
|
+
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
# Override with your own usage banner.
|
36
|
+
def banner
|
37
|
+
"Usage: #{$0} wizardly_app"
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
# <%= controller_class_name %> class generated by wizardly_controller
|
3
|
+
#
|
4
|
+
|
5
|
+
class <%= controller_class_name %> < ApplicationController
|
6
|
+
before_filter :guard_entry
|
7
|
+
|
8
|
+
<%= action_methods %>
|
9
|
+
|
10
|
+
<%= callback_methods %>
|
11
|
+
|
12
|
+
<%= helper_methods %>
|
13
|
+
|
14
|
+
<%= callback_macro_methods %>
|
15
|
+
|
16
|
+
public
|
17
|
+
def wizard_config; self.class.wizard_config; end
|
18
|
+
hide_action :wizard_config
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def self.wizard_config; @wizard_config; end
|
23
|
+
@wizard_config = Wizardly::Wizard::Configuration.create(:<%=controller_name %>, :<%=model_name %>, :allow_skip=>true) do
|
24
|
+
<%= "when_completed_redirect_to #{Wizardly::Wizard::Utils.formatted_redirect(completed_redirect)}" if completed_redirect %>
|
25
|
+
<%= "when_canceled_redirect_to #{Wizardly::Wizard::Utils.formatted_redirect(canceled_redirect)}" if canceled_redirect %>
|
26
|
+
|
27
|
+
# other things you can configure
|
28
|
+
# change_button(:next).to('Next One')
|
29
|
+
# change_button(:back).to('Previous')
|
30
|
+
# create_button('Help')
|
31
|
+
# set_page(:init).buttons_to :next_one, :previous, :cancel, :help #this removes skip
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module <%=controller_name.camelize %>Helper
|
2
|
+
|
3
|
+
def wizardly_submit
|
4
|
+
@@wizardly_submit ||= {}
|
5
|
+
unless @@wizardly_submit[@step]
|
6
|
+
buttons = @wizard.pages[@step].buttons
|
7
|
+
@@wizardly_submit[@step] = buttons.inject(StringIO.new) do |io, button|
|
8
|
+
io << submit_tag(button.name)
|
9
|
+
end.string
|
10
|
+
end
|
11
|
+
@@wizardly_submit[@step]
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'wizardly'
|
2
|
+
|
3
|
+
class WizardlyControllerGenerator < Rails::Generator::Base
|
4
|
+
attr_reader :controller_name, :model_name, :completed_redirect, :canceled_redirect
|
5
|
+
|
6
|
+
def initialize(runtime_args, runtime_options = {})
|
7
|
+
super
|
8
|
+
@controller_name = @args[0].sub(/^:/,'')
|
9
|
+
@model_name = @args[1].sub(/^:/, '').underscore
|
10
|
+
@completed_redirect = @args[2]
|
11
|
+
@canceled_redirect = @args[3]
|
12
|
+
opts = {}
|
13
|
+
opts[:completed] = @completed_redirect if @completed_redirect
|
14
|
+
opts[:canceled] = @canceled_redirect if @canceled_redirect
|
15
|
+
|
16
|
+
@wizard_config = Wizardly::Wizard::Configuration.new(@controller_name, opts)
|
17
|
+
@wizard_config.inspect_model!(@model_name.to_sym)
|
18
|
+
end
|
19
|
+
|
20
|
+
def manifest
|
21
|
+
record do |m|
|
22
|
+
m.directory "app/controllers"
|
23
|
+
|
24
|
+
m.template "controller.rb.erb", "app/controllers/#{controller_name}_controller.rb"
|
25
|
+
|
26
|
+
m.template "helper.rb.erb", "app/helpers/#{controller_name}_helper.rb"
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def controller_class_name
|
32
|
+
"#{controller_name.camelize}Controller"
|
33
|
+
end
|
34
|
+
def model_class_name
|
35
|
+
"#{model_name.camelize}"
|
36
|
+
end
|
37
|
+
def action_methods
|
38
|
+
@wizard_config.print_page_action_methods
|
39
|
+
end
|
40
|
+
def callback_methods
|
41
|
+
@wizard_config.print_callbacks
|
42
|
+
end
|
43
|
+
def helper_methods
|
44
|
+
@wizard_config.print_helpers
|
45
|
+
end
|
46
|
+
def callback_macro_methods
|
47
|
+
@wizard_config.print_callback_macros
|
48
|
+
end
|
49
|
+
|
50
|
+
protected
|
51
|
+
# Override with your own usage banner.
|
52
|
+
def banner
|
53
|
+
"Usage: #{$0} wizardly_controller controller_name model_name [completed_redirect canceled_redirect]"
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<h1><%= page.title %></h1>
|
2
|
+
|
3
|
+
<%= "<p>#{page.description}<p>" if !page.description.blank? %>
|
4
|
+
<%%= "<p style=\"color: green\">#{flash[:notice]}<p>" if flash[:notice] %>
|
5
|
+
|
6
|
+
<%% form_for :<%= model_name %>, :url=>{:action=>:<%= page.name %>} do |f| %>
|
7
|
+
<%%= f.error_messages %>
|
8
|
+
|
9
|
+
<% for field in page.fields -%>
|
10
|
+
<% first_field_id ||= "#{model_name}_#{field.name}" %>
|
11
|
+
<p>
|
12
|
+
<%%= f.label :<%= field.name %> %><br />
|
13
|
+
<%%= f.<%= field.field_type %> :<%= field.name %> %>
|
14
|
+
</p>
|
15
|
+
<% end -%>
|
16
|
+
<p>
|
17
|
+
<%%= <%= submit_tag %> %>
|
18
|
+
</p>
|
19
|
+
<%% end %>
|
20
|
+
|
21
|
+
<script type='text/javascript'>
|
22
|
+
document.getElementById('<%=first_field_id %>').focus()
|
23
|
+
</script>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
%h1 <%= page.title %>
|
2
|
+
|
3
|
+
<% unless page.description.blank? %>
|
4
|
+
%p <%= page.description %>
|
5
|
+
<% end %>
|
6
|
+
- if flash[:notice]
|
7
|
+
%p{:style=>'color: green'}= flash[:notice]
|
8
|
+
|
9
|
+
- form_for :<%= model_name %>, :url=>{:action=>:<%= page.name %>} do |f|
|
10
|
+
= f.error_messages
|
11
|
+
|
12
|
+
<% for field in page.fields %>
|
13
|
+
<% first_field_id ||= "#{model_name}_#{field.name}" %>
|
14
|
+
%p
|
15
|
+
= f.label :<%= field.name %>
|
16
|
+
%br
|
17
|
+
= f.<%= field.field_type %> :<%= field.name %>
|
18
|
+
<% end %>
|
19
|
+
%p= <%= submit_tag %>
|
20
|
+
|
21
|
+
%script{:type=>'text/javascript'}
|
22
|
+
document.getElementById('<%=first_field_id %>').focus()
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module <%=controller_name.camelize %>Helper
|
2
|
+
|
3
|
+
def wizardly_submit
|
4
|
+
@@wizardly_submit ||= {}
|
5
|
+
step_id = "#{controller_name}_#{@step}".to_sym
|
6
|
+
unless @@wizardly_submit[step_id]
|
7
|
+
buttons = @wizard.pages[@step].buttons
|
8
|
+
@@wizardly_submit[step_id] = buttons.inject(StringIO.new) do |io, button|
|
9
|
+
io << submit_tag(button.name, :name=>button.id.to_s)
|
10
|
+
end.string
|
11
|
+
end
|
12
|
+
@@wizardly_submit[step_id]
|
13
|
+
end
|
14
|
+
|
15
|
+
def wizardly_image_submit(asset_dir = nil, opts = {})
|
16
|
+
@@wizardly_image_submit ||={}
|
17
|
+
step_id = "#{controller_name}_#{@step}".to_sym
|
18
|
+
unless @@wizardly_image_submit[step_id]
|
19
|
+
asset_dir = asset_dir ? "#{asset_dir}/".squeeze("/").sub(/^\//,'') : "wizardly/"
|
20
|
+
buttons = @wizard.pages[@step].buttons
|
21
|
+
@@wizardly_image_submit[step_id] = buttons.inject(StringIO.new) do |io, button|
|
22
|
+
opts[:value] = button.name
|
23
|
+
opts[:name] = button.id.to_s
|
24
|
+
io << image_submit_tag("#{asset_dir}#{button.id}.png", opts)
|
25
|
+
end.string
|
26
|
+
end
|
27
|
+
@@wizardly_image_submit[step_id]
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
<head>
|
6
|
+
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
7
|
+
<title><%= controller_class_name %>: <%%= controller.action_name %></title>
|
8
|
+
<%%= stylesheet_link_tag 'scaffold' %>
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
|
12
|
+
<%%= yield %>
|
13
|
+
|
14
|
+
</body>
|
15
|
+
</html>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
!!! XML
|
2
|
+
!!!
|
3
|
+
%html{ :'xml:lang' => "en", :lang => "en" }
|
4
|
+
%head
|
5
|
+
%title= "<%=controller_class_name %>: " + controller.action_name
|
6
|
+
%meta{ :"http-equiv" => "Content-Type", :content => "text/html; charset-utf-8" }
|
7
|
+
%link{ :rel => "shortcut icon", :href => "/favicon.ico" }
|
8
|
+
= stylesheet_link_tag "scaffold", :media => "screen"
|
9
|
+
%body
|
10
|
+
= yield
|
@@ -0,0 +1,54 @@
|
|
1
|
+
body { background-color: #fff; color: #333; }
|
2
|
+
|
3
|
+
body, p, ol, ul, td {
|
4
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
5
|
+
font-size: 13px;
|
6
|
+
line-height: 18px;
|
7
|
+
}
|
8
|
+
|
9
|
+
pre {
|
10
|
+
background-color: #eee;
|
11
|
+
padding: 10px;
|
12
|
+
font-size: 11px;
|
13
|
+
}
|
14
|
+
|
15
|
+
a { color: #000; }
|
16
|
+
a:visited { color: #666; }
|
17
|
+
a:hover { color: #fff; background-color:#000; }
|
18
|
+
|
19
|
+
.fieldWithErrors {
|
20
|
+
padding: 2px;
|
21
|
+
background-color: red;
|
22
|
+
display: table;
|
23
|
+
}
|
24
|
+
|
25
|
+
#errorExplanation {
|
26
|
+
width: 400px;
|
27
|
+
border: 2px solid red;
|
28
|
+
padding: 7px;
|
29
|
+
padding-bottom: 12px;
|
30
|
+
margin-bottom: 20px;
|
31
|
+
background-color: #f0f0f0;
|
32
|
+
}
|
33
|
+
|
34
|
+
#errorExplanation h2 {
|
35
|
+
text-align: left;
|
36
|
+
font-weight: bold;
|
37
|
+
padding: 5px 5px 5px 15px;
|
38
|
+
font-size: 12px;
|
39
|
+
margin: -7px;
|
40
|
+
background-color: #c00;
|
41
|
+
color: #fff;
|
42
|
+
}
|
43
|
+
|
44
|
+
#errorExplanation p {
|
45
|
+
color: #333;
|
46
|
+
margin-bottom: 0;
|
47
|
+
padding: 5px;
|
48
|
+
}
|
49
|
+
|
50
|
+
#errorExplanation ul li {
|
51
|
+
font-size: 12px;
|
52
|
+
list-style: square;
|
53
|
+
}
|
54
|
+
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'wizardly'
|
2
|
+
|
3
|
+
class WizardlyScaffoldGenerator < Rails::Generator::Base
|
4
|
+
attr_reader :wizard_config, :pages, :submit_tag
|
5
|
+
attr_reader :controller_name,
|
6
|
+
:controller_class_path,
|
7
|
+
:controller_file_path,
|
8
|
+
:controller_class_nesting,
|
9
|
+
:controller_class_nesting_depth,
|
10
|
+
:controller_class_name,
|
11
|
+
:controller_underscore_name
|
12
|
+
attr_reader :model_name, :view_file_ext
|
13
|
+
|
14
|
+
alias_method :controller_file_name, :controller_underscore_name
|
15
|
+
|
16
|
+
def add_options!(opt)
|
17
|
+
opt.on('--haml', 'Generate scaffold for haml wizard') { |v| options[:output] = :haml }
|
18
|
+
opt.on('--ajax', 'Generate scaffold for ajax wizard') { |v| options[:output] = :ajax }
|
19
|
+
opt.on('--underscore', 'Append an underscore to front of each file') { |v| options[:underscore] = true }
|
20
|
+
opt.on('--image_submit', 'Use image submit tags in forms') {|v| options[:image_submit] = true }
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def initialize(runtime_args, runtime_options = {})
|
25
|
+
super
|
26
|
+
name = @args[0].sub(/^:/, '').underscore.sub(/_controller$/, '').camelize + 'Controller'
|
27
|
+
|
28
|
+
base_name, @controller_class_path, @controller_file_path, @controller_class_nesting, @controller_class_nesting_depth = extract_modules(name)
|
29
|
+
@controller_class_name_without_nesting = base_name.camelize
|
30
|
+
@controller_underscore_name = base_name.underscore
|
31
|
+
@controller_name = @controller_underscore_name.sub(/_controller$/, '')
|
32
|
+
if @controller_class_nesting.empty?
|
33
|
+
@controller_class_name = @controller_class_name_without_nesting
|
34
|
+
else
|
35
|
+
@controller_class_name = "#{@controller_class_nesting}::#{@controller_class_name_without_nesting}"
|
36
|
+
end
|
37
|
+
|
38
|
+
begin
|
39
|
+
@controller_class = @controller_class_name.constantize
|
40
|
+
rescue Exception => e
|
41
|
+
raise Wizardly::WizardlyScaffoldError, "No controller #{@controller_class_name} found: " + e.message, caller
|
42
|
+
end
|
43
|
+
begin
|
44
|
+
@wizard_config = @controller_class.wizard_config
|
45
|
+
rescue Exception => e
|
46
|
+
raise Wizardly::WizardlyScaffoldError, "#{@controller_class_name} must contain a valid 'act_wizardly_for' or 'wizard_for_model' macro: " + e.message, caller
|
47
|
+
end
|
48
|
+
|
49
|
+
@pages = @wizard_config.pages
|
50
|
+
@model_name = @wizard_config.model
|
51
|
+
@submit_tag = options[:image_submit] ? "wizardly_image_submit" : "wizardly_submit"
|
52
|
+
|
53
|
+
#based on options, default is --html, others --ajax, --haml
|
54
|
+
@view_file_ext = ["html.erb", "html.erb"]
|
55
|
+
@view_file_ext = ["html.haml.erb", "html.haml"] if options[:output] == :haml
|
56
|
+
#ajax
|
57
|
+
end
|
58
|
+
|
59
|
+
def manifest
|
60
|
+
record do |m|
|
61
|
+
# Helper, views, test and stylesheets directories.
|
62
|
+
m.directory(File.join('app/helpers', controller_class_path))
|
63
|
+
m.directory(File.join('app/views', controller_class_path, controller_name))
|
64
|
+
m.directory(File.join('app/views/layouts', controller_class_path))
|
65
|
+
m.directory('public/images/wizardly') if options[:image_submit]
|
66
|
+
#m.directory(File.join('test/functional', controller_class_path))
|
67
|
+
#m.directory(File.join('public/stylesheets', class_path))
|
68
|
+
|
69
|
+
underscore = options[:underscore] ? '_' : ''
|
70
|
+
pages.each do |id, page|
|
71
|
+
m.template(
|
72
|
+
"form.#{view_file_ext.first}",
|
73
|
+
File.join('app/views', controller_class_path, controller_name, "#{underscore}#{id}.#{view_file_ext.last}"),
|
74
|
+
:assigns=>{:id=>id, :page=>page}
|
75
|
+
)
|
76
|
+
end
|
77
|
+
|
78
|
+
if options[:image_submit]
|
79
|
+
%w(next skip back cancel finish).each do |fn|
|
80
|
+
m.file("images/#{fn}.png", "public/images/wizardly/#{fn}.png")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
m.template("helper.rb.erb", File.join('app/helpers', controller_class_path, "#{controller_name}_helper.rb"))
|
85
|
+
|
86
|
+
# Layout and stylesheet.
|
87
|
+
m.template("layout.#{view_file_ext.first}", File.join('app/views/layouts', controller_class_path, "#{controller_name}.#{view_file_ext.last}"))
|
88
|
+
m.template('style.css', 'public/stylesheets/scaffold.css')
|
89
|
+
|
90
|
+
#m.dependency 'model', [name] + @args, :collision => :skip
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
protected
|
95
|
+
def banner
|
96
|
+
"Usage: #{$0} wizardly_scaffold controller_name --ajax --haml"
|
97
|
+
end
|
98
|
+
|
99
|
+
def extract_modules(name)
|
100
|
+
modules = name.include?('/') ? name.split('/') : name.split('::')
|
101
|
+
name = modules.pop
|
102
|
+
path = modules.map { |m| m.underscore }
|
103
|
+
file_path = (path + [name.underscore]).join('/')
|
104
|
+
nesting = modules.map { |m| m.camelize }.join('::')
|
105
|
+
[name, path, file_path, nesting, modules.size]
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
end
|