Class: MR::ReadModel::Relation

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

Direct Known Subclasses

SetQuerying::Relation

Constant Summary collapse

FIND_EXCLUDED_TYPES =
[:where, :limit, :offset].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeRelation

Returns a new instance of Relation.



167
168
169
170
171
# File 'lib/mr/read_model/querying.rb', line 167

def initialize
  @from_expression   = NullFromExpression.new
  @query_expressions = []
  @set_expressions   = []
end

Instance Attribute Details

#find_attrObject



185
186
187
# File 'lib/mr/read_model/querying.rb', line 185

def find_attr
  @find_attr ||= self.from_expression.default_find_attr
end

#from_expressionObject (readonly)

Returns the value of attribute from_expression.



164
165
166
# File 'lib/mr/read_model/querying.rb', line 164

def from_expression
  @from_expression
end

#query_expressionsObject (readonly)

Returns the value of attribute query_expressions.



164
165
166
# File 'lib/mr/read_model/querying.rb', line 164

def query_expressions
  @query_expressions
end

#set_expressionsObject (readonly)

Returns the value of attribute set_expressions.



164
165
166
# File 'lib/mr/read_model/querying.rb', line 164

def set_expressions
  @set_expressions
end

Instance Method Details

#build_for_all(params = nil) ⇒ Object



198
199
200
# 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) ⇒ Object



190
191
192
193
194
195
196
# 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) ⇒ Object



202
203
204
# File 'lib/mr/read_model/querying.rb', line 202

def build_sql(params = nil)
  self.build_for_all(params).to_sql.strip
end

#from(record_class) ⇒ Object



173
174
175
# File 'lib/mr/read_model/querying.rb', line 173

def from(record_class)
  @from_expression = FromExpression.new(record_class)
end

#from_record_classObject



181
182
183
# File 'lib/mr/read_model/querying.rb', line 181

def from_record_class
  self.from_expression.record_class
end

#from_subquery(&block) ⇒ Object



177
178
179
# File 'lib/mr/read_model/querying.rb', line 177

def from_subquery(&block)
  @from_expression = FromSubqueryExpression.new(&block)
end