Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
bbenezech committed Jan 24, 2012
1 parent 42502ac commit 28f26cf
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 2 deletions.
2 changes: 1 addition & 1 deletion lib/rails_admin/config/fields/base.rb
Expand Up @@ -88,7 +88,7 @@ def virtual?
table_name, column = f.split '.'
type = nil
elsif f.is_a?(Hash) # <Model|table_name> => <attribute|column>
am = AbstractModel.new(f.keys.first.to_s.classify)
am = f.keys.first.is_a?(Class) && AbstractModel.new(f.keys.first)
table_name = am && am.model.table_name || f.keys.first
column = f.values.first
property = am && am.properties.find{ |p| p[:name] == f.values.first.to_sym }
Expand Down
Expand Up @@ -18,7 +18,7 @@ class BelongsToAssociation < RailsAdmin::Config::Fields::Association
end

register_instance_option :searchable do
@searchable ||= associated_model_config.abstract_model.properties.map{ |p| p[:name] }.include?(associated_model_config.object_label_method) ? [associated_model_config.object_label_method, {self.abstract_model.model.name => self.method_name}] : {self.abstract_model.model.name => self.method_name}
@searchable ||= associated_model_config.abstract_model.properties.map{ |p| p[:name] }.include?(associated_model_config.object_label_method) ? [associated_model_config.object_label_method, {self.abstract_model.model => self.method_name}] : {self.abstract_model.model => self.method_name}
end

register_instance_option :partial do
Expand Down
82 changes: 82 additions & 0 deletions spec/lib/fields_spec.rb
@@ -0,0 +1,82 @@
require 'spec_helper'

describe RailsAdmin::Config::Fields::Base do
describe '#searchable_columns' do
describe 'for belongs_to fields' do
it "should find label method on the opposite side for belongs_to associations by default" do
RailsAdmin.config(Team).fields.find{|f| f.name == :division}.searchable_columns.should == [{:column=>"divisions.name", :type=>:string}, {:column=>"teams.division_id", :type=>:integer}]
end

it "should search on opposite table for belongs_to" do
RailsAdmin.config(Team) do
field :division do
searchable :custom_id
end
end
RailsAdmin.config(Team).fields.find{|f| f.name == :division}.searchable_columns.should == [{:column=>"divisions.custom_id", :type=>:integer}]
end

it "should search on asked table with model name" do
RailsAdmin.config(Team) do
field :division do
searchable League => :name
end
end
RailsAdmin.config(Team).fields.find{|f| f.name == :division}.searchable_columns.should == [{:column=>"leagues.name", :type=>:string}]
end

it "should search on asked table with table name" do
RailsAdmin.config(Team) do
field :division do
searchable :leagues => :name
end
end
RailsAdmin.config(Team).fields.find{|f| f.name == :division}.searchable_columns.should == [{:column=>"leagues.name", :type=>:string}]
end
end

describe 'for basic type fields' do

it 'should use base table and find correct column type' do
RailsAdmin.config(FieldTest).fields.find{|f| f.name == :text_field}.searchable_columns.should == [{:column=>"field_tests.text_field", :type=>:text}]
RailsAdmin.config(FieldTest).fields.find{|f| f.name == :integer_field}.searchable_columns.should == [{:column=>"field_tests.integer_field", :type=>:integer}]
end

it 'should be customizable to another field on the same table' do
RailsAdmin.config(FieldTest) do
field :time_field do
searchable :date_field
end
end
RailsAdmin.config(FieldTest).fields.find{|f| f.name == :time_field}.searchable_columns.should == [{:column=>"field_tests.date_field", :type=>:date}]
end

it 'should be customizable to another field on another table with :table_name' do
RailsAdmin.config(FieldTest) do
field :string_field do
searchable :nested_field_tests => :title
end
end
RailsAdmin.config(FieldTest).fields.find{|f| f.name == :string_field}.searchable_columns.should == [{:column=>"nested_field_tests.title", :type=>:string}]
end

it 'should be customizable to another field on another model with ModelClass' do
RailsAdmin.config(FieldTest) do
field :string_field do
searchable NestedFieldTest => :title
end
end
RailsAdmin.config(FieldTest).fields.find{|f| f.name == :string_field}.searchable_columns.should == [{:column=>"nested_field_tests.title", :type=>:string}]
end
end

describe 'for mapped fields' do

it 'should find the underlying column on the base table' do
RailsAdmin.config(FieldTest).fields.find{|f| f.name == :paperclip_asset}.searchable_columns.should == [{:column=>"field_tests.paperclip_asset_file_name", :type=>:string}]
RailsAdmin.config(FieldTest).fields.find{|f| f.name == :dragonfly_asset}.searchable_columns.should == [{:column=>"field_tests.dragonfly_asset_name", :type=>:string}]
RailsAdmin.config(FieldTest).fields.find{|f| f.name == :carrierwave_asset}.searchable_columns.should == [{:column=>"field_tests.carrierwave_asset", :type=>:string}]
end
end
end
end

0 comments on commit 28f26cf

Please sign in to comment.