admin-panel 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +117 -0
- data/LICENSE +21 -0
- data/README.md +55 -0
- data/Rakefile +10 -0
- data/admin-panel.gemspec +29 -0
- data/lib/admin-panel/version.rb +3 -0
- data/lib/generators/admin_panel/install/install_generator.rb +69 -0
- data/lib/generators/admin_panel/install/templates/README +10 -0
- data/lib/generators/admin_panel/install/templates/assets/javascripts/admin.js +1 -0
- data/lib/generators/admin_panel/install/templates/assets/stylesheets/admin.css.scss +1 -0
- data/lib/generators/admin_panel/install/templates/controllers/admin/dashboard_controller.rb +3 -0
- data/lib/generators/admin_panel/install/templates/controllers/admin/passwords_controller.rb +4 -0
- data/lib/generators/admin_panel/install/templates/controllers/admin/sessions_controller.rb +4 -0
- data/lib/generators/admin_panel/install/templates/controllers/concerns/administrable.rb +9 -0
- data/lib/generators/admin_panel/install/templates/helpers/admin_helper.rb +19 -0
- data/lib/generators/admin_panel/install/templates/layouts/admin/_messages.html.erb +8 -0
- data/lib/generators/admin_panel/install/templates/layouts/admin/_navigation.html.erb +20 -0
- data/lib/generators/admin_panel/install/templates/layouts/admin/application.html.erb +22 -0
- data/lib/generators/admin_panel/install/templates/views/admin/dashboard/index.html.erb +1 -0
- data/lib/generators/admin_panel/install/templates/views/admin/passwords/edit.html.erb +17 -0
- data/lib/generators/admin_panel/install/templates/views/admin/passwords/new.html.erb +15 -0
- data/lib/generators/admin_panel/install/templates/views/admin/sessions/new.html.erb +17 -0
- data/lib/generators/admin_panel/scaffold/scaffold_generator.rb +168 -0
- data/lib/generators/admin_panel/scaffold/templates/controllers/controller.rb.erb +69 -0
- data/lib/generators/admin_panel/scaffold/templates/tests/test_unit/functional_test.rb.erb +51 -0
- data/lib/generators/admin_panel/scaffold/templates/views/erb/_form.html.erb.erb +13 -0
- data/lib/generators/admin_panel/scaffold/templates/views/erb/edit.html.erb.erb +12 -0
- data/lib/generators/admin_panel/scaffold/templates/views/erb/index.html.erb.erb +37 -0
- data/lib/generators/admin_panel/scaffold/templates/views/erb/new.html.erb.erb +14 -0
- data/lib/generators/admin_panel/scaffold/templates/views/erb/show.html.erb.erb +22 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/bin/rails +11 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +68 -0
- data/spec/dummy/config/boot.rb +6 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/test.rb +39 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/db/seeds.rb +0 -0
- data/spec/generators/admin_panel/install/install_generator_spec.rb +79 -0
- data/spec/generators/admin_panel/scaffold/scaffold_generator_spec.rb +31 -0
- data/spec/spec_helper.rb +17 -0
- metadata +232 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 66df4e9a3092fddf326c23404ad72b5bab8dedb0
|
4
|
+
data.tar.gz: f6fc832605453bb2cd6adfbae5589313dd9fa162
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ff55ce389b1186867a88e0ea5dcd7855f405c5313a1d69bd78d53a8a3d96db947ce5eae531af1e40982ebe88e4195f68677b9d0159b75ecc5b1fa437fb4f08be
|
7
|
+
data.tar.gz: 7144c2efae1b7517d346965735ca7e75d2794ced6d4f40b10bea177f30a1852fdace4244e2ea4abf2df4e2f32e3163110fce2e4b8894528e5dfab366904fb5fd
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
admin-panel (0.1.0)
|
5
|
+
bootstrap-sass (~> 3.1)
|
6
|
+
devise (~> 3.2)
|
7
|
+
railties (>= 4.0.0)
|
8
|
+
sass-rails (>= 4.0.0)
|
9
|
+
simple_form (>= 3.1.0.rc1)
|
10
|
+
|
11
|
+
GEM
|
12
|
+
remote: https://rubygems.org/
|
13
|
+
specs:
|
14
|
+
actionpack (4.1.1)
|
15
|
+
actionview (= 4.1.1)
|
16
|
+
activesupport (= 4.1.1)
|
17
|
+
rack (~> 1.5.2)
|
18
|
+
rack-test (~> 0.6.2)
|
19
|
+
actionview (4.1.1)
|
20
|
+
activesupport (= 4.1.1)
|
21
|
+
builder (~> 3.1)
|
22
|
+
erubis (~> 2.7.0)
|
23
|
+
activemodel (4.1.1)
|
24
|
+
activesupport (= 4.1.1)
|
25
|
+
builder (~> 3.1)
|
26
|
+
activesupport (4.1.1)
|
27
|
+
i18n (~> 0.6, >= 0.6.9)
|
28
|
+
json (~> 1.7, >= 1.7.7)
|
29
|
+
minitest (~> 5.1)
|
30
|
+
thread_safe (~> 0.1)
|
31
|
+
tzinfo (~> 1.1)
|
32
|
+
ammeter (1.0.0)
|
33
|
+
activesupport (>= 3.0)
|
34
|
+
railties (>= 3.0)
|
35
|
+
rspec-rails (>= 2.2)
|
36
|
+
bcrypt (3.1.7)
|
37
|
+
bootstrap-sass (3.1.1.1)
|
38
|
+
sass (~> 3.2)
|
39
|
+
builder (3.2.2)
|
40
|
+
devise (3.2.4)
|
41
|
+
bcrypt (~> 3.0)
|
42
|
+
orm_adapter (~> 0.1)
|
43
|
+
railties (>= 3.2.6, < 5)
|
44
|
+
thread_safe (~> 0.1)
|
45
|
+
warden (~> 1.2.3)
|
46
|
+
diff-lcs (1.2.5)
|
47
|
+
erubis (2.7.0)
|
48
|
+
hike (1.2.3)
|
49
|
+
i18n (0.6.9)
|
50
|
+
json (1.8.1)
|
51
|
+
minitest (5.3.4)
|
52
|
+
multi_json (1.10.1)
|
53
|
+
orm_adapter (0.5.0)
|
54
|
+
rack (1.5.2)
|
55
|
+
rack-test (0.6.2)
|
56
|
+
rack (>= 1.0)
|
57
|
+
railties (4.1.1)
|
58
|
+
actionpack (= 4.1.1)
|
59
|
+
activesupport (= 4.1.1)
|
60
|
+
rake (>= 0.8.7)
|
61
|
+
thor (>= 0.18.1, < 2.0)
|
62
|
+
rake (10.3.2)
|
63
|
+
rspec (3.0.0)
|
64
|
+
rspec-core (~> 3.0.0)
|
65
|
+
rspec-expectations (~> 3.0.0)
|
66
|
+
rspec-mocks (~> 3.0.0)
|
67
|
+
rspec-core (3.0.1)
|
68
|
+
rspec-support (~> 3.0.0)
|
69
|
+
rspec-expectations (3.0.1)
|
70
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
71
|
+
rspec-support (~> 3.0.0)
|
72
|
+
rspec-mocks (3.0.1)
|
73
|
+
rspec-support (~> 3.0.0)
|
74
|
+
rspec-rails (3.0.1)
|
75
|
+
actionpack (>= 3.0)
|
76
|
+
activesupport (>= 3.0)
|
77
|
+
railties (>= 3.0)
|
78
|
+
rspec-core (~> 3.0.0)
|
79
|
+
rspec-expectations (~> 3.0.0)
|
80
|
+
rspec-mocks (~> 3.0.0)
|
81
|
+
rspec-support (~> 3.0.0)
|
82
|
+
rspec-support (3.0.0)
|
83
|
+
sass (3.2.19)
|
84
|
+
sass-rails (4.0.3)
|
85
|
+
railties (>= 4.0.0, < 5.0)
|
86
|
+
sass (~> 3.2.0)
|
87
|
+
sprockets (~> 2.8, <= 2.11.0)
|
88
|
+
sprockets-rails (~> 2.0)
|
89
|
+
simple_form (3.1.0.rc1)
|
90
|
+
actionpack (~> 4.0)
|
91
|
+
activemodel (~> 4.0)
|
92
|
+
sprockets (2.11.0)
|
93
|
+
hike (~> 1.2)
|
94
|
+
multi_json (~> 1.0)
|
95
|
+
rack (~> 1.0)
|
96
|
+
tilt (~> 1.1, != 1.3.0)
|
97
|
+
sprockets-rails (2.1.3)
|
98
|
+
actionpack (>= 3.0)
|
99
|
+
activesupport (>= 3.0)
|
100
|
+
sprockets (~> 2.8)
|
101
|
+
thor (0.19.1)
|
102
|
+
thread_safe (0.3.4)
|
103
|
+
tilt (1.4.1)
|
104
|
+
tzinfo (1.2.1)
|
105
|
+
thread_safe (~> 0.1)
|
106
|
+
warden (1.2.3)
|
107
|
+
rack (>= 1.0)
|
108
|
+
|
109
|
+
PLATFORMS
|
110
|
+
ruby
|
111
|
+
|
112
|
+
DEPENDENCIES
|
113
|
+
admin-panel!
|
114
|
+
ammeter (~> 1.0)
|
115
|
+
bundler (~> 1.5)
|
116
|
+
rake (~> 10.0)
|
117
|
+
rspec (~> 3.0)
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2014 Michał Matyas
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all 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,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
Admin Panel
|
2
|
+
===========
|
3
|
+
|
4
|
+
This gem has been created as a recruitment task I was given. It's a set of generators to create administration panel for your website.
|
5
|
+
|
6
|
+
Installation
|
7
|
+
------------
|
8
|
+
|
9
|
+
Start with adding these gems to your Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'admin-panel', '~> 0.1.0'
|
13
|
+
gem 'devise', '~> 3.2'
|
14
|
+
gem 'simple_form', '3.1.0.rc1'
|
15
|
+
gem 'bootstrap-sass', '~> 3.1'
|
16
|
+
```
|
17
|
+
|
18
|
+
Then do @bundle install@ and run the installer:
|
19
|
+
|
20
|
+
```bash
|
21
|
+
$ rails generate admin_panel:install
|
22
|
+
```
|
23
|
+
|
24
|
+
Using the scaffolder
|
25
|
+
--------------------
|
26
|
+
|
27
|
+
The scaffolder has basically the same syntax as the Rails one, except there's currently no support for custom namespace.
|
28
|
+
|
29
|
+
```bash
|
30
|
+
$ rails generate admin_panel:scaffold NAME [field:type field:type ...]
|
31
|
+
```
|
32
|
+
|
33
|
+
Running tests
|
34
|
+
-------------
|
35
|
+
|
36
|
+
Tests can be run using @rake spec@. They are written using rspec and [ammeter](https://github.com/alexrothenberg/ammeter)
|
37
|
+
|
38
|
+
Thanks
|
39
|
+
------
|
40
|
+
|
41
|
+
This gem was based mostly on two different pieces of software: [bootstrap-generators](https://github.com/decioferreira/bootstrap-generators) and [rails-admin-scaffold](https://github.com/dhampik/rails-admin-scaffold)
|
42
|
+
|
43
|
+
TODO
|
44
|
+
----
|
45
|
+
|
46
|
+
Currently this gem is pretty much one-evening project, I'm not sure if I'll continue it's development past this point.
|
47
|
+
|
48
|
+
Things that'd be nice to have:
|
49
|
+
|
50
|
+
- support for anything more than Active Record
|
51
|
+
- support for anything more than Erb (haml, slim)
|
52
|
+
- namespace change support and more configuration options
|
53
|
+
- kaminari/will_paginate support
|
54
|
+
- I liked the idea of copying the files to your project during install at first but now it just seems silly; I should probably rewrite everything from scratch to work more similarly to Devise, including the ability to extend default controllers where necessary
|
55
|
+
- I was also supposed to add Carrierwave support too but ran out of time
|
data/Rakefile
ADDED
data/admin-panel.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
require 'admin-panel/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = 'admin-panel'
|
6
|
+
spec.version = AdminPanel::VERSION
|
7
|
+
|
8
|
+
spec.authors = ['Michał Matyas']
|
9
|
+
spec.email = ['michal@higher.lv']
|
10
|
+
spec.summary = 'Generates Twitter Bootstrap based admin panel with scaffolder'
|
11
|
+
spec.description = 'Generates Twitter Bootstrap based admin panel with scaffolder. Project is quite opinionated, requires Rails 4, SASS, SimpleForm and Devise.'
|
12
|
+
spec.homepage = 'https://github.com/d4rky-pl/admin-panel'
|
13
|
+
spec.license = 'MIT'
|
14
|
+
|
15
|
+
spec.files = `git ls-files`.split($/)
|
16
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
|
+
spec.require_paths = ["lib"]
|
18
|
+
|
19
|
+
spec.add_development_dependency 'bundler', '~> 1.5'
|
20
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
21
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
22
|
+
spec.add_development_dependency 'ammeter', '~> 1.0'
|
23
|
+
|
24
|
+
spec.add_runtime_dependency 'railties', '>= 4.0.0'
|
25
|
+
spec.add_runtime_dependency 'sass-rails', '>= 4.0.0'
|
26
|
+
spec.add_runtime_dependency 'bootstrap-sass', '~> 3.1'
|
27
|
+
spec.add_runtime_dependency 'simple_form', '>= 3.1.0.rc1'
|
28
|
+
spec.add_runtime_dependency 'devise', '~> 3.2'
|
29
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module AdminPanel
|
4
|
+
module Generators
|
5
|
+
class InstallGenerator < ::Rails::Generators::Base
|
6
|
+
desc 'Generate basic admin panel with authentication namespaced as Admin'
|
7
|
+
source_root ::File.expand_path('../templates', __FILE__)
|
8
|
+
|
9
|
+
class_option :template_engine
|
10
|
+
|
11
|
+
def install_devise
|
12
|
+
invoke 'devise:install'
|
13
|
+
end
|
14
|
+
|
15
|
+
def install_simple_form
|
16
|
+
invoke 'simple_form:install', [], ['--bootstrap']
|
17
|
+
end
|
18
|
+
|
19
|
+
attr_reader :app_name
|
20
|
+
|
21
|
+
def copy_layout
|
22
|
+
@app_name = ::Rails.application.class.to_s.split("::").first.humanize
|
23
|
+
extension = "html.#{options[:template_engine]}"
|
24
|
+
|
25
|
+
template "layouts/admin/application.#{extension}", "app/views/layouts/admin/application.#{extension}"
|
26
|
+
[ '_messages', '_navigation'].each do |file|
|
27
|
+
filename = "#{file}.#{extension}"
|
28
|
+
copy_file "layouts/admin/#{filename}", "app/views/layouts/admin/#{filename}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def copy_assets
|
33
|
+
directory 'assets', 'app/assets'
|
34
|
+
end
|
35
|
+
|
36
|
+
def copy_helpers
|
37
|
+
directory 'helpers', 'app/helpers'
|
38
|
+
end
|
39
|
+
|
40
|
+
def copy_scaffold
|
41
|
+
directory 'controllers', 'app/controllers'
|
42
|
+
directory 'views', 'app/views'
|
43
|
+
end
|
44
|
+
|
45
|
+
def create_admin_model
|
46
|
+
invoke 'active_record:devise', ['admin'], ['--routes', false]
|
47
|
+
append_to_file 'db/seeds.rb', %Q(
|
48
|
+
Admin.create!({ email: 'admin@example.com', password: 'administrator' })
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
def create_routes
|
53
|
+
route %Q(
|
54
|
+
devise_for :admin,
|
55
|
+
:only => [:sessions, :passwords],
|
56
|
+
:controllers => { :sessions => 'admin/sessions', :passwords => 'admin/passwords' }
|
57
|
+
|
58
|
+
namespace :admin do
|
59
|
+
get '/', to: 'dashboard#index', as: :dashboard
|
60
|
+
end
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
def show_install_message
|
65
|
+
readme "README"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
===============================================================================
|
2
|
+
|
3
|
+
Remember to invoke these commands after the installation process is done:
|
4
|
+
|
5
|
+
$ rake db:migrate
|
6
|
+
$ rake db:seed
|
7
|
+
|
8
|
+
Your default account is set to admin@example.com , password: administrator
|
9
|
+
|
10
|
+
===============================================================================
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require 'bootstrap'
|
@@ -0,0 +1 @@
|
|
1
|
+
@import 'bootstrap';
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module AdminHelper
|
2
|
+
def admin_pages
|
3
|
+
# TODO: something more elegant
|
4
|
+
non_scaffold_pages = %w(dashboard sessions passwords)
|
5
|
+
|
6
|
+
Dir.glob(Rails.root.join('app', 'controllers', 'admin', '*.rb')).map do |path|
|
7
|
+
filename = File.basename(path)
|
8
|
+
resource_name = filename.sub(/_controller\.rb$/, '')
|
9
|
+
|
10
|
+
unless non_scaffold_pages.include? resource_name
|
11
|
+
{
|
12
|
+
name: resource_name.humanize,
|
13
|
+
controller: "#{resource_name}",
|
14
|
+
url: self.send("admin_#{resource_name}_path")
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end.compact
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<% flash.each do |name, msg| %>
|
2
|
+
<% if msg.is_a?(String) %>
|
3
|
+
<div class="alert alert-<%= name.to_s == 'notice' ? 'success' : 'danger' %>">
|
4
|
+
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
5
|
+
<%= content_tag :div, msg, :id => "flash_#{name}" %>
|
6
|
+
</div>
|
7
|
+
<% end %>
|
8
|
+
<% end %>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<nav class="navbar navbar-default" role="navigation">
|
2
|
+
<div class="container-fluid">
|
3
|
+
<div class="navbar-header">
|
4
|
+
<a class="navbar-brand" href="<%= admin_dashboard_path %>">App name</a>
|
5
|
+
</div>
|
6
|
+
|
7
|
+
<% if admin_signed_in? %>
|
8
|
+
<ul class="nav navbar-nav">
|
9
|
+
<% admin_pages.each do |page| %>
|
10
|
+
<li class="<%= controller_name == page[:controller] ? 'active' : '' %>">
|
11
|
+
<a href="<%= page[:url] %>"><%= page[:name] %></a>
|
12
|
+
</li>
|
13
|
+
<% end %>
|
14
|
+
</ul>
|
15
|
+
<ul class="nav navbar-nav navbar-right">
|
16
|
+
<li><%= link_to 'Sign out', destroy_admin_session_path, method: :delete %></li>
|
17
|
+
</ul>
|
18
|
+
<% end %>
|
19
|
+
</div>
|
20
|
+
</nav>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
5
|
+
<title><%%= content_for?(:title) ? yield(:title) : "<%= app_name.underscore.titleize %>" %></title>
|
6
|
+
<meta name="description" content="<%%= content_for?(:description) ? yield(:description) : "<%= app_name.underscore.titleize %>" %>">
|
7
|
+
<%%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
|
8
|
+
<%%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
|
9
|
+
<%%= csrf_meta_tags %>
|
10
|
+
</head>
|
11
|
+
<body>
|
12
|
+
<header>
|
13
|
+
<%%= render partial: 'layouts/admin/navigation' %>
|
14
|
+
</header>
|
15
|
+
<main role="main">
|
16
|
+
<div class="container">
|
17
|
+
<%%= render partial: 'layouts/admin/messages' %>
|
18
|
+
<%%= yield %>
|
19
|
+
</div>
|
20
|
+
</main>
|
21
|
+
</body>
|
22
|
+
</html>
|