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.
Files changed (117) hide show
  1. data/.gitignore +7 -0
  2. data/Gemfile +1 -26
  3. data/Gemfile.lock +66 -64
  4. data/README.md +34 -23
  5. data/Rakefile +1 -11
  6. data/VERSION +1 -1
  7. data/app/assets/javascripts/puffer/application.js +6 -1
  8. data/app/assets/javascripts/puffer/associations.js +18 -0
  9. data/app/assets/javascripts/puffer/puffer.js +7 -0
  10. data/app/assets/javascripts/puffer/right-calendar-src.js +19 -3
  11. data/app/assets/javascripts/puffer/right-dnd-src.js +591 -0
  12. data/app/assets/javascripts/puffer/right-in-edit-src.js +373 -0
  13. data/app/assets/javascripts/puffer/right-keys-src.js +87 -0
  14. data/app/assets/javascripts/puffer/{paginator.js → right-paginator-src.js} +0 -0
  15. data/app/assets/javascripts/puffer/right-slider-src.js +29 -32
  16. data/app/assets/javascripts/puffer/right-sortable-src.js +430 -0
  17. data/app/assets/javascripts/puffer/right-src.js +358 -99
  18. data/app/assets/stylesheets/puffer/puffer.css +29 -4
  19. data/app/components/base/form.html.erb +8 -14
  20. data/app/components/base_component.rb +1 -1
  21. data/app/components/boolean/form.html.erb +5 -3
  22. data/app/components/boolean/index.html.erb +6 -2
  23. data/app/components/boolean_component.rb +2 -2
  24. data/app/components/date_time/filter.html.erb +9 -0
  25. data/app/components/date_time/form.html.erb +8 -4
  26. data/app/components/date_time_component.rb +21 -5
  27. data/app/components/file/form.html.erb +8 -4
  28. data/app/components/hidden/form.html.erb +3 -1
  29. data/app/components/nested_attributes_many/form.html.erb +47 -0
  30. data/app/components/nested_attributes_many_component.rb +7 -0
  31. data/app/components/nested_attributes_one/form.html.erb +48 -0
  32. data/app/components/nested_attributes_one_component.rb +7 -0
  33. data/app/components/password/form.html.erb +8 -4
  34. data/app/components/password_component.rb +1 -1
  35. data/app/components/references_many/index.html.erb +1 -1
  36. data/app/components/references_one/choose.html.erb +1 -1
  37. data/app/components/references_one/form.html.erb +10 -9
  38. data/app/components/references_one_component.rb +0 -1
  39. data/app/components/render_component.rb +13 -0
  40. data/app/components/select/filter.html.erb +4 -2
  41. data/app/components/select/form.html.erb +8 -4
  42. data/app/components/text/form.html.erb +8 -4
  43. data/app/controllers/admin/sessions_controller.rb +1 -21
  44. data/app/controllers/puffer/base.rb +10 -3
  45. data/app/controllers/puffer/dashboard_base.rb +7 -1
  46. data/app/controllers/puffer/{sessions_base.rb → sessions/base.rb} +10 -7
  47. data/app/controllers/puffer/sessions/clearance.rb +29 -0
  48. data/app/controllers/puffer/{sessions_devise_base.rb → sessions/devise.rb} +1 -1
  49. data/app/controllers/puffer/sessions/simple.rb +28 -0
  50. data/app/controllers/puffer/tree_base.rb +1 -1
  51. data/app/models/puffer_user.rb +3 -0
  52. data/app/views/layouts/puffer.html.erb +3 -3
  53. data/app/views/puffer/base/_edit.html.erb +15 -0
  54. data/app/views/puffer/base/_index.html.erb +26 -0
  55. data/app/views/puffer/base/_show.html.erb +13 -0
  56. data/app/views/puffer/base/_table.html.erb +1 -1
  57. data/app/views/puffer/base/edit.html.erb +1 -15
  58. data/app/views/puffer/base/edit.js.erb +1 -0
  59. data/app/views/puffer/base/index.html.erb +1 -20
  60. data/app/views/puffer/base/index.js.erb +1 -0
  61. data/app/views/puffer/base/new.html.erb +1 -1
  62. data/app/views/puffer/base/show.html.erb +1 -22
  63. data/app/views/puffer/base/show.js.erb +1 -0
  64. data/app/views/puffer/base/update.js.erb +1 -0
  65. data/app/views/puffer/sessions/base/new.html.erb +11 -0
  66. data/app/views/puffer/tree_base/_record.html.erb +1 -1
  67. data/lib/puffer/component.rb +14 -47
  68. data/lib/puffer/controller/auth.rb +13 -9
  69. data/lib/puffer/controller/config.rb +18 -0
  70. data/lib/puffer/controller/mutate.rb +8 -8
  71. data/lib/puffer/engine.rb +5 -0
  72. data/lib/puffer/field.rb +5 -11
  73. data/lib/puffer/filters.rb +86 -56
  74. data/lib/puffer/helpers/component_helper.rb +24 -0
  75. data/lib/puffer/helpers/puffer_helper.rb +65 -0
  76. data/lib/puffer/helpers/puffer_tree_helper.rb +19 -0
  77. data/lib/puffer/orm_adapter/active_record.rb +40 -11
  78. data/lib/puffer/orm_adapter/base.rb +9 -0
  79. data/lib/puffer/orm_adapter/mongoid.rb +32 -9
  80. data/lib/puffer/resource/node.rb +2 -2
  81. data/lib/puffer/resource/routing.rb +30 -16
  82. data/lib/puffer/resource.rb +20 -20
  83. data/lib/puffer/version.rb +3 -0
  84. data/lib/puffer.rb +26 -5
  85. data/puffer.gemspec +34 -296
  86. data/spec/app/components/base_component_spec.rb +1 -1
  87. data/spec/app/components/boolean_component_spec.rb +2 -0
  88. data/spec/app/components/date_time_component_spec.rb +1 -0
  89. data/spec/app/components/file_component_spec.rb +1 -0
  90. data/spec/app/components/hidden_component_spec.rb +1 -0
  91. data/spec/app/components/password_component_spec.rb +2 -0
  92. data/spec/app/components/select_component_spec.rb +1 -0
  93. data/spec/app/components/string_component_spec.rb +1 -0
  94. data/spec/app/components/text_component_spec.rb +1 -0
  95. data/spec/dummy/app/controllers/admin/news_controller.rb +2 -0
  96. data/spec/dummy/app/controllers/admin/profiles_controller.rb +1 -1
  97. data/spec/dummy/app/controllers/admin/users_controller.rb +2 -0
  98. data/spec/dummy/app/controllers/orms/active_record_orm_primals_controller.rb +8 -0
  99. data/spec/dummy/app/helpers/news_helper.rb +7 -0
  100. data/spec/dummy/app/models/active_record_orm/has_many_reference.rb +5 -0
  101. data/spec/dummy/app/models/active_record_orm/has_one_reference.rb +5 -0
  102. data/spec/dummy/app/models/active_record_orm/primal.rb +4 -0
  103. data/spec/dummy/config/environments/development.rb +1 -1
  104. data/spec/dummy/db/migrate/20111120144025_create_active_record_orm_has_one_references.rb +10 -0
  105. data/spec/dummy/db/migrate/20111122203304_create_active_record_orm_has_many_references.rb +10 -0
  106. data/spec/dummy/db/schema.rb +15 -1
  107. data/spec/helpers/puffer_helper_spec.rb +1 -1
  108. data/spec/lib/fields_spec.rb +0 -9
  109. data/spec/lib/filters_spec.rb +4 -8
  110. data/spec/lib/orm_adapter/base_shared.rb +22 -0
  111. data/spec/spec_helper.rb +1 -1
  112. metadata +89 -60
  113. data/app/components/string/form.html.erb +0 -5
  114. data/app/helpers/puffer_helper.rb +0 -51
  115. data/app/helpers/puffer_tree_helper.rb +0 -15
  116. data/app/views/puffer/sessions_base/new.html.erb +0 -11
  117. 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
