puffer 0.0.32 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +7 -0
- data/Gemfile +1 -26
- data/Gemfile.lock +66 -64
- data/README.md +34 -23
- data/Rakefile +1 -11
- data/VERSION +1 -1
- data/app/assets/javascripts/puffer/application.js +6 -1
- data/app/assets/javascripts/puffer/associations.js +18 -0
- data/app/assets/javascripts/puffer/puffer.js +7 -0
- data/app/assets/javascripts/puffer/right-calendar-src.js +19 -3
- data/app/assets/javascripts/puffer/right-dnd-src.js +591 -0
- data/app/assets/javascripts/puffer/right-in-edit-src.js +373 -0
- data/app/assets/javascripts/puffer/right-keys-src.js +87 -0
- data/app/assets/javascripts/puffer/{paginator.js → right-paginator-src.js} +0 -0
- data/app/assets/javascripts/puffer/right-slider-src.js +29 -32
- data/app/assets/javascripts/puffer/right-sortable-src.js +430 -0
- data/app/assets/javascripts/puffer/right-src.js +358 -99
- data/app/assets/stylesheets/puffer/puffer.css +29 -4
- data/app/components/base/form.html.erb +8 -14
- data/app/components/base_component.rb +1 -1
- data/app/components/boolean/form.html.erb +5 -3
- data/app/components/boolean/index.html.erb +6 -2
- data/app/components/boolean_component.rb +2 -2
- data/app/components/date_time/filter.html.erb +9 -0
- data/app/components/date_time/form.html.erb +8 -4
- data/app/components/date_time_component.rb +21 -5
- data/app/components/file/form.html.erb +8 -4
- data/app/components/hidden/form.html.erb +3 -1
- data/app/components/nested_attributes_many/form.html.erb +47 -0
- data/app/components/nested_attributes_many_component.rb +7 -0
- data/app/components/nested_attributes_one/form.html.erb +48 -0
- data/app/components/nested_attributes_one_component.rb +7 -0
- data/app/components/password/form.html.erb +8 -4
- data/app/components/password_component.rb +1 -1
- data/app/components/references_many/index.html.erb +1 -1
- data/app/components/references_one/choose.html.erb +1 -1
- data/app/components/references_one/form.html.erb +10 -9
- data/app/components/references_one_component.rb +0 -1
- data/app/components/render_component.rb +13 -0
- data/app/components/select/filter.html.erb +4 -2
- data/app/components/select/form.html.erb +8 -4
- data/app/components/text/form.html.erb +8 -4
- data/app/controllers/admin/sessions_controller.rb +1 -21
- data/app/controllers/puffer/base.rb +10 -3
- data/app/controllers/puffer/dashboard_base.rb +7 -1
- data/app/controllers/puffer/{sessions_base.rb → sessions/base.rb} +10 -7
- data/app/controllers/puffer/sessions/clearance.rb +29 -0
- data/app/controllers/puffer/{sessions_devise_base.rb → sessions/devise.rb} +1 -1
- data/app/controllers/puffer/sessions/simple.rb +28 -0
- data/app/controllers/puffer/tree_base.rb +1 -1
- data/app/models/puffer_user.rb +3 -0
- data/app/views/layouts/puffer.html.erb +3 -3
- data/app/views/puffer/base/_edit.html.erb +15 -0
- data/app/views/puffer/base/_index.html.erb +26 -0
- data/app/views/puffer/base/_show.html.erb +13 -0
- data/app/views/puffer/base/_table.html.erb +1 -1
- data/app/views/puffer/base/edit.html.erb +1 -15
- data/app/views/puffer/base/edit.js.erb +1 -0
- data/app/views/puffer/base/index.html.erb +1 -20
- data/app/views/puffer/base/index.js.erb +1 -0
- data/app/views/puffer/base/new.html.erb +1 -1
- data/app/views/puffer/base/show.html.erb +1 -22
- data/app/views/puffer/base/show.js.erb +1 -0
- data/app/views/puffer/base/update.js.erb +1 -0
- data/app/views/puffer/sessions/base/new.html.erb +11 -0
- data/app/views/puffer/tree_base/_record.html.erb +1 -1
- data/lib/puffer/component.rb +14 -47
- data/lib/puffer/controller/auth.rb +13 -9
- data/lib/puffer/controller/config.rb +18 -0
- data/lib/puffer/controller/mutate.rb +8 -8
- data/lib/puffer/engine.rb +5 -0
- data/lib/puffer/field.rb +5 -11
- data/lib/puffer/filters.rb +86 -56
- data/lib/puffer/helpers/component_helper.rb +24 -0
- data/lib/puffer/helpers/puffer_helper.rb +65 -0
- data/lib/puffer/helpers/puffer_tree_helper.rb +19 -0
- data/lib/puffer/orm_adapter/active_record.rb +40 -11
- data/lib/puffer/orm_adapter/base.rb +9 -0
- data/lib/puffer/orm_adapter/mongoid.rb +32 -9
- data/lib/puffer/resource/node.rb +2 -2
- data/lib/puffer/resource/routing.rb +30 -16
- data/lib/puffer/resource.rb +20 -20
- data/lib/puffer/version.rb +3 -0
- data/lib/puffer.rb +26 -5
- data/puffer.gemspec +34 -296
- data/spec/app/components/base_component_spec.rb +1 -1
- data/spec/app/components/boolean_component_spec.rb +2 -0
- data/spec/app/components/date_time_component_spec.rb +1 -0
- data/spec/app/components/file_component_spec.rb +1 -0
- data/spec/app/components/hidden_component_spec.rb +1 -0
- data/spec/app/components/password_component_spec.rb +2 -0
- data/spec/app/components/select_component_spec.rb +1 -0
- data/spec/app/components/string_component_spec.rb +1 -0
- data/spec/app/components/text_component_spec.rb +1 -0
- data/spec/dummy/app/controllers/admin/news_controller.rb +2 -0
- data/spec/dummy/app/controllers/admin/profiles_controller.rb +1 -1
- data/spec/dummy/app/controllers/admin/users_controller.rb +2 -0
- data/spec/dummy/app/controllers/orms/active_record_orm_primals_controller.rb +8 -0
- data/spec/dummy/app/helpers/news_helper.rb +7 -0
- data/spec/dummy/app/models/active_record_orm/has_many_reference.rb +5 -0
- data/spec/dummy/app/models/active_record_orm/has_one_reference.rb +5 -0
- data/spec/dummy/app/models/active_record_orm/primal.rb +4 -0
- data/spec/dummy/config/environments/development.rb +1 -1
- data/spec/dummy/db/migrate/20111120144025_create_active_record_orm_has_one_references.rb +10 -0
- data/spec/dummy/db/migrate/20111122203304_create_active_record_orm_has_many_references.rb +10 -0
- data/spec/dummy/db/schema.rb +15 -1
- data/spec/helpers/puffer_helper_spec.rb +1 -1
- data/spec/lib/fields_spec.rb +0 -9
- data/spec/lib/filters_spec.rb +4 -8
- data/spec/lib/orm_adapter/base_shared.rb +22 -0
- data/spec/spec_helper.rb +1 -1
- metadata +89 -60
- data/app/components/string/form.html.erb +0 -5
- data/app/helpers/puffer_helper.rb +0 -51
- data/app/helpers/puffer_tree_helper.rb +0 -15
- data/app/views/puffer/sessions_base/new.html.erb +0 -11
- data/lib/puffer/extensions/form.rb +0 -16
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class Puffer::Sessions::Simple < Puffer::Sessions::Base
|
|
2
|
+
|
|
3
|
+
setup do
|
|
4
|
+
model_name :puffer_user
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def new
|
|
8
|
+
@record = resource.new_member
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def create
|
|
12
|
+
p resource.attributes_key
|
|
13
|
+
@record = resource.adapter.find_first(:conditions => {:email => resource.attributes[:email]})
|
|
14
|
+
if @record && @record.authenticate(resource.attributes[:password])
|
|
15
|
+
session[:puffer_user_id] = @record.id
|
|
16
|
+
redirect_back_or admin_root_url
|
|
17
|
+
else
|
|
18
|
+
@record = resource.new_member :email => resource.attributes[:email]
|
|
19
|
+
render 'new'
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def destroy
|
|
24
|
+
session.delete(:puffer_user_id)
|
|
25
|
+
redirect_to new_admin_session_url
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
data/app/models/puffer_user.rb
CHANGED
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
<dt><%= f.label :puffer_search %></dt>
|
|
40
40
|
<dd><%= f.text_field :puffer_search %></dd>
|
|
41
41
|
|
|
42
|
-
<%
|
|
43
|
-
<%= field.render
|
|
42
|
+
<% filter_fields.columns.each do |field| %>
|
|
43
|
+
<%= field.render :filter, controller, puffer_filters %>
|
|
44
44
|
<% end %>
|
|
45
45
|
|
|
46
46
|
<dd><%= submit_tag 'Search', :name => nil %></dd>
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
</div>
|
|
57
57
|
</div>
|
|
58
58
|
<div class="column">
|
|
59
|
-
<div class="content">
|
|
59
|
+
<div class="content" id="content">
|
|
60
60
|
<%= yield %>
|
|
61
61
|
</div>
|
|
62
62
|
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<% @title = "Edit #{resource.human}" %>
|
|
2
|
+
<h1><%= @title %></h1>
|
|
3
|
+
<%= form_for record, :url => resource.member_path do |f| %>
|
|
4
|
+
<ul class="form">
|
|
5
|
+
<% update_fields.each do |field| -%>
|
|
6
|
+
<li><%= field.render :update, controller, record %></li>
|
|
7
|
+
<% end -%>
|
|
8
|
+
</ul>
|
|
9
|
+
|
|
10
|
+
<div class="buttons">
|
|
11
|
+
<%= f.submit t('puffer.save') %>
|
|
12
|
+
<%= f.submit t('puffer.save_and_exit') %>
|
|
13
|
+
<%= link_to 'cancel', (request.referer || resource.collectin_path) %>
|
|
14
|
+
</div>
|
|
15
|
+
<% end %>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<% @title = resource.human %>
|
|
2
|
+
<h1><%= @title %></h1>
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
<% if records.present? %>
|
|
6
|
+
<div class="paginator"></div>
|
|
7
|
+
|
|
8
|
+
<%= render :layout => 'table', :locals => {:table_fields => index_fields} do |record| %>
|
|
9
|
+
<%= link_to 'show', resource.member_path(record), :data => {'new-dialog-uri' => resource.member_path(record)} if configuration.show %>
|
|
10
|
+
<%= link_to 'edit', resource.edit_path(record) if update_fields.present? %>
|
|
11
|
+
<% _members.each do |member| %>
|
|
12
|
+
<%= link_to member.label, resource.member_path(record, :action => member.action) if member.display? %>
|
|
13
|
+
<% end %>
|
|
14
|
+
<%= link_to 'destroy', resource.member_path(record), :confirm => "Are you sure?", :method => :delete if configuration.destroy %>
|
|
15
|
+
<% end %>
|
|
16
|
+
|
|
17
|
+
<div class="paginator"></div>
|
|
18
|
+
|
|
19
|
+
<%= javascript_tag do %>
|
|
20
|
+
$$('.paginator').each(function(element) {
|
|
21
|
+
new Paginator({total: <%= records.num_pages %>, current: <%= params[:page] || 1 %>, link: {'href': '<%= resource.collection_path(:page => '%{page}', Puffer::Filters.model_name.param_key => puffer_filters.query).html_safe %>'}}).insertTo(element, 'instead');
|
|
22
|
+
});
|
|
23
|
+
<% end %>
|
|
24
|
+
<% else %>
|
|
25
|
+
<p>Sorry, but there is no records in <%= resource.human %></p>
|
|
26
|
+
<% end %>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<% @title = "Show #{resource.human}" %>
|
|
2
|
+
<h1><%= @title %></h1>
|
|
3
|
+
|
|
4
|
+
<ul class="show_entry">
|
|
5
|
+
<% show_fields.each do |field| -%>
|
|
6
|
+
<li>
|
|
7
|
+
<h2><%= field.human %></h2>
|
|
8
|
+
<div>
|
|
9
|
+
<%= field.render :show, controller, record %>
|
|
10
|
+
</div>
|
|
11
|
+
</li>
|
|
12
|
+
<% end if show_fields && record -%>
|
|
13
|
+
</ul>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<% records.each do |record| -%>
|
|
14
14
|
<tr>
|
|
15
15
|
<% table_fields.each do |field| -%>
|
|
16
|
-
<td><%= field.render
|
|
16
|
+
<td><%= field.render :index, controller, record %></td>
|
|
17
17
|
<% end -%>
|
|
18
18
|
<td class="actions">
|
|
19
19
|
<%= yield record %>
|
|
@@ -1,15 +1 @@
|
|
|
1
|
-
|
|
2
|
-
<h1><%= @title %></h1>
|
|
3
|
-
<%= form_for record, :url => resource.member_path do |f| %>
|
|
4
|
-
<ul class="form">
|
|
5
|
-
<% update_fields.each do |field| -%>
|
|
6
|
-
<li><%= field.render controller, :update, :form => f, :record => f.object %></li>
|
|
7
|
-
<% end -%>
|
|
8
|
-
</ul>
|
|
9
|
-
|
|
10
|
-
<div class="buttons">
|
|
11
|
-
<%= f.submit t('puffer.save') %>
|
|
12
|
-
<%= f.submit t('puffer.save_and_exit') %>
|
|
13
|
-
<%= link_to 'cancel', (request.referer || resource.collectin_path) %>
|
|
14
|
-
</div>
|
|
15
|
-
<% end %>
|
|
1
|
+
<%= render 'edit' %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= render 'edit' %>
|
|
@@ -1,20 +1 @@
|
|
|
1
|
-
|
|
2
|
-
<h1><%= @title %></h1>
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
<% if records.present? %>
|
|
6
|
-
<div class="rui-paginator" data-paginator="{total: <%= records.num_pages %>, current: <%= params[:page] || 1 %>, link: {href: '<%= resource.collection_path(:page => '%{page}') %>'}}"></div>
|
|
7
|
-
|
|
8
|
-
<%= render :layout => 'table', :locals => {:table_fields => index_fields} do |record| %>
|
|
9
|
-
<%= link_to 'edit', resource.edit_path(record) if update_fields.present? %>
|
|
10
|
-
<% _members.each do |member| %>
|
|
11
|
-
<%= link_to member.label, resource.member_path(record, :action => member.action) if member.display? %>
|
|
12
|
-
<% end %>
|
|
13
|
-
<%= link_to 'destroy', resource.member_path(record), :confirm => "Are you sure?", :method => :delete if configuration.destroy %>
|
|
14
|
-
<% end %>
|
|
15
|
-
|
|
16
|
-
<div class="rui-paginator" data-paginator="{total: <%= records.num_pages %>, current: <%= params[:page] || 1 %>, link: {href: '<%= resource.collection_path(:page => '%{page}') %>'}}"></div>
|
|
17
|
-
<% else %>
|
|
18
|
-
<p>Sorry, but there is no records in <%= resource.human %></p>
|
|
19
|
-
<% end %>
|
|
20
|
-
|
|
1
|
+
<%= render 'index' %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
$('content').update('<%= j render 'index' %>');
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<%= form_for record, :url => resource.collection_path do |f| %>
|
|
4
4
|
<ul class="form">
|
|
5
5
|
<% create_fields.each do |field| -%>
|
|
6
|
-
<li><%= field.render
|
|
6
|
+
<li><%= field.render :create, controller, record %></li>
|
|
7
7
|
<% end -%>
|
|
8
8
|
</ul>
|
|
9
9
|
|
|
@@ -1,22 +1 @@
|
|
|
1
|
-
|
|
2
|
-
<h1><%= @title %></h1>
|
|
3
|
-
<ul class="show_entry">
|
|
4
|
-
<% if resource.children.present? %>
|
|
5
|
-
<li>
|
|
6
|
-
<h2>Associations</h2>
|
|
7
|
-
<% resource.children.each do |child| %>
|
|
8
|
-
<%= link_to child.human, child.collection_path %>
|
|
9
|
-
<% end %>
|
|
10
|
-
</li>
|
|
11
|
-
<% end %>
|
|
12
|
-
|
|
13
|
-
<% show_fields.each do |field| -%>
|
|
14
|
-
<li>
|
|
15
|
-
<h2><%= field.human %></h2>
|
|
16
|
-
<div>
|
|
17
|
-
<%= render_field field, record %>
|
|
18
|
-
</div>
|
|
19
|
-
</li>
|
|
20
|
-
<% end if show_fields && record -%>
|
|
21
|
-
</ul>
|
|
22
|
-
|
|
1
|
+
<%= render 'show' %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= render 'show' %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= render 'edit' %>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%= form_for record, :url => admin_session_path(:return_to => params[:return_to]), :method => :post do |f| %>
|
|
2
|
+
<ul class="form">
|
|
3
|
+
<% create_fields.each do |field| -%>
|
|
4
|
+
<li><%= field.render :create, controller, record %></li>
|
|
5
|
+
<% end -%>
|
|
6
|
+
</ul>
|
|
7
|
+
|
|
8
|
+
<div class="buttons">
|
|
9
|
+
<%= f.submit 'Login' %>
|
|
10
|
+
</div>
|
|
11
|
+
<% end %>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<% end %>
|
|
13
13
|
<span class="handle">⇅</span>
|
|
14
14
|
<% tree_fields.each do |field| -%>
|
|
15
|
-
<span><%= field.render
|
|
15
|
+
<span><%= field.render :tree, controller, record %></span>
|
|
16
16
|
<% end -%>
|
|
17
17
|
</dt>
|
|
18
18
|
<dd class="column">
|
data/lib/puffer/component.rb
CHANGED
|
@@ -14,29 +14,7 @@ module Puffer
|
|
|
14
14
|
|
|
15
15
|
abstract!
|
|
16
16
|
|
|
17
|
-
module ComponentHelper
|
|
18
|
-
def component_wrap name = :span, options = {}, &block
|
|
19
|
-
content_tag name, options.merge(:id => component_id), &block
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def clean_content_for name, *args, &block
|
|
23
|
-
@view_flow.set name, ''
|
|
24
|
-
content_for name, *args, &block
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def paginate(scope, options = {}, &block)
|
|
28
|
-
paginator = Kaminari::Helpers::Paginator.new parent_controller.view_context, options.reverse_merge(:current_page => scope.current_page, :num_pages => scope.num_pages, :per_page => scope.limit_value, :param_name => Kaminari.config.param_name, :remote => false)
|
|
29
|
-
paginator.to_s
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
17
|
module ClassMethods
|
|
34
|
-
def render_component parent_controller, field, context, *args
|
|
35
|
-
klass = "#{field.type}_component".camelize.constantize rescue StringComponent
|
|
36
|
-
component = klass.new field
|
|
37
|
-
component.process parent_controller, context, *args
|
|
38
|
-
end
|
|
39
|
-
|
|
40
18
|
def controller_path
|
|
41
19
|
@controller_path ||= name.sub(/Component$/, '').underscore unless anonymous?
|
|
42
20
|
end
|
|
@@ -45,40 +23,37 @@ module Puffer
|
|
|
45
23
|
extend ClassMethods
|
|
46
24
|
|
|
47
25
|
include AbstractController::Rendering
|
|
48
|
-
include AbstractController::Helpers
|
|
49
26
|
include AbstractController::Translation
|
|
50
27
|
include AbstractController::Logger
|
|
51
28
|
include AbstractController::Layouts
|
|
29
|
+
include ActionController::Helpers
|
|
52
30
|
|
|
53
31
|
include ActionController::RequestForgeryProtection
|
|
54
32
|
include ActionController::UrlFor
|
|
55
33
|
include Rails.application.routes.url_helpers
|
|
56
34
|
|
|
57
|
-
helper
|
|
35
|
+
helper 'puffer/helpers/component', 'puffer/helpers/puffer'
|
|
58
36
|
|
|
59
|
-
|
|
37
|
+
attr_reader :parent_controller, :field, :identifer, :record, :records, :resource, :opts
|
|
60
38
|
delegate :env, :request, :params, :session, :_members, :_collections, :to => :parent_controller
|
|
61
|
-
helper_method :params, :session, :
|
|
39
|
+
helper_method :params, :session, :_members, :_collections, :parent_controller, :field, :identifer, :component_id, :event_url, :event_path, :record, :records, :resource, :opts
|
|
62
40
|
|
|
63
41
|
def initialize field
|
|
64
42
|
super()
|
|
65
43
|
@field = field
|
|
66
44
|
end
|
|
67
45
|
|
|
68
|
-
def process parent_controller,
|
|
46
|
+
def process context, parent_controller, record, options = {}
|
|
69
47
|
@parent_controller = parent_controller
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
def send_action method_name, *args
|
|
74
|
-
@opts = args.extract_options!
|
|
75
|
-
if @opts[:record]
|
|
76
|
-
@resource = Puffer::Resource.new(params.merge(:member => @opts[:record]), parent_controller)
|
|
77
|
-
else
|
|
78
|
-
@resource = parent_controller.resource
|
|
79
|
-
end
|
|
48
|
+
@record = record
|
|
49
|
+
@opts = options
|
|
80
50
|
@identifer = params[:identifer] || generate_identifer
|
|
81
|
-
|
|
51
|
+
|
|
52
|
+
resource_params = params
|
|
53
|
+
resource_params.merge!(:id => record.id) if record && record.respond_to?(:id)
|
|
54
|
+
@resource = Puffer::Resource.new(resource_params, parent_controller)
|
|
55
|
+
|
|
56
|
+
super context
|
|
82
57
|
end
|
|
83
58
|
|
|
84
59
|
def render *args, &block
|
|
@@ -101,7 +76,7 @@ module Puffer
|
|
|
101
76
|
end
|
|
102
77
|
|
|
103
78
|
def method_for_action action_name
|
|
104
|
-
fallback_action(action_name)
|
|
79
|
+
super fallback_action(action_name)
|
|
105
80
|
end
|
|
106
81
|
|
|
107
82
|
def fallback_action action_name
|
|
@@ -120,14 +95,6 @@ module Puffer
|
|
|
120
95
|
{:action => :event, :event => name, :field => field.to_s, :fieldset => field.field_set.name, :identifer => identifer}
|
|
121
96
|
end
|
|
122
97
|
|
|
123
|
-
def record
|
|
124
|
-
@record || instance_variable_get("@#{resource.name.singularize}")
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
def records
|
|
128
|
-
@records || instance_variable_get("@#{resource.name.pluralize}")
|
|
129
|
-
end
|
|
130
|
-
|
|
131
98
|
def component_id
|
|
132
99
|
"component_#{identifer}"
|
|
133
100
|
end
|
|
@@ -35,15 +35,7 @@ module Puffer
|
|
|
35
35
|
# method, or you should properly redefine +has_puffer_access?+ See
|
|
36
36
|
# +has_puffer_access?+ source and docs.
|
|
37
37
|
def current_puffer_user
|
|
38
|
-
@current_puffer_user ||= super rescue (
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# Used in before_filter to prevent unauthorized access
|
|
42
|
-
def require_puffer_user
|
|
43
|
-
unless has_puffer_access?(puffer_namespace)
|
|
44
|
-
redirect_to new_admin_session_url(:return_to => request.fullpath)
|
|
45
|
-
return false
|
|
46
|
-
end
|
|
38
|
+
@current_puffer_user ||= super rescue (::Admin::SessionsController.model.to_adapter.find_first(:conditions => {:_id => session[:puffer_user_id]}) if session[:puffer_user_id])
|
|
47
39
|
end
|
|
48
40
|
|
|
49
41
|
# This method is also part of auth system and it can be redefined at the
|
|
@@ -63,6 +55,18 @@ module Puffer
|
|
|
63
55
|
super rescue (current_puffer_user && current_puffer_user.has_role?(namespace))
|
|
64
56
|
end
|
|
65
57
|
|
|
58
|
+
# Used in before_filter to prevent unauthorized access
|
|
59
|
+
def require_puffer_user
|
|
60
|
+
unless has_puffer_access?(puffer_namespace)
|
|
61
|
+
redirect_to new_admin_session_url(:return_to => request.fullpath)
|
|
62
|
+
return false
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def redirect_back_or default
|
|
67
|
+
redirect_to(params[:return_to].presence || default)
|
|
68
|
+
end
|
|
69
|
+
|
|
66
70
|
end
|
|
67
71
|
|
|
68
72
|
end
|
|
@@ -1,12 +1,30 @@
|
|
|
1
|
+
# Every puffer controller can be configured
|
|
2
|
+
# Something like:
|
|
3
|
+
#
|
|
4
|
+
# setup do
|
|
5
|
+
# group :posting
|
|
6
|
+
# model_name 'article'
|
|
7
|
+
# end
|
|
8
|
+
#
|
|
1
9
|
module Puffer
|
|
2
10
|
module Controller
|
|
3
11
|
module Config
|
|
4
12
|
extend ActiveSupport::Concern
|
|
5
13
|
|
|
6
14
|
included do
|
|
15
|
+
# Configuration options with default values:
|
|
16
|
+
# group - interface group name, displays as tab in interface header
|
|
7
17
|
puffer_class_attribute :group, :default
|
|
18
|
+
# model_name - obviosly - model name for controller
|
|
8
19
|
puffer_class_attribute :model_name
|
|
20
|
+
# destroy - records destruction allowed?
|
|
9
21
|
puffer_class_attribute :destroy, true
|
|
22
|
+
# destroy - records show method allowed?
|
|
23
|
+
puffer_class_attribute :show, false
|
|
24
|
+
# scope - default scope name for all queries
|
|
25
|
+
puffer_class_attribute :scope
|
|
26
|
+
# order - default order option. Is a string with field name and direction. Ex: 'email', 'first_name asc', 'title desc'
|
|
27
|
+
puffer_class_attribute :order
|
|
10
28
|
|
|
11
29
|
helper_method :configuration
|
|
12
30
|
end
|
|
@@ -4,9 +4,9 @@ module Puffer
|
|
|
4
4
|
extend ActiveSupport::Concern
|
|
5
5
|
|
|
6
6
|
included do
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
delegate :
|
|
7
|
+
helper 'puffer/helpers/puffer'
|
|
8
|
+
|
|
9
|
+
delegate :model, :model_name, :to => 'self.class'
|
|
10
10
|
helper_method :puffer_filters, :puffer_namespace, :resource, :record, :records
|
|
11
11
|
end
|
|
12
12
|
|
|
@@ -18,7 +18,11 @@ module Puffer
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def puffer_filters
|
|
21
|
-
@puffer_filters ||=
|
|
21
|
+
@puffer_filters ||= begin
|
|
22
|
+
filters = params[Puffer::Filters.model_name.param_key] || {}
|
|
23
|
+
filters = {:puffer_order => configuration.order}.merge(filters) if configuration.order.present?
|
|
24
|
+
Puffer::Filters.new filter_fields, filters
|
|
25
|
+
end
|
|
22
26
|
end
|
|
23
27
|
|
|
24
28
|
def puffer_namespace
|
|
@@ -45,10 +49,6 @@ module Puffer
|
|
|
45
49
|
true
|
|
46
50
|
end
|
|
47
51
|
|
|
48
|
-
def puffer_filters_class
|
|
49
|
-
@puffer_filters_class ||= Puffer::Filters.controller_filters(self)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
52
|
def model_name
|
|
53
53
|
@model_name ||= (configuration.model_name || controller_name.singularize).to_s
|
|
54
54
|
end
|
data/lib/puffer/engine.rb
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
module Puffer
|
|
2
2
|
class Engine < Rails::Engine
|
|
3
3
|
config.autoload_paths << File.join(root, 'lib')
|
|
4
|
+
|
|
5
|
+
initializer 'puffer_components.set_configs', :after => 'action_controller.set_configs' do |app|
|
|
6
|
+
Puffer::Component::Base.helpers_path = app.config.helpers_paths
|
|
7
|
+
Puffer::Component::Base.helper :all
|
|
8
|
+
end
|
|
4
9
|
end
|
|
5
10
|
end
|
data/lib/puffer/field.rb
CHANGED
|
@@ -36,10 +36,6 @@ module Puffer
|
|
|
36
36
|
@human ||= model && model.human_attribute_name(name)
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
-
def order
|
|
40
|
-
@order ||= options[:order] || query_column
|
|
41
|
-
end
|
|
42
|
-
|
|
43
39
|
def type
|
|
44
40
|
@type ||= options[:type] || custom_type || column_type || :string
|
|
45
41
|
end
|
|
@@ -49,7 +45,7 @@ module Puffer
|
|
|
49
45
|
end
|
|
50
46
|
|
|
51
47
|
def reflection
|
|
52
|
-
@reflection ||= model && model.
|
|
48
|
+
@reflection ||= model && model.to_adapter.reflection(name)
|
|
53
49
|
end
|
|
54
50
|
|
|
55
51
|
def input_options
|
|
@@ -64,8 +60,9 @@ module Puffer
|
|
|
64
60
|
@component ||= component_class.new self
|
|
65
61
|
end
|
|
66
62
|
|
|
67
|
-
def render
|
|
68
|
-
|
|
63
|
+
def render context, controller, *record_and_options
|
|
64
|
+
options = record_and_options.extract_options!
|
|
65
|
+
component.process context, controller, record_and_options.first, options
|
|
69
66
|
end
|
|
70
67
|
|
|
71
68
|
def model
|
|
@@ -85,12 +82,9 @@ module Puffer
|
|
|
85
82
|
end
|
|
86
83
|
|
|
87
84
|
def column_type
|
|
85
|
+
reflection.macro if reflection
|
|
88
86
|
column[:type] if column
|
|
89
87
|
end
|
|
90
88
|
|
|
91
|
-
def query_column
|
|
92
|
-
"#{model.table_name}.#{name}" if column
|
|
93
|
-
end
|
|
94
|
-
|
|
95
89
|
end
|
|
96
90
|
end
|