advanced_scaffold 0.0.1
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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +2 -0
- data/advanced_scaffold.gemspec +23 -0
- data/lib/advanced_scaffold.rb +10 -0
- data/lib/advanced_scaffold/helpers/sortable.rb +19 -0
- data/lib/advanced_scaffold/keep_params_in_session/.keep_params_in_session.rb.swp +0 -0
- data/lib/advanced_scaffold/keep_params_in_session/keep_params_in_session.rb +28 -0
- data/lib/advanced_scaffold/version.rb +3 -0
- data/lib/generators/advanced_scaffold/USAGE +7 -0
- data/lib/generators/advanced_scaffold/advanced_scaffold_generator.rb +273 -0
- data/lib/generators/advanced_scaffold/templates/.model.rb.swp +0 -0
- data/lib/generators/advanced_scaffold/templates/actions/create.rb +8 -0
- data/lib/generators/advanced_scaffold/templates/actions/destroy.rb +5 -0
- data/lib/generators/advanced_scaffold/templates/actions/edit.rb +3 -0
- data/lib/generators/advanced_scaffold/templates/actions/index.rb +10 -0
- data/lib/generators/advanced_scaffold/templates/actions/new.rb +3 -0
- data/lib/generators/advanced_scaffold/templates/actions/show.rb +3 -0
- data/lib/generators/advanced_scaffold/templates/actions/update.rb +8 -0
- data/lib/generators/advanced_scaffold/templates/advanced_scaffold.js +5 -0
- data/lib/generators/advanced_scaffold/templates/controller.rb +13 -0
- data/lib/generators/advanced_scaffold/templates/css/.advanced_scaffold.css.swp +0 -0
- data/lib/generators/advanced_scaffold/templates/css/advanced_scaffold.css +27 -0
- data/lib/generators/advanced_scaffold/templates/helper.rb +4 -0
- data/lib/generators/advanced_scaffold/templates/images/down_arrow.gif +0 -0
- data/lib/generators/advanced_scaffold/templates/images/up_arrow.gif +0 -0
- data/lib/generators/advanced_scaffold/templates/migration.rb +13 -0
- data/lib/generators/advanced_scaffold/templates/model.rb +20 -0
- data/lib/generators/advanced_scaffold/templates/views/_form.html.erb +14 -0
- data/lib/generators/advanced_scaffold/templates/views/_index.html.erb +29 -0
- data/lib/generators/advanced_scaffold/templates/views/_search.html.erb +14 -0
- data/lib/generators/advanced_scaffold/templates/views/edit.html.erb +14 -0
- data/lib/generators/advanced_scaffold/templates/views/index.html.erb +3 -0
- data/lib/generators/advanced_scaffold/templates/views/index.js.erb +1 -0
- data/lib/generators/advanced_scaffold/templates/views/new.html.erb +5 -0
- data/lib/generators/advanced_scaffold/templates/views/show.html.erb +20 -0
- metadata +133 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "advanced_scaffold/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "advanced_scaffold"
|
7
|
+
s.version = AdvancedScaffold::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Dmitry Biryukov"]
|
10
|
+
s.email = ["dmitry@biryukov.net"]
|
11
|
+
s.homepage = "https://github.com/dmitryz/advanced_scaffold"
|
12
|
+
s.summary = %q{Advanced scaffolding with pagination and ajax}
|
13
|
+
s.description = %q{Advanced scaffolding with pagination, ajax, search, namespaces}
|
14
|
+
|
15
|
+
s.rubyforge_project = "advanced_scaffold"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.add_runtime_dependency('will_paginate', '~> 3.0.pre2')
|
21
|
+
s.add_runtime_dependency('dynamic_form')
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Sortable
|
2
|
+
def sortable(column, title=nil)
|
3
|
+
title ||= column.titleize
|
4
|
+
css_class = column == sort_column ? "current #{sort_direction}" : nil
|
5
|
+
direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
|
6
|
+
link_to title, params.merge(:sort => column, :direction => direction, :page => nil),
|
7
|
+
{:class => css_class, :remote => true}
|
8
|
+
end
|
9
|
+
def title(page_title, show_title = true)
|
10
|
+
content_for(:title) { page_title.to_s }
|
11
|
+
@show_title = show_title
|
12
|
+
end
|
13
|
+
def show_title?
|
14
|
+
@show_title
|
15
|
+
end
|
16
|
+
def show_change_password?(o)
|
17
|
+
%{edit update}.include?(controller.action_name) && o.password.blank? && o.password_confirmation.blank?
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module KeepParamsInSession
|
2
|
+
def save_last_path
|
3
|
+
session[:last_path] = request.env['PATH_INFO'].gsub("index", "")
|
4
|
+
end
|
5
|
+
|
6
|
+
def get_last_path
|
7
|
+
session[:last_path]
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
def keep_params_in_session(label, *keys)
|
12
|
+
sess_id_local = request.env['PATH_INFO'].gsub('/index', '')+'_'+label;
|
13
|
+
sess_id_global = 'global_'+label;
|
14
|
+
keys.each do |key|
|
15
|
+
if ((key.is_a? Hash) && key[:global])
|
16
|
+
key=key[:global]
|
17
|
+
sess_id=sess_id_global
|
18
|
+
elsif ((key.is_a? Hash) && key[:key] && key[:depend])
|
19
|
+
sess_id=sess_id_global+'_'+params[key[:depend]].to_s
|
20
|
+
key=key[:key]
|
21
|
+
else
|
22
|
+
sess_id=sess_id_local
|
23
|
+
end
|
24
|
+
params[key] = session["#{sess_id}#{key}"] if (params[key].nil? && !session["#{sess_id}#{key}"].nil?)
|
25
|
+
session["#{sess_id}#{key}"] = params[key] unless params[key].nil?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,273 @@
|
|
1
|
+
require 'rails/generators/migration'
|
2
|
+
require 'rails/generators/generated_attribute'
|
3
|
+
|
4
|
+
module AdvancedScaffoldGenerator
|
5
|
+
module Generators
|
6
|
+
class AdvancedScaffoldGenerator < Rails::Generators::Base
|
7
|
+
include Rails::Generators::Migration
|
8
|
+
namespace "advanced_scaffold"
|
9
|
+
attr_accessor :scaffold_name, :model_attributes, :controller_actions
|
10
|
+
|
11
|
+
source_root File.expand_path('../templates', __FILE__)
|
12
|
+
|
13
|
+
|
14
|
+
argument :advanced_scaffold_name, :type => :string, :required => true, :banner => 'ModelName'
|
15
|
+
argument :args_for_c_m, :type => :array, :default => [], :banner => 'controller_actions and model:attributes'
|
16
|
+
|
17
|
+
class_option :skip_model, :desc => 'Don\'t generate a model or migration file.', :type => :boolean
|
18
|
+
class_option :skip_migration, :desc => 'Don\'t generate migration file for model.', :type => :boolean
|
19
|
+
class_option :skip_controller, :desc => 'Don\'t generate controller, helper, or views', :type => :boolean
|
20
|
+
class_option :controller_name, :desc => 'Set controller name', :type => :string
|
21
|
+
class_option :master_name, :desc => 'Set controller name < inheritance', :type => :string
|
22
|
+
|
23
|
+
def initialize(*args, &block)
|
24
|
+
super
|
25
|
+
# print_usage unless advanced_scaffold_name.underscore =~ /^[a-z][a-z0-9_\/]+$/
|
26
|
+
puts "advanced_scaffold_name=#{advanced_scaffold_name}"
|
27
|
+
|
28
|
+
@controller_actions = []
|
29
|
+
@model_attributes = []
|
30
|
+
@skip_model = options.skip_model?
|
31
|
+
|
32
|
+
args_for_c_m.each do |arg|
|
33
|
+
if arg.include?(':')
|
34
|
+
puts "model: #{arg}"
|
35
|
+
@model_attributes << Rails::Generators::GeneratedAttribute.new(*arg.split(':'))
|
36
|
+
else
|
37
|
+
puts "controller: #{arg}"
|
38
|
+
@controller_actions << arg
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
@controller_actions.uniq!
|
43
|
+
@model_attributes.uniq!
|
44
|
+
|
45
|
+
@controller_actions = all_actions if @controller_actions.empty?
|
46
|
+
|
47
|
+
@skip_model = true if @model_attributes.empty?
|
48
|
+
end
|
49
|
+
|
50
|
+
def copy_js
|
51
|
+
copy_file("advanced_scaffold.js", "public/javascripts/advanced_scaffold.js")
|
52
|
+
end
|
53
|
+
def copy_css
|
54
|
+
copy_file("css/advanced_scaffold.css", "public/stylesheets/advanced_scaffold.css")
|
55
|
+
end
|
56
|
+
def copy_images
|
57
|
+
copy_file("images/down_arrow.gif", "public/images/advanced_scaffold/down_arrow.gif")
|
58
|
+
copy_file("images/up_arrow.gif", "public/images/advanced_scaffold/up_arrow.gif")
|
59
|
+
end
|
60
|
+
# def add_config
|
61
|
+
# inject_into_file "config/application.rb", :after => "config.action_view.javascript_expansions" do
|
62
|
+
# "config.action_view.javascript_expansions[:defaults] << %w(advanced_scaffold)"
|
63
|
+
# end
|
64
|
+
def create_model
|
65
|
+
template 'model.rb', "app/models/#{model_path}.rb" unless @skip_model
|
66
|
+
end
|
67
|
+
|
68
|
+
def create_migration
|
69
|
+
unless @skip_model || options.skip_migration?
|
70
|
+
migration_template 'migration.rb', "db/migrate/create_#{model_path.pluralize.gsub('/', '_')}.rb"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def create_controller
|
75
|
+
unless options.skip_controller?
|
76
|
+
template 'controller.rb', "app/controllers/#{plural_controller_name}_controller.rb"
|
77
|
+
template 'helper.rb', "app/helpers/#{plural_controller_name}_helper.rb"
|
78
|
+
controller_actions.each do |action|
|
79
|
+
if %w[index show new edit].include?(action)
|
80
|
+
template "views/#{action}.html.erb", "app/views/#{plural_controller_name}/#{action}.html.erb"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
if form_partial?
|
85
|
+
template "views/_form.html.erb", "app/views/#{plural_controller_name}/_form.html.erb"
|
86
|
+
end
|
87
|
+
if index_partial?
|
88
|
+
template "views/_index.html.erb", "app/views/#{plural_controller_name}/_index.html.erb"
|
89
|
+
template "views/_search.html.erb", "app/views/#{plural_controller_name}/_search.html.erb"
|
90
|
+
end
|
91
|
+
if index_js?
|
92
|
+
template "views/index.js.erb", "app/views/#{plural_controller_name}/index.js.erb"
|
93
|
+
end
|
94
|
+
namespaces = plural_controller_name.split('/')
|
95
|
+
resource = namespaces.pop
|
96
|
+
route namespaces.reverse.inject("resources :#{resource}") { |acc, namespace|
|
97
|
+
"namespace(:#{namespace}){ #{acc} }"
|
98
|
+
}
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
private
|
103
|
+
|
104
|
+
def form_partial?
|
105
|
+
actions? :new, :edit
|
106
|
+
end
|
107
|
+
|
108
|
+
def index_partial?
|
109
|
+
actions? :index
|
110
|
+
end
|
111
|
+
|
112
|
+
def index_js?
|
113
|
+
actions? :index
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
def action?(name)
|
118
|
+
controller_actions.include? name.to_s
|
119
|
+
end
|
120
|
+
|
121
|
+
def actions?(*names)
|
122
|
+
names.all? { |name| action? name }
|
123
|
+
end
|
124
|
+
|
125
|
+
def class_name
|
126
|
+
advanced_scaffold_name.split('::').last.camelize
|
127
|
+
end
|
128
|
+
|
129
|
+
def plural_class_name
|
130
|
+
plural_name.camelize
|
131
|
+
end
|
132
|
+
|
133
|
+
def camelize_master_name
|
134
|
+
master_name.camelize
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
def plural_controller_name
|
139
|
+
controller_name.camelize
|
140
|
+
end
|
141
|
+
|
142
|
+
def model_path
|
143
|
+
class_name.underscore
|
144
|
+
end
|
145
|
+
|
146
|
+
def all_actions
|
147
|
+
%w[index show new create edit update destroy]
|
148
|
+
end
|
149
|
+
|
150
|
+
def plural_name
|
151
|
+
advanced_scaffold_name.underscore.pluralize
|
152
|
+
end
|
153
|
+
|
154
|
+
def controller_name
|
155
|
+
options.controller_name.present? ? options.controller_name.underscore : singular_name
|
156
|
+
end
|
157
|
+
|
158
|
+
def camelize_controller_name
|
159
|
+
controller_name.camelize
|
160
|
+
end
|
161
|
+
|
162
|
+
def plural_controller_name
|
163
|
+
controller_name.underscore.pluralize
|
164
|
+
end
|
165
|
+
|
166
|
+
def plural_camelize_controller_name
|
167
|
+
plural_controller_name.camelize
|
168
|
+
end
|
169
|
+
|
170
|
+
|
171
|
+
def master_name
|
172
|
+
options.master_name.present? ? options.master_name.underscore : 'application'
|
173
|
+
end
|
174
|
+
|
175
|
+
def singular_name
|
176
|
+
advanced_scaffold_name.underscore
|
177
|
+
end
|
178
|
+
|
179
|
+
def singular_controller_name
|
180
|
+
controller_name.underscore
|
181
|
+
end
|
182
|
+
|
183
|
+
def table_name
|
184
|
+
plural_name.split('/').last
|
185
|
+
end
|
186
|
+
|
187
|
+
def instance_name
|
188
|
+
singular_name.split('/').last
|
189
|
+
end
|
190
|
+
|
191
|
+
def controller_instance_name
|
192
|
+
controller_name.split('/').last
|
193
|
+
end
|
194
|
+
|
195
|
+
|
196
|
+
def namespace_controller
|
197
|
+
controller_name.include?('/') ? controller_name.split('/').first : ""
|
198
|
+
end
|
199
|
+
|
200
|
+
def namespace_part_controller
|
201
|
+
controller_name.include?('/') ? controller_name.split('/').first+"_" : ""
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
def namespace
|
206
|
+
singular_name.include?('/') ? singular_name.split('/').first : ""
|
207
|
+
end
|
208
|
+
def namespace_part
|
209
|
+
singular_name.include?('/') ? singular_name.split('/').first+"_" : ""
|
210
|
+
end
|
211
|
+
|
212
|
+
def instances_url
|
213
|
+
namespace_part + instances_name + "_url"
|
214
|
+
end
|
215
|
+
|
216
|
+
def instances_path
|
217
|
+
namespace_part + instances_name + "_path"
|
218
|
+
end
|
219
|
+
|
220
|
+
def instance_path
|
221
|
+
namespace_part + instance_name + "_path"
|
222
|
+
end
|
223
|
+
|
224
|
+
def controller_instance_path
|
225
|
+
namespace_part_controller + controller_instance_name + "_path"
|
226
|
+
end
|
227
|
+
|
228
|
+
def controller_instances_path
|
229
|
+
namespace_part_controller + controller_instances_name + "_path"
|
230
|
+
end
|
231
|
+
def controller_instances_url
|
232
|
+
namespace_part_controller + controller_instances_name + "_url"
|
233
|
+
end
|
234
|
+
|
235
|
+
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
def instances_name
|
240
|
+
instance_name.pluralize
|
241
|
+
end
|
242
|
+
|
243
|
+
def controller_instances_name
|
244
|
+
controller_instance_name.pluralize
|
245
|
+
end
|
246
|
+
|
247
|
+
|
248
|
+
|
249
|
+
def print_usage
|
250
|
+
self.class.help(Thor::Base.shell.new)
|
251
|
+
exit
|
252
|
+
end
|
253
|
+
|
254
|
+
def controller_methods(dirname)
|
255
|
+
controller_actions.map do |action|
|
256
|
+
read_template("#{dirname}/#{action}.rb")
|
257
|
+
end.join("\n").strip
|
258
|
+
end
|
259
|
+
|
260
|
+
def read_template(relative_path)
|
261
|
+
ERB.new(File.read(find_in_source_paths(relative_path)), nil, '-').result(binding)
|
262
|
+
end
|
263
|
+
|
264
|
+
def self.next_migration_number(dirname)
|
265
|
+
if ActiveRecord::Base.timestamped_migrations
|
266
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
267
|
+
else
|
268
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
269
|
+
end
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
Binary file
|
@@ -0,0 +1,8 @@
|
|
1
|
+
def create
|
2
|
+
@<%= instance_name %> = <%= class_name %>.new(params[:<%= instance_name %>])
|
3
|
+
if @<%= instance_name %>.save
|
4
|
+
redirect_to(<%= controller_instances_url %>, :notice => '<%= class_name %> was successfully created.')
|
5
|
+
else
|
6
|
+
render :action => "new"
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
def index
|
2
|
+
save_last_path
|
3
|
+
params[:search] = "" if params[:remove_filter]
|
4
|
+
keep_params_in_session('<%= instances_name %>_index', { :global => :page },
|
5
|
+
{ :glboal => :direction},
|
6
|
+
{ :global => :sort},
|
7
|
+
{ :global => :search})
|
8
|
+
|
9
|
+
@<%= instances_name %> = <%= class_name %>.search(params[:search]).order(sort_column + " " + sort_direction).pag(params[:page])
|
10
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
def update
|
2
|
+
@<%= instance_name %> = <%= class_name %>.find(params[:id])
|
3
|
+
if @<%= instance_name %>.update_attributes(params[:<%= instance_name %>])
|
4
|
+
redirect_to(<%= controller_instances_url %>, :notice => "<%= class_name %> #{@<%= instance_name %>.id} was successfully updated.")
|
5
|
+
else
|
6
|
+
render :action => "edit"
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class <%= plural_camelize_controller_name %>Controller < <%= camelize_master_name %>Controller
|
2
|
+
require 'advanced_scaffold/keep_params_in_session/keep_params_in_session'
|
3
|
+
include KeepParamsInSession
|
4
|
+
helper_method :sort_column, :sort_direction
|
5
|
+
<%= controller_methods :actions %>
|
6
|
+
private
|
7
|
+
def sort_column
|
8
|
+
<%= class_name %>.column_names.include?(params[:sort]) ? params[:sort] : "<%= model_attributes.first.name %>"
|
9
|
+
end
|
10
|
+
def sort_direction
|
11
|
+
%w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
table.pretty {
|
2
|
+
border-collapse: collapse;
|
3
|
+
margin-bottom: 10px;
|
4
|
+
}
|
5
|
+
|
6
|
+
.pretty td, .pretty th {
|
7
|
+
padding: 4px 10px;
|
8
|
+
border: solid 1px #AAA;
|
9
|
+
}
|
10
|
+
|
11
|
+
.pretty .price {
|
12
|
+
text-align: right;
|
13
|
+
}
|
14
|
+
|
15
|
+
.pretty th .current {
|
16
|
+
padding-right: 12px;
|
17
|
+
background-repeat: no-repeat;
|
18
|
+
background-position: right center;
|
19
|
+
}
|
20
|
+
|
21
|
+
.pretty th .asc {
|
22
|
+
background-image: url(/images/advanced_scaffold/up_arrow.gif);
|
23
|
+
}
|
24
|
+
|
25
|
+
.pretty th .desc {
|
26
|
+
background-image: url(/images/advanced_scaffold/down_arrow.gif);
|
27
|
+
}
|
Binary file
|
Binary file
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class Create<%= class_name.pluralize.delete('::') %> < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :<%= table_name %> do |t|
|
4
|
+
<%- for attribute in model_attributes -%>
|
5
|
+
t.<%= attribute.type %> :<%= attribute.name %>
|
6
|
+
<%- end -%>
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
end
|
10
|
+
def self.down
|
11
|
+
drop_table :<%= table_name %>
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class <%= class_name %> < ActiveRecord::Base
|
2
|
+
attr_accessible <%= model_attributes.map { |a| ":#{a.name}"}.join(", ") %>
|
3
|
+
|
4
|
+
def self.per_page
|
5
|
+
15
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.pag(page="", conditions="", per_page=nil)
|
9
|
+
paginate :per_page => per_page.present? ? per_page : self.per_page,
|
10
|
+
:page => !page.blank? ? page:nil,
|
11
|
+
:conditions => conditions
|
12
|
+
end
|
13
|
+
def self.search(search)
|
14
|
+
if search.present?
|
15
|
+
where('<%= model_attributes.map { |a| "#{a.name} RLIKE :search" if %w[string text].include?(a.type.to_s) }.compact.join(" or ") %>', :search => search)
|
16
|
+
else
|
17
|
+
scoped
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%%= form_for ([<%= namespace_controller.present? ? ":#{namespace_controller}, ":"" %>@<%= instance_name %>]) do |f| %>
|
2
|
+
<div id="error_explanation">
|
3
|
+
<%%= f.error_messages %>
|
4
|
+
</div>
|
5
|
+
<%- for attribute in model_attributes -%>
|
6
|
+
<div class="field">
|
7
|
+
<%%= f.label :<%=attribute.name %> %><br />
|
8
|
+
<%%= f.<%= attribute.field_type %> :<%= attribute.name %> %>
|
9
|
+
</div>
|
10
|
+
<%- end -%>
|
11
|
+
<div class="actions">
|
12
|
+
<%%= f.submit %>
|
13
|
+
</div>
|
14
|
+
<%% end %>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<div id="<%= instances_name %>_paginate">
|
2
|
+
<%%= will_paginate @<%=instances_name %>, :params => { :id => params[:id] } %><BR />
|
3
|
+
</div>
|
4
|
+
<%%= render :partial => 'search.html.erb' %>
|
5
|
+
<table id="t_<%= instance_name %>_index" class="pretty">
|
6
|
+
<tr>
|
7
|
+
<%- for attribute in model_attributes -%>
|
8
|
+
<th><%%= sortable "<%= attribute.name %>" %></th>
|
9
|
+
<%- end -%>
|
10
|
+
<th colspan=3>Actions</th>
|
11
|
+
</tr>
|
12
|
+
<%% @<%= instances_name %>.each do |t| %>
|
13
|
+
<tr>
|
14
|
+
<%- for attribute in model_attributes -%>
|
15
|
+
<td><%%= t.<%= attribute.name %> %></td>
|
16
|
+
<%- end -%>
|
17
|
+
<%- if action? :show -%>
|
18
|
+
<td><%%= link_to "Show", <%= controller_instance_path %>(t) %></td>
|
19
|
+
<%- end -%>
|
20
|
+
<%- if action? :edit -%>
|
21
|
+
<td><%%= link_to "Edit", edit_<%= controller_instance_path %>(t) %></td>
|
22
|
+
<%- end -%>
|
23
|
+
<%- if action? :destroy -%>
|
24
|
+
<td><%%= link_to "Destroy", <%= controller_instance_path %>(t), :confirm => 'Are you sure?', :method => :delete %></td>
|
25
|
+
<%- end -%>
|
26
|
+
</tr>
|
27
|
+
<%% end %>
|
28
|
+
</table><BR />
|
29
|
+
<%%= link_to 'New <%= instance_name %>', new_<%= controller_instance_path %> %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%% if params[:search].blank? %>
|
2
|
+
<div class="field" id="search_link">
|
3
|
+
<%%= link_to_function "Search", "$('div#search_link').hide(); $('div#search_field').show()" %>
|
4
|
+
</div>
|
5
|
+
<%% else %>
|
6
|
+
<%%= link_to "Remove filter", { :remove_filter => true }, :remote => true %>
|
7
|
+
<%% end %>
|
8
|
+
<div id="search_field" style="<%%= params[:search].blank? ? "display:none":"" %>">
|
9
|
+
<%%= form_tag '', :method => :get, :remote => true do %>
|
10
|
+
<%%= hidden_field_tag :page, 1 %>
|
11
|
+
Search: <%%= text_field_tag :search, params[:search] %>
|
12
|
+
<%%= submit_tag "Search", :name => "do_search" %>
|
13
|
+
<%% end %>
|
14
|
+
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%% title "Edit <%= singular_name.titleize %>" %>
|
2
|
+
|
3
|
+
<%%= render 'form' %>
|
4
|
+
|
5
|
+
<%- if actions? :show, :index -%>
|
6
|
+
<p>
|
7
|
+
<%- if action? :show -%>
|
8
|
+
<%%= link_to "Show", <%= controller_instance_path %>(@<%= instance_name%>) %>
|
9
|
+
<%- end -%>
|
10
|
+
<%- if action? :index -%>
|
11
|
+
<%%= link_to "Back", <%= controller_instances_path %> %>
|
12
|
+
<%- end -%>
|
13
|
+
</p>
|
14
|
+
<%- end -%>
|
@@ -0,0 +1 @@
|
|
1
|
+
$("#<%= instances_name %>_index_list").html("<%%= escape_javascript( render( :partial => "index.html.erb")) %>");
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<%% title "<%= singular_name.titleize %>" %>
|
2
|
+
|
3
|
+
<%- for attribute in model_attributes -%>
|
4
|
+
<p>
|
5
|
+
<strong><%= attribute.human_name.titleize %>:</strong>
|
6
|
+
<%%= @<%= instance_name %>.<%= attribute.name %> %>
|
7
|
+
</p>
|
8
|
+
<%- end -%>
|
9
|
+
|
10
|
+
<p>
|
11
|
+
<%- if action? :edit -%>
|
12
|
+
<%%= link_to "Edit", <%= "edit_"+controller_instance_path %>(@<%= instance_name %>) %> |
|
13
|
+
<%- end -%>
|
14
|
+
<%- if action? :destroy -%>
|
15
|
+
<%%= link_to "Destroy", <%= controller_instance_path %>(@<%= instance_name %>), :confirm => 'Are you sure?', :method => :delete %> |
|
16
|
+
<%- end -%>
|
17
|
+
<%- if action? :index -%>
|
18
|
+
<%%= link_to "Back", <%= controller_instances_path %> %>
|
19
|
+
<%- end -%>
|
20
|
+
|
metadata
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: advanced_scaffold
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Dmitry Biryukov
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-05-25 00:00:00 +03:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: will_paginate
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 1923831917
|
30
|
+
segments:
|
31
|
+
- 3
|
32
|
+
- 0
|
33
|
+
- pre
|
34
|
+
- 2
|
35
|
+
version: 3.0.pre2
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id001
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: dynamic_form
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
hash: 3
|
47
|
+
segments:
|
48
|
+
- 0
|
49
|
+
version: "0"
|
50
|
+
type: :runtime
|
51
|
+
version_requirements: *id002
|
52
|
+
description: Advanced scaffolding with pagination, ajax, search, namespaces
|
53
|
+
email:
|
54
|
+
- dmitry@biryukov.net
|
55
|
+
executables: []
|
56
|
+
|
57
|
+
extensions: []
|
58
|
+
|
59
|
+
extra_rdoc_files: []
|
60
|
+
|
61
|
+
files:
|
62
|
+
- .gitignore
|
63
|
+
- Gemfile
|
64
|
+
- Rakefile
|
65
|
+
- advanced_scaffold.gemspec
|
66
|
+
- lib/advanced_scaffold.rb
|
67
|
+
- lib/advanced_scaffold/helpers/sortable.rb
|
68
|
+
- lib/advanced_scaffold/keep_params_in_session/.keep_params_in_session.rb.swp
|
69
|
+
- lib/advanced_scaffold/keep_params_in_session/keep_params_in_session.rb
|
70
|
+
- lib/advanced_scaffold/version.rb
|
71
|
+
- lib/generators/advanced_scaffold/USAGE
|
72
|
+
- lib/generators/advanced_scaffold/advanced_scaffold_generator.rb
|
73
|
+
- lib/generators/advanced_scaffold/templates/.model.rb.swp
|
74
|
+
- lib/generators/advanced_scaffold/templates/actions/create.rb
|
75
|
+
- lib/generators/advanced_scaffold/templates/actions/destroy.rb
|
76
|
+
- lib/generators/advanced_scaffold/templates/actions/edit.rb
|
77
|
+
- lib/generators/advanced_scaffold/templates/actions/index.rb
|
78
|
+
- lib/generators/advanced_scaffold/templates/actions/new.rb
|
79
|
+
- lib/generators/advanced_scaffold/templates/actions/show.rb
|
80
|
+
- lib/generators/advanced_scaffold/templates/actions/update.rb
|
81
|
+
- lib/generators/advanced_scaffold/templates/advanced_scaffold.js
|
82
|
+
- lib/generators/advanced_scaffold/templates/controller.rb
|
83
|
+
- lib/generators/advanced_scaffold/templates/css/.advanced_scaffold.css.swp
|
84
|
+
- lib/generators/advanced_scaffold/templates/css/advanced_scaffold.css
|
85
|
+
- lib/generators/advanced_scaffold/templates/helper.rb
|
86
|
+
- lib/generators/advanced_scaffold/templates/images/down_arrow.gif
|
87
|
+
- lib/generators/advanced_scaffold/templates/images/up_arrow.gif
|
88
|
+
- lib/generators/advanced_scaffold/templates/migration.rb
|
89
|
+
- lib/generators/advanced_scaffold/templates/model.rb
|
90
|
+
- lib/generators/advanced_scaffold/templates/views/_form.html.erb
|
91
|
+
- lib/generators/advanced_scaffold/templates/views/_index.html.erb
|
92
|
+
- lib/generators/advanced_scaffold/templates/views/_search.html.erb
|
93
|
+
- lib/generators/advanced_scaffold/templates/views/edit.html.erb
|
94
|
+
- lib/generators/advanced_scaffold/templates/views/index.html.erb
|
95
|
+
- lib/generators/advanced_scaffold/templates/views/index.js.erb
|
96
|
+
- lib/generators/advanced_scaffold/templates/views/new.html.erb
|
97
|
+
- lib/generators/advanced_scaffold/templates/views/show.html.erb
|
98
|
+
has_rdoc: true
|
99
|
+
homepage: https://github.com/dmitryz/advanced_scaffold
|
100
|
+
licenses: []
|
101
|
+
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options: []
|
104
|
+
|
105
|
+
require_paths:
|
106
|
+
- lib
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
hash: 3
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
version: "0"
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
hash: 3
|
122
|
+
segments:
|
123
|
+
- 0
|
124
|
+
version: "0"
|
125
|
+
requirements: []
|
126
|
+
|
127
|
+
rubyforge_project: advanced_scaffold
|
128
|
+
rubygems_version: 1.5.2
|
129
|
+
signing_key:
|
130
|
+
specification_version: 3
|
131
|
+
summary: Advanced scaffolding with pagination and ajax
|
132
|
+
test_files: []
|
133
|
+
|