class LazyRecord::Relation
Collection of LazyRecord
objects that are bound to a single class. The Relation
inherits scope methods from the class it is bound to.
Attributes
all[R]
klass[R]
Public Class Methods
new(klass:, collection: [])
click to toggle source
# File lib/lazy_record/relation.rb, line 11 def initialize(klass:, collection: []) klass = klass.call if klass.is_a? Proc klass_argument_error unless klass.is_a?(Class) @klass = klass @all = [] self_extend_scopes_module collection.each do |object| @all << object && next if object.is_a?(klass) collection_argument_error end end
Public Instance Methods
<<(other)
click to toggle source
# File lib/lazy_record/relation.rb, line 32 def <<(other) message = "object must be of type #{klass}" raise ArgumentError, message unless other.is_a?(klass) all << other unless all.include?(other) end
[](index)
click to toggle source
# File lib/lazy_record/relation.rb, line 64 def [](index) all[index] end
collection_argument_error()
click to toggle source
# File lib/lazy_record/relation.rb, line 23 def collection_argument_error message = "Argument must be a collection of #{klass.to_s.tableize}" raise ArgumentError, message end
each(&block)
click to toggle source
# File lib/lazy_record/relation.rb, line 60 def each(&block) all.each(&block) end
empty?()
click to toggle source
# File lib/lazy_record/relation.rb, line 72 def empty? all.empty? end
inspect()
click to toggle source
# File lib/lazy_record/relation.rb, line 38 def inspect "\#<#{klass}Relation [#{all.map(&:inspect).join(', ')}]>" end
klass_argument_error()
click to toggle source
# File lib/lazy_record/relation.rb, line 28 def klass_argument_error raise ArgumentError, '`klass` keyword argument must be a class' end
last()
click to toggle source
# File lib/lazy_record/relation.rb, line 68 def last self[-1] end
self_extend_scopes_module()
click to toggle source
# File lib/lazy_record/relation.rb, line 82 def self_extend_scopes_module return unless klass.const_defined?(Scopes::SCOPE_MODULE_NAME, _search_ancestors = false) extend(klass.const_get(Scopes::SCOPE_MODULE_NAME)) end
where(condition = nil) { |instance| ... }
click to toggle source
# File lib/lazy_record/relation.rb, line 42 def where(condition = nil) result = all.select do |instance| if condition.is_a? Hash select_by_hash_condition(condition, instance) elsif block_given? yield instance end end self.class.new(klass: klass, collection: result) end
Private Instance Methods
clear()
click to toggle source
# File lib/lazy_record/relation.rb, line 76 def clear all.clear end
select_by_hash_condition(condition, instance)
click to toggle source
# File lib/lazy_record/relation.rb, line 53 def select_by_hash_condition(condition, instance) condition.all? do |key, val| val = val.call if val.is_a? Proc instance.send(key) == val end end