Class: ResourceManager::Base

Inherits:
Object
  • Object
show all
Includes:
Transactionable
Defined in:
lib/resource_manager.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Transactionable

#transaction

Class Method Details

.model(class_or_proc, &block) ⇒ Object



13
14
15
# File 'lib/resource_manager.rb', line 13

def model(class_or_proc, &block)
  self.model = class_or_proc
end

Instance Method Details

#create(params) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/resource_manager.rb', line 38

def create(params)
  transaction do
    run_callback(:before_create, params)

    result = if self.create_action.present?
               instance_exec(params, &self.create_action)
             else
               item = model.new(params)
               saved = item.save
               yield(item, saved) if block_given?
             end

    run_callback(:after_create, item) if saved
    result
  end
end

#destroy(item_or_id) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/resource_manager.rb', line 74

def destroy(item_or_id)
  transaction do
    item = item(item_or_id)
    run_callback(:before_destroy, item)

    if self.destroy_action.present?
      instance_exec(item, &self.destroy_action)
    else
      item.destroy
    end

    run_callback(:after_destroy, item)
    nil
  end
end

#modelObject



30
31
32
33
34
35
36
# File 'lib/resource_manager.rb', line 30

def model
  if self.class.model.kind_of?(Proc)
    instance_exec(&self.class.model)
  else
    self.class.model
  end
end

#update(item_or_id, params) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/resource_manager.rb', line 55

def update(item_or_id, params)
  transaction do
    item = item(item_or_id)
    run_callback(:before_update, item, params)

    result = if self.update_action.present?
               instance_exec(item, params, &self.update_action)
             else
               item.assign_attributes(params)
               changed = item.changed
               saved = item.save
               yield(item, saved) if block_given?
             end

    run_callback(:after_update, item, params, changed) if saved
    result
  end
end