tennpipes-su 3.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.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
|