Module: ActiveAdmin::ResourceController::DataAccess
- Extended by:
- ActiveSupport::Concern
- Includes:
- Callbacks, ScopeChain
- Included in:
- ActiveAdmin::ResourceController
- Defined in:
- lib/active_admin/resource_controller/data_access.rb
Overview
This module overrides most of the data access methods in Inherited Resources to provide Active Admin with it’s data.
The module also deals with authorization and resource callbacks.
Instance Method Summary collapse
-
#apply_authorization_scope(collection) ⇒ Object
protected
Gives the authorization library a change to pre-scope the collection.
- #apply_decorator(chain) ⇒ Object protected
-
#apply_filtering(chain) ⇒ Object
protected
Applies any Ransack search methods to the currently scoped collection.
- #apply_pagination(chain) ⇒ Object protected
- #apply_scoping(chain) ⇒ Object protected
- #apply_sorting(chain) ⇒ Object protected
-
#build_new_resource ⇒ Object
protected
Builds a new resource.
-
#build_resource ⇒ Object
protected
Builds, memoize and authorize a new instance of the resource.
- #clean_search_params(search_params) ⇒ Object protected
-
#collection ⇒ Object
protected
Retrieve, memoize and authorize the current collection from the db.
- #collection_before_scope ⇒ Object protected
-
#create_resource(object) ⇒ Object
protected
Calls all the appropriate callbacks and then creates the new resource.
- #current_scope ⇒ Object protected
- #decorator? ⇒ Boolean protected
- #decorator_class ⇒ Object protected
-
#destroy_resource(object) ⇒ Object
protected
Destroys an object from the database and calls appropriate callbacks.
-
#find_collection ⇒ Object
protected
Does the actual work of retrieving the current collection from the db.
-
#find_resource ⇒ Object
protected
Does the actual work of finding a resource in the database.
- #max_csv_records ⇒ Object protected
- #max_per_page ⇒ Object protected
- #per_page ⇒ Object protected
-
#resource ⇒ Object
protected
Retrieve, memoize and authorize a resource based on params.
-
#save_resource(object) ⇒ Object
protected
Calls all the appropriate callbacks and then saves the new resource.
-
#scoped_collection ⇒ Object
protected
Override this method in your controllers to modify the start point of our searches and index.
-
#update_resource(object, attributes) ⇒ Object
protected
Update an object with the given attributes.
Methods included from ScopeChain
Methods included from Callbacks
Instance Method Details
#apply_authorization_scope(collection) ⇒ Object (protected)
Gives the authorization library a change to pre-scope the collection.
In the case of the CanCan adapter, it calls ‘#accessible_by` on the collection.
212 213 214 215 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 212 def (collection) action_name = (params[:action]) .scope_collection(collection, action_name) end |
#apply_decorator(chain) ⇒ Object (protected)
293 294 295 296 297 298 299 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 293 def apply_decorator(chain) if decorator? decorator_class.decorate_collection(chain) else chain end end |
#apply_filtering(chain) ⇒ Object (protected)
Applies any Ransack search methods to the currently scoped collection. Both ‘search` and `ransack` are provided, but we use `ransack` to prevent conflicts.
235 236 237 238 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 235 def apply_filtering(chain) @search = chain.ransack clean_search_params params[:q] @search.result end |
#apply_pagination(chain) ⇒ Object (protected)
271 272 273 274 275 276 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 271 def apply_pagination(chain) page_method_name = Kaminari.config.page_method_name page = params[Kaminari.config.param_name] chain.send(page_method_name, page).per(per_page) end |
#apply_scoping(chain) ⇒ Object (protected)
249 250 251 252 253 254 255 256 257 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 249 def apply_scoping(chain) @collection_before_scope = chain if current_scope scope_chain(current_scope, chain) else chain end end |
#apply_sorting(chain) ⇒ Object (protected)
218 219 220 221 222 223 224 225 226 227 228 229 230 231 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 218 def apply_sorting(chain) params[:order] ||= active_admin_config.sort_order if params[:order] && params[:order] =~ /^([\w\_\.]+)_(desc|asc)$/ column = $1 order = $2 table = active_admin_config.resource_column_names.include?(column) ? active_admin_config.resource_table_name : nil table_column = (column =~ /\./) ? column : [table, active_admin_config.resource_quoted_column_name(column)].compact.join(".") chain.reorder("#{table_column} #{order}") else chain # just return the chain end end |
#build_new_resource ⇒ Object (protected)
Builds a new resource. This method uses the method_for_build provided by Inherited Resources.
141 142 143 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 141 def build_new_resource scoped_collection.send(method_for_build, *resource_params) end |
#build_resource ⇒ Object (protected)
Builds, memoize and authorize a new instance of the resource. The actual work of building the new instance is delegated to the #build_new_resource method.
This method is used to instantiate and authorize new resources in the new and create controller actions.
126 127 128 129 130 131 132 133 134 135 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 126 def build_resource return resource if resource = get_resource_ivar resource = build_new_resource run_build_callbacks resource resource set_resource_ivar(resource) end |
#clean_search_params(search_params) ⇒ Object (protected)
240 241 242 243 244 245 246 247 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 240 def clean_search_params(search_params) return {} unless search_params.is_a?(Hash) search_params = search_params.dup search_params.delete_if do |key, value| value == "" end search_params end |
#collection ⇒ Object (protected)
Retrieve, memoize and authorize the current collection from the db. This method delegates the finding of the collection to #find_collection.
Once #collection has been called, the collection is available using either the @collection instance variable or an instance variable named after the resource that the collection is for. eg: Post => @post.
29 30 31 32 33 34 35 36 37 38 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 29 def collection _collection = get_collection_ivar return _collection if _collection _collection = find_collection ActiveAdmin::Authorization::READ, active_admin_config.resource_class set_collection_ivar _collection end |
#collection_before_scope ⇒ Object (protected)
259 260 261 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 259 def collection_before_scope @collection_before_scope end |
#create_resource(object) ⇒ Object (protected)
Calls all the appropriate callbacks and then creates the new resource.
150 151 152 153 154 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 150 def create_resource(object) run_create_callbacks object do save_resource(object) end end |
#current_scope ⇒ Object (protected)
263 264 265 266 267 268 269 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 263 def current_scope @current_scope ||= if params[:scope] active_admin_config.get_scope_by_id(params[:scope]) if params[:scope] else active_admin_config.default_scope(self) end end |
#decorator? ⇒ Boolean (protected)
100 101 102 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 100 def decorator? !!active_admin_config.decorator_class end |
#decorator_class ⇒ Object (protected)
104 105 106 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 104 def decorator_class active_admin_config.decorator_class end |
#destroy_resource(object) ⇒ Object (protected)
Destroys an object from the database and calls appropriate callbacks.
192 193 194 195 196 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 192 def destroy_resource(object) run_destroy_callbacks object do object.destroy end end |
#find_collection ⇒ Object (protected)
Does the actual work of retrieving the current collection from the db. This is a great method to override if you would like to perform some additional db # work before your controller returns and authorizes the collection.
47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 47 def find_collection collection = scoped_collection collection = (collection) collection = apply_sorting(collection) collection = apply_filtering(collection) collection = apply_scoping(collection) collection = apply_pagination(collection) collection = apply_decorator(collection) collection end |
#find_resource ⇒ Object (protected)
Does the actual work of finding a resource in the database. This method uses the finder method as defined in InheritedResources.
113 114 115 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 113 def find_resource scoped_collection.send(method_for_find, params[:id]) end |
#max_csv_records ⇒ Object (protected)
285 286 287 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 285 def max_csv_records 10_000 end |
#max_per_page ⇒ Object (protected)
289 290 291 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 289 def max_per_page 10_000 end |
#per_page ⇒ Object (protected)
278 279 280 281 282 283 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 278 def per_page return max_csv_records if request.format == 'text/csv' return max_per_page if active_admin_config.paginate == false @per_page || active_admin_config.per_page end |
#resource ⇒ Object (protected)
Retrieve, memoize and authorize a resource based on params. The actual work of finding the resource is done in #find_resource.
This method is used on all the member actions:
* show
* edit
* update
* destroy
85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 85 def resource _resource = get_resource_ivar return _resource if _resource _resource = find_resource _resource if decorator? _resource = decorator_class.new(_resource) end set_resource_ivar(_resource) end |
#save_resource(object) ⇒ Object (protected)
Calls all the appropriate callbacks and then saves the new resource.
161 162 163 164 165 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 161 def save_resource(object) run_save_callbacks object do object.save end end |
#scoped_collection ⇒ Object (protected)
Override this method in your controllers to modify the start point of our searches and index.
This method should return an ActiveRecord::Relation object so that the searching and filtering can be applied on top
Note, unless you are doing something special, you should use the scope_to method from the Scoping module instead of overriding this method.
70 71 72 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 70 def scoped_collection end_of_association_chain end |
#update_resource(object, attributes) ⇒ Object (protected)
Update an object with the given attributes. Also calls the appropriate callbacks for update action.
177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/active_admin/resource_controller/data_access.rb', line 177 def update_resource(object, attributes) if object.respond_to?(:assign_attributes) object.assign_attributes(*attributes) else object.attributes = attributes[0] end run_update_callbacks object do save_resource(object) end end |