Sha256: 9eed1251d0d3b48c693e539f95afb57d1cd4bac1f29c92be7141fc574c4300ed

Contents?: true

Size: 1.67 KB

Versions: 1

Compression:

Stored size: 1.67 KB

Contents

# -*- encoding : utf-8 -*-
module Tutuf
  module VisualQuery
    class Common
      class << self
        def connection
          ActiveRecord::Base.connection
        end

        #delegates to PostgreSQL raw connection
        def quote_ident(str)
          connection.raw_connection.quote_ident(str)
        end

        def quote_relation_name(name)
          if String === name # in default schema
            quote_ident(name)
          elsif Hash === name
            "#{!name['schema'].blank? ? quote_ident(name['schema']) + '.' : ''}#{quote_ident(name['rel_name'])}"
          end
        end
      end

      # Parameters of the block: +schema+, +relation_name+, +column_name+, +operator+, +value+
      def filters_to_a(&block)
        parse_filters(filters, &block)
      end

      protected
        def connection
          self.class.connection
        end

        def quote_ident(str)
          self.class.quote_ident(str)
        end

        def quote_relation_name(name)
          self.class.quote_relation_name(name)
        end

        def parse_filters(filters)
          return [] if filters.blank? || (Hash === filters) # old version
          res = []
          filters.each do |filter|
            schema, rel_name, col_name, op, val = [filter['schema'], filter['rel_name'], filter['col_name'], filter['op'], filter['val']]
            if (!val.blank? || ( val.blank? && op == '=' ))
              val = "%#{val}%" if (op == 'LIKE' || op == 'ILIKE')
              res << yield(schema,rel_name,col_name,op,val)
            elsif op == 'IS NULL'
              res << yield(schema,rel_name,col_name,"IS","NULL")
            end
          end
          res
        end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
visual_query-0.3.0 lib/tutuf/visual_query/common.rb