Sha256: d2b9088808a48120840e77f7c8fe487987f45e1bc168be4dd11441735a5b5817

Contents?: true

Size: 1.14 KB

Versions: 7

Compression:

Stored size: 1.14 KB

Contents

require "active_record"

class QueryBase
  RelationRequired = Class.new(StandardError)

  def initialize(*args)
    @options = args.extract_options!
    @relation = args.first || base_relation

    if relation.nil?
      raise(
        RelationRequired,
        "Queries require a base relation defined. Use .queries method to define relation."
      )
    elsif !relation.is_a?(ActiveRecord::Relation)
      raise(
        RelationRequired,
        "Queries accept only ActiveRecord::Relation as input"
      )
    end
  end

  def self.call(*args)
    new(*args).query
  end

  def self.queries(subject)
    self.base_relation = subject
  end

  def base_relation
    return nil if self.class.base_relation.nil?

    if self.class.base_relation.is_a?(ActiveRecord::Relation)
      self.class.base_relation
    elsif self.class.base_relation < ActiveRecord::Base
      self.class.base_relation.all
    end
  end

  private

  class << self
    attr_accessor :base_relation
  end

  attr_reader :relation, :options

  def query
    raise(
      NotImplementedError,
      "You need to implement #query method which returns ActiveRecord::Relation object"
    )
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
command_service_object-1.4.1 lib/generators/service/install/templates/services/query_base.rb
command_service_object-1.4.0 lib/generators/service/install/templates/services/query_base.rb
command_service_object-1.3.0 lib/generators/service/install/templates/services/query_base.rb
command_service_object-1.2.1 lib/generators/service/install/templates/services/query_base.rb
command_service_object-1.1.1 lib/generators/service/install/templates/services/query_base.rb
command_service_object-1.1.0 lib/generators/service/install/templates/services/query_base.rb
command_service_object-1.0.0 lib/generators/service/install/templates/services/query_base.rb