puffer 0.0.32 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|