Class: Terrestrial::Adapters::MemoryAdapter::Relation

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/terrestrial/adapters/memory_adapter.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#schemaObject (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

#columnsObject



132
133
134
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 132

def columns
  all_column_names
end

#deleteObject



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

Returns:

  • (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

#reverseObject



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

#where(criteria, &block) ⇒ Object



136
137
138
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 136

def where(criteria, &block)
  new_with_query(Query.new(criteria: criteria, &block))
end