Class: AdminAssistant::Search
  
  
  
  
  
    - Inherits:
 
    - 
      Object
      
        
          - Object
 
          
            - AdminAssistant::Search
 
          
        
        show all
      
     
  
  
  
  
  
  
  
  
  
  
    - Defined in:
 
    - lib/admin_assistant/search.rb
 
  
  
 
  Instance Attribute Summary collapse
  
  
    
      Instance Method Summary
      collapse
    
    
  
  Constructor Details
  
    
  
  
    #initialize(admin_assistant, params)  ⇒ Search 
  
  
  
  
    
Returns a new instance of Search.
   
 
  
  
    
      
5
6
7
8
9
10
11
12
13
14
15
16
17 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 5
def initialize(admin_assistant, params)
  @admin_assistant, @params = admin_assistant, params
  @params ||= {}
  @attributes = HashWithIndifferentAccess.new
  columns.each do |c|
    c.verify_for_search
    compare_to_range = compare_to_range?(c.name) if c.respond_to?(:name)
    attributes = c.attributes_for_search_object(@params, compare_to_range)
    attributes.each do |key, value|
      @attributes[key] = value
    end
  end
end
     | 
  
 
  
 
  Dynamic Method Handling
  
    This class handles dynamic methods through the method_missing method
    
  
  
    
  
  
    #method_missing(meth, *args)  ⇒ Object 
  
  
  
  
    
      
81
82
83
84
85
86
87 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 81
def method_missing(meth, *args)
  if @attributes.has_key?(meth)
    @attributes[meth]
  else
    super
  end
end
     | 
  
 
  
 
  
    Instance Attribute Details
    
      
      
      
  
  
    #params  ⇒ Object  
  
  
  
  
    
Returns the value of attribute params.
   
 
  
  
    
      
3
4
5 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 3
def params
  @params
end 
     | 
  
 
    
   
  
    Instance Method Details
    
      
  
  
    #[](name)  ⇒ Object 
  
  
  
  
    
      
19
20
21 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 19
def [](name)
  @params[name]
end 
     | 
  
 
    
      
  
  
    #add_to_query(ar_query)  ⇒ Object 
  
  
  
  
    
      
23
24
25
26
27
28
29
30
31
32
33
34 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 23
def add_to_query(ar_query)
  unless @params.empty?
    ar_query.add_condition do |cond|
      if match_any_conditions?
        cond.boolean_join = :or
      end
      columns.each do |column|
        column.add_to_query_condition cond, self
      end
    end
  end
end
     | 
  
 
    
      
  
  
    #blank?(column_name)  ⇒ Boolean 
  
  
  
  
    
      
36
37
38 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 36
def blank?(column_name)
  @params["#{column_name}(blank)"] == '1'
end
     | 
  
 
    
      
  
  
    #column_views(action_view)  ⇒ Object 
  
  
  
  
    
      
54
55
56
57
58 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 54
def column_views(action_view)
  columns.map { |c|
    c.search_view action_view, @admin_assistant, :search => self
  }
end
     | 
  
 
    
      
  
  
    #columns  ⇒ Object 
  
  
  
  
    
      
40
41
42
43
44
45
46
47
48
49
50
51
52 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 40
def columns
  column_names = settings.column_names
  if column_names.empty?
    [DefaultSearchColumn.new(
      @admin_assistant.model_class,
      :fields_to_match => @admin_assistant.default_search_matches_on
    )]
  else
    column_names.map { |column_name| 
      @admin_assistant.column(column_name.to_s)
    }
  end
end
     | 
  
 
    
      
  
  
    #comparator(column_name)  ⇒ Object 
  
  
  
  
    
      
60
61
62
63 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 60
def comparator(column_name)
  c = @params["#{column_name}(comparator)"]
  c if %w(< <= = >= >).include?(c)
end
     | 
  
 
    
      
  
  
    #compare_to_range?(column_name)  ⇒ Boolean 
  
  
  
  
    
      
65
66
67 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 65
def compare_to_range?(column_name)
  settings[column_name].compare_to_range
end 
     | 
  
 
    
      
  
  
    #id  ⇒ Object 
  
  
  
  
    
      
69
70
71 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 69
def id
  @attributes[:id] if @attributes.has_key?(:id)
end 
     | 
  
 
    
      
  
  
    #match_all_conditions?  ⇒ Boolean 
  
  
  
  
    
      
73
74
75 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 73
def match_all_conditions?
  !match_any_conditions?
end 
     | 
  
 
    
      
  
  
    #match_any_conditions?  ⇒ Boolean 
  
  
  
  
    
      
77
78
79 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 77
def match_any_conditions?
  @params["(all_or_any)"] == 'any'
end 
     | 
  
 
    
      
  
  
    #model_class  ⇒ Object 
  
  
  
  
    
      
89
90
91 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 89
def model_class
  @admin_assistant.model_class
end 
     | 
  
 
    
      
  
  
    #settings  ⇒ Object 
  
  
  
  
    
      
93
94
95 
     | 
    
      # File 'lib/admin_assistant/search.rb', line 93
def settings
  @admin_assistant.search_settings
end 
     |