class MR::ReadModel::Relation

Constants

FIND_EXCLUDED_TYPES

Attributes

find_attr[W]
from_expression[R]
query_expressions[R]
set_expressions[R]

Public Class Methods

new() click to toggle source
# File lib/mr/read_model/querying.rb, line 167
def initialize
  @from_expression   = NullFromExpression.new
  @query_expressions = []
  @set_expressions   = []
end

Public Instance Methods

build_for_all(params = nil) click to toggle source
# File lib/mr/read_model/querying.rb, line 198
def build_for_all(params = nil)
  build_ar_relation_for_all(self.query_expressions, params)
end
build_for_find(id, params = nil) click to toggle source
# File lib/mr/read_model/querying.rb, line 190
def build_for_find(id, params = nil)
  query_expressions = self.query_expressions.reject do |e|
    FIND_EXCLUDED_TYPES.include?(e.type)
  end
  ar_relation = build_ar_relation_for_all(query_expressions, params)
  ar_relation.where(self.find_attr => id).limit(1)
end
build_sql(params = nil) click to toggle source
# File lib/mr/read_model/querying.rb, line 202
def build_sql(params = nil)
  self.build_for_all(params).to_sql.strip
end
find_attr() click to toggle source
# File lib/mr/read_model/querying.rb, line 185
def find_attr
  @find_attr ||= self.from_expression.default_find_attr
end
from(record_class) click to toggle source
# File lib/mr/read_model/querying.rb, line 173
def from(record_class)
  @from_expression = FromExpression.new(record_class)
end
from_record_class() click to toggle source
# File lib/mr/read_model/querying.rb, line 181
def from_record_class
  self.from_expression.record_class
end
from_subquery(&block) click to toggle source
# File lib/mr/read_model/querying.rb, line 177
def from_subquery(&block)
  @from_expression = FromSubqueryExpression.new(&block)
end

Private Instance Methods

build_ar_relation_for_all(query_expressions, params) click to toggle source
# File lib/mr/read_model/querying.rb, line 208
def build_ar_relation_for_all(query_expressions, params)
  ar_relation = self.from_expression.ar_relation(params)
  query_expressions.inject(ar_relation){ |r, e| e.apply_to(r, params) }
end