Class: Legatus::UnitOfWork

Inherits:
Object
  • Object
show all
Defined in:
lib/legatus/unit_of_work.rb

Instance Method Summary collapse

Constructor Details

#initializeUnitOfWork

Returns a new instance of UnitOfWork.



4
5
6
# File 'lib/legatus/unit_of_work.rb', line 4

def initialize
  @steps = []
end

Instance Method Details

#commitObject



57
58
59
60
61
# File 'lib/legatus/unit_of_work.rb', line 57

def commit
  ActiveRecord::Base.connection.transaction do 
    @steps.all? { |step| step.call }
  end
end

#create(*models) ⇒ Object



20
21
22
23
24
# File 'lib/legatus/unit_of_work.rb', line 20

def create(*models)
  @steps << lambda do 
    models.all? { |model| self.execute(:create, model) }
  end
end

#denormalize(model, schema) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/legatus/unit_of_work.rb', line 44

def denormalize(model, schema)
  @steps << lambda do 
    schema.each do |field, subschema|
      assoc    = subschema.keys[0]
      aggre    = subschema.values[0].keys[0]
      subfield = subschema.values[0].values[0]

      model[field] = model.send(subschema.keys[0]).send(aggre, subfield)
    end
    model.save
  end
end

#destroy(*models) ⇒ Object



26
27
28
29
30
# File 'lib/legatus/unit_of_work.rb', line 26

def destroy(*models)
  @steps << lambda do 
    models.all? { |model| self.execute(:destroy, model) }
  end
end

#persist(*models) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/legatus/unit_of_work.rb', line 32

def persist(*models)
  @steps << lambda do 
    models.all? do |model| 
      if model.is_a?(Array)
        model.all? { |elem| self.save_or_destroy(elem) }
      else
        self.save_or_destroy(model)
      end
    end
  end
end

#save(*models) ⇒ Object



8
9
10
11
12
# File 'lib/legatus/unit_of_work.rb', line 8

def save(*models)
  @steps << lambda do 
    models.all? { |model| self.execute(:save, model) }
  end
end

#update(*models) ⇒ Object



14
15
16
17
18
# File 'lib/legatus/unit_of_work.rb', line 14

def update(*models)
  @steps << lambda do 
    models.all? { |model| self.execute(:update, model) }
  end
end