Skip to content

Commit

Permalink
Searches working in ActiveAdmin now.
Browse files Browse the repository at this point in the history
  • Loading branch information
lukaso committed Jul 6, 2012
1 parent 1bff52f commit 530fbb3
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 8 deletions.
8 changes: 5 additions & 3 deletions lib/active_admin/mongoid.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,18 @@
module ActiveAdmin
module Mongoid
end

class << self
alias setup_without_mongoid setup

# Load monkey patches *after* the setup process
def setup *args, &block
setup_without_mongoid *args, &block


require 'active_admin/mongoid/adaptor'
require 'active_admin/mongoid/comments'
require 'active_admin/mongoid/form_builder'
require 'active_admin/mongoid/filter_form_builder'
require 'active_admin/mongoid/resource'
require 'active_admin/mongoid/document'
end
Expand Down
54 changes: 54 additions & 0 deletions lib/active_admin/mongoid/adaptor.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
module ActiveAdmin
module Mongoid
module Adaptor
class Search
# include Naming

attr_reader :base, :query, :query_hash, :search_params

def initialize(object, search_params = {})
Rails.logger.debug "********search new: #{search_params}, get_query_hash: #{get_query_hash(search_params)}"
@base = object
@search_params = search_params
@query_hash = get_query_hash(search_params)
@query = @base.where(@query_hash)
end

def respond_to?(method_id)
query.send(:respond_to?, method_id)
end

def method_missing(method_id, *args, &block)
Rails.logger.debug "********method_missing: #{method_id}::#{args}"

if is_query(method_id)
return @search_params[method_id.to_s]
end
query.send(method_id, *args, &block)
end

private

def is_query(method_id)
method_id.to_s =~ /_contains$/
end

def get_query_hash(search_params)
searches = search_params.map do|k, v|
mongoidify_search(k,v)
end
Hash[searches]
end

def mongoidify_search(k, v)
return [get_attribute(k), Regexp.new(Regexp.escape("#{v}"), Regexp::IGNORECASE)] if k =~ /_contains$/
[k, v]
end

def get_attribute(k)
k.match(/^(.*)_contains$/)[1]
end
end
end
end
end
26 changes: 26 additions & 0 deletions lib/active_admin/mongoid/filter_form_builder.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
class ActiveAdmin::FilterFormBuilder
def default_input_type(method, options = {})
if column = column_for(method)
case column.type.name.downcase.to_sym
when :date, :datetime
return :date_range
when :string, :text
return :string
when :integer
return :select if reflection_for(method.to_s.gsub('_id','').to_sym)
return :numeric
when :float, :decimal
return :numeric
end
end
end

def column_for(method)
@object.fields[method.to_s] if @object.respond_to?(:fields)
end

def reflection_for(method)
Rails.logger.debug "*********** reflects: #{@object.class.respond_to?(:reflect_on_association)}"
@object.class.reflect_on_association(method) if @object.class.respond_to?(:reflect_on_association)
end
end
10 changes: 5 additions & 5 deletions lib/active_admin/mongoid/resource.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
ActiveAdmin::Resource # autoload
class ActiveAdmin::Resource
def resource_table_name
resource.collection_name
resource_class.collection_name
end

# Disable filters
def add_default_sidebar_sections
end
# def add_default_sidebar_sections
# end
end

ActiveAdmin::ResourceController # autoload
Expand All @@ -25,8 +25,8 @@ def sort_order(chain)
end
end

# Disable filters
def search(chain)
chain
@search = ActiveAdmin::Mongoid::Adaptor::Search.new(chain, clean_search_params(params[:q]))
end

end

0 comments on commit 530fbb3

Please sign in to comment.