tennpipes-su 3.6.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +70 -0
- data/Rakefile +22 -0
- data/lib/tennpipes-su.rb +35 -0
- data/lib/tennpipes-su/access_control.rb +191 -0
- data/lib/tennpipes-su/bootstrap-less/alerts.less +67 -0
- data/lib/tennpipes-su/bootstrap-less/badges.less +55 -0
- data/lib/tennpipes-su/bootstrap-less/bootstrap.less +49 -0
- data/lib/tennpipes-su/bootstrap-less/breadcrumbs.less +26 -0
- data/lib/tennpipes-su/bootstrap-less/button-groups.less +226 -0
- data/lib/tennpipes-su/bootstrap-less/buttons.less +155 -0
- data/lib/tennpipes-su/bootstrap-less/carousel.less +232 -0
- data/lib/tennpipes-su/bootstrap-less/close.less +33 -0
- data/lib/tennpipes-su/bootstrap-less/code.less +63 -0
- data/lib/tennpipes-su/bootstrap-less/component-animations.less +29 -0
- data/lib/tennpipes-su/bootstrap-less/dropdowns.less +213 -0
- data/lib/tennpipes-su/bootstrap-less/font-awesome/bordered-pulled.less +16 -0
- data/lib/tennpipes-su/bootstrap-less/font-awesome/core.less +12 -0
- data/lib/tennpipes-su/bootstrap-less/font-awesome/fixed-width.less +6 -0
- data/lib/tennpipes-su/bootstrap-less/font-awesome/font-awesome.less +17 -0
- data/lib/tennpipes-su/bootstrap-less/font-awesome/icons.less +412 -0
- data/lib/tennpipes-su/bootstrap-less/font-awesome/larger.less +13 -0
- data/lib/tennpipes-su/bootstrap-less/font-awesome/list.less +19 -0
- data/lib/tennpipes-su/bootstrap-less/font-awesome/mixins.less +20 -0
- data/lib/tennpipes-su/bootstrap-less/font-awesome/path.less +14 -0
- data/lib/tennpipes-su/bootstrap-less/font-awesome/rotated-flipped.less +9 -0
- data/lib/tennpipes-su/bootstrap-less/font-awesome/spinning.less +30 -0
- data/lib/tennpipes-su/bootstrap-less/font-awesome/stacked.less +20 -0
- data/lib/tennpipes-su/bootstrap-less/font-awesome/variables.less +381 -0
- data/lib/tennpipes-su/bootstrap-less/forms.less +419 -0
- data/lib/tennpipes-su/bootstrap-less/glyphicons.less +233 -0
- data/lib/tennpipes-su/bootstrap-less/grid.less +100 -0
- data/lib/tennpipes-su/bootstrap-less/input-groups.less +157 -0
- data/lib/tennpipes-su/bootstrap-less/jumbotron.less +44 -0
- data/lib/tennpipes-su/bootstrap-less/labels.less +64 -0
- data/lib/tennpipes-su/bootstrap-less/list-group.less +110 -0
- data/lib/tennpipes-su/bootstrap-less/media.less +56 -0
- data/lib/tennpipes-su/bootstrap-less/mixins.less +926 -0
- data/lib/tennpipes-su/bootstrap-less/modals.less +138 -0
- data/lib/tennpipes-su/bootstrap-less/navbar.less +616 -0
- data/lib/tennpipes-su/bootstrap-less/navs.less +242 -0
- data/lib/tennpipes-su/bootstrap-less/normalize.less +423 -0
- data/lib/tennpipes-su/bootstrap-less/pager.less +55 -0
- data/lib/tennpipes-su/bootstrap-less/pagination.less +88 -0
- data/lib/tennpipes-su/bootstrap-less/panels.less +230 -0
- data/lib/tennpipes-su/bootstrap-less/popovers.less +133 -0
- data/lib/tennpipes-su/bootstrap-less/print.less +101 -0
- data/lib/tennpipes-su/bootstrap-less/progress-bars.less +80 -0
- data/lib/tennpipes-su/bootstrap-less/responsive-utilities.less +93 -0
- data/lib/tennpipes-su/bootstrap-less/scaffolding.less +134 -0
- data/lib/tennpipes-su/bootstrap-less/tables.less +233 -0
- data/lib/tennpipes-su/bootstrap-less/tennpipes-su.less +18 -0
- data/lib/tennpipes-su/bootstrap-less/theme.less +247 -0
- data/lib/tennpipes-su/bootstrap-less/thumbnails.less +36 -0
- data/lib/tennpipes-su/bootstrap-less/tooltip.less +95 -0
- data/lib/tennpipes-su/bootstrap-less/type.less +296 -0
- data/lib/tennpipes-su/bootstrap-less/utilities.less +56 -0
- data/lib/tennpipes-su/bootstrap-less/variables.less +827 -0
- data/lib/tennpipes-su/bootstrap-less/wells.less +29 -0
- data/lib/tennpipes-su/generators/actions.rb +78 -0
- data/lib/tennpipes-su/generators/admin_app.rb +169 -0
- data/lib/tennpipes-su/generators/admin_page.rb +68 -0
- data/lib/tennpipes-su/generators/orm.rb +172 -0
- data/lib/tennpipes-su/generators/templates/account/activerecord.rb.tt +41 -0
- data/lib/tennpipes-su/generators/templates/account/couchrest.rb.tt +67 -0
- data/lib/tennpipes-su/generators/templates/account/datamapper.rb.tt +56 -0
- data/lib/tennpipes-su/generators/templates/account/dynamoid.rb.tt +55 -0
- data/lib/tennpipes-su/generators/templates/account/minirecord.rb.tt +44 -0
- data/lib/tennpipes-su/generators/templates/account/mongoid.rb.tt +54 -0
- data/lib/tennpipes-su/generators/templates/account/mongomapper.rb.tt +47 -0
- data/lib/tennpipes-su/generators/templates/account/ohm.rb.tt +70 -0
- data/lib/tennpipes-su/generators/templates/account/seeds.rb.tt +29 -0
- data/lib/tennpipes-su/generators/templates/account/sequel.rb.tt +53 -0
- data/lib/tennpipes-su/generators/templates/app.rb.tt +42 -0
- data/lib/tennpipes-su/generators/templates/app/controllers/base.rb.tt +5 -0
- data/lib/tennpipes-su/generators/templates/app/controllers/sessions.rb.tt +29 -0
- data/lib/tennpipes-su/generators/templates/assets/images/favicon.ico +0 -0
- data/lib/tennpipes-su/generators/templates/assets/images/font/FontAwesome.otf +0 -0
- data/lib/tennpipes-su/generators/templates/assets/images/font/fontawesome-webfont.eot +0 -0
- data/lib/tennpipes-su/generators/templates/assets/images/font/fontawesome-webfont.svg +414 -0
- data/lib/tennpipes-su/generators/templates/assets/images/font/fontawesome-webfont.ttf +0 -0
- data/lib/tennpipes-su/generators/templates/assets/images/font/fontawesome-webfont.woff +0 -0
- data/lib/tennpipes-su/generators/templates/assets/images/logo.png +0 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/application.js +118 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/affix.js +137 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/alert.js +88 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/bootstrap.min.js +6 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/button.js +107 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/carousel.js +205 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/collapse.js +170 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/dropdown.js +147 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/modal.js +243 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/popover.js +110 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/scrollspy.js +153 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/tab.js +125 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/tooltip.js +399 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/bootstrap/transition.js +48 -0
- data/lib/tennpipes-su/generators/templates/assets/javascripts/jquery-1.11.0.min.js +4 -0
- data/lib/tennpipes-su/generators/templates/assets/stylesheets/application.css +353 -0
- data/lib/tennpipes-su/generators/templates/assets/stylesheets/bootstrap.css +4 -0
- data/lib/tennpipes-su/generators/templates/assets/stylesheets/fonts/FontAwesome.otf +0 -0
- data/lib/tennpipes-su/generators/templates/assets/stylesheets/fonts/fontawesome-webfont.eot +0 -0
- data/lib/tennpipes-su/generators/templates/assets/stylesheets/fonts/fontawesome-webfont.svg +414 -0
- data/lib/tennpipes-su/generators/templates/assets/stylesheets/fonts/fontawesome-webfont.ttf +0 -0
- data/lib/tennpipes-su/generators/templates/assets/stylesheets/fonts/fontawesome-webfont.woff +0 -0
- data/lib/tennpipes-su/generators/templates/erb/app/base/index.erb.tt +15 -0
- data/lib/tennpipes-su/generators/templates/erb/app/errors/403.erb.tt +3 -0
- data/lib/tennpipes-su/generators/templates/erb/app/errors/404.erb.tt +3 -0
- data/lib/tennpipes-su/generators/templates/erb/app/errors/500.erb.tt +3 -0
- data/lib/tennpipes-su/generators/templates/erb/app/layouts/application.erb.tt +64 -0
- data/lib/tennpipes-su/generators/templates/erb/app/layouts/error.erb.tt +23 -0
- data/lib/tennpipes-su/generators/templates/erb/app/sessions/new.erb.tt +44 -0
- data/lib/tennpipes-su/generators/templates/erb/page/_form.erb.tt +18 -0
- data/lib/tennpipes-su/generators/templates/erb/page/edit.erb.tt +10 -0
- data/lib/tennpipes-su/generators/templates/erb/page/index.erb.tt +81 -0
- data/lib/tennpipes-su/generators/templates/erb/page/new.erb.tt +9 -0
- data/lib/tennpipes-su/generators/templates/haml/app/base/index.haml.tt +12 -0
- data/lib/tennpipes-su/generators/templates/haml/app/errors/403.haml.tt +3 -0
- data/lib/tennpipes-su/generators/templates/haml/app/errors/404.haml.tt +3 -0
- data/lib/tennpipes-su/generators/templates/haml/app/errors/500.haml.tt +3 -0
- data/lib/tennpipes-su/generators/templates/haml/app/layouts/application.haml.tt +49 -0
- data/lib/tennpipes-su/generators/templates/haml/app/layouts/error.haml.tt +18 -0
- data/lib/tennpipes-su/generators/templates/haml/app/sessions/new.haml.tt +38 -0
- data/lib/tennpipes-su/generators/templates/haml/page/_form.haml.tt +16 -0
- data/lib/tennpipes-su/generators/templates/haml/page/edit.haml.tt +8 -0
- data/lib/tennpipes-su/generators/templates/haml/page/index.haml.tt +58 -0
- data/lib/tennpipes-su/generators/templates/haml/page/new.haml.tt +7 -0
- data/lib/tennpipes-su/generators/templates/page/controller.rb.tt +92 -0
- data/lib/tennpipes-su/generators/templates/slim/app/base/index.slim.tt +12 -0
- data/lib/tennpipes-su/generators/templates/slim/app/errors/403.slim.tt +3 -0
- data/lib/tennpipes-su/generators/templates/slim/app/errors/404.slim.tt +3 -0
- data/lib/tennpipes-su/generators/templates/slim/app/errors/500.slim.tt +3 -0
- data/lib/tennpipes-su/generators/templates/slim/app/layouts/application.slim.tt +48 -0
- data/lib/tennpipes-su/generators/templates/slim/app/layouts/error.slim.tt +19 -0
- data/lib/tennpipes-su/generators/templates/slim/app/sessions/new.slim.tt +37 -0
- data/lib/tennpipes-su/generators/templates/slim/page/_form.slim.tt +16 -0
- data/lib/tennpipes-su/generators/templates/slim/page/edit.slim.tt +8 -0
- data/lib/tennpipes-su/generators/templates/slim/page/index.slim.tt +56 -0
- data/lib/tennpipes-su/generators/templates/slim/page/new.slim.tt +7 -0
- data/lib/tennpipes-su/helpers/authentication_helpers.rb +108 -0
- data/lib/tennpipes-su/helpers/view_helpers.rb +87 -0
- data/lib/tennpipes-su/locale/admin/cs.yml +56 -0
- data/lib/tennpipes-su/locale/admin/da.yml +56 -0
- data/lib/tennpipes-su/locale/admin/de.yml +56 -0
- data/lib/tennpipes-su/locale/admin/en.yml +56 -0
- data/lib/tennpipes-su/locale/admin/es.yml +56 -0
- data/lib/tennpipes-su/locale/admin/fr.yml +56 -0
- data/lib/tennpipes-su/locale/admin/hu.yml +56 -0
- data/lib/tennpipes-su/locale/admin/it.yml +56 -0
- data/lib/tennpipes-su/locale/admin/ja.yml +57 -0
- data/lib/tennpipes-su/locale/admin/lv.yml +56 -0
- data/lib/tennpipes-su/locale/admin/nl.yml +56 -0
- data/lib/tennpipes-su/locale/admin/no.yml +56 -0
- data/lib/tennpipes-su/locale/admin/pl.yml +56 -0
- data/lib/tennpipes-su/locale/admin/pt_br.yml +56 -0
- data/lib/tennpipes-su/locale/admin/ro.yml +56 -0
- data/lib/tennpipes-su/locale/admin/ru.yml +57 -0
- data/lib/tennpipes-su/locale/admin/sv.yml +56 -0
- data/lib/tennpipes-su/locale/admin/tr.yml +56 -0
- data/lib/tennpipes-su/locale/admin/uk.yml +56 -0
- data/lib/tennpipes-su/locale/admin/zh_cn.yml +56 -0
- data/lib/tennpipes-su/locale/admin/zh_tw.yml +56 -0
- data/lib/tennpipes-su/locale/orm/cs.yml +12 -0
- data/lib/tennpipes-su/locale/orm/da.yml +12 -0
- data/lib/tennpipes-su/locale/orm/de.yml +12 -0
- data/lib/tennpipes-su/locale/orm/en.yml +12 -0
- data/lib/tennpipes-su/locale/orm/es.yml +12 -0
- data/lib/tennpipes-su/locale/orm/fr.yml +12 -0
- data/lib/tennpipes-su/locale/orm/hu.yml +12 -0
- data/lib/tennpipes-su/locale/orm/it.yml +12 -0
- data/lib/tennpipes-su/locale/orm/ja.yml +12 -0
- data/lib/tennpipes-su/locale/orm/lv.yml +12 -0
- data/lib/tennpipes-su/locale/orm/nl.yml +12 -0
- data/lib/tennpipes-su/locale/orm/no.yml +12 -0
- data/lib/tennpipes-su/locale/orm/pl.yml +38 -0
- data/lib/tennpipes-su/locale/orm/pt_br.yml +12 -0
- data/lib/tennpipes-su/locale/orm/ro.yml +12 -0
- data/lib/tennpipes-su/locale/orm/ru.yml +12 -0
- data/lib/tennpipes-su/locale/orm/sv.yml +12 -0
- data/lib/tennpipes-su/locale/orm/tr.yml +12 -0
- data/lib/tennpipes-su/locale/orm/uk.yml +12 -0
- data/lib/tennpipes-su/locale/orm/zh_cn.yml +12 -0
- data/lib/tennpipes-su/locale/orm/zh_tw.yml +12 -0
- data/test/fixtures/sequel.rb +72 -0
- data/test/generators/test_account_model_generator.rb +108 -0
- data/test/generators/test_admin_app_generator.rb +218 -0
- data/test/generators/test_admin_page_generator.rb +140 -0
- data/test/helper.rb +47 -0
- data/test/test_admin_application.rb +271 -0
- data/test/test_locale.rb +25 -0
- metadata +298 -0
@@ -0,0 +1,8 @@
|
|
1
|
+
%ul.nav.nav-tabs
|
2
|
+
%li=link_to tag_icon(:list, pat(:list)), url(:<%= @orm.name_plural %>, :index)
|
3
|
+
%li=link_to tag_icon(:plus, pat(:new)), url(:<%= @orm.name_plural %>, :new)
|
4
|
+
%li.active=link_to tag_icon(:edit, pat(:edit)), url(:<%= @orm.name_plural %>, :edit, :id => @<%= @orm.name_singular %>.id)
|
5
|
+
|
6
|
+
.tabs-content
|
7
|
+
= form_for :<%= @orm.name_singular %>, url(:<%= @orm.name_plural %>, :update, :id => @<%= @orm.name_singular %>.id), :method => :put, :class => 'form-horizontal' do |f|
|
8
|
+
=partial '<%= @orm.name_plural %>/form', :locals => { :f => f }
|
@@ -0,0 +1,58 @@
|
|
1
|
+
%ul.nav.nav-tabs
|
2
|
+
%li.active=link_to tag_icon(:list, pat(:list)), url(:<%= @orm.name_plural %>, :index)
|
3
|
+
%li=link_to tag_icon(:plus, pat(:new)), url(:<%= @orm.name_plural %>, :new)
|
4
|
+
|
5
|
+
.tabs-content
|
6
|
+
%table#list.table.table-striped.table-hover.table-condensed
|
7
|
+
%thead
|
8
|
+
%tr
|
9
|
+
%th.header.list-menu
|
10
|
+
.dropdown
|
11
|
+
%a.list-menu-toggle.dropdown-toggle{:href => '#', :'data-toggle' => :dropdown}
|
12
|
+
=tag_icon :magic
|
13
|
+
%span.caret
|
14
|
+
%ul.list-menu.dropdown-menu{:role => :menu}
|
15
|
+
%li.list-menu-wrapper=link_to tag_icon('check-square-o', pat(:select_all)), '#', :id => 'select-all', :class => 'list-menu-link'
|
16
|
+
%li.list-menu-wrapper.list-menu-wrapper-disabled
|
17
|
+
=link_to tag_icon('square-o', pat(:deselect_all)), '#', :id => 'deselect-all', :class => 'list-menu-link list-menu-link-disabled'
|
18
|
+
%li.list-menu-divider.divider
|
19
|
+
%li.list-menu-wrapper.list-menu-wrapper-disabled
|
20
|
+
=link_to tag_icon('trash-o', pat(:delete_selected)), '#', :id => 'delete-selected', :class => 'list-menu-link list-menu-link-disabled'
|
21
|
+
.list-menu-popover-delete-selected.popover.right
|
22
|
+
.arrow
|
23
|
+
%h3.popover-title=pat(:delete_selected_title)
|
24
|
+
.popover-content
|
25
|
+
= form_tag url(:<%= @orm.name_plural %>, :destroy_many), :method => :delete do
|
26
|
+
=hidden_field_tag :<%= @orm.name_singular %>_ids, :'data-delete-many-ids' => true
|
27
|
+
=submit_tag pat(:delete), :class =>'list-menu-popover-delete-selected-btn btn btn-danger btn-small'
|
28
|
+
.btn.btn-default.btn-small.cancel=pat(:cancel)
|
29
|
+
<%- @orm.columns.each_with_index do |column, i| -%>
|
30
|
+
%th.header= mat(:<%= @orm.name_singular %>, :<%= column.name %>)
|
31
|
+
<%- end -%>
|
32
|
+
%th.header.list-row-action-header
|
33
|
+
|
34
|
+
%tbody
|
35
|
+
-@<%= @orm.name_plural %>.each do |<%= @orm.name_singular %>|
|
36
|
+
%tr.list-row
|
37
|
+
%td.list-column.list-selectable
|
38
|
+
=check_box_tag '<%= @orm.name_singular %>_ids[]', :value => <%= @orm.name_singular %>.id, :class => 'list-selectable-checkbox'
|
39
|
+
<%- @orm.columns.each_with_index do |column, i| -%>
|
40
|
+
<%- if column.name == "created_at" || column.name == "updated_at" -%>
|
41
|
+
%td.list-column=time_ago_in_words <%= @orm.name_singular %>.<%= column.name %>
|
42
|
+
<%- elsif column.type == :boolean -%>
|
43
|
+
%td.list-column= <%= @orm.name_singular %>.<%= column.name %> ? tag_icon(:ok) : tag_icon(:remove)
|
44
|
+
<%- else -%>
|
45
|
+
%td.list-column=<%= @orm.name_singular %>.<%= column.name %>
|
46
|
+
<%- end -%>
|
47
|
+
<%- end -%>
|
48
|
+
%td.list-column.list-row-action
|
49
|
+
.list-row-action-wrapper
|
50
|
+
=link_to tag_icon(:edit), :href => url(:<%= @orm.name_plural %>, :edit, :id => <%= @orm.name_singular %>.id), :rel => :tooltip, :title => "#{pat(:edit)} <%= @orm.name_singular %>", :class => 'list-row-action-wrapper-link'
|
51
|
+
=link_to tag_icon('trash-o'), :rel => :tooltip, :title => "#{pat(:delete)} <%= @orm.name_singular %>", :class => 'list-row-action-delete-one list-row-action-wrapper-link'
|
52
|
+
.popover.list-row-action-popover-delete-one.left
|
53
|
+
.arrow
|
54
|
+
%h3.popover-title=pat(:delete, :model => "<%= @orm.name_singular %>")
|
55
|
+
.popover-content
|
56
|
+
= form_tag url(:<%= @orm.name_plural %>, :destroy, :id => <%= @orm.name_singular %>.id), :method => :delete do
|
57
|
+
=submit_tag pat(:delete), :class =>'list-row-action-popover-delete-one-btn btn btn-danger btn-small'
|
58
|
+
.btn.btn-default.btn-small.cancel=pat(:cancel)
|
@@ -0,0 +1,7 @@
|
|
1
|
+
%ul.nav.nav-tabs
|
2
|
+
%li=link_to tag_icon(:list, pat(:list)), url(:<%= @orm.name_plural %>, :index)
|
3
|
+
%li.active=link_to tag_icon(:plus, pat(:new)), url(:<%= @orm.name_plural %>, :new)
|
4
|
+
|
5
|
+
.tabs-content
|
6
|
+
= form_for :<%= @orm.name_singular %>, url(:<%= @orm.name_plural %>, :create), :class => 'form-horizontal' do |f|
|
7
|
+
=partial '<%= @orm.name_plural %>/form', :locals => { :f => f }
|
@@ -0,0 +1,92 @@
|
|
1
|
+
<%= @app_name %>::<%= @admin_name %>.controllers :<%= @orm.name_plural %> do
|
2
|
+
get :index do
|
3
|
+
@title = "<%= @orm.name_plural.capitalize %>"
|
4
|
+
@<%= @orm.name_plural %> = <%= @orm.all %>
|
5
|
+
render '<%= @orm.name_plural %>/index'
|
6
|
+
end
|
7
|
+
|
8
|
+
get :new do
|
9
|
+
@title = pat(:new_title, :model => '<%= @orm.name_singular %>')
|
10
|
+
@<%= @orm.name_singular %> = <%= @orm.build %>
|
11
|
+
render '<%= @orm.name_plural %>/new'
|
12
|
+
end
|
13
|
+
|
14
|
+
post :create do
|
15
|
+
@<%= @orm.name_singular %> = <%= @orm.build("params[:#{@orm.name_param}]") %>
|
16
|
+
if <%= @orm.save %>
|
17
|
+
@title = pat(:create_title, :model => "<%= @orm.name_singular %> #{@<%= @orm.name_singular %>.id}")
|
18
|
+
flash[:success] = pat(:create_success, :model => '<%= @orm.klass_name %>')
|
19
|
+
params[:save_and_continue] ? redirect(url(:<%= @orm.name_plural %>, :index)) : redirect(url(:<%= @orm.name_plural %>, :edit, :id => @<%= @orm.name_singular %>.id))
|
20
|
+
else
|
21
|
+
@title = pat(:create_title, :model => '<%= @orm.name_singular %>')
|
22
|
+
flash.now[:error] = pat(:create_error, :model => '<%= @orm.name_singular %>')
|
23
|
+
render '<%= @orm.name_plural %>/new'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
get :edit, :with => :id do
|
28
|
+
@title = pat(:edit_title, :model => "<%= @orm.name_singular %> #{params[:id]}")
|
29
|
+
@<%= @orm.name_singular %> = <%= @orm.find("params[:id]") %>
|
30
|
+
if @<%= @orm.name_singular %>
|
31
|
+
render '<%= @orm.name_plural %>/edit'
|
32
|
+
else
|
33
|
+
flash[:warning] = pat(:create_error, :model => '<%= @orm.name_singular %>', :id => "#{params[:id]}")
|
34
|
+
halt 404
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
put :update, :with => :id do
|
39
|
+
@title = pat(:update_title, :model => "<%= @orm.name_singular %> #{params[:id]}")
|
40
|
+
@<%= @orm.name_singular %> = <%= @orm.find("params[:id]") %>
|
41
|
+
if @<%= @orm.name_singular %>
|
42
|
+
if <%= @orm.update_attributes("params[:#{@orm.name_param}]") %>
|
43
|
+
flash[:success] = pat(:update_success, :model => '<%= @orm.name_singular.capitalize %>', :id => "#{params[:id]}")
|
44
|
+
params[:save_and_continue] ?
|
45
|
+
redirect(url(:<%= @orm.name_plural %>, :index)) :
|
46
|
+
redirect(url(:<%= @orm.name_plural %>, :edit, :id => @<%= @orm.name_singular %>.id))
|
47
|
+
else
|
48
|
+
flash.now[:error] = pat(:update_error, :model => '<%= @orm.name_singular %>')
|
49
|
+
render '<%= @orm.name_plural %>/edit'
|
50
|
+
end
|
51
|
+
else
|
52
|
+
flash[:warning] = pat(:update_warning, :model => '<%= @orm.name_singular %>', :id => "#{params[:id]}")
|
53
|
+
halt 404
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
delete :destroy, :with => :id do
|
58
|
+
@title = "<%= @orm.name_plural.capitalize %>"
|
59
|
+
<%= @orm.name_singular %> = <%= @orm.find("params[:id]") %>
|
60
|
+
if <%= @orm.name_singular %>
|
61
|
+
if <%= @orm.destroy %>
|
62
|
+
flash[:success] = pat(:delete_success, :model => '<%= @orm.name_singular.capitalize %>', :id => "#{params[:id]}")
|
63
|
+
else
|
64
|
+
flash[:error] = pat(:delete_error, :model => '<%= @orm.name_singular %>')
|
65
|
+
end
|
66
|
+
redirect url(:<%= @orm.name_plural %>, :index)
|
67
|
+
else
|
68
|
+
flash[:warning] = pat(:delete_warning, :model => '<%= @orm.name_singular %>', :id => "#{params[:id]}")
|
69
|
+
halt 404
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
delete :destroy_many do
|
74
|
+
@title = "<%= @orm.name_plural.capitalize %>"
|
75
|
+
unless params[:<%= @orm.name_singular %>_ids]
|
76
|
+
flash[:error] = pat(:destroy_many_error, :model => '<%= @orm.name_singular %>')
|
77
|
+
redirect(url(:<%= @orm.name_plural %>, :index))
|
78
|
+
end
|
79
|
+
ids = params[:<%= @orm.name_param %>_ids].split(',').map(&:strip)
|
80
|
+
<%= @orm.name_plural %> = <%= @orm.find_by_ids("ids") %>
|
81
|
+
<% if @orm.name_singular == @admin_model %>
|
82
|
+
if <%= @orm.name_plural %>.include? current_account
|
83
|
+
flash[:error] = pat(:delete_error, :model => '<%= @orm.name_singular %>')
|
84
|
+
elsif <%= @orm.multiple_destroy(@orm.name_plural) %>
|
85
|
+
<% else %>
|
86
|
+
if <%= @orm.multiple_destroy(@orm.name_plural) %>
|
87
|
+
<% end %>
|
88
|
+
flash[:success] = pat(:destroy_many_success, :model => '<%= @orm.name_plural.capitalize %>', :ids => "#{ids.to_sentence}")
|
89
|
+
end
|
90
|
+
redirect url(:<%= @orm.name_plural %>, :index)
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
div class="base-text"
|
2
|
+
p Tennpipes is a ruby framework built upon the Sinatra web library
|
3
|
+
p It was created to make it fun and easy to code more advanced web applications while still adhering to the spirit that makes Sinatra great!
|
4
|
+
p Tennpipes comes shipped with a slick and beautiful Admin Interface, with the following features:
|
5
|
+
|
6
|
+
div class="base-icons"
|
7
|
+
div class="btn-group"
|
8
|
+
div class="btn btn-primary" title="Adapters for datamapper, sequel, activerecord, minirecord, mongomapper, mongoid, couchrest" = tag_icon("cogs fa-2x", "Orm Agnostic")
|
9
|
+
div class="btn btn-success" title="User Authentication Support, User Authorization Management" = tag_icon("group fa-2x", "Authentication")
|
10
|
+
div class="btn btn-info" title="Erb, Haml, Slim Rendering Support" = tag_icon("tasks fa-2x", "Template Agnostic")
|
11
|
+
div class="btn btn-warning" title="English, German, Russian, Danish, French, Brazilian and Italian localizations" = tag_icon("flag fa-2x", "Multi Language")
|
12
|
+
div class="btn btn-danger" title="You can create a new 'admin interface' by providing a single Model" = tag_icon("magic fa-2x", "Scaffold")
|
@@ -0,0 +1,48 @@
|
|
1
|
+
doctype 5
|
2
|
+
html lang='en'
|
3
|
+
head
|
4
|
+
<!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
|
5
|
+
<!--[if lt IE 9]>
|
6
|
+
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
7
|
+
<![endif]-->
|
8
|
+
meta content='text/html; charset=utf-8' http-equiv='Content-Type'
|
9
|
+
meta name='viewport' content='width=device-width,initial-scale=1'
|
10
|
+
title = @title.present? ? "#{@title} | Tennpipes Admin" : "Tennpipes Admin"
|
11
|
+
= favicon_tag 'favicon.ico'
|
12
|
+
link href='http://fonts.googleapis.com/css?family=Varela' rel='stylesheet'
|
13
|
+
= stylesheet_link_tag 'bootstrap', 'application'
|
14
|
+
|
15
|
+
body
|
16
|
+
div class='navbar navbar-fixed-top'
|
17
|
+
div class='navbar-inner'
|
18
|
+
div class='container'
|
19
|
+
= link_to 'Tennpipes', url(:base, :index), :class => 'navbar-brand', :title => 'Tennpipes Admin'
|
20
|
+
|
21
|
+
ul class='nav navbar-nav pull-right'
|
22
|
+
li class='navbar-edit-account' = link_to tag_icon(:user), url(:<%= @model_plural %>, :edit, :id => current_account.id), :title => pat(:profile), :class => 'navbar-nav-link'
|
23
|
+
li class='navbar-logout' = button_to(pat(:logout), url(:sessions, :destroy), :method => :delete, :class => 'navbar-nav-form') do
|
24
|
+
= content_tag :button, tag_icon(:'power-off'), :type => :submit, :title => pat(:logout), :class => 'navbar-nav-form-link'
|
25
|
+
|
26
|
+
ul class='nav navbar-nav pull-left'
|
27
|
+
- project_modules.each do |project_module|
|
28
|
+
li class=("navbar-module #{'active' if request.path_info =~ /^#{project_module.path}/}")
|
29
|
+
= link_to project_module.human_name, url(project_module.path)
|
30
|
+
|
31
|
+
div class='container main'
|
32
|
+
div class='main-wrapper'
|
33
|
+
= {:error => 'danger', :warning => 'warning', :success => 'success', :notice => 'info'}.map { |type, class_name| flash_tag(type, :class => "alert alert-#{class_name} fade in", :bootstrap => true) }.join.html_safe
|
34
|
+
div class='row' = yield
|
35
|
+
div class='main-wrapper-push'
|
36
|
+
|
37
|
+
footer
|
38
|
+
div class='footer-wrapper container'
|
39
|
+
p class='pull-left'
|
40
|
+
' Copyright © #{Time.now.year} Your Site -
|
41
|
+
b Powered by Tennpipes v.#{Tennpipes.version}
|
42
|
+
ul class='pull-right footer-links'
|
43
|
+
li = link_to tag_icon(:home, 'web'), 'http://www.tennpipesrb.com', :target => :_blank, :class => 'footer-links-link'
|
44
|
+
li = link_to tag_icon(:heart, 'blog'), 'http://www.tennpipesrb.com/blog', :target => :_blank, :class => 'footer-links-link'
|
45
|
+
li = link_to tag_icon(:github, 'code'), 'https://github.com/tennpipes/tennpipes-framework', :target => :_blank, :class => 'footer-links-link'
|
46
|
+
li = link_to tag_icon(:twitter, 'twitter'), 'http://twitter.com/tennpipesrb', :target => :_blank, :class => 'footer-links-link'
|
47
|
+
|
48
|
+
=javascript_include_tag 'jquery-1.11.0.min', (Tennpipes.env == :production ? 'bootstrap/bootstrap.min' : %w[bootstrap/affix bootstrap/alert bootstrap/button bootstrap/carousel bootstrap/collapse bootstrap/dropdown bootstrap/tooltip bootstrap/transition bootstrap/modal bootstrap/popover bootstrap/scrollspy bootstrap/tab]), :application
|
@@ -0,0 +1,19 @@
|
|
1
|
+
doctype 5
|
2
|
+
html lang="en" xmlns="http://www.w3.org/1999/xhtml"
|
3
|
+
head
|
4
|
+
<!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
|
5
|
+
<!--[if lt IE 9]>
|
6
|
+
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
7
|
+
<![endif]-->
|
8
|
+
meta content='text/html; charset=utf-8' http-equiv='Content-Type'
|
9
|
+
meta name='viewport' content='width=device-width,initial-scale=1'
|
10
|
+
title = @title.present? ? "#{@title} | Tennpipes Admin" : "#{pat(:custom_errors.title)} | Tennpipes Admin"
|
11
|
+
= favicon_tag 'favicon.ico'
|
12
|
+
link href='http://fonts.googleapis.com/css?family=Varela' rel='stylesheet'
|
13
|
+
= stylesheet_link_tag 'bootstrap', 'application'
|
14
|
+
|
15
|
+
body
|
16
|
+
div class="custom-error text-center"
|
17
|
+
div class="custom-error-body muted" = yield
|
18
|
+
div class="custom-error-footer"
|
19
|
+
= link_to tag_icon('arrow-left'),"#", :onclick => "history.go(-1);return false;", :class =>"custom-error-go-back btn btn-default pull-left", :title => "Go Back"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
doctype 5
|
2
|
+
html lang="en" xmlns="http://www.w3.org/1999/xhtml"
|
3
|
+
head
|
4
|
+
<!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
|
5
|
+
<!--[if lt IE 9]>
|
6
|
+
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
7
|
+
<![endif]-->
|
8
|
+
meta content='text/html; charset=utf-8' http-equiv='Content-Type'
|
9
|
+
meta name='viewport' content='width=device-width,initial-scale=1'
|
10
|
+
title = @title.present? ? "#{@title} | Tennpipes Admin" : "#{pat('login.title')} | Tennpipes Admin"
|
11
|
+
= favicon_tag 'favicon.ico'
|
12
|
+
= stylesheet_link_tag 'bootstrap', 'application'
|
13
|
+
|
14
|
+
body
|
15
|
+
= form_tag url(:sessions, :create), :class=>'login form-horizontal' do
|
16
|
+
div class="login-header modal-header"
|
17
|
+
div class="login-logo" = image_tag('logo.png', :alt => "Tennpipes's logo", :height => 250, :width => 193)
|
18
|
+
div class="login-body modal-body"
|
19
|
+
= {:error => 'danger', :warning => 'warning', :success => 'success', :notice => 'info'}.map { |type, class_name| flash_tag(type, :class => "alert alert-#{class_name} fade in", :bootstrap => true) }.join.html_safe
|
20
|
+
|
21
|
+
div class='form-group'
|
22
|
+
label for="email" class='col-lg-2 control-label' = pat('login.email')
|
23
|
+
div class='col-lg-10' = email_field_tag :email, :id => :email, :value => params[:email], :autofocus => true, :class => 'form-control'
|
24
|
+
|
25
|
+
div class='form-group'
|
26
|
+
label for="password" class='col-lg-2 control-label' = pat('login.password')
|
27
|
+
div class='col-lg-10' = password_field_tag :password, :id => :password, :class => 'form-control'
|
28
|
+
|
29
|
+
fieldset class='login-control-group-last control-group'
|
30
|
+
div class='login-controls controls'
|
31
|
+
label class="login-bypass-label checkbox"
|
32
|
+
= check_box_tag :bypass
|
33
|
+
| #{pat('login.bypass')}
|
34
|
+
|
35
|
+
div class="login-footer modal-footer"
|
36
|
+
= submit_tag(pat('login.sign_in'), :class => 'btn btn-primary pull-right')
|
37
|
+
= javascript_include_tag 'jquery-1.11.0.min', (Tennpipes.env == :production ? 'bootstrap/bootstrap.min' : %w[bootstrap/affix bootstrap/alert bootstrap/button bootstrap/carousel bootstrap/collapse bootstrap/dropdown bootstrap/tooltip bootstrap/transition bootstrap/modal bootstrap/popover bootstrap/scrollspy bootstrap/tab]), :application
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<%- @orm.column_fields.each_with_index do |column, index| -%>
|
2
|
+
- error = <%= @orm.has_error(column[:name]) %>
|
3
|
+
fieldset class='control-group#{error ? ' has-error' : ''}'
|
4
|
+
= f.label :<%= column[:name] %>, :class => 'control-label'
|
5
|
+
div class='controls'
|
6
|
+
= f.<%= column[:field_type] %> :<%= column[:name] %>, :class => 'form-control input-large input-with-feedback'<%- if (index == 0) -%>, :autofocus => true<%- end -%>
|
7
|
+
|
8
|
+
span class='help-inline' = error ? f.error_message_on(:<%= column[:name] %>, :class => 'text-error') : pat(:example)
|
9
|
+
<%- end -%>
|
10
|
+
|
11
|
+
div class="form-actions"
|
12
|
+
= f.submit pat(:save), :class => 'btn btn-primary'
|
13
|
+
|
|
14
|
+
= f.submit pat(:save_and_continue), :class => 'btn btn-info', :name => 'save_and_continue'
|
15
|
+
|
|
16
|
+
= link_to pat(:cancel), url(:<%= @orm.name_plural %>, :index), :class => 'btn btn-default'
|
@@ -0,0 +1,8 @@
|
|
1
|
+
ul class="nav nav-tabs"
|
2
|
+
li = link_to tag_icon(:list, pat(:list)), url(:<%= @orm.name_plural %>, :index)
|
3
|
+
li = link_to tag_icon(:plus, pat(:new)), url(:<%= @orm.name_plural %>, :new)
|
4
|
+
li class="active" = link_to tag_icon(:edit, pat(:edit)), url(:<%= @orm.name_plural %>, :edit, :id => @<%= @orm.name_singular %>.id)
|
5
|
+
|
6
|
+
div class="tabs-content"
|
7
|
+
= form_for :<%= @orm.name_singular %>, url(:<%= @orm.name_plural %>, :update, :id => @<%= @orm.name_singular %>.id), :method => :put, :class => 'form-horizontal' do |f|
|
8
|
+
= partial '<%= @orm.name_plural %>/form', :locals => { :f => f }
|
@@ -0,0 +1,56 @@
|
|
1
|
+
ul class="nav nav-tabs"
|
2
|
+
li class="active" = link_to tag_icon(:list, pat(:list)), url(:<%= @orm.name_plural %>, :index)
|
3
|
+
li = link_to tag_icon(:plus, pat(:new)), url(:<%= @orm.name_plural %>, :new)
|
4
|
+
|
5
|
+
div class="tabs-content"
|
6
|
+
table class="table table-striped table-hover table-condensed" id="list"
|
7
|
+
thead
|
8
|
+
tr
|
9
|
+
th class='header list-menu'
|
10
|
+
div class='dropdown'
|
11
|
+
a href='#' class='list-menu-toggle.dropdown-toggle dropdown-toggle' data-toggle='dropdown'
|
12
|
+
= tag_icon :magic
|
13
|
+
span class='caret'
|
14
|
+
ul class='list-menu dropdown-menu' role='dropdown'
|
15
|
+
li class='list-menu-wrapper' = link_to tag_icon('check-square-o', pat(:select_all)), '#', :id => 'select-all', :class => 'list-menu-link'
|
16
|
+
li class='list-menu-wrapper list-menu-wrapper-disabled' = link_to tag_icon('square-o', pat(:deselect_all)), '#', :id => 'deselect-all', :class => 'list-menu-link list-menu-link-disabled'
|
17
|
+
li class='list-menu-divider divider'
|
18
|
+
li class='list-menu-wrapper list-menu-wrapper-disabled'
|
19
|
+
= link_to tag_icon('trash-o', pat(:delete_selected)), '#', :id => 'delete-selected', :class => 'list-menu-link list-menu-link-disabled'
|
20
|
+
div class='list-menu-popover-delete-selected popover right'
|
21
|
+
div class='arrow'
|
22
|
+
h3 class='popover-title' = pat(:delete_selected_title)
|
23
|
+
div class='popover-content'
|
24
|
+
= form_tag url(:<%= @orm.name_plural %>, :destroy_many), :method => :delete do
|
25
|
+
= hidden_field_tag :<%= @orm.name_singular %>_ids, :'data-delete-many-ids' => true
|
26
|
+
= submit_tag pat(:delete), :class =>'list-menu-popover-delete-selected-btn btn btn-danger btn-small'
|
27
|
+
div class='btn btn-default btn-small cancel' = pat(:cancel)
|
28
|
+
<%- @orm.columns.each_with_index do |column, i| -%>
|
29
|
+
th class='header' = mat(:<%= @orm.name_singular %>, :<%= column.name %>)
|
30
|
+
<%- end -%>
|
31
|
+
th class='header list-row-action-header'
|
32
|
+
|
33
|
+
tbody
|
34
|
+
-@<%= @orm.name_plural %>.each do |<%= @orm.name_singular %>|
|
35
|
+
tr class='list-row'
|
36
|
+
td class='list-column list-selectable' = check_box_tag '<%= @orm.name_singular %>_ids[]', :value => <%= @orm.name_singular %>.id, :class => 'list-selectable-checkbox'
|
37
|
+
<%- @orm.columns.each_with_index do |column, i| -%>
|
38
|
+
<%- if column.name == 'created_at' || column.name == 'updated_at' -%>
|
39
|
+
td class='list-column' = time_ago_in_words <%= @orm.name_singular %>.<%= column.name %>
|
40
|
+
<%- elsif column.type == :boolean -%>
|
41
|
+
td class='list-column' = <%= @orm.name_singular %>.<%= column.name %> ? tag_icon(:ok) : tag_icon(:remove)
|
42
|
+
<%- else -%>
|
43
|
+
td class='list-column' = <%= @orm.name_singular %>.<%= column.name %>
|
44
|
+
<%- end -%>
|
45
|
+
<%- end -%>
|
46
|
+
td class='list-column list-row-action'
|
47
|
+
div class='list-row-action-wrapper'
|
48
|
+
= link_to tag_icon(:edit), :href => url(:<%= @orm.name_plural %>, :edit, :id => <%= @orm.name_singular %>.id), :rel => :tooltip, :title => "#{pat(:edit)} <%= @orm.name_singular %>", :class => 'list-row-action-wrapper-link'
|
49
|
+
= link_to tag_icon('trash-o'), :rel => :tooltip, :title => "#{pat(:delete)} <%= @orm.name_singular %>", :class => 'list-row-action-delete-one list-row-action-wrapper-link'
|
50
|
+
div class='popover list-row-action-popover-delete-one left'
|
51
|
+
div class='arrow'
|
52
|
+
h3 class='popover-title' = pat(:delete, :model => "<%= @orm.name_singular %>")
|
53
|
+
div class='popover-content'
|
54
|
+
= form_tag url(:<%= @orm.name_plural %>, :destroy, :id => <%= @orm.name_singular %>.id), :method => :delete do
|
55
|
+
= submit_tag pat(:delete), :class =>'list-row-action-popover-delete-one-btn btn btn-danger btn-small'
|
56
|
+
div class='btn btn-default btn-small cancel' = pat(:cancel)
|
@@ -0,0 +1,7 @@
|
|
1
|
+
ul class="nav nav-tabs"
|
2
|
+
li = link_to tag_icon(:list, pat(:list)), url(:<%= @orm.name_plural %>, :index)
|
3
|
+
li class="active" = link_to tag_icon(:plus, pat(:new)), url(:<%= @orm.name_plural %>, :new)
|
4
|
+
|
5
|
+
div class="tabs-content"
|
6
|
+
= form_for :<%= @orm.name_singular %>, url(:<%= @orm.name_plural %>, :create), :class => 'form-horizontal' do |f|
|
7
|
+
= partial '<%= @orm.name_plural %>/form', :locals => { :f => f }
|
@@ -0,0 +1,108 @@
|
|
1
|
+
module Tennpipes
|
2
|
+
module Admin
|
3
|
+
module Helpers
|
4
|
+
##
|
5
|
+
# Common helpers used for authorization within an application.
|
6
|
+
#
|
7
|
+
module AuthenticationHelpers
|
8
|
+
##
|
9
|
+
# Returns true if +current_account+ is logged and active.
|
10
|
+
#
|
11
|
+
def logged_in?
|
12
|
+
!current_account.nil?
|
13
|
+
end
|
14
|
+
|
15
|
+
##
|
16
|
+
# Returns the current_account, it's an instance of Account model.
|
17
|
+
#
|
18
|
+
def current_account
|
19
|
+
@current_account ||= login_from_session
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# Override the current_account, you must provide an instance of Account model.
|
24
|
+
#
|
25
|
+
# @example
|
26
|
+
# set_current_account(Account.authenticate(params[:email], params[:password])
|
27
|
+
#
|
28
|
+
def set_current_account(account=nil)
|
29
|
+
session[settings.session_id] = account ? account.id : nil
|
30
|
+
@current_account = account
|
31
|
+
end
|
32
|
+
|
33
|
+
##
|
34
|
+
# Returns true if the +current_account+ is allowed to see the requested path.
|
35
|
+
#
|
36
|
+
# For configure this role please refer to: +Tennpipes::Admin::AccessControl::Base+
|
37
|
+
#
|
38
|
+
def allowed?
|
39
|
+
access_control.allowed?(current_account, request.path_info)
|
40
|
+
end
|
41
|
+
|
42
|
+
##
|
43
|
+
# Returns project modules for the current account.
|
44
|
+
#
|
45
|
+
def project_modules
|
46
|
+
access_control.project_modules(current_account)
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# Returns a helper useful in a +before_filter+ for check if
|
51
|
+
# an account are: +logged_in?+ and +allowed?+
|
52
|
+
#
|
53
|
+
# By default this method is used in Admin Apps.
|
54
|
+
#
|
55
|
+
def login_required
|
56
|
+
unless allowed?
|
57
|
+
store_location! if store_location
|
58
|
+
access_denied
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
##
|
63
|
+
# Store in session[:return_to] the env['REQUEST_URI'].
|
64
|
+
#
|
65
|
+
def store_location!
|
66
|
+
session[:return_to] = "#{ENV['RACK_BASE_URI']}#{env['REQUEST_URI']}" if env['REQUEST_URI']
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# Redirect the account to the page that requested an authentication or
|
71
|
+
# if the account is not allowed/logged return it to a default page.
|
72
|
+
#
|
73
|
+
def redirect_back_or_default(default)
|
74
|
+
return_to = session.delete(:return_to)
|
75
|
+
redirect(return_to || default)
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def access_denied
|
81
|
+
if login_page.present?
|
82
|
+
redirect url(login_page)
|
83
|
+
else
|
84
|
+
halt 401, "You don't have permission for this resource"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def login_page
|
89
|
+
settings.respond_to?(:login_page) && settings.login_page
|
90
|
+
end
|
91
|
+
|
92
|
+
def store_location
|
93
|
+
settings.respond_to?(:store_location) && settings.store_location
|
94
|
+
end
|
95
|
+
|
96
|
+
def login_from_session
|
97
|
+
admin_model_obj.find_by_id(session[settings.session_id]) if admin_model_obj
|
98
|
+
end
|
99
|
+
|
100
|
+
def admin_model_obj
|
101
|
+
@_admin_model_obj ||= settings.admin_model.constantize
|
102
|
+
rescue NameError
|
103
|
+
raise Tennpipes::Admin::AccessControlError, "You must define an #{settings.admin_model} Model"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|