@@ -2,7 +2,7 @@ module Puffer
2
2
  class TreeBase < Puffer::Base
3
3
  unloadable
4
4
 
5
- helper :puffer_tree
5
+ helper 'puffer/helpers/puffer_tree'
6
6
 
7
7
  define_fieldset :tree, :fallbacks => :index
8
8
 
@@ -12,4 +12,7 @@ elsif defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.table_exists
12
12
  class PufferUser < ActiveRecord::Base
13
13
  include Puffer::PufferUser
14
14
  end
15
+ else
16
+ class PufferUser
17
+ end
15
18
  end
@@ -39,8 +39,8 @@
39
39
  <dt><%= f.label :puffer_search %></dt>
40
40
  <dd><%= f.text_field :puffer_search %></dd>
41
41
 
42
- <% index_fields.columns.each do |field| %>
43
- <%= field.render controller, :filter, :form => f %>
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 controller, :index, :record => record %></td>
16
+ <td><%= field.render :index, controller, record %></td>
17
17
  <% end -%>
18
18
  <td class="actions">
19
19
  <%= yield record %>
@@ -1,15 +1 @@
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 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
- <% @title = resource.human %>
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 controller, :create, :form => f, :record => f.object %></li>
6
+ <li><%= field.render :create, controller, record %></li>
7
7
  <% end -%>
8
8
  </ul>
9
9
 
@@ -1,22 +1 @@
1
- <% @title = "Show #{resource.human}" %>
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 controller, :tree, :record => record %></span>
15
+ <span><%= field.render :tree, controller, record %></span>
16
16
  <% end -%>
17
17
  </dt>
18
18
  <dd class="column">
@@ -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 ComponentHelper, PufferHelper
35
+ helper 'puffer/helpers/component', 'puffer/helpers/puffer'
58
36
 
59
- attr_accessor :parent_controller, :field, :opts, :identifer, :resource
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, :resource, :_members, :_collections, :parent_controller, :field, :opts, :identifer, :component_id, :event_url, :event_path, :record, :records
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, context, *args
46
+ def process context, parent_controller, record, options = {}
69
47
  @parent_controller = parent_controller
70
- super context, *args
71
- end
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
- send method_name, *args
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) || super
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 (PufferUser.find(session[:puffer_user_id]) if session[:puffer_user_id])
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
- layout 'puffer'
8
- helper :puffer
9
- delegate :puffer_filters_class, :model, :model_name, :to => 'self.class'
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 ||= puffer_filters_class.new params[puffer_filters_class.model_name.param_key]
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.reflect_on_association(name.to_sym)
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 controller, context, *args
68
- component.process controller, context, *args
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