Module: Jaql::SqlGeneration::RunnableQueryFactoryMethods

Included in:
RunnableQuery
Defined in:
lib/jaql/sql_generation/runnable_query_factory_methods.rb

Instance Method Summary collapse

Instance Method Details

#for(scope, query_spec) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/jaql/sql_generation/runnable_query_factory_methods.rb', line 4

def for(scope, query_spec)
  scope_class = scope.class

  case scope_class.name

  when 'Sequel::Postgres::Dataset'
    if scope.respond_to?(:model) # Sequel::Postgres::Dataset with Sequel::Model
      sequel_model_query(scope, query_spec, scope.model)
    else # Sequel::Postgres::Dataset (no model)
      sequel_table_query(scope, query_spec, scope.first_source)
    end

  when 'ActiveRecord::Relation'
    active_record_model_query(scope, query_spec, scope.klass)

  else # could be an ORM model instance
    if scope_class.ancestors.map(&:name).include?('Sequel::Model')
      sequel_model_query(scope, query_spec, scope_class)
    elsif scope_class.ancestors.map(&:name).include?('ActiveRecord::Base')
      active_record_model_query(scope, query_spec, scope_class)
    else
      fail "cannot determine resolver for scope with type '#{scope_class}'"
    end
  end
end