Sha256: 043984ae47a11d268148527f0af13b980118e35e7c086b4a2e2ae8a1016faf00

Contents?: true

Size: 1.62 KB

Versions: 2

Compression:

Stored size: 1.62 KB

Contents

# -*- encoding : utf-8 -*-
module RademadeAdmin
  module Model
    module Adapter
      class Query

        class ActiveRecord < RademadeAdmin::Model::Adapter::Query

          protected

          def where(where_conditions)
            @values = []
            condition = collect_where_conditions(where_conditions)
            @result.where([condition, *@values])
          end

          def order(order_conditions)
            order_conditions.parts.each do |part|
              if part.is_a? RademadeAdmin::Search::Part::Order
                # todo
              else
                @result = @result.order(part[:field] => part[:value])
              end
            end
            @result
          end

          def collect_where_conditions(where_conditions)
            condition = ''
            where_conditions.parts.each do |part|
              condition += " #{where_conditions.type.to_s.capitalize} " unless condition.empty?
              if part.is_a? RademadeAdmin::Search::Part::Where
                condition += "(#{collect_where_conditions(part)})"
              else
                field = "`#{part[:field]}`"
                if part[:value].is_a? Regexp
                  # hack temporary fix
                  condition += "#{field} REGEXP ?"
                  part[:value] = part[:value].source
                elsif part[:value].is_a? Array
                  condition += "#{field} IN (?)"
                else
                  condition += "#{field} = ?"
                end
                @values << part[:value]
              end
            end
            condition
          end

        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rademade_admin-0.1.5 lib/rademade_admin/model/adapter/query/active_record.rb
rademade_admin-0.1.4 lib/rademade_admin/model/adapter/query/active_record.rb