module Ownership::GlobalMethods

Private Instance Methods

owner(*args, &block) click to toggle source
Calls superclass method
# File lib/ownership/global_methods.rb, line 5
def owner(*args, &block)
  return super if is_a?(Method) # hack for pry

  owner = args[0]
  # same error message as Ruby
  raise ArgumentError, "wrong number of arguments (given #{args.size}, expected 1)" if args.size != 1
  raise ArgumentError, "Missing block" unless block_given?

  previous_value = Thread.current[:ownership_owner]
  begin
    Thread.current[:ownership_owner] = owner

    begin
      # callbacks
      if Ownership.around_change
        Ownership.around_change.call(owner, block)
      else
        block.call
      end
    rescue Exception => e
      e.owner = owner
      raise
    end
  ensure
    Thread.current[:ownership_owner] = previous_value
  end
end