Class: Terrestrial::Adapters::MemoryAdapter::Relation
- Inherits:
-
Object
- Object
- Terrestrial::Adapters::MemoryAdapter::Relation
- Includes:
- Enumerable
- Defined in:
- lib/terrestrial/adapters/memory_adapter.rb
Instance Attribute Summary collapse
-
#schema ⇒ Object
readonly
Returns the value of attribute schema.
Instance Method Summary collapse
- #columns ⇒ Object
- #delete ⇒ Object
- #each(&block) ⇒ Object
- #empty? ⇒ Boolean
-
#initialize(schema, all_rows, selected_columns: nil, applied_query: Query.new) ⇒ Relation
constructor
A new instance of Relation.
- #insert(new_row) ⇒ Object
- #insert_conflict(target:, update: {}) ⇒ Object
- #order(*columns) ⇒ Object
- #reverse ⇒ Object
- #select(*new_selected_columns) ⇒ Object
- #update(attrs) ⇒ Object
- #where(criteria, &block) ⇒ Object
Constructor Details
#initialize(schema, all_rows, selected_columns: nil, applied_query: Query.new) ⇒ Relation
Returns a new instance of Relation.
121 122 123 124 125 126 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 121 def initialize(schema, all_rows, selected_columns: nil, applied_query: Query.new) @schema = schema @all_rows = all_rows @applied_query = applied_query @selected_columns = selected_columns || all_column_names end |
Instance Attribute Details
#schema ⇒ Object (readonly)
Returns the value of attribute schema.
128 129 130 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 128 def schema @schema end |
Instance Method Details
#columns ⇒ Object
132 133 134 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 132 def columns all_column_names end |
#delete ⇒ Object
157 158 159 160 161 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 157 def delete matching_rows.each do |row_to_delete| all_rows.delete(row_to_delete) end end |
#each(&block) ⇒ Object
153 154 155 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 153 def each(&block) matching_rows.each(&block) end |
#empty? ⇒ Boolean
189 190 191 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 189 def empty? matching_rows.empty? end |
#insert(new_row) ⇒ Object
167 168 169 170 171 172 173 174 175 176 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 167 def insert(new_row) new_row_with_all_fields = empty_row.merge(clone(new_row)) row_id = extract_row_id(new_row_with_all_fields) if row_id.any? && where(row_id).any? raise DuplicateKeyError.new(row_id) else all_rows.push(new_row_with_all_fields) end end |
#insert_conflict(target:, update: {}) ⇒ Object
163 164 165 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 163 def insert_conflict(target:, update: {}) Upsert.new(self, target: target, update: update) end |
#order(*columns) ⇒ Object
145 146 147 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 145 def order(*columns) new_with_query(applied_query.order(columns.flatten)) end |
#reverse ⇒ Object
149 150 151 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 149 def reverse new_with_query(@applied_query.reverse) end |
#select(*new_selected_columns) ⇒ Object
140 141 142 143 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 140 def select(*new_selected_columns) selected_columns = new_selected_columns & all_column_names self.class.new(columns, all_rows, selected_columns: selected_columns, applied_query: applied_query) end |
#update(attrs) ⇒ Object
178 179 180 181 182 183 184 185 186 187 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 178 def update(attrs) all_rows .select { |row| matching_rows.include?(row) } .each do |row| attrs.each do |k, v| row[clone(k)] = clone(v) end end .count end |