Sha256: 1aa741c2401a59ce45ec35dbf11e3e62413f967d407ab22d49ae702edba90900

Contents?: true

Size: 843 Bytes

Versions: 6

Compression:

Stored size: 843 Bytes

Contents

module Fezzik
  def self.role(role_name, settings)
    @roles ||= {}
    @roles[role_name] = settings
  end

  def self.roles() @roles ||= {} end

  def self.with_role(role_name, &block)
    return block.call if roles[role_name].nil?

    overridden_settings = {}
    new_settings = []
    roles[role_name].each_key do |name|
      if @@settings.has_key? name
        overridden_settings[name] = Fezzik.get(name)
      else
        new_settings << name
      end
    end
    override_settings(roles[role_name])
    begin
      block.call
    ensure
      override_settings(overridden_settings, new_settings)
    end
  end

  def self.override_settings(to_set, to_clear = [])
    to_clear.each { |setting| Fezzik.clear setting }
    to_set.each { |setting, value| Fezzik.set setting, value }
  end
  private_class_method :override_settings
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
fezzik-0.8.4 lib/fezzik/role.rb
fezzik-0.8.3 lib/fezzik/role.rb
fezzik-0.8.2 lib/fezzik/role.rb
fezzik-0.8.1 lib/fezzik/role.rb
fezzik-0.8.0 lib/fezzik/role.rb
fezzik-0.8.0.beta3 lib/fezzik/role.rb