Class: ROM::Relation::Loaded
- Inherits:
-
Object
- Object
- ROM::Relation::Loaded
- Includes:
- Enumerable
- Defined in:
- lib/rom/relation/loaded.rb
Overview
Materializes a relation and exposes interface to access the data.
This relation type is returned when a lazy relation is called
Instance Attribute Summary collapse
-
#collection ⇒ Object
readonly
private
Materialized relation.
-
#source ⇒ Relation
readonly
private
Source relation.
Instance Method Summary collapse
-
#each {|Hash| ... } ⇒ Object
Yield relation tuples.
-
#empty? ⇒ TrueClass, FalseClass
Return if loaded relation is empty.
-
#initialize(source, collection = source.to_a) ⇒ Loaded
constructor
private
A new instance of Loaded.
-
#new(collection) ⇒ Object
Return a loaded relation with a new collection.
-
#one ⇒ Object
Returns a single tuple from the relation if there is one.
-
#one! ⇒ Object
Like [one], but additionally raises an error if the relation is empty.
-
#pluck(key) ⇒ Array
Return a list of values under provided key.
-
#primary_keys ⇒ Array
Pluck primary key values.
Constructor Details
#initialize(source, collection = source.to_a) ⇒ Loaded
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of Loaded.
38 39 40 41 |
# File 'lib/rom/relation/loaded.rb', line 38 def initialize(source, collection = source.to_a) @source = source @collection = collection end |
Instance Attribute Details
#collection ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Materialized relation
35 36 37 |
# File 'lib/rom/relation/loaded.rb', line 35 def collection @collection end |
#source ⇒ Relation (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Source relation
28 29 30 |
# File 'lib/rom/relation/loaded.rb', line 28 def source @source end |
Instance Method Details
#each {|Hash| ... } ⇒ Object
Yield relation tuples
48 49 50 51 52 |
# File 'lib/rom/relation/loaded.rb', line 48 def each(&block) return to_enum unless block_given? collection.each(&block) end |
#empty? ⇒ TrueClass, FalseClass
Return if loaded relation is empty
124 125 126 |
# File 'lib/rom/relation/loaded.rb', line 124 def empty? collection.empty? end |
#new(collection) ⇒ Object
Return a loaded relation with a new collection
131 132 133 |
# File 'lib/rom/relation/loaded.rb', line 131 def new(collection) self.class.new(source, collection) end |
#one ⇒ Object
Returns a single tuple from the relation if there is one.
60 61 62 63 64 65 66 67 68 69 |
# File 'lib/rom/relation/loaded.rb', line 60 def one if collection.count > 1 raise( TupleCountMismatchError, "The relation consists of more than one tuple" ) else collection.first end end |
#one! ⇒ Object
Like [one], but additionally raises an error if the relation is empty.
77 78 79 80 81 82 |
# File 'lib/rom/relation/loaded.rb', line 77 def one! one || raise( TupleCountMismatchError, "The relation does not contain any tuples" ) end |
#pluck(key) ⇒ Array
Return a list of values under provided key
98 99 100 |
# File 'lib/rom/relation/loaded.rb', line 98 def pluck(key) map { |tuple| tuple.fetch(key) } end |
#primary_keys ⇒ Array
Pluck primary key values
This method may not work with adapters that don't provide relations that have primary key configured
115 116 117 |
# File 'lib/rom/relation/loaded.rb', line 115 def primary_keys pluck(source.primary_key) end |