class ActiveForce::Query

Attributes

table[R]

Public Class Methods

new(table) click to toggle source
# File lib/active_force/query.rb, line 5
def initialize table
  @table = table
  @conditions = []
  @table_id = 'Id'
  @query_fields = [@table_id]
end

Public Instance Methods

all() click to toggle source
# File lib/active_force/query.rb, line 16
def all
  self
end
count() click to toggle source
# File lib/active_force/query.rb, line 102
def count
  clone_and_set_instance_variables(query_fields: ["count(Id)"])
end
fields(fields_collection = []) click to toggle source
# File lib/active_force/query.rb, line 12
def fields fields_collection = []
  @query_fields += fields_collection.to_a
end
find(id) click to toggle source
# File lib/active_force/query.rb, line 76
def find id
  where("#{ @table_id } = '#{ id }'").limit 1
end
first() click to toggle source
# File lib/active_force/query.rb, line 80
def first
  if @records
    clone_and_set_instance_variables(
      size: 1,
      records: [@records.first],
      decorated_records: [@decorated_records&.first]
    )
  else
    clone_and_set_instance_variables(size: 1)
  end
end
join(object_query) click to toggle source
# File lib/active_force/query.rb, line 96
def join object_query
  chained_query = self.clone
  chained_query.fields ["(#{ object_query.to_s })"]
  chained_query
end
last(limit = 1) click to toggle source
# File lib/active_force/query.rb, line 92
def last(limit = 1)
  order("Id DESC").limit(limit)
end
limit(size) click to toggle source
# File lib/active_force/query.rb, line 60
def limit size
  size ? clone_and_set_instance_variables(size: size) : self
end
limit_value() click to toggle source
# File lib/active_force/query.rb, line 64
def limit_value
  @size
end
not(condition) click to toggle source
# File lib/active_force/query.rb, line 46
def not condition
  condition ? where("NOT ((#{condition.join(') AND (')}))") : self
end
offset(offset) click to toggle source
# File lib/active_force/query.rb, line 68
def offset offset
  clone_and_set_instance_variables(offset: offset)
end
offset_value() click to toggle source
# File lib/active_force/query.rb, line 72
def offset_value
  @offset
end
or(query) click to toggle source
# File lib/active_force/query.rb, line 50
def or query
  return self unless query

  clone_and_set_instance_variables(conditions: ["(#{and_conditions}) OR (#{query.and_conditions})"])
end
order(order) click to toggle source
# File lib/active_force/query.rb, line 56
def order order
  order ? clone_and_set_instance_variables(order: order) : self
end
select(*columns) click to toggle source
# File lib/active_force/query.rb, line 33
def select *columns
  clone_and_set_instance_variables(query_fields: columns)
end
sum(field) click to toggle source
# File lib/active_force/query.rb, line 106
def sum field
  clone_and_set_instance_variables(query_fields: ["sum(#{field})"])
end
to_s() click to toggle source
# File lib/active_force/query.rb, line 20
    def to_s
      <<-SOQL.gsub(/\s+/, " ").strip
        SELECT
          #{ build_select }
        FROM
          #{ @table }
        #{ build_where }
        #{ build_order }
        #{ build_limit }
        #{ build_offset }
      SOQL
    end
where(condition = nil) click to toggle source
# File lib/active_force/query.rb, line 37
def where condition = nil
  new_conditions = @conditions | [condition]
  if new_conditions != @conditions
    clone_and_set_instance_variables({conditions: new_conditions})
  else
    self
  end
end

Protected Instance Methods

and_conditions() click to toggle source
# File lib/active_force/query.rb, line 111
def and_conditions
  "(#{@conditions.join(') AND (')})" unless @conditions.empty?
end
build_limit() click to toggle source
# File lib/active_force/query.rb, line 123
def build_limit
  "LIMIT #{ @size }" if @size
end
build_offset() click to toggle source
# File lib/active_force/query.rb, line 131
def build_offset
  "OFFSET #{ @offset }" if @offset
end
build_order() click to toggle source
# File lib/active_force/query.rb, line 127
def build_order
  "ORDER BY #{ @order }" if @order
end
build_select() click to toggle source
# File lib/active_force/query.rb, line 115
def build_select
  @query_fields.compact.uniq.join(', ')
end
build_where() click to toggle source
# File lib/active_force/query.rb, line 119
def build_where
  "WHERE #{and_conditions}" unless @conditions.empty?
end
clone_and_set_instance_variables(instance_variable_hash={}) click to toggle source
# File lib/active_force/query.rb, line 135
def clone_and_set_instance_variables instance_variable_hash={}
  clone = self.clone
  { decorated_records: nil, records: nil }
    .merge(instance_variable_hash)
    .each { |k,v| clone.instance_variable_set("@#{k.to_s}", v) }
  clone
end