Sha256: f9c3a8ed19b4d3e7fbd1c569c377a9a2bda5cb6ed6f403246f719b0e69914c36

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

module Olivander
  module Resources
    module CrudController
      extend ActiveSupport::Concern

      included do
        include Effective::CrudController
        layout 'olivander/adminlte/main'

        def index
          if params[:term].present?
            index_search
          else
            super
          end
        end

        def index_search
          self.resources ||= resource_scope.all if resource_scope.respond_to?(:all)
          if resource_scope.respond_to?(:search_for)
            self.resources = self.resources.search_for(params[:term])
          else
            k = resources.klass
            like_term = "%#{ActiveRecord::Base.sanitize_sql_like(params[:term])}%"
            fields = %w[name title description text].keep_if{ |field| k.respond_to?(field) }
            clauses = fields.map{ |field| "#{field} ilike '#{like_term}'" }.join(' or ')
            orders = fields.join(', ')
            self.resources = self.resources.where(clauses).order(orders) if clauses.length.positive?
          end
        end

        def permitted_params
          params.fetch(resource_klass.name.underscore.gsub('/', '_').to_sym, {}).permit!
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
five-two-nw-olivander-0.2.0.2 app/controllers/concerns/olivander/resources/crud_controller.rb