Class/Module Index [+]

Quicksearch

Cinch::Syncable

Provide blocking access to user/channel information.

Public Instance Methods

attr(attribute, data = false, unsync = false) click to toggle source

@param [Symbol] attribute @param [Boolean] data @param [Boolean] unsync @api private

# File lib/cinch/syncable.rb, line 62
def attr(attribute, data = false, unsync = false)
  unless unsync
    if @when_requesting_synced_attribute
      @when_requesting_synced_attribute.call(attribute)
    end
    wait_until_synced(attribute)
  end

  if data
    return @data[attribute]
  else
    return instance_variable_get("@#{attribute}")
  end
end
mark_as_synced(attribute) click to toggle source

@api private @return [void]

# File lib/cinch/syncable.rb, line 79
def mark_as_synced(attribute)
  @synced_attributes << attribute
end
sync(attribute, value, data = false) click to toggle source

@api private @return [void]

# File lib/cinch/syncable.rb, line 30
def sync(attribute, value, data = false)
  if data
    @data[attribute] = value
  else
    instance_variable_set("@#{attribute}", value)
  end
  @synced_attributes << attribute
end
synced?(attribute) click to toggle source

@return [Boolean] @api private

# File lib/cinch/syncable.rb, line 41
def synced?(attribute)
  @synced_attributes.include?(attribute)
end
unsync(attribute) click to toggle source

@return [void] @api private

# File lib/cinch/syncable.rb, line 47
def unsync(attribute)
  @synced_attributes.delete(attribute)
end
unsync_all() click to toggle source

@return [void] @api private @since 1.0.1

# File lib/cinch/syncable.rb, line 54
def unsync_all
  @synced_attributes.clear
end
wait_until_synced(attr) click to toggle source

Blocks until the object is synced.

@return [void] @api private

# File lib/cinch/syncable.rb, line 8
def wait_until_synced(attr)
  attr = attr.to_sym
  waited = 0
  while true
    return if synced?(attr)
    waited += 1

    if waited % 100 == 0
      bot.loggers.warn "A synced attribute ('%s' for %s) has not been available for %d seconds, still waiting" % [attr, self.inspect, waited / 10]
      bot.loggers.warn caller.map {|s| "  #{s}"}

      if waited / 10 >= 30
        bot.loggers.warn "  Giving up..."
        raise Exceptions::SyncedAttributeNotAvailable, "'%s' for %s" % [attr, self.inspect]
      end
    end
    sleep 0.1
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.