Sha256: aeb1f2a8314d4be8d5eb5a982ac2fd06420ffc0ab3a831db72a84a4c9c8aa89e

Contents?: true

Size: 1.63 KB

Versions: 10

Compression:

Stored size: 1.63 KB

Contents

module Neo4j
  module Rails

    # This method is typically used in an Rails ActionController as a filter method.
    # It will guarantee that an transaction is create before your action is called,
    # and that the transaction is finished after your action is called.
    #
    # Example:
    #  class MyController < ActionController::Base
    #      around_filter Neo4j::Rails::Transaction, :only => [:edit, :delete]
    #      ...
    #  end
    class Transaction
      class << self
        def current
          Thread.current[:neo4j_transaction]
        end

        def running?
          Thread.current[:neo4j_transaction] != nil
        end

        def fail?
          Thread.current[:neo4j_transaction_fail] != nil
        end

        def fail
          Thread.current[:neo4j_transaction_fail] = true
        end

        def success
          Thread.current[:neo4j_transaction_fail] = nil
        end

        def finish
          tx = Thread.current[:neo4j_transaction]
          tx.success unless fail?
          tx.finish
          Thread.current[:neo4j_transaction] = nil
          Thread.current[:neo4j_transaction_fail] = nil
        end

        def filter(*, &block)
          run &block
        end

        def run
          if running?
            yield self
          else
            begin
              new
              ret = yield self
            rescue
              fail
              raise
            ensure
              finish
            end
            ret
          end
        end
        
        private
        def new
          Thread.current[:neo4j_transaction] = Neo4j::Transaction.new
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
neo4j-2.0.0.alpha.5-java lib/neo4j/rails/transaction.rb
neo4j-2.0.0.alpha.4-java lib/neo4j/rails/transaction.rb
neo4j-2.0.0.alpha.3-java lib/neo4j/rails/transaction.rb
neo4j-1.3.1-java lib/neo4j/rails/transaction.rb
neo4j-1.3.0-java lib/neo4j/rails/transaction.rb
neo4j-1.2.6-java lib/neo4j/rails/transaction.rb
neo4j-1.2.5-java lib/neo4j/rails/transaction.rb
neo4j-1.2.4-java lib/neo4j/rails/transaction.rb
neo4j-1.2.3-java lib/neo4j/rails/transaction.rb
neo4j-1.2.2-java lib/neo4j/rails/transaction.rb