Class: Gcloud::Datastore::Transaction

Inherits:
Dataset
  • Object
show all
Defined in:
lib/gcloud/datastore/transaction.rb

Overview

Transaction

Special Connection instance for running transactions.

See Gcloud::Datastore::Dataset.transaction

Instance Attribute Summary collapse

Attributes inherited from Dataset

#connection

Instance Method Summary collapse

Methods inherited from Dataset

#allocate_ids, default_project, #find, #find_all, #project, #run, #transaction

Constructor Details

#initialize(connection) ⇒ Transaction

Creates a new Transaction instance. Takes a Connection instead of project and Credentials.



30
31
32
33
34
# File 'lib/gcloud/datastore/transaction.rb', line 30

def initialize connection #:nodoc:
  @connection = connection
  reset!
  start
end

Instance Attribute Details

#idObject (readonly)

Returns the value of attribute id.



25
26
27
# File 'lib/gcloud/datastore/transaction.rb', line 25

def id
  @id
end

Instance Method Details

#commitObject

Commits a transaction.



79
80
81
82
83
84
85
86
87
# File 'lib/gcloud/datastore/transaction.rb', line 79

def commit
  if @id.nil?
    fail TransactionError, "Cannot commit when not in a transaction."
  end

  response = connection.commit shared_mutation, @id
  auto_id_assign_ids response.mutation_result.insert_auto_id_key
  true
end

#delete(*entities) ⇒ Object

Remove entities in a transaction.

dataset.transaction do |tx|
  if tx.find(user.key).nil?
    tx.delete task1, task2
  end
end


58
59
60
61
62
63
64
# File 'lib/gcloud/datastore/transaction.rb', line 58

def delete *entities
  shared_mutation.tap do |m|
    m.delete = entities.map { |entity| entity.key.to_proto }
  end
  # Do not delete yet
  true
end

#reset!Object

Reset the transaction. Transaction#start must be called afterwards.



103
104
105
106
107
# File 'lib/gcloud/datastore/transaction.rb', line 103

def reset!
  @shared_mutation = nil
  @id  = nil
  @_auto_id_entities = []
end

#rollbackObject

Rolls a transaction back.



91
92
93
94
95
96
97
98
# File 'lib/gcloud/datastore/transaction.rb', line 91

def rollback
  if @id.nil?
    fail TransactionError, "Cannot rollback when not in a transaction."
  end

  connection.rollback @id
  true
end

#save(*entities) ⇒ Object

Persist entities in a transaction.

dataset.transaction do |tx|
  if tx.find(user.key).nil?
    tx.save task1, task2
  end
end


44
45
46
47
48
# File 'lib/gcloud/datastore/transaction.rb', line 44

def save *entities
  save_entities_to_mutation entities, shared_mutation
  # Do not save or assign auto_ids yet
  entities
end

#startObject Also known as: begin_transaction

Begins a transaction. This method is run when a new Transaction is created.



69
70
71
72
73
74
# File 'lib/gcloud/datastore/transaction.rb', line 69

def start
  fail TransactionError, "Transaction already opened." unless @id.nil?

  response = connection.begin_transaction
  @id = response.transaction
end