Module: Sequel::Mapper

Extended by:
Forwardable
Defined in:
lib/sequel/mapper.rb,
lib/sequel/mapper/struct.rb,
lib/sequel/mapper/version.rb

Defined Under Namespace

Modules: ClassMethods Classes: Struct

Constant Summary collapse

VERSION =
"0.2.2"

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#datasetObject (readonly)

Returns the value of attribute dataset.



26
27
28
# File 'lib/sequel/mapper.rb', line 26

def dataset
  @dataset
end

Instance Method Details

#create(object) ⇒ Object



28
29
30
31
# 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) ⇒ Object



42
43
44
# File 'lib/sequel/mapper.rb', line 42

def delete(object)
  find_object(object).delete
end

#find(key) ⇒ Object Also known as: []



33
34
35
# File 'lib/sequel/mapper.rb', line 33

def find(key)
  find_object(key: key).first
end

#graph(*args) ⇒ Object



63
64
65
# File 'lib/sequel/mapper.rb', line 63

def graph(*args)
  scope dataset.extension(:graph_each).graph(*args)
end

#initialize(options) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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

#persist(object) ⇒ Object



46
47
48
49
50
51
52
# File 'lib/sequel/mapper.rb', line 46

def persist(object)
  if find_object(object).nil?
    create(object)
  else
    update(object)
  end
end

#update(object) ⇒ Object



38
39
40
# File 'lib/sequel/mapper.rb', line 38

def update(object)
  find_object(object).update(object_to_data(object))
end

#with(mapper_class, join, options = {}) ⇒ Object



67
68
69
# File 'lib/sequel/mapper.rb', line 67

def with(mapper_class, join, options = {})
  graph(dataset_for_mapper_class(mapper_class), join, options)
end