rails-admin-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.
- checksums.yaml +7 -0
- data/LICENSE +20 -0
- data/README.md +17 -0
- data/lib/generators/admin/scaffold_controller/USAGE +12 -0
- data/lib/generators/admin/scaffold_controller/scaffold_controller_generator.rb +141 -0
- data/lib/generators/admin/scaffold_controller/templates/controllers/controller.erb +68 -0
- data/lib/generators/admin/scaffold_controller/templates/tests/test_unit/functional_test.erb +51 -0
- data/lib/generators/admin/scaffold_controller/templates/views/erb/_form.html.erb +37 -0
- data/lib/generators/admin/scaffold_controller/templates/views/erb/edit.html.erb +6 -0
- data/lib/generators/admin/scaffold_controller/templates/views/erb/index.html.erb +31 -0
- data/lib/generators/admin/scaffold_controller/templates/views/erb/new.html.erb +5 -0
- data/lib/generators/admin/scaffold_controller/templates/views/erb/show.html.erb +11 -0
- data/lib/rails-admin-scaffold/version.rb +3 -0
- data/lib/rails_admin_scaffold.rb +1 -0
- data/test/fixtures/routes.rb +58 -0
- data/test/lib/generators/admin/scaffold_controller_generator_test.rb +111 -0
- data/test/lib/generators/admin/testing_helper.rb +1 -0
- data/test/test_helper.rb +74 -0
- metadata +134 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4e1fac9b29b5562ab5219bf487e07bf173c8ba84
|
4
|
+
data.tar.gz: bf8cc2870b83ef67ee11d82d057edf3987b5f7c0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 482201651a09ede8bec6c05f08f3e467220ee4d0b81193e5c5aeec0817e208039e065565b280e9150f5d391541ab3c74e7c333bfda145654ec105b516d48d33a
|
7
|
+
data.tar.gz: 6fef87346c1730351ee0712d342c89d43b9bd2731633a9e6edfb4808fabdb40ae0340af7ae64b300b80b6bf180992181c1a8136b187e616f515d48cd69955f11
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2013 Kirill Kalachev (aka dhampik)
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
rails-admin-scaffold
|
2
|
+
====================
|
3
|
+
|
4
|
+
Rails generator which allows to scaffold admin controllers, views with proper (non-namespaced) models, helpers, tests and routes
|
5
|
+
|
6
|
+
How to use:
|
7
|
+
-----------
|
8
|
+
* Add ```gem 'rails-admin-scaffold', 'x.x.x'``` to your Gemfile
|
9
|
+
* Run ```bundle install```
|
10
|
+
* Create admin scaffold with e. g. ```bin/rails g admin:scaffold_controller Post title:string content:text published:boolean```
|
11
|
+
|
12
|
+
Plans:
|
13
|
+
------
|
14
|
+
* add haml suppurt
|
15
|
+
* add jbuilder support
|
16
|
+
* improve tests
|
17
|
+
* use travis for ci
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Description:
|
2
|
+
Stubs out a scaffolded controller, its seven RESTful actions and related
|
3
|
+
views. Pass the model name, either CamelCased or under_scored. The
|
4
|
+
controller name is retrieved as a pluralized version of the model name
|
5
|
+
namespaces within Admin namespaced.
|
6
|
+
|
7
|
+
This generates a controller class in app/controllers/admin and invokes helper,
|
8
|
+
template engine and test framework generators.
|
9
|
+
It uses non-namespaced model in app/models
|
10
|
+
|
11
|
+
Example:
|
12
|
+
`rails generate admin:scaffold_controller Post`
|
@@ -0,0 +1,141 @@
|
|
1
|
+
require 'rails/generators/named_base'
|
2
|
+
require 'rails/generators/resource_helpers'
|
3
|
+
|
4
|
+
module Admin
|
5
|
+
module Generators
|
6
|
+
class ScaffoldControllerGenerator < Rails::Generators::NamedBase
|
7
|
+
include Rails::Generators::ResourceHelpers
|
8
|
+
|
9
|
+
source_root File.expand_path('../templates', __FILE__)
|
10
|
+
|
11
|
+
check_class_collision suffix: "Controller"
|
12
|
+
|
13
|
+
check_class_collision suffix: "ControllerTest"
|
14
|
+
|
15
|
+
check_class_collision suffix: "Helper"
|
16
|
+
|
17
|
+
class_option :orm, banner: "NAME", type: :string, required: true,
|
18
|
+
desc: "ORM to generate the controller for"
|
19
|
+
|
20
|
+
class_option :html, type: :boolean, default: true,
|
21
|
+
desc: "Generate a scaffold with HTML output"
|
22
|
+
|
23
|
+
argument :attributes, type: :array, default: [], banner: "field:type field:type"
|
24
|
+
|
25
|
+
def initialize(args, *options) #:nodoc:
|
26
|
+
super
|
27
|
+
end
|
28
|
+
|
29
|
+
hook_for :resource_route, in: :rails do |resource_route|
|
30
|
+
invoke resource_route, [prefixed_class_name]
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_controller_files
|
34
|
+
template "controllers/controller.erb", File.join('app/controllers', prefix, class_path, "#{controller_file_name}_controller.rb")
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_test_files
|
38
|
+
template "tests/test_unit/functional_test.erb",
|
39
|
+
File.join("test/controllers", prefix, controller_class_path, "#{controller_file_name}_controller_test.rb")
|
40
|
+
end
|
41
|
+
|
42
|
+
hook_for :helper, in: :rails do |helper|
|
43
|
+
invoke helper, [prefixed_controller_class_name]
|
44
|
+
end
|
45
|
+
|
46
|
+
def create_root_folder
|
47
|
+
empty_directory File.join("app/views", prefix, controller_file_path)
|
48
|
+
end
|
49
|
+
|
50
|
+
def copy_view_files
|
51
|
+
available_views.each do |view|
|
52
|
+
filename = filename_with_extensions(view)
|
53
|
+
template "views/#{handler}/#{filename}", File.join("app/views", prefix, controller_file_path, filename)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
hook_for :assets, in: :rails do |assets|
|
58
|
+
invoke assets, [prefixed_class_name]
|
59
|
+
end
|
60
|
+
|
61
|
+
protected
|
62
|
+
|
63
|
+
def prefix
|
64
|
+
'admin'
|
65
|
+
end
|
66
|
+
|
67
|
+
def prefixed_class_name
|
68
|
+
"#{prefix.capitalize}::#{class_name}"
|
69
|
+
end
|
70
|
+
|
71
|
+
def prefixed_controller_class_name
|
72
|
+
"#{prefix.capitalize}::#{controller_class_name}"
|
73
|
+
end
|
74
|
+
|
75
|
+
def prefixed_route_url
|
76
|
+
"/#{prefix}#{route_url}"
|
77
|
+
end
|
78
|
+
|
79
|
+
def prefixed_plain_model_url
|
80
|
+
"#{prefix}_#{singular_table_name}"
|
81
|
+
end
|
82
|
+
|
83
|
+
def prefixed_index_helper
|
84
|
+
"#{prefix}_#{index_helper}"
|
85
|
+
end
|
86
|
+
|
87
|
+
def available_views
|
88
|
+
%w(index edit show new _form)
|
89
|
+
end
|
90
|
+
|
91
|
+
def format
|
92
|
+
:html
|
93
|
+
end
|
94
|
+
|
95
|
+
def handler
|
96
|
+
:erb
|
97
|
+
end
|
98
|
+
|
99
|
+
def filename_with_extensions(name)
|
100
|
+
[name, format, handler].compact.join(".")
|
101
|
+
end
|
102
|
+
|
103
|
+
# Add a class collisions name to be checked on class initialization. You
|
104
|
+
# can supply a hash with a :prefix or :suffix to be tested.
|
105
|
+
#
|
106
|
+
# ==== Examples
|
107
|
+
#
|
108
|
+
# check_class_collision suffix: "Decorator"
|
109
|
+
#
|
110
|
+
# If the generator is invoked with class name Admin, it will check for
|
111
|
+
# the presence of "AdminDecorator".
|
112
|
+
#
|
113
|
+
def self.check_class_collision(options={})
|
114
|
+
define_method :check_class_collision do
|
115
|
+
name = if self.respond_to?(:prefixed_controller_class_name) # for ScaffoldBase
|
116
|
+
prefixed_controller_class_name
|
117
|
+
elsif self.respond_to?(:prefixed_controller_class_name) # for ScaffoldBase
|
118
|
+
controller_class_name
|
119
|
+
else
|
120
|
+
class_name
|
121
|
+
end
|
122
|
+
|
123
|
+
class_collisions "#{options[:prefix]}#{name}#{options[:suffix]}"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def attributes_hash
|
128
|
+
return if attributes_names.empty?
|
129
|
+
|
130
|
+
attributes_names.map do |name|
|
131
|
+
if %w(password password_confirmation).include?(name) && attributes.any?(&:password_digest?)
|
132
|
+
"#{name}: 'secret'"
|
133
|
+
else
|
134
|
+
"#{name}: @#{singular_table_name}.#{name}"
|
135
|
+
end
|
136
|
+
end.sort.join(', ')
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
<% if namespaced? -%>
|
2
|
+
require_dependency "<%= namespaced_file_path %>/application_controller"
|
3
|
+
|
4
|
+
<% end -%>
|
5
|
+
<% module_namespacing do -%>
|
6
|
+
class <%= prefixed_controller_class_name %>Controller < ApplicationController
|
7
|
+
before_action :set_<%= singular_table_name %>, only: [:show, :edit, :update, :destroy]
|
8
|
+
|
9
|
+
# GET <%= prefixed_route_url %>
|
10
|
+
def index
|
11
|
+
@<%= plural_table_name %> = <%= orm_class.all(class_name) %>
|
12
|
+
end
|
13
|
+
|
14
|
+
# GET <%= prefixed_route_url %>/1
|
15
|
+
def show
|
16
|
+
end
|
17
|
+
|
18
|
+
# GET <%= prefixed_route_url %>/new
|
19
|
+
def new
|
20
|
+
@<%= singular_table_name %> = <%= orm_class.build(class_name) %>
|
21
|
+
end
|
22
|
+
|
23
|
+
# GET <%= prefixed_route_url %>/1/edit
|
24
|
+
def edit
|
25
|
+
end
|
26
|
+
|
27
|
+
# POST <%= prefixed_route_url %>
|
28
|
+
def create
|
29
|
+
@<%= singular_table_name %> = <%= orm_class.build(class_name, "#{singular_table_name}_params") %>
|
30
|
+
|
31
|
+
if @<%= orm_instance.save %>
|
32
|
+
redirect_to <%= "[:#{prefix}, @#{singular_table_name}]" %>, notice: <%= "'#{human_name} was successfully created.'" %>
|
33
|
+
else
|
34
|
+
render action: 'new'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# PATCH/PUT <%= prefixed_route_url %>/1
|
39
|
+
def update
|
40
|
+
if @<%= orm_instance.update("#{singular_table_name}_params") %>
|
41
|
+
redirect_to <%= "[:#{prefix}, @#{singular_table_name}]" %>, notice: <%= "'#{human_name} was successfully updated.'" %>
|
42
|
+
else
|
43
|
+
render action: 'edit'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# DELETE <%= prefixed_route_url %>/1
|
48
|
+
def destroy
|
49
|
+
@<%= orm_instance.destroy %>
|
50
|
+
redirect_to <%= prefixed_index_helper %>_url, notice: <%= "'#{human_name} was successfully destroyed.'" %>
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
# Use callbacks to share common setup or constraints between actions.
|
55
|
+
def set_<%= singular_table_name %>
|
56
|
+
@<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
|
57
|
+
end
|
58
|
+
|
59
|
+
# Only allow a trusted parameter "white list" through.
|
60
|
+
def <%= "#{singular_table_name}_params" %>
|
61
|
+
<%- if attributes_names.empty? -%>
|
62
|
+
params[<%= ":#{singular_table_name}" %>]
|
63
|
+
<%- else -%>
|
64
|
+
params.require(<%= ":#{singular_table_name}" %>).permit(<%= attributes_names.map { |name| ":#{name}" }.join(', ') %>)
|
65
|
+
<%- end -%>
|
66
|
+
end
|
67
|
+
end
|
68
|
+
<% end -%>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
<% module_namespacing do -%>
|
4
|
+
class <%= prefixed_controller_class_name %>ControllerTest < ActionController::TestCase
|
5
|
+
setup do
|
6
|
+
@<%= singular_table_name %> = <%= table_name %>(:one)
|
7
|
+
end
|
8
|
+
|
9
|
+
test "should get index" do
|
10
|
+
get :index
|
11
|
+
assert_response :success
|
12
|
+
assert_not_nil assigns(:<%= table_name %>)
|
13
|
+
end
|
14
|
+
|
15
|
+
test "should get new" do
|
16
|
+
get :new
|
17
|
+
assert_response :success
|
18
|
+
end
|
19
|
+
|
20
|
+
test "should create <%= singular_table_name %>" do
|
21
|
+
assert_difference('<%= class_name %>.count') do
|
22
|
+
post :create, <%= "#{singular_table_name}: { #{attributes_hash} }" %>
|
23
|
+
end
|
24
|
+
|
25
|
+
assert_redirected_to <%= prefixed_plain_model_url %>_path(assigns(:<%= singular_table_name %>))
|
26
|
+
end
|
27
|
+
|
28
|
+
test "should show <%= singular_table_name %>" do
|
29
|
+
get :show, id: <%= "@#{singular_table_name}" %>
|
30
|
+
assert_response :success
|
31
|
+
end
|
32
|
+
|
33
|
+
test "should get edit" do
|
34
|
+
get :edit, id: <%= "@#{singular_table_name}" %>
|
35
|
+
assert_response :success
|
36
|
+
end
|
37
|
+
|
38
|
+
test "should update <%= singular_table_name %>" do
|
39
|
+
patch :update, id: <%= "@#{singular_table_name}" %>, <%= "#{singular_table_name}: { #{attributes_hash} }" %>
|
40
|
+
assert_redirected_to <%= prefixed_plain_model_url %>_path(assigns(:<%= singular_table_name %>))
|
41
|
+
end
|
42
|
+
|
43
|
+
test "should destroy <%= singular_table_name %>" do
|
44
|
+
assert_difference('<%= class_name %>.count', -1) do
|
45
|
+
delete :destroy, id: <%= "@#{singular_table_name}" %>
|
46
|
+
end
|
47
|
+
|
48
|
+
assert_redirected_to <%= prefixed_index_helper %>_path
|
49
|
+
end
|
50
|
+
end
|
51
|
+
<% end -%>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<%%= form_for(<%= "[:#{prefix}, @#{singular_table_name}]" %>) do |f| %>
|
2
|
+
<%% if @<%= singular_table_name %>.errors.any? %>
|
3
|
+
<div id="error_explanation">
|
4
|
+
<h2><%%= pluralize(@<%= singular_table_name %>.errors.count, "error") %> prohibited this <%= singular_table_name %> from being saved:</h2>
|
5
|
+
|
6
|
+
<ul>
|
7
|
+
<%% @<%= singular_table_name %>.errors.full_messages.each do |msg| %>
|
8
|
+
<li><%%= msg %></li>
|
9
|
+
<%% end %>
|
10
|
+
</ul>
|
11
|
+
</div>
|
12
|
+
<%% end %>
|
13
|
+
|
14
|
+
<% attributes.each do |attribute| -%>
|
15
|
+
<div class="field">
|
16
|
+
<% if attribute.password_digest? -%>
|
17
|
+
<%%= f.label :password %><br>
|
18
|
+
<%%= f.password_field :password %>
|
19
|
+
</div>
|
20
|
+
<div>
|
21
|
+
<%%= f.label :password_confirmation %><br>
|
22
|
+
<%%= f.password_field :password_confirmation %>
|
23
|
+
<% else -%>
|
24
|
+
<% if attribute.reference? -%>
|
25
|
+
<%%= f.label :<%= attribute.column_name %> %><br>
|
26
|
+
<%%= f.<%= attribute.field_type %> :<%= attribute.column_name %> %>
|
27
|
+
<% else -%>
|
28
|
+
<%%= f.label :<%= attribute.name %> %><br>
|
29
|
+
<%%= f.<%= attribute.field_type %> :<%= attribute.name %> %>
|
30
|
+
<% end -%>
|
31
|
+
<% end -%>
|
32
|
+
</div>
|
33
|
+
<% end -%>
|
34
|
+
<div class="actions">
|
35
|
+
<%%= f.submit %>
|
36
|
+
</div>
|
37
|
+
<%% end %>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<h1>Listing <%= plural_table_name %></h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<thead>
|
5
|
+
<tr>
|
6
|
+
<% attributes.reject(&:password_digest?).each do |attribute| -%>
|
7
|
+
<th><%= attribute.human_name %></th>
|
8
|
+
<% end -%>
|
9
|
+
<th></th>
|
10
|
+
<th></th>
|
11
|
+
<th></th>
|
12
|
+
</tr>
|
13
|
+
</thead>
|
14
|
+
|
15
|
+
<tbody>
|
16
|
+
<%% @<%= plural_table_name %>.each do |<%= singular_table_name %>| %>
|
17
|
+
<tr>
|
18
|
+
<% attributes.reject(&:password_digest?).each do |attribute| -%>
|
19
|
+
<td><%%= <%= singular_table_name %>.<%= attribute.name %> %></td>
|
20
|
+
<% end -%>
|
21
|
+
<td><%%= link_to 'Show', <%= "[:#{prefix}, #{singular_table_name}]" %> %></td>
|
22
|
+
<td><%%= link_to 'Edit', edit_<%= prefixed_plain_model_url %>_path(<%= singular_table_name %>) %></td>
|
23
|
+
<td><%%= link_to 'Destroy', <%= "[:#{prefix}, #{singular_table_name}]" %>, method: :delete, data: { confirm: 'Are you sure?' } %></td>
|
24
|
+
</tr>
|
25
|
+
<%% end %>
|
26
|
+
</tbody>
|
27
|
+
</table>
|
28
|
+
|
29
|
+
<br>
|
30
|
+
|
31
|
+
<%%= link_to 'New <%= human_name %>', new_<%= prefixed_plain_model_url %>_path %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<p id="notice"><%%= notice %></p>
|
2
|
+
|
3
|
+
<% attributes.reject(&:password_digest?).each do |attribute| -%>
|
4
|
+
<p>
|
5
|
+
<strong><%= attribute.human_name %>:</strong>
|
6
|
+
<%%= @<%= singular_table_name %>.<%= attribute.name %> %>
|
7
|
+
</p>
|
8
|
+
|
9
|
+
<% end -%>
|
10
|
+
<%%= link_to 'Edit', edit_<%= prefixed_plain_model_url %>_path(@<%= singular_table_name %>) %> |
|
11
|
+
<%%= link_to 'Back', <%= prefixed_index_helper %>_path %>
|
@@ -0,0 +1 @@
|
|
1
|
+
require "rails-admin-scaffold/version"
|
@@ -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,111 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'lib/generators/admin/testing_helper'
|
3
|
+
|
4
|
+
class Admin::Generators::ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
|
5
|
+
destination File.join(Rails.root)
|
6
|
+
tests Admin::Generators::ScaffoldControllerGenerator
|
7
|
+
arguments %w(User name:string age:integer)
|
8
|
+
|
9
|
+
setup :prepare_destination
|
10
|
+
setup :copy_routes
|
11
|
+
|
12
|
+
def test_controller_skeleton_is_created
|
13
|
+
run_generator
|
14
|
+
|
15
|
+
assert_file "app/controllers/admin/users_controller.rb" do |content|
|
16
|
+
assert_match(/class Admin::UsersController < ApplicationController/, content)
|
17
|
+
|
18
|
+
assert_instance_method :index, content do |m|
|
19
|
+
assert_match(/@users = User\.all/, m)
|
20
|
+
end
|
21
|
+
|
22
|
+
assert_instance_method :show, content
|
23
|
+
|
24
|
+
assert_instance_method :new, content do |m|
|
25
|
+
assert_match(/@user = User\.new/, m)
|
26
|
+
end
|
27
|
+
|
28
|
+
assert_instance_method :edit, content
|
29
|
+
|
30
|
+
assert_instance_method :create, content do |m|
|
31
|
+
assert_match(/@user = User\.new\(user_params\)/, m)
|
32
|
+
assert_match(/@user\.save/, m)
|
33
|
+
end
|
34
|
+
|
35
|
+
assert_instance_method :update, content do |m|
|
36
|
+
assert_match(/@user\.update\(user_params\)/, m)
|
37
|
+
end
|
38
|
+
|
39
|
+
assert_instance_method :destroy, content do |m|
|
40
|
+
assert_match(/@user\.destroy/, m)
|
41
|
+
assert_match(/User was successfully destroyed/, m)
|
42
|
+
end
|
43
|
+
|
44
|
+
assert_instance_method :set_user, content do |m|
|
45
|
+
assert_match(/@user = User\.find\(params\[:id\]\)/, m)
|
46
|
+
end
|
47
|
+
|
48
|
+
assert_match(/def user_params/, content)
|
49
|
+
assert_match(/params\.require\(:user\)\.permit\(:name, :age\)/, content)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_dont_use_require_or_permit_if_there_are_no_attributes
|
54
|
+
run_generator ["User"]
|
55
|
+
|
56
|
+
assert_file "app/controllers/admin/users_controller.rb" do |content|
|
57
|
+
assert_match(/def user_params/, content)
|
58
|
+
assert_match(/params\[:user\]/, content)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_helper_are_invoked_with_a_pluralized_name
|
63
|
+
run_generator
|
64
|
+
assert_file "app/helpers/admin/users_helper.rb", /module Admin::UsersHelper/
|
65
|
+
assert_file "test/helpers/admin/users_helper_test.rb", /class Admin::UsersHelperTest < ActionView::TestCase/
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_views_are_generated
|
69
|
+
run_generator
|
70
|
+
|
71
|
+
%w(index edit new show).each do |view|
|
72
|
+
assert_file "app/views/admin/users/#{view}.html.erb"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_functional_tests
|
77
|
+
run_generator ["User", "name:string", "age:integer", "organization:references{polymorphic}"]
|
78
|
+
|
79
|
+
assert_file "test/controllers/admin/users_controller_test.rb" do |content|
|
80
|
+
assert_match(/class Admin::UsersControllerTest < ActionController::TestCase/, content)
|
81
|
+
assert_match(/test "should get index"/, content)
|
82
|
+
assert_match(/post :create, user: \{ age: @user\.age, name: @user\.name, organization_id: @user\.organization_id, organization_type: @user\.organization_type \}/, content)
|
83
|
+
assert_match(/patch :update, id: @user, user: \{ age: @user\.age, name: @user\.name, organization_id: @user\.organization_id, organization_type: @user\.organization_type \}/, content)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_functional_tests_without_attributes
|
88
|
+
run_generator ["User"]
|
89
|
+
|
90
|
+
assert_file "test/controllers/admin/users_controller_test.rb" do |content|
|
91
|
+
assert_match(/class Admin::UsersControllerTest < ActionController::TestCase/, content)
|
92
|
+
assert_match(/test "should get index"/, content)
|
93
|
+
assert_match(/post :create, user: \{ \}/, content)
|
94
|
+
assert_match(/patch :update, id: @user, user: \{ \}/, content)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_skip_helper_if_required
|
99
|
+
run_generator ["User", "name:string", "age:integer", "--no-helper"]
|
100
|
+
assert_no_file "app/helpers/admin/users_helper.rb"
|
101
|
+
assert_no_file "test/helpers/admin/users_helper_test.rb"
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_new_hash_style
|
105
|
+
run_generator
|
106
|
+
assert_file "app/controllers/admin/users_controller.rb" do |content|
|
107
|
+
assert_match(/render action: 'new'/, content)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require_generators :admin => ['scaffold_controller']
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,74 @@
|
|
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! Rails.application.config.generators
|
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
|
+
:admin => ['scaffold_controller']
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
52
|
+
def path_prefix(name)
|
53
|
+
case name
|
54
|
+
when :rails
|
55
|
+
'rails/generators'
|
56
|
+
else
|
57
|
+
'generators'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def require_generators(generator_list)
|
62
|
+
generator_list.each do |name, generators|
|
63
|
+
generators.each do |generator_name|
|
64
|
+
if name.to_s == 'rails' && generator_name.to_s == 'mailer'
|
65
|
+
require File.join(path_prefix(name), generator_name.to_s, "#{generator_name}_generator")
|
66
|
+
else
|
67
|
+
require File.join(path_prefix(name), name.to_s, generator_name.to_s, "#{generator_name}_generator")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
alias :require_generator :require_generators
|
73
|
+
|
74
|
+
require_generators generator_list
|
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rails-admin-scaffold
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kirill Kalachev
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-08-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: railties
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
- - <
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '4.1'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '4.0'
|
30
|
+
- - <
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '4.1'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rails
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '3.1'
|
40
|
+
- - <
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '4.1'
|
43
|
+
type: :development
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '3.1'
|
50
|
+
- - <
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '4.1'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: bundler
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ~>
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.2'
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ~>
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '1.2'
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: rake
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
type: :development
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
description: Rails generator which allows to scaffold admin controllers, views with
|
82
|
+
proper (non-namespaced) models, helpers, tests and routes
|
83
|
+
email:
|
84
|
+
- dhampik@gmail.com
|
85
|
+
executables: []
|
86
|
+
extensions: []
|
87
|
+
extra_rdoc_files: []
|
88
|
+
files:
|
89
|
+
- LICENSE
|
90
|
+
- README.md
|
91
|
+
- lib/rails-admin-scaffold/version.rb
|
92
|
+
- lib/generators/admin/scaffold_controller/templates/tests/test_unit/functional_test.erb
|
93
|
+
- lib/generators/admin/scaffold_controller/templates/controllers/controller.erb
|
94
|
+
- lib/generators/admin/scaffold_controller/templates/views/erb/new.html.erb
|
95
|
+
- lib/generators/admin/scaffold_controller/templates/views/erb/show.html.erb
|
96
|
+
- lib/generators/admin/scaffold_controller/templates/views/erb/edit.html.erb
|
97
|
+
- lib/generators/admin/scaffold_controller/templates/views/erb/index.html.erb
|
98
|
+
- lib/generators/admin/scaffold_controller/templates/views/erb/_form.html.erb
|
99
|
+
- lib/generators/admin/scaffold_controller/scaffold_controller_generator.rb
|
100
|
+
- lib/generators/admin/scaffold_controller/USAGE
|
101
|
+
- lib/rails_admin_scaffold.rb
|
102
|
+
- test/fixtures/routes.rb
|
103
|
+
- test/test_helper.rb
|
104
|
+
- test/lib/generators/admin/scaffold_controller_generator_test.rb
|
105
|
+
- test/lib/generators/admin/testing_helper.rb
|
106
|
+
homepage: http://github.com/dhampik/rails-admin-scaffold
|
107
|
+
licenses:
|
108
|
+
- MIT
|
109
|
+
metadata: {}
|
110
|
+
post_install_message:
|
111
|
+
rdoc_options: []
|
112
|
+
require_paths:
|
113
|
+
- lib
|
114
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 1.3.6
|
124
|
+
requirements: []
|
125
|
+
rubyforge_project: rails-admin-scaffold
|
126
|
+
rubygems_version: 2.0.6
|
127
|
+
signing_key:
|
128
|
+
specification_version: 4
|
129
|
+
summary: Rails admin controllers scaffolding generator
|
130
|
+
test_files:
|
131
|
+
- test/fixtures/routes.rb
|
132
|
+
- test/test_helper.rb
|
133
|
+
- test/lib/generators/admin/scaffold_controller_generator_test.rb
|
134
|
+
- test/lib/generators/admin/testing_helper.rb
|