Class: MR::ReadModel::FromSubqueryExpression

Inherits:
Object
  • Object
show all
Defined in:
lib/mr/read_model/query_expression.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(&block) ⇒ FromSubqueryExpression

Returns a new instance of FromSubqueryExpression.

Raises:

  • (ArgumentError)


108
109
110
111
# File 'lib/mr/read_model/query_expression.rb', line 108

def initialize(&block)
  raise ArgumentError, "a block must be provided" unless block
  @subquery_block = block
end

Instance Attribute Details

#subquery_blockObject (readonly)

Returns the value of attribute subquery_block.



106
107
108
# File 'lib/mr/read_model/query_expression.rb', line 106

def subquery_block
  @subquery_block
end

Instance Method Details

#ar_relation(params = nil) ⇒ Object



129
130
131
# File 'lib/mr/read_model/query_expression.rb', line 129

def ar_relation(params = nil)
  self.record_class.scoped.from(self.from_subquery.build_sql(params))
end

#default_find_attrObject

Raises:



124
125
126
127
# File 'lib/mr/read_model/query_expression.rb', line 124

def default_find_attr
  raise NoFindAttrError, "a `find_attr` has to be specified " \
                         "when using a from subquery"
end

#from_subqueryObject

lazy-build ‘FromSubquery` so its block is not evaluated until the read model `query` method is called, cache it so it doesn’t have to be rebuilt for every ‘query` call



116
117
118
# File 'lib/mr/read_model/query_expression.rb', line 116

def from_subquery
  @from_subquery ||= FromSubquery.new(&self.subquery_block)
end

#record_classObject



120
121
122
# File 'lib/mr/read_model/query_expression.rb', line 120

def record_class
  self.from_subquery.record_class
end