Sha256: 60d734816c452ca97c62fd38438248e576ec84ee86894e329b94c3a7aa3b04ee

Contents?: true

Size: 1.59 KB

Versions: 10

Compression:

Stored size: 1.59 KB

Contents

# frozen_string_literal: true

require 'active_record'

module CodeKindly
  module Utils
    class SQL
      class << self
        def method_missing(method, *args)
          m_name = method.to_s
          return process(m_name, *args) if respond_to_missing?(m_name)
          select_mn = 'select_' + m_name
          return process(select_mn, *args) if respond_to_missing?(select_mn)
          super
        end

        def respond_to_missing?(method, _include_all = false)
          return false unless default_connection_class
          default_connection_class.connection.respond_to?(method)
        end

        protected

        def default_connection_class
          @default_connection_class ||= begin
            CodeKindly::Utils::ActiveRecord.default_connection_class
          end
        end

        def process(method_name, query, connection_class = NilClass)
          connection_class = find_connection_class(query, connection_class)
          query = query.to_sql if query.is_a?(::ActiveRecord::Relation)
          connection_class.connection.send(method_name, query)
        end

        private

        def find_connection_class(query, klass)
          return query.klass if query.is_a?(::ActiveRecord::Relation)
          if klass.respond_to? :to_sym
            klass = CodeKindly::Utils::ActiveRecord.default_connection_class(klass)
          else
            klass = klass.class unless klass.is_a?(Class)
            klass = NilClass if klass < ::ActiveRecord::Base
          end
          klass = default_connection_class if klass == NilClass
          klass
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
codekindly-utils-0.1.0 lib/code_kindly/utils/sql.rb
codekindly-utils-0.0.14 lib/code_kindly/utils/sql.rb
codekindly-utils-0.0.13 lib/code_kindly/utils/sql.rb
codekindly-utils-0.0.12 lib/code_kindly/utils/sql.rb
codekindly-utils-0.0.11 lib/code_kindly/utils/sql.rb
codekindly-utils-0.0.10 lib/code_kindly/utils/sql.rb
codekindly-utils-0.0.9 lib/code_kindly/utils/sql.rb
codekindly-utils-0.0.8 lib/code_kindly/utils/sql.rb
codekindly-utils-0.0.7 lib/code_kindly/utils/sql.rb
codekindly-utils-0.0.6 lib/code_kindly/utils/sql.rb