argon_admin 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +42 -0
  3. data/lib/argon_admin.rb +7 -0
  4. data/lib/argon_admin/engine.rb +8 -0
  5. data/lib/argon_admin/version.rb +3 -0
  6. data/lib/generators/argon_admin_generator.rb +83 -0
  7. data/lib/tasks/argon_admin_tasks.rake +15 -0
  8. data/lib/templates/assets/images/admin/blue.png +0 -0
  9. data/lib/templates/assets/images/admin/favicon.png +0 -0
  10. data/lib/templates/assets/images/admin/team-1-800x800.jpg +0 -0
  11. data/lib/templates/assets/images/admin/white.png +0 -0
  12. data/lib/templates/assets/javascripts/admin.js +5 -0
  13. data/lib/templates/assets/stylesheets/admin.scss +4 -0
  14. data/lib/templates/controllers/base_admin_controller.rb +4 -0
  15. data/lib/templates/controllers/pages_controller.rb +4 -0
  16. data/lib/templates/controllers/users_controller.rb +44 -0
  17. data/lib/templates/layouts/admin.html.erb +26 -0
  18. data/lib/templates/layouts/devise.html.erb +26 -0
  19. data/lib/templates/views/kaminari/_gap.html.erb +1 -0
  20. data/lib/templates/views/kaminari/_next_page.html.erb +8 -0
  21. data/lib/templates/views/kaminari/_page.html.erb +3 -0
  22. data/lib/templates/views/kaminari/_paginator.html.erb +17 -0
  23. data/lib/templates/views/kaminari/_prev_page.html.erb +8 -0
  24. data/lib/templates/views/pages/dashboard.html.erb +228 -0
  25. data/lib/templates/views/sessions/new.html.erb +18 -0
  26. data/lib/templates/views/shared/_alert.html.erb +8 -0
  27. data/lib/templates/views/shared/_footer.html.erb +25 -0
  28. data/lib/templates/views/shared/_header.html.erb +7 -0
  29. data/lib/templates/views/shared/_navbar.html.erb +43 -0
  30. data/lib/templates/views/shared/_sidebar.html.erb +103 -0
  31. data/lib/templates/views/users/_user-form.html.erb +11 -0
  32. data/lib/templates/views/users/_user.html.erb +9 -0
  33. data/lib/templates/views/users/edit.html.erb +26 -0
  34. data/lib/templates/views/users/index.html.erb +42 -0
  35. data/lib/templates/views/users/new.html.erb +23 -0
  36. data/vendor/assets/fonts/nucleo-icons.eot +0 -0
  37. data/vendor/assets/fonts/nucleo-icons.svg +312 -0
  38. data/vendor/assets/fonts/nucleo-icons.ttf +0 -0
  39. data/vendor/assets/fonts/nucleo-icons.woff +0 -0
  40. data/vendor/assets/fonts/nucleo-icons.woff2 +0 -0
  41. data/vendor/assets/javascripts/argon-admin.js +51 -0
  42. data/vendor/assets/stylesheets/argon-admin.css +17 -0
  43. data/vendor/assets/stylesheets/nucleo.css +572 -0
  44. metadata +200 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c891dd162a61bb9d0299259487d9e036afb9ef0761d035754b1d335a5a28a236
4
+ data.tar.gz: c110fe882dd220994e113ca3ad6c39bd14044eca9e25e4d975d74cfcf47ae740
5
+ SHA512:
6
+ metadata.gz: 84dbafd0b95268146559cf6155c01a2ed9fc146ffa0438a9d72124fc975b933acc6bac9c1d5431b1aab86aff4525bff9b24677de5258c2fbaf73180f7b63432b
7
+ data.tar.gz: b230a0608f55b2e54de1e5eb2fc93f872f1ef8af690c943796f87555a370b998ccbb8b109e56ba461f4e00153fca24559b5482f35212009ffc82e6d95ee5a00f
@@ -0,0 +1,42 @@
1
+ # ArgonAdmin
2
+
3
+ Simple admin panel generator with the [Argon Dashboard theme](https://github.com/creativetimofficial/argon-dashboard) for your new project.
4
+
5
+ ![](https://i.ibb.co/DGHc4Q0/argon-dashboard.jpg)
6
+
7
+ Main features included by default:
8
+
9
+ - Authentication with [Devise](https://github.com/plataformatec/devise).
10
+ - [Argon Dashboard theme](https://github.com/creativetimofficial/argon-dashboard) theme included for the admin panel.
11
+ - ERB template engine.
12
+ - Pagination with [Kaminari](https://github.com/kaminari/kaminari)
13
+ - [Simple form](https://github.com/plataformatec/simple_form) integration
14
+ - Сustomized flash messages
15
+
16
+ ## Installation
17
+
18
+ Add this line to your application's Gemfile:
19
+
20
+ ```ruby
21
+ gem 'argon_admin'
22
+ ```
23
+ And then execute:
24
+
25
+ $ bundle i
26
+
27
+ Next, you need to run the generator:
28
+
29
+ $ rails argon_admin:install
30
+
31
+ Generate devise user:
32
+
33
+ $ rails db:migrate
34
+ $ rails db:seed
35
+
36
+ And you're ready to go. Test if all it's ok by starting a server and check it with rails s.
37
+
38
+ Default admin user with email admin@example.com and password 123456789
39
+
40
+ ## Contributing
41
+
42
+ Bug reports and pull requests are welcome on GitHub at https://github.com/zelen-sv/argon_admin.
@@ -0,0 +1,7 @@
1
+ require "argon_admin/version"
2
+
3
+ module ArgonAdmin
4
+ module Rails
5
+ require "argon_admin/engine"
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ class Engine < ::Rails::Engine
2
+ require "jquery-rails"
3
+ require "bootstrap"
4
+ require "font-awesome-rails"
5
+ require "devise"
6
+ require "simple_form"
7
+ require "kaminari"
8
+ end
@@ -0,0 +1,3 @@
1
+ module ArgonAdmin
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,83 @@
1
+ class ArgonAdminGenerator < Rails::Generators::Base
2
+ include Singleton
3
+ source_root File.expand_path("../templates", __dir__)
4
+
5
+ ROUTES_TEXT = <<-RUBY
6
+ namespace :admin do
7
+ root 'pages#dashboard'
8
+ resources :users
9
+ end
10
+ RUBY
11
+
12
+ HELPER_TEXT = <<-RUBY
13
+ def flash_class(level)
14
+ case level.to_sym
15
+ when :notice then "alert alert-primary"
16
+ when :success then "alert alert-success"
17
+ when :error then "alert alert-danger"
18
+ when :alert then "alert alert-warning"
19
+ end
20
+ end
21
+ RUBY
22
+
23
+ ASSETS_TEXT = <<-RUBY
24
+ Rails.application.config.assets.precompile += %w( admin.js admin.scss )
25
+ Rails.application.config.assets.precompile << /\.(?:svg|eot|woff|ttf)\z/
26
+ RUBY
27
+
28
+ def generate_assets
29
+ copy_file "assets/stylesheets/admin.scss", "app/assets/stylesheets/admin.scss"
30
+ copy_file "assets/javascripts/admin.js", "app/assets/javascripts/admin.js"
31
+ directory "assets/images/admin", "app/assets/images/admin"
32
+ append_to_file 'config/initializers/assets.rb' do
33
+ ASSETS_TEXT
34
+ end
35
+ end
36
+
37
+ def generate_views
38
+ directory "layouts", "app/views/layouts"
39
+ directory "views/pages", "app/views/admin/pages"
40
+ directory "views/users", "app/views/admin/users"
41
+ directory "views/shared", "app/views/admin/shared"
42
+ directory "views/sessions", "app/views/devise/sessions"
43
+ directory "views/kaminari", "app/views/kaminari"
44
+ end
45
+
46
+ def generate_admin_data
47
+ insert_into_file "config/routes.rb", after: "Rails.application.routes.draw do\n" do
48
+ ROUTES_TEXT
49
+ end
50
+ insert_into_file "app/helpers/application_helper.rb", after: "module ApplicationHelper\n" do
51
+ HELPER_TEXT
52
+ end
53
+ directory "controllers", "app/controllers/admin/"
54
+ end
55
+
56
+ def generate_devise_data
57
+ add_secret_key
58
+ update_development_mailer_config
59
+ update_seeds_file
60
+ end
61
+
62
+ private
63
+
64
+ def add_secret_key
65
+ secret = SecureRandom.hex(64)
66
+ insert_into_file "config/initializers/devise.rb", after: "Devise.setup do |config|\n" do
67
+ "config.secret_key = '#{secret}'"
68
+ end
69
+ gsub_file('config/initializers/devise.rb', "config.sign_out_via = :delete", "config.sign_out_via = :get")
70
+ end
71
+
72
+ def update_development_mailer_config
73
+ insert_into_file "config/environments/development.rb", after: "Rails.application.configure do\n" do
74
+ "config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }\n"
75
+ end
76
+ end
77
+
78
+ def update_seeds_file
79
+ append_to_file 'db/seeds.rb' do
80
+ "User.create!(email: 'admin@example.com', password: '123456789', password_confirmation: '123456789')"
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,15 @@
1
+ require 'generators/argon_admin_generator'
2
+
3
+ namespace :argon_admin do
4
+ desc 'Generate admin panel'
5
+ task :install do
6
+ generator = ArgonAdminGenerator.instance
7
+ generator.generate_assets
8
+ generator.generate_views
9
+ generator.generate_admin_data
10
+ system "rails generate simple_form:install --bootstrap"
11
+ system "rails generate devise:install"
12
+ generator.generate_devise_data
13
+ system "rails generate devise user"
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ //= require jquery
2
+ //= require jquery_ujs
3
+ //= require popper
4
+ //= require bootstrap-sprockets
5
+ //= require argon-admin
@@ -0,0 +1,4 @@
1
+ @import "bootstrap";
2
+ @import "nucleo";
3
+ @import "font-awesome";
4
+ @import "argon-admin";
@@ -0,0 +1,4 @@
1
+ class Admin::BaseAdminController < ApplicationController
2
+ layout 'admin'
3
+ before_action :authenticate_user!
4
+ end
@@ -0,0 +1,4 @@
1
+ class Admin::PagesController < Admin::BaseAdminController
2
+ def dashboard
3
+ end
4
+ end
@@ -0,0 +1,44 @@
1
+ class Admin::UsersController < Admin::BaseAdminController
2
+ before_action :set_user, only: [:edit, :update, :destroy]
3
+
4
+ def new
5
+ @user = User.new
6
+ end
7
+
8
+ def index
9
+ @users = User.order(created_at: :desc).page(params[:page]).per(6)
10
+ end
11
+
12
+ def edit
13
+ end
14
+
15
+ def update
16
+ return redirect_to admin_users_path if @user.update(user_params)
17
+ flash.now[:error] = 'Failed to update user!'
18
+ render 'edit'
19
+ end
20
+
21
+ def create
22
+ @user = User.new(user_params)
23
+
24
+ return redirect_to admin_users_path if @user.save
25
+ flash.now[:error] = 'Failed to create user!'
26
+ render 'new'
27
+ end
28
+
29
+ def destroy
30
+ @user.destroy
31
+ flash[:error] = 'User destroyed'
32
+ redirect_to admin_users_path
33
+ end
34
+
35
+ private
36
+
37
+ def set_user
38
+ @user = User.find(params[:id])
39
+ end
40
+
41
+ def user_params
42
+ params.require(:user).permit(:email, :password, :password_confirmation)
43
+ end
44
+ end
@@ -0,0 +1,26 @@
1
+ <!doctype html>
2
+ <html class="no-js h-100">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6
+ <title>Admin panel</title>
7
+
8
+ <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700" rel="stylesheet">
9
+
10
+ <%= csrf_meta_tags %>
11
+ <%= stylesheet_link_tag 'admin', media: 'all', 'data-turbolinks-track': 'reload' %>
12
+ </head>
13
+ <body>
14
+ <%= render 'admin/shared/sidebar' %>
15
+ <div class="main-content">
16
+ <%= render 'admin/shared/navbar' %>
17
+ <%= render 'admin/shared/header' %>
18
+ <div class="container-fluid mt--7">
19
+ <%= render 'admin/shared/alert' %>
20
+ <%= yield %>
21
+ <%= render 'admin/shared/footer' %>
22
+ </div>
23
+ </div>
24
+ </body>
25
+ <%= javascript_include_tag 'admin' %>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!doctype html>
2
+ <html class="no-js h-100">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6
+ <title>Admin panel | Login</title>
7
+
8
+ <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700" rel="stylesheet">
9
+
10
+ <%= csrf_meta_tags %>
11
+ <%= stylesheet_link_tag 'admin', media: 'all', 'data-turbolinks-track': 'reload' %>
12
+ </head>
13
+ <body class="bg-default">
14
+ <div class="main-content">
15
+ <div class="container mt-4 pb-5">
16
+ <div class="row justify-content-center">
17
+ <div class="col-lg-5 col-md-7">
18
+ <%= yield %>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </body>
24
+ <%= javascript_include_tag 'admin' %>
25
+ </html>
26
+
@@ -0,0 +1 @@
1
+ <span class="page-item gap"><%= "&hellip;".html_safe %></span>
@@ -0,0 +1,8 @@
1
+ <% unless current_page.last? %>
2
+ <span class="page-item">
3
+ <%= link_to url, rel: 'next', remote: remote, class: "page-link" do %>
4
+ <i class="fa fa-angle-right"></i>
5
+ <span class="sr-only">Next</span>
6
+ <% end %>
7
+ </span>
8
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <li class="page-item<%= ' active' if page.current? %>">
2
+ <%= link_to page, url, {remote: remote, rel: page.rel, class: "page-link"} %>
3
+ </li>
@@ -0,0 +1,17 @@
1
+ <%= paginator.render do -%>
2
+ <nav>
3
+ <ul class="pagination justify-content-end" role="navigation" aria-label="pager">
4
+ <%= prev_page_tag unless current_page.first? %>
5
+ <% each_page do |page| -%>
6
+ <% if page.display_tag? -%>
7
+ <%= page_tag page %>
8
+ <% elsif !page.was_truncated? -%>
9
+ <%= gap_tag %>
10
+ <% end -%>
11
+ <% end -%>
12
+ <% unless current_page.out_of_range? %>
13
+ <%= next_page_tag unless current_page.last? %>
14
+ <% end %>
15
+ </ul>
16
+ </nav>
17
+ <% end -%>
@@ -0,0 +1,8 @@
1
+ <% unless current_page.first? %>
2
+ <span class="page-item">
3
+ <%= link_to url, rel: 'prev', remote: remote, class: "page-link" do %>
4
+ <i class="fa fa-angle-left"></i>
5
+ <span class="sr-only">Previous</span>
6
+ <% end %>
7
+ </span>
8
+ <% end %>
@@ -0,0 +1,228 @@
1
+ <% content_for :header_body do %>
2
+ <div class="container">
3
+ <div class="col-lg-7 col-md-10">
4
+ <h1 class="display-2 text-white">Hello Admin</h1>
5
+ <p class="text-white mt-0 mb-5">This is your dashboard page.</p>
6
+ </div>
7
+ </div>
8
+ <% end %>
9
+
10
+ <div class="row">
11
+ <div class="col">
12
+ <div class="card shadow">
13
+ <div class="card-header border-0">
14
+ <h3 class="mb-0">Example projects table</h3>
15
+ </div>
16
+ <div class="table-responsive">
17
+ <table class="table align-items-center table-flush">
18
+ <thead class="thead-light">
19
+ <tr>
20
+ <th scope="col">Project</th>
21
+ <th scope="col">Budget</th>
22
+ <th scope="col">Status</th>
23
+ <th scope="col">Completion</th>
24
+ <th scope="col">Actions</th>
25
+ </tr>
26
+ </thead>
27
+ <tbody>
28
+ <tr>
29
+ <th scope="row">
30
+ <div class="media align-items-center">
31
+ <div class="media-body">
32
+ <span class="mb-0 text-sm">Project №1</span>
33
+ </div>
34
+ </div>
35
+ </th>
36
+ <td>
37
+ $2,500 USD
38
+ </td>
39
+ <td>
40
+ <span class="badge badge-dot mr-4">
41
+ <i class="bg-warning"></i> pending
42
+ </span>
43
+ </td>
44
+ <td>
45
+ <div class="d-flex align-items-center">
46
+ <span class="mr-2">60%</span>
47
+ <div>
48
+ <div class="progress">
49
+ <div class="progress-bar bg-warning" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;"></div>
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </td>
54
+ <td class="text-right">
55
+ <div class="dropdown">
56
+ <a class="btn btn-sm btn-icon-only text-light" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
57
+ <i class="fa fa-ellipsis-v"></i>
58
+ </a>
59
+ <div class="dropdown-menu dropdown-menu-right dropdown-menu-arrow">
60
+ <a class="dropdown-item" href="#">Action</a>
61
+ <a class="dropdown-item" href="#">Another action</a>
62
+ <a class="dropdown-item" href="#">Something else here</a>
63
+ </div>
64
+ </div>
65
+ </td>
66
+ </tr>
67
+ <tr>
68
+ <th scope="row">
69
+ <div class="media align-items-center">
70
+ <div class="media-body">
71
+ <span class="mb-0 text-sm">Project №2</span>
72
+ </div>
73
+ </div>
74
+ </th>
75
+ <td>
76
+ $1,800 USD
77
+ </td>
78
+ <td>
79
+ <span class="badge badge-dot">
80
+ <i class="bg-success"></i> completed
81
+ </span>
82
+ </td>
83
+ <td>
84
+ <div class="d-flex align-items-center">
85
+ <span class="mr-2">100%</span>
86
+ <div>
87
+ <div class="progress">
88
+ <div class="progress-bar bg-success" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%;"></div>
89
+ </div>
90
+ </div>
91
+ </div>
92
+ </td>
93
+ <td class="text-right">
94
+ <div class="dropdown">
95
+ <a class="btn btn-sm btn-icon-only text-light" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
96
+ <i class="fa fa-ellipsis-v"></i>
97
+ </a>
98
+ <div class="dropdown-menu dropdown-menu-right dropdown-menu-arrow">
99
+ <a class="dropdown-item" href="#">Action</a>
100
+ <a class="dropdown-item" href="#">Another action</a>
101
+ <a class="dropdown-item" href="#">Something else here</a>
102
+ </div>
103
+ </div>
104
+ </td>
105
+ </tr>
106
+ <tr>
107
+ <th scope="row">
108
+ <div class="media align-items-center">
109
+ <div class="media-body">
110
+ <span class="mb-0 text-sm">Project №3</span>
111
+ </div>
112
+ </div>
113
+ </th>
114
+ <td>
115
+ $3,150 USD
116
+ </td>
117
+ <td>
118
+ <span class="badge badge-dot mr-4">
119
+ <i class="bg-danger"></i> delayed
120
+ </span>
121
+ </td>
122
+ <td>
123
+ <div class="d-flex align-items-center">
124
+ <span class="mr-2">73%</span>
125
+ <div>
126
+ <div class="progress">
127
+ <div class="progress-bar bg-danger" role="progressbar" aria-valuenow="73" aria-valuemin="0" aria-valuemax="100" style="width: 73%;"></div>
128
+ </div>
129
+ </div>
130
+ </div>
131
+ </td>
132
+ <td class="text-right">
133
+ <div class="dropdown">
134
+ <a class="btn btn-sm btn-icon-only text-light" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
135
+ <i class="fa fa-ellipsis-v"></i>
136
+ </a>
137
+ <div class="dropdown-menu dropdown-menu-right dropdown-menu-arrow">
138
+ <a class="dropdown-item" href="#">Action</a>
139
+ <a class="dropdown-item" href="#">Another action</a>
140
+ <a class="dropdown-item" href="#">Something else here</a>
141
+ </div>
142
+ </div>
143
+ </td>
144
+ </tr>
145
+ <tr>
146
+ <th scope="row">
147
+ <div class="media align-items-center">
148
+ <div class="media-body">
149
+ <span class="mb-0 text-sm">Project №4</span>
150
+ </div>
151
+ </div>
152
+ </th>
153
+ <td>
154
+ $4,400 USD
155
+ </td>
156
+ <td>
157
+ <span class="badge badge-dot">
158
+ <i class="bg-info"></i> on schedule
159
+ </span>
160
+ </td>
161
+ <td>
162
+ <div class="d-flex align-items-center">
163
+ <span class="mr-2">90%</span>
164
+ <div>
165
+ <div class="progress">
166
+ <div class="progress-bar bg-info" role="progressbar" aria-valuenow="90" aria-valuemin="0" aria-valuemax="100" style="width: 90%;"></div>
167
+ </div>
168
+ </div>
169
+ </div>
170
+ </td>
171
+ <td class="text-right">
172
+ <div class="dropdown">
173
+ <a class="btn btn-sm btn-icon-only text-light" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
174
+ <i class="fa fa-ellipsis-v"></i>
175
+ </a>
176
+ <div class="dropdown-menu dropdown-menu-right dropdown-menu-arrow">
177
+ <a class="dropdown-item" href="#">Action</a>
178
+ <a class="dropdown-item" href="#">Another action</a>
179
+ <a class="dropdown-item" href="#">Something else here</a>
180
+ </div>
181
+ </div>
182
+ </td>
183
+ </tr>
184
+ <tr>
185
+ <th scope="row">
186
+ <div class="media align-items-center">
187
+ <div class="media-body">
188
+ <span class="mb-0 text-sm">Project №5</span>
189
+ </div>
190
+ </div>
191
+ </th>
192
+ <td>
193
+ $2,200 USD
194
+ </td>
195
+ <td>
196
+ <span class="badge badge-dot mr-4">
197
+ <i class="bg-success"></i> completed
198
+ </span>
199
+ </td>
200
+ <td>
201
+ <div class="d-flex align-items-center">
202
+ <span class="mr-2">100%</span>
203
+ <div>
204
+ <div class="progress">
205
+ <div class="progress-bar bg-success" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%;"></div>
206
+ </div>
207
+ </div>
208
+ </div>
209
+ </td>
210
+ <td class="text-right">
211
+ <div class="dropdown">
212
+ <a class="btn btn-sm btn-icon-only text-light" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
213
+ <i class="fa fa-ellipsis-v"></i>
214
+ </a>
215
+ <div class="dropdown-menu dropdown-menu-right dropdown-menu-arrow">
216
+ <a class="dropdown-item" href="#">Action</a>
217
+ <a class="dropdown-item" href="#">Another action</a>
218
+ <a class="dropdown-item" href="#">Something else here</a>
219
+ </div>
220
+ </div>
221
+ </td>
222
+ </tr>
223
+ </tbody>
224
+ </table>
225
+ </div>
226
+ </div>
227
+ </div>
228
+ </div>