module Sequel::Mapper
Constants
- VERSION
Attributes
dataset[R]
db[R]
model[R]
primary_key[R]
Public Class Methods
new(options)
click to toggle source
# File lib/sequel/mapper.rb, line 10 def initialize(options) if options.is_a? Sequel::Dataset @db = options.db @dataset = options.clone elsif options.is_a? Sequel::Database @db = options raise ArgumentError, 'no dataset defined' if self.class._dataset.nil? @dataset = db[self.class._dataset] else raise ArgumentError, 'no database or dataset' end @dataset.row_proc = method(:data_to_object) @model = self.class._model || Sequel::Mapper::Struct.new(*dataset.columns) @primary_key = self.class._primary_key || :id end
Private Class Methods
included(receiver)
click to toggle source
# File lib/sequel/mapper.rb, line 121 def self.included(receiver) receiver.extend ClassMethods end
Public Instance Methods
create(object)
click to toggle source
# File lib/sequel/mapper.rb, line 28 def create(object) id = dataset.insert object_to_data(object) object.send("#{primary_key}=", id) unless object.public_send(primary_key) end
delete(object)
click to toggle source
# File lib/sequel/mapper.rb, line 42 def delete(object) find_object(object).delete end
find(key)
click to toggle source
# File lib/sequel/mapper.rb, line 33 def find(key) find_object(key: key).first end
Also aliased as: []
graph(*args)
click to toggle source
# File lib/sequel/mapper.rb, line 63 def graph(*args) scope dataset.extension(:graph_each).graph(*args) end
persist(object)
click to toggle source
# File lib/sequel/mapper.rb, line 46 def persist(object) if find_object(object).nil? create(object) else update(object) end end
update(object)
click to toggle source
# File lib/sequel/mapper.rb, line 38 def update(object) find_object(object).update(object_to_data(object)) end
with(mapper_class, join, options = {})
click to toggle source
# File lib/sequel/mapper.rb, line 67 def with(mapper_class, join, options = {}) graph(dataset_for_mapper_class(mapper_class), join, options) end
Private Instance Methods
data_to_object(data)
click to toggle source
# File lib/sequel/mapper.rb, line 84 def data_to_object(data) model.new data end
dataset_for_mapper_class(mapper_class)
click to toggle source
# File lib/sequel/mapper.rb, line 100 def dataset_for_mapper_class(mapper_class) mapper_class.new(db).dataset end
find_object(object=nil, key: object.public_send(primary_key))
click to toggle source
# File lib/sequel/mapper.rb, line 88 def find_object(object=nil, key: object.public_send(primary_key)) dataset.where(pk_with_table => key) if key end
object_to_data(object)
click to toggle source
# File lib/sequel/mapper.rb, line 75 def object_to_data(object) dataset.columns.each_with_object({}) do |column, data| if object.respond_to?(column) value = object.public_send(column) data[column] = value unless value.nil? end end end
pk_with_table()
click to toggle source
# File lib/sequel/mapper.rb, line 92 def pk_with_table "#{dataset.first_source_table}__#{primary_key}".to_sym end
scope(dataset)
click to toggle source
# File lib/sequel/mapper.rb, line 96 def scope(dataset) self.class.new(dataset) end