tb_core 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -5
- data/app/assets/javascripts/admin/application.js +2 -0
- data/app/assets/javascripts/admin/core/application.js +1 -8
- data/app/assets/javascripts/admin/core/dashboard.js +34 -3
- data/app/assets/javascripts/admin/core/date_picker.js +2 -2
- data/app/assets/javascripts/tb_core/configuration.js.erb +9 -0
- data/app/assets/javascripts/tb_core/console.js +12 -0
- data/app/assets/javascripts/tb_core/utility.js +32 -0
- data/app/assets/javascripts/tb_core.js.erb +6 -0
- data/app/assets/stylesheets/admin/core/application.css.scss +20 -0
- data/app/controllers/admin/application_controller.rb +3 -2
- data/app/controllers/admin/dashboard_controller.rb +16 -0
- data/app/controllers/admin/password_resets_controller.rb +3 -2
- data/app/controllers/admin/roles_controller.rb +1 -1
- data/app/controllers/admin/settings_controller.rb +6 -3
- data/app/controllers/admin/setup_controller.rb +2 -1
- data/app/controllers/admin/user_sessions_controller.rb +13 -2
- data/app/controllers/admin/users_controller.rb +1 -1
- data/app/controllers/password_resets_controller.rb +3 -2
- data/app/controllers/spud/application_controller.rb +5 -3
- data/app/controllers/user_sessions_controller.rb +1 -1
- data/app/helpers/admin/application_helper.rb +7 -0
- data/app/models/spud_user_session.rb +1 -0
- data/app/views/admin/dashboard/index.html.erb +11 -10
- data/config/routes.rb +1 -1
- data/lib/generators/spud/module_generator.rb +5 -8
- data/lib/generators/spud/setup_generator.rb +3 -7
- data/lib/generators/spud/templates/admin_controller.rb.erb +1 -1
- data/lib/generators/spud/templates/assets/admin/application.js +16 -0
- data/lib/generators/spud/templates/assets/admin/module.js.erb +19 -0
- data/lib/generators/spud/templates/assets/application.js +17 -0
- data/lib/generators/spud/templates/assets/module.js.erb +7 -3
- data/lib/generators/spud/templates/controller.rb.erb +1 -1
- data/lib/generators/spud/templates/views/admin/_form.html.erb +1 -1
- data/lib/generators/spud/templates/views/admin/index.html.erb +6 -0
- data/lib/generators/spud/templates/views/admin/show.html.erb +17 -0
- data/lib/generators/spud/templates/views/frontend/index.html.erb +5 -1
- data/lib/generators/spud/templates/views/frontend/show.html.erb +5 -1
- data/lib/spud_core/belongs_to_app.rb +1 -1
- data/lib/spud_core/version.rb +1 -1
- data/spec/controllers/admin/dashboard_controller_spec.rb +45 -0
- metadata +12 -7
- data/lib/generators/spud/templates/assets/admin.coffee.erb +0 -9
- data/lib/generators/spud/templates/assets/admin.js.erb +0 -14
- data/lib/generators/spud/templates/assets/module.coffee.erb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71c34ea80001648010e043bef02b72692915420f
|
4
|
+
data.tar.gz: 3883316c2ffaa12dd1dd898f3b96a018b58441fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce061063bbbe493d0371ce8a1f3eba01091a2ee8c4d35a77d47afa5e8431f6c40c39f2f93b4a4c7f442cf317951696a5640f80b7f90565e1f039c04c0064398a
|
7
|
+
data.tar.gz: 378b935cdabc307ec286995fc2b7f77a1dc18fe482a9c1790685a0bc12bccb07e976f57728e3cf3131c256d05ec9c3881471e0ab13751d6179c4618721b1f388
|
data/README.md
CHANGED
@@ -47,7 +47,6 @@ The core engine provides various configuration options.
|
|
47
47
|
- `admin_applications`: Array of custom admin modules. See section below for more info.
|
48
48
|
- `site_name`: Controls the site name displayed in the dashboard and `tb_page_title` view helper.
|
49
49
|
- `from_address`: Sender address used for password resets and other mailers.
|
50
|
-
- `not_found_template`: ERB template used for 404 exceptions. Defaults to `layouts/not_found`.
|
51
50
|
- `production_alert_domain`: When set, displays a prominent warning bar in the admin dashboard directing users to the production domain. You should only set this value in `config/environments/staging.rb`.
|
52
51
|
|
53
52
|
Adding Apps to the Dashboard
|
@@ -60,12 +59,15 @@ The fastest way to add an app to the dashboard is via the geneator. The generato
|
|
60
59
|
Admin apps are added via the `Spud::Core.config.admin_applications` array. We recommend you perform this action in either an initializer or within your `application.rb` file.
|
61
60
|
|
62
61
|
Spud::Core.config.admin_applications += [{
|
62
|
+
# Required:
|
63
63
|
:name => "Clients",
|
64
64
|
:thumbnail => "spud/admin/clients.png",
|
65
|
-
:url => "/admin/clients"
|
65
|
+
:url => "/admin/clients",
|
66
|
+
# Optional:
|
67
|
+
:badge => ->(user){ Client.where(:is_pending => true).count() }
|
66
68
|
}]
|
67
69
|
|
68
|
-
Build out your RESTful controller and views like you normally would in any Rails app. Extend your controller from `Admin::ApplicationController` in order to inherit the default admin behaviors, and look at the core admin controllers for example implementations.
|
70
|
+
Build out your RESTful controller and views like you normally would in any Rails app. Extend your controller from `Admin::ApplicationController` in order to inherit the default admin behaviors, and look at the core admin controllers for example implementations.
|
69
71
|
|
70
72
|
Roles & Permissions
|
71
73
|
-------------------
|
@@ -145,12 +147,12 @@ Create a file in your app at `app/views/admin/users/_show_additions.html.erb`.
|
|
145
147
|
404 Handling
|
146
148
|
------------
|
147
149
|
|
148
|
-
The base `Spud::ApplicationController` will automatically rescue from any `Spud::NotFoundError` errors by rendering out the
|
150
|
+
The base `Spud::ApplicationController` will automatically rescue from any `Spud::NotFoundError` errors by rendering out the `layouts/not_found.html` template. To customize this view, create a template by that name in your own project.
|
149
151
|
|
150
152
|
When building your own apps you may raise a `Spud::NotFoundError` at any time to halt further execution and cause the 404 page to render. For example:
|
151
153
|
|
152
154
|
class CarsController
|
153
|
-
|
155
|
+
before_action :get_record
|
154
156
|
# ... actions here
|
155
157
|
def get_record
|
156
158
|
@car = Car.where(:id => params[:id]).first
|
@@ -6,6 +6,7 @@
|
|
6
6
|
//= require bootstrap/js/bootstrap
|
7
7
|
//= require datepicker/js/bootstrap-datepicker
|
8
8
|
//= require jquery-ui/js/jquery-ui-1.9.1.custom
|
9
|
+
//= require ../../tb_core
|
9
10
|
//= require_self
|
10
11
|
//= require_tree .
|
11
12
|
//= require retina_tag
|
@@ -14,14 +15,6 @@ spud = {admin:{}};
|
|
14
15
|
|
15
16
|
$(document).ready(function() {
|
16
17
|
|
17
|
-
if(typeof(window.console) == 'undefined'){
|
18
|
-
window.console = {
|
19
|
-
log:function(){},
|
20
|
-
warn:function(){},
|
21
|
-
error:function(){}
|
22
|
-
};
|
23
|
-
}
|
24
|
-
|
25
18
|
spud.admin.editor.init();
|
26
19
|
|
27
20
|
$("#modal_window .modal-footer .form-submit").bind('click', function() {
|
@@ -1,9 +1,40 @@
|
|
1
1
|
(function(){
|
2
2
|
|
3
3
|
spud.admin.dashboard = {
|
4
|
-
|
4
|
+
init:function(){
|
5
|
+
updateBadges();
|
6
|
+
setInterval(updateBadges, 30000);
|
7
|
+
}
|
8
|
+
};
|
9
|
+
|
10
|
+
var updateBadges = function updateBadges() {
|
11
|
+
var url = tb.util.urlFor('admin/badges');
|
12
|
+
$.ajax({
|
13
|
+
url: url
|
14
|
+
}).always(function(json) {
|
15
|
+
if(json && json.data) {
|
16
|
+
json.data.forEach(function(eachBadge) {
|
17
|
+
var id = "application_name_" + eachBadge.key;
|
18
|
+
updateBadge(id, eachBadge.badge_count);
|
19
|
+
});
|
20
|
+
}
|
21
|
+
});
|
22
|
+
};
|
5
23
|
|
6
|
-
|
24
|
+
var updateBadge = function updateBadge(badge_id, count) {
|
25
|
+
var badgeIcon = $('#' + badge_id).find('.dash_icon_badge');
|
26
|
+
if(badgeIcon.length === 0) {
|
27
|
+
return;
|
28
|
+
}
|
29
|
+
else if (count === 0) {
|
30
|
+
badgeIcon.toggle(false);
|
31
|
+
}
|
32
|
+
else if (count > 999) {
|
33
|
+
badgeIcon.text("999+").toggle(true);
|
34
|
+
}
|
35
|
+
else {
|
36
|
+
badgeIcon.text(count).toggle(true);
|
37
|
+
}
|
7
38
|
};
|
8
39
|
|
9
|
-
})();
|
40
|
+
})();
|
@@ -12,10 +12,10 @@ spud.admin.date_picker = {};
|
|
12
12
|
date = new Date(parseInt(dateComponents[0],10),parseInt(dateComponents[1],10) - 1,parseInt(dateComponents[2],10));
|
13
13
|
}
|
14
14
|
return date;
|
15
|
-
}
|
15
|
+
};
|
16
16
|
|
17
17
|
picker.init = function(selector) {
|
18
|
-
selector = (typeof(selector) == 'undefined') ? '.spud_form_date_picker' : selector;
|
18
|
+
selector = (typeof(selector) == 'undefined') ? '.spud_form_date_picker, .tb-form-date-picker' : selector;
|
19
19
|
$(selector).each(function() {
|
20
20
|
var $this = $(this);
|
21
21
|
var baseName = $this.attr('name');
|
@@ -0,0 +1,32 @@
|
|
1
|
+
(function(){
|
2
|
+
|
3
|
+
tb.util = {
|
4
|
+
domainWithPort: function(){
|
5
|
+
if(window.location.origin){
|
6
|
+
return window.location.origin;
|
7
|
+
}
|
8
|
+
else{
|
9
|
+
return location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '');
|
10
|
+
}
|
11
|
+
},
|
12
|
+
|
13
|
+
pathFor: function(){
|
14
|
+
var args = Array.prototype.slice.call(arguments, 0);
|
15
|
+
var parts = [''];
|
16
|
+
if(tb.config.subUri){
|
17
|
+
parts.push(tb.config.subUri);
|
18
|
+
}
|
19
|
+
return parts.concat(args).join('/');
|
20
|
+
},
|
21
|
+
|
22
|
+
urlFor: function(){
|
23
|
+
var args = Array.prototype.slice.call(arguments, 0);
|
24
|
+
var parts = [tb.util.domainWithPort()];
|
25
|
+
if(tb.config.subUri){
|
26
|
+
parts.push(tb.config.subUri);
|
27
|
+
}
|
28
|
+
return parts.concat(args).join('/');
|
29
|
+
}
|
30
|
+
};
|
31
|
+
|
32
|
+
})();
|
@@ -377,3 +377,23 @@ form input.full-width {
|
|
377
377
|
#modal_window .form-actions-no-modal{
|
378
378
|
display: none;
|
379
379
|
}
|
380
|
+
|
381
|
+
/* Admin Dashboard */
|
382
|
+
a .image_wrapper {
|
383
|
+
position: relative;
|
384
|
+
.dash_icon_badge {
|
385
|
+
display: none;
|
386
|
+
position: absolute;
|
387
|
+
right: -28px;
|
388
|
+
top: -28px;
|
389
|
+
width: 40px;
|
390
|
+
height: 40px;
|
391
|
+
background: #e55137;
|
392
|
+
-moz-border-radius: 70px;
|
393
|
+
-webkit-border-radius: 20px;
|
394
|
+
border-radius: 20px;
|
395
|
+
color: white;
|
396
|
+
line-height: 36px;
|
397
|
+
font-size: 15px;
|
398
|
+
}
|
399
|
+
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class Admin::ApplicationController < Spud::ApplicationController
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
before_action :require_admin_user
|
4
|
+
before_action :verify_site_mode
|
5
5
|
add_breadcrumb "Dashboard", :admin_root_path
|
6
6
|
layout 'admin/detail'
|
7
7
|
respond_to :html, :json, :xml, :js
|
@@ -24,6 +24,7 @@ private
|
|
24
24
|
def require_admin_user
|
25
25
|
if current_user.blank?
|
26
26
|
flash[:notice] = "You must be logged in to access the requested page"
|
27
|
+
store_location
|
27
28
|
redirect_to admin_login_path
|
28
29
|
return false
|
29
30
|
elsif !current_user.has_admin_rights?
|
@@ -8,6 +8,22 @@ class Admin::DashboardController < Admin::ApplicationController
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
+
def badges
|
12
|
+
data = []
|
13
|
+
@admin_applications = Spud::Core.admin_applications.select do |admin_application|
|
14
|
+
if current_user.can_view_app?(admin_application)
|
15
|
+
if admin_application[:badge]
|
16
|
+
begin
|
17
|
+
data << {:key => admin_application[:key], :badge_count => admin_application[:badge].call(current_user)}
|
18
|
+
rescue Exception => e
|
19
|
+
logger.error e
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
render :json => {:data => data}
|
25
|
+
end
|
26
|
+
|
11
27
|
def switch
|
12
28
|
if !params[:multisite_select].blank?
|
13
29
|
if Spud::Core.multisite_config.select{|p| p[:site_id].to_i == params[:multisite_select].to_i}.blank? == false
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class Admin::PasswordResetsController < Admin::ApplicationController
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
before_action :load_user_using_perishable_token, :only => [:show, :update]
|
4
|
+
skip_before_action :require_user, :require_admin_user
|
5
5
|
layout 'admin/login'
|
6
6
|
|
7
7
|
def index
|
@@ -30,6 +30,7 @@ class Admin::PasswordResetsController < Admin::ApplicationController
|
|
30
30
|
@user.password = params[:spud_user][:password]
|
31
31
|
@user.password_confirmation = params[:spud_user][:password_confirmation]
|
32
32
|
if @user.save
|
33
|
+
SpudUserSession.create(:login => @user.login, :password => params[:spud_user][:password])
|
33
34
|
flash[:notice] = "Password successfully updated"
|
34
35
|
redirect_to admin_login_path
|
35
36
|
else
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Admin::RolesController < Admin::ApplicationController
|
2
2
|
|
3
|
-
|
3
|
+
before_action :get_record, :only => [:show, :edit, :update, :destroy]
|
4
4
|
respond_to :html, :json, :xml
|
5
5
|
belongs_to_spud_app :users
|
6
6
|
add_breadcrumb "Users", :admin_users_path
|
@@ -1,9 +1,9 @@
|
|
1
1
|
class Admin::SettingsController < Admin::ApplicationController
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
before_action :require_user
|
4
|
+
skip_before_action :require_admin_user
|
5
5
|
|
6
|
-
|
6
|
+
before_action do |c|
|
7
7
|
if current_user && current_user.has_admin_rights?
|
8
8
|
add_breadcrumb "Settings", :admin_settings_path
|
9
9
|
end
|
@@ -15,6 +15,9 @@ class Admin::SettingsController < Admin::ApplicationController
|
|
15
15
|
|
16
16
|
def update
|
17
17
|
if @current_user.update_attributes(user_params)
|
18
|
+
if user_params.include?(:password)
|
19
|
+
SpudUserSession.create(:login => @current_user.login, :password => user_params[:password])
|
20
|
+
end
|
18
21
|
flash[:notice] = "User settings saved successfully."
|
19
22
|
respond_with @current_user, :location => admin_settings_path
|
20
23
|
else
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Admin::SetupController < Admin::ApplicationController
|
2
2
|
|
3
|
-
|
3
|
+
skip_before_action :require_user, :require_admin_user
|
4
4
|
|
5
5
|
def new
|
6
6
|
if SpudUser.count != 0
|
@@ -15,6 +15,7 @@ class Admin::SetupController < Admin::ApplicationController
|
|
15
15
|
@spud_user = SpudUser.new(user_params)
|
16
16
|
@spud_user.super_admin = true
|
17
17
|
if @spud_user.save
|
18
|
+
SpudUserSession.create(:login => @spud_user.login, :password => user_params[:password])
|
18
19
|
redirect_to admin_root_path
|
19
20
|
else
|
20
21
|
render 'new', :status => 422
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Admin::UserSessionsController < Admin::ApplicationController
|
2
2
|
|
3
|
-
|
3
|
+
skip_before_action :require_admin_user
|
4
4
|
layout 'admin/login'
|
5
5
|
|
6
6
|
def new
|
@@ -17,7 +17,7 @@ class Admin::UserSessionsController < Admin::ApplicationController
|
|
17
17
|
@user_session = SpudUserSession.new(params[:spud_user_session])
|
18
18
|
if @user_session.save
|
19
19
|
flash[:notice] = "Login successful!"
|
20
|
-
redirect_to
|
20
|
+
redirect_to redirect_path_for_admin
|
21
21
|
else
|
22
22
|
render :action => :new
|
23
23
|
end
|
@@ -36,4 +36,15 @@ class Admin::UserSessionsController < Admin::ApplicationController
|
|
36
36
|
redirect_to admin_login_path
|
37
37
|
end
|
38
38
|
|
39
|
+
private
|
40
|
+
|
41
|
+
def redirect_path_for_admin
|
42
|
+
back_or_default = back_or_default(admin_root_path)
|
43
|
+
if /\/admin\//.match(back_or_default)
|
44
|
+
return back_or_default
|
45
|
+
else
|
46
|
+
return admin_root_path
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
39
50
|
end
|
@@ -3,7 +3,7 @@ class Admin::UsersController < Admin::ApplicationController
|
|
3
3
|
layout false
|
4
4
|
belongs_to_spud_app :users
|
5
5
|
add_breadcrumb "Users", :admin_users_path
|
6
|
-
|
6
|
+
before_action :load_user, :only => [:edit, :update, :show, :destroy]
|
7
7
|
respond_to :html
|
8
8
|
|
9
9
|
def index
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class PasswordResetsController < ApplicationController
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
before_action :load_user_using_perishable_token, :only => [:show, :update]
|
4
|
+
skip_before_action :require_user
|
5
5
|
respond_to :html
|
6
6
|
|
7
7
|
def index
|
@@ -32,6 +32,7 @@ class PasswordResetsController < ApplicationController
|
|
32
32
|
@user.password = params[:spud_user][:password]
|
33
33
|
@user.password_confirmation = params[:spud_user][:password_confirmation]
|
34
34
|
if @user.save()
|
35
|
+
SpudUserSession.create(:login => @user.login, :password => params[:spud_user][:password])
|
35
36
|
flash[:notice] = "Password successfully updated"
|
36
37
|
redirect_back_or_default(root_path)
|
37
38
|
return
|
@@ -5,10 +5,10 @@ class Spud::ApplicationController < ActionController::Base
|
|
5
5
|
around_filter :set_time_zone
|
6
6
|
|
7
7
|
if Spud::Core.multisite_mode_enabled
|
8
|
-
|
8
|
+
before_action :multisite_caching
|
9
9
|
end
|
10
10
|
include Spud::ApplicationHelper
|
11
|
-
|
11
|
+
before_action :set_mailer_default_url
|
12
12
|
|
13
13
|
rescue_from Spud::NotFoundError, :with => :handle_not_found
|
14
14
|
|
@@ -51,7 +51,9 @@ private
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def store_location
|
54
|
-
|
54
|
+
if request.format.html? && !request.xhr?
|
55
|
+
session[:return_to] = request.url
|
56
|
+
end
|
55
57
|
end
|
56
58
|
|
57
59
|
def redirect_back_or_default(default)
|
@@ -50,5 +50,12 @@ module Admin::ApplicationHelper
|
|
50
50
|
|
51
51
|
end
|
52
52
|
|
53
|
+
def url_for_admin_dashboard_application(url)
|
54
|
+
if Rails.configuration.relative_url_root.blank?
|
55
|
+
return url
|
56
|
+
else
|
57
|
+
return [Rails.configuration.relative_url_root, url].join('/').gsub(/(\/+)/, '/')
|
58
|
+
end
|
59
|
+
end
|
53
60
|
|
54
61
|
end
|
@@ -1,14 +1,15 @@
|
|
1
|
-
|
2
1
|
<div class="sortable">
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
<%end%>
|
2
|
+
<% @admin_applications.each do |admin_application| %>
|
3
|
+
<div class="admin_application" id="application_name_<%= admin_application[:key] %>">
|
4
|
+
<%= link_to url_for_admin_dashboard_application(admin_application[:url]) do %>
|
5
|
+
<div class="image_wrapper">
|
6
|
+
<%= image_tag(admin_application[:thumbnail]) %>
|
7
|
+
<span class="dash_icon_badge" ></span>
|
8
|
+
</div>
|
9
|
+
<span class="application_name"><%= admin_application[:name] %></span>
|
10
|
+
<% end %>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
12
13
|
</div>
|
13
14
|
<script type="text/javascript">
|
14
15
|
$(document).ready(spud.admin.dashboard.init);
|
data/config/routes.rb
CHANGED
@@ -4,8 +4,8 @@ Rails.application.routes.draw do
|
|
4
4
|
|
5
5
|
get 'login' => 'user_sessions#new', :as => 'login'
|
6
6
|
post 'login' => 'user_sessions#create'
|
7
|
+
get 'badges' => 'dashboard#badges'
|
7
8
|
match 'logout' => 'user_sessions#destroy', :as => 'logout', :via => [:get, :post]
|
8
|
-
|
9
9
|
resources :password_resets, :only => [:index, :create, :show, :update], :path => 'login/forgot'
|
10
10
|
|
11
11
|
get 'settings' => 'settings#edit', :as => 'settings'
|
@@ -10,15 +10,12 @@ class Spud::ModuleGenerator < ::Rails::Generators::Base
|
|
10
10
|
def create_module
|
11
11
|
template "admin_controller.rb.erb", "app/controllers/admin/#{module_name_formatted}_controller.rb"
|
12
12
|
template "controller.rb.erb", "app/controllers/#{module_name_formatted}_controller.rb"
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
else
|
17
|
-
template "assets/module.js.erb", "app/assets/javascripts/admin/#{module_name_formatted}.js"
|
18
|
-
end
|
19
|
-
|
13
|
+
|
14
|
+
template "assets/module.js.erb", "app/assets/javascripts/#{module_name_formatted}.js"
|
15
|
+
template "assets/admin/module.js.erb", "app/assets/javascripts/admin/#{module_name_formatted}.js"
|
20
16
|
create_file "app/assets/stylesheets/admin/#{module_name_formatted}.css.scss", "// Place #{module_name} module styles here\n\n"
|
21
17
|
template "views/admin/index.html.erb", "app/views/admin/#{module_name_formatted}/index.html.erb"
|
18
|
+
template "views/admin/show.html.erb", "app/views/admin/#{module_name_formatted}/show.html.erb"
|
22
19
|
template "views/admin/new.html.erb", "app/views/admin/#{module_name_formatted}/new.html.erb"
|
23
20
|
template "views/admin/edit.html.erb", "app/views/admin/#{module_name_formatted}/edit.html.erb"
|
24
21
|
template "views/admin/_form.html.erb", "app/views/admin/#{module_name_formatted}/_form.html.erb"
|
@@ -32,7 +29,7 @@ class Spud::ModuleGenerator < ::Rails::Generators::Base
|
|
32
29
|
private
|
33
30
|
|
34
31
|
def module_name_formatted
|
35
|
-
module_name.pluralize.
|
32
|
+
module_name.pluralize.underscore
|
36
33
|
end
|
37
34
|
|
38
35
|
def create_routes
|
@@ -8,18 +8,14 @@ class Spud::SetupGenerator < ::Rails::Generators::Base
|
|
8
8
|
template 'assets/admin.css.scss', 'app/assets/stylesheets/admin/application.css.scss'
|
9
9
|
|
10
10
|
update_base_stylesheet()
|
11
|
-
update_base_javascript()
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
else
|
16
|
-
template 'assets/admin.js.erb', 'app/assets/javascripts/admin/application.js'
|
17
|
-
end
|
12
|
+
template 'assets/application.js', 'app/assets/javascripts/application.js'
|
13
|
+
template 'assets/admin/application.js', 'app/assets/javascripts/admin/application.js'
|
18
14
|
|
19
15
|
environment(spud_core_configs())
|
20
16
|
rake('railties:install:migrations')
|
21
17
|
|
22
|
-
if ask("Migrate the database? [Yn] ") == '
|
18
|
+
if ask("Migrate the database? [Yn] ").downcase == 'y'
|
23
19
|
rake('db:migrate')
|
24
20
|
end
|
25
21
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Admin::<%= module_name_formatted.camelize%>Controller < Admin::ApplicationController
|
2
2
|
|
3
|
-
|
3
|
+
before_action :load_<%= module_name_formatted.singularize %>, :only => [:show, :edit, :update, :destroy]
|
4
4
|
belongs_to_spud_app :<%= module_name_formatted %>
|
5
5
|
add_breadcrumb "<%= module_name_formatted.humanize.titlecase %>", :admin_<%= module_name_formatted %>_path
|
6
6
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
//= require jquery
|
2
|
+
//= require jquery_ujs
|
3
|
+
//= require tb_core
|
4
|
+
//= require_self
|
5
|
+
//= require_directory .
|
6
|
+
|
7
|
+
(function(){
|
8
|
+
|
9
|
+
window.app = {
|
10
|
+
init: function(){
|
11
|
+
// global initializer
|
12
|
+
}
|
13
|
+
};
|
14
|
+
|
15
|
+
$(document).ready(app.init);
|
16
|
+
|
17
|
+
})();
|
@@ -1,9 +1,13 @@
|
|
1
|
-
//
|
1
|
+
// <%= module_name.titleize %>
|
2
2
|
|
3
3
|
(function(){
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
app.<%= module_name_formatted %> = {
|
6
|
+
index: function(){
|
7
|
+
|
8
|
+
},
|
9
|
+
|
10
|
+
show: function(){
|
7
11
|
|
8
12
|
}
|
9
13
|
};
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class <%=module_name_formatted.camelize%>Controller < ApplicationController
|
2
2
|
|
3
3
|
respond_to :html, :json
|
4
|
-
|
4
|
+
before_action :load_<%=module_name_formatted.singularize%>, :only => [:show]
|
5
5
|
|
6
6
|
def index
|
7
7
|
@<%=module_name_formatted%> = <%=module_name_formatted.singularize.camelize%>.paginate(:page => params[:page])
|
@@ -17,6 +17,7 @@
|
|
17
17
|
<td><%%= <%=module_name_formatted.singularize%>.<%=attribute%> %></td>
|
18
18
|
<%-end-%>
|
19
19
|
<td align="right" width="150">
|
20
|
+
<%%= link_to 'Details', admin_<%=module_name_formatted.singularize%>_path(<%=module_name_formatted.singularize%>), :class => 'btn btn-mini' %>
|
20
21
|
<%%= link_to 'Edit', edit_admin_<%=module_name_formatted.singularize%>_path(<%=module_name_formatted.singularize%>), :class => 'btn btn-mini' %>
|
21
22
|
<%%= link_to 'Delete', admin_<%=module_name_formatted.singularize%>_path(<%=module_name_formatted.singularize%>), :method => :delete, :data => {:confirm => 'Are you sure you want to delete this <%=module_name_formatted.singularize.humanize%>?'}, :class => 'btn btn-danger btn-mini' %>
|
22
23
|
</td>
|
@@ -25,4 +26,9 @@
|
|
25
26
|
</tbody>
|
26
27
|
</table>
|
27
28
|
<%%= will_paginate @<%=module_name_formatted%> %>
|
29
|
+
|
30
|
+
<script>
|
31
|
+
$(document).ready(app.admin.<%= module_name_formatted %>.index);
|
32
|
+
</script>
|
33
|
+
|
28
34
|
<%% end %>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<%% content_for :data_controls do %>
|
2
|
+
<%%= link_to 'Edit', edit_admin_<%=module_name_formatted.singularize%>_path(@<%=module_name_formatted.singularize%>), :class => 'btn' %>
|
3
|
+
<%% end %>
|
4
|
+
|
5
|
+
<ul>
|
6
|
+
<%- attribute_names.each do |attribute| -%>
|
7
|
+
<li><strong><%= attribute.humanize.titlecase %>:</strong> <%%= @<%= module_name_formatted.singularize %>.<%= attribute %> %></li>
|
8
|
+
<%- end -%>
|
9
|
+
</ul>
|
10
|
+
|
11
|
+
<div class="form-actions">
|
12
|
+
<%%= link_to "Back", admin_<%= module_name_formatted %>_path, :class => "btn" %>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<script>
|
16
|
+
$(document).ready(app.admin.<%= module_name_formatted %>.show);
|
17
|
+
</script>
|
@@ -5,4 +5,8 @@
|
|
5
5
|
<p><strong><%=attribute_args[0].humanize.titlecase%></strong> <%%=@<%=module_name_formatted.singularize%>.<%=attribute_args[0]%> %></p>
|
6
6
|
<%-end-%>
|
7
7
|
|
8
|
-
<p><%%= link_to 'Back', <%=module_name_formatted.pluralize%>_path %></p>
|
8
|
+
<p><%%= link_to 'Back', <%=module_name_formatted.pluralize%>_path %></p>
|
9
|
+
|
10
|
+
<script>
|
11
|
+
$(document).ready(app.<%= module_name_formatted %>.show);
|
12
|
+
</script>
|
@@ -15,7 +15,7 @@ module Spud::BelongsToApp
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
self.class_eval do
|
18
|
-
|
18
|
+
before_action do |controller|
|
19
19
|
@page_thumbnail = self.class.page_application[:thumbnail]
|
20
20
|
@application_name = self.class.page_application[:name]
|
21
21
|
@page_name = self.class.page_title
|
data/lib/spud_core/version.rb
CHANGED
@@ -6,6 +6,11 @@ describe Admin::DashboardController do
|
|
6
6
|
:name => 'Test App',
|
7
7
|
:url => '/test/app',
|
8
8
|
:permissions => ["admin.test_app.full_access"]
|
9
|
+
},
|
10
|
+
{
|
11
|
+
:name => "dash app",
|
12
|
+
:key => 'dash_app',
|
13
|
+
:badge => ->(user) { return 1 }
|
9
14
|
}]
|
10
15
|
end
|
11
16
|
|
@@ -114,4 +119,44 @@ describe Admin::DashboardController do
|
|
114
119
|
end
|
115
120
|
end
|
116
121
|
end
|
122
|
+
|
123
|
+
describe :badges do
|
124
|
+
before(:each) do
|
125
|
+
request.accept = "application/json"
|
126
|
+
Spud::Core.configure do |config|
|
127
|
+
config.site_name = "Test Site"
|
128
|
+
config.multisite_mode_enabled = true
|
129
|
+
end
|
130
|
+
@user.super_admin = true
|
131
|
+
@user.save
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should respond with a json content type" do
|
135
|
+
get :badges
|
136
|
+
response.content_type.should eq("application/json")
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should contain data array in reponse" do
|
140
|
+
get :badges
|
141
|
+
json = JSON.parse(response.body)
|
142
|
+
assert json.has_key?("data")
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should have badge count 1 for dash app" do
|
146
|
+
get :badges
|
147
|
+
json = JSON.parse(response.body)
|
148
|
+
data = json["data"]
|
149
|
+
assert data.size == 1
|
150
|
+
app_found = false
|
151
|
+
badge_count = 0
|
152
|
+
data.each do |app|
|
153
|
+
if app["key"] == "dash_app"
|
154
|
+
app_found = true
|
155
|
+
badge_count = app["badge_count"]
|
156
|
+
end
|
157
|
+
end
|
158
|
+
assert app_found && badge_count == 1
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
117
162
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tb_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Greg Woods
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 3.4.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 3.4.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: scrypt
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -328,6 +328,10 @@ files:
|
|
328
328
|
- app/assets/javascripts/admin/core/roles.js
|
329
329
|
- app/assets/javascripts/admin/core/split_pane.js
|
330
330
|
- app/assets/javascripts/admin/core/users.js
|
331
|
+
- app/assets/javascripts/tb_core.js.erb
|
332
|
+
- app/assets/javascripts/tb_core/configuration.js.erb
|
333
|
+
- app/assets/javascripts/tb_core/console.js
|
334
|
+
- app/assets/javascripts/tb_core/utility.js
|
331
335
|
- app/assets/libs/bootstrap/css/bootstrap-responsive.css
|
332
336
|
- app/assets/libs/bootstrap/css/bootstrap.css.scss
|
333
337
|
- app/assets/libs/bootstrap/img/glyphicons-halflings-white.png
|
@@ -430,16 +434,17 @@ files:
|
|
430
434
|
- lib/generators/spud/setup_generator.rb
|
431
435
|
- lib/generators/spud/templates/admin_controller.rb.erb
|
432
436
|
- lib/generators/spud/templates/application_controller.rb
|
433
|
-
- lib/generators/spud/templates/assets/admin.coffee.erb
|
434
437
|
- lib/generators/spud/templates/assets/admin.css.scss
|
435
|
-
- lib/generators/spud/templates/assets/admin.js
|
436
|
-
- lib/generators/spud/templates/assets/module.
|
438
|
+
- lib/generators/spud/templates/assets/admin/application.js
|
439
|
+
- lib/generators/spud/templates/assets/admin/module.js.erb
|
440
|
+
- lib/generators/spud/templates/assets/application.js
|
437
441
|
- lib/generators/spud/templates/assets/module.js.erb
|
438
442
|
- lib/generators/spud/templates/controller.rb.erb
|
439
443
|
- lib/generators/spud/templates/views/admin/_form.html.erb
|
440
444
|
- lib/generators/spud/templates/views/admin/edit.html.erb
|
441
445
|
- lib/generators/spud/templates/views/admin/index.html.erb
|
442
446
|
- lib/generators/spud/templates/views/admin/new.html.erb
|
447
|
+
- lib/generators/spud/templates/views/admin/show.html.erb
|
443
448
|
- lib/generators/spud/templates/views/frontend/index.html.erb
|
444
449
|
- lib/generators/spud/templates/views/frontend/show.html.erb
|
445
450
|
- lib/generators/spud/templates/views/layouts/application.html.erb
|