Sha256: c23b51a811a2dc3bbabd6b68268108a41c2692ce491ee0b73f229e16a051efbb

Contents?: true

Size: 1.73 KB

Versions: 1

Compression:

Stored size: 1.73 KB

Contents

require 'mongoid'
require 'mongoid/semaphore/unsynchronized_access'
require 'mongoid/semaphore/sync_methods'

module Mongoid
  module Semaphore
#------------------------------------------------------------------------------
# => Overridden Instance Attribute Accessors on Volatile Fields
#------------------------------------------------------------------------------
    # => Volatile Value, Refresh Before Returning
    def sema_count
      self.save()
      self.reload
      return super
    end
    # => Volatile Value, Refresh Before Returning
    def used_by
      self.save()
      self.reload
      return super
    end
#------------------------------------------------------------------------------
# => Inclusion hook. Adds fields, and default attributes
#------------------------------------------------------------------------------    
    def self.included(base)
      super if defined?(super)
      base.class_eval do
        # => Define necessary fields for synchronization
        unless base.included_modules.include?(Mongoid::Document)
          include Mongoid::Document
        end
        # => Default Definition for semaphore value
        def __semaphore_attrs; @_semattr ||= {:count => 1}; end
        def __semaphore_initial_count; __semaphore_attrs[:count]; end
        # => Helper method for class to override default count
        def default_sema_count(count)
          count = count.to_i
          __semaphore_attrs[:count] = count
          return
        end
        # =>  Semaphore Counter
        field :sema_count, :type => Integer, :default => lambda { __semaphore_initial_count }
        # => Semaphore is currently held by "<hostname>:<pid>" || nil
        field :used_by, :type => String, :default => nil
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mongoid-semaphore-0.0.1 lib/mongoid/semaphore.rb