Sha256: bf488a9cbcfa5f2403d290c2cfd1271b842df2b2228197f1c29e1d1aa4d7d899

Contents?: true

Size: 1.62 KB

Versions: 21

Compression:

Stored size: 1.62 KB

Contents

module Manage
  module Fields
    class Searcher
      class << self
        def generate_search_object(resource_class, search_fields)
          search_class = Class.new do
            include SearchObject.module(:model, :sorting)

            def escape_search_term(term)
              "%#{term.gsub(/\s+/, '%')}%".downcase
            end

            def parse_date(date)
              Date.strptime(date, '%Y-%m-%d') rescue nil
            end
          end


          search_class.scope { resource_class.all }
          Object.const_set("#{resource_class.name.gsub(/:/, '')}Searcher", search_class)

          search_fields.select {|f| not f.to_s.include?('.')}.each do |field|
            field_type = resource_class.columns_hash[field.to_s].type
            case field_type
            when *[:text, :string]
              search_class.option field.to_sym do |scope, value|
                value.blank? ? scope : scope.where("lower(#{field.to_s}) LIKE lower(?)", escape_search_term(value))
              end
            when :datetime
              search_class.option field.to_sym do |scope, value|
                date = parse_date value
                scope.where("DATE(#{field.to_s}) >= ?", date) if date.present?
              end
            when :integer
              search_class.option field.to_sym
            when :boolean
              search_class.option field.to_sym
            else
              search_class.option field.to_sym do |scope, value|
                scope.where "#{field.to_s} = '?'", escape_search_term(value)
              end
            end
          end

          search_class
        end
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
manage-1.3.32 lib/manage/fields/searcher.rb
manage-1.3.31 lib/manage/fields/searcher.rb
manage-1.3.30 lib/manage/fields/searcher.rb
manage-1.3.29 lib/manage/fields/searcher.rb
manage-1.3.28 lib/manage/fields/searcher.rb
manage-1.3.27 lib/manage/fields/searcher.rb
manage-1.3.26 lib/manage/fields/searcher.rb
manage-1.3.25 lib/manage/fields/searcher.rb
manage-1.3.24 lib/manage/fields/searcher.rb
manage-1.3.22 lib/manage/fields/searcher.rb
manage-1.3.20 lib/manage/fields/searcher.rb
manage-1.3.19 lib/manage/fields/searcher.rb
manage-1.3.18 lib/manage/fields/searcher.rb
manage-1.3.17 lib/manage/fields/searcher.rb
manage-1.3.16 lib/manage/fields/searcher.rb
manage-1.3.15 lib/manage/fields/searcher.rb
manage-1.3.14 lib/manage/fields/searcher.rb
manage-1.3.13 lib/manage/fields/searcher.rb
manage-1.3.12 lib/manage/fields/searcher.rb
manage-1.3.11 lib/manage/fields/searcher.rb