class BluePrint::Context

Public Class Methods

action!() click to toggle source
# File lib/blue_print/context.rb, line 61
def self.action!
  return if @acted

  casting.each_pair do |klass, roles|
    roles.each do |role|
      klass.send(:prepend, role)
    end
  end

  @acted = true
end
activate!() click to toggle source
# File lib/blue_print/context.rb, line 41
def self.activate!
  BluePrint.env[context_name] = true
end
active?() click to toggle source
# File lib/blue_print/context.rb, line 29
def self.active?
  BluePrint.env.fetch(context_name) do
    !!active_ifs.inject(active_ifs.first.try(:active?)) do |memo, active_if|
      memo && active_if.active?
    end
  end
end
active_if(*names, &logic) click to toggle source
# File lib/blue_print/context.rb, line 18
def self.active_if(*names, &logic)
  active_ifs.concat(
    names.map { |name| BluePrint::ActiveIf.resolve(name) }.reject(&:nil?)
  )
  active_ifs.push(BluePrint::ActiveIf.new(&logic)) if logic
end
active_ifs() click to toggle source
# File lib/blue_print/context.rb, line 14
def self.active_ifs
  @active_ifs ||= []
end
cast(actor, as: []) click to toggle source
# File lib/blue_print/context.rb, line 53
def self.cast(actor, as: [])
  as = [as] unless as.kind_of?(Array)
  as.map! { |role| role.is_a?(Module) ? role : role.to_s.safe_constantize }
  casting[actor] = casting[actor] | as

  reaction!
end
casting() click to toggle source
# File lib/blue_print/context.rb, line 49
def self.casting
  @casting ||= Hash.new { |casting, klass| casting[klass] = [] }
end
context_name() click to toggle source
# File lib/blue_print/context.rb, line 25
def self.context_name
  @context_name ||= name.to_s.underscore.to_sym
end
deactivate!() click to toggle source
# File lib/blue_print/context.rb, line 45
def self.deactivate!
  BluePrint.env[context_name] = false
end
deactive?() click to toggle source
# File lib/blue_print/context.rb, line 37
def self.deactive?
  !active?
end
reaction!() click to toggle source
# File lib/blue_print/context.rb, line 73
def self.reaction!
  @acted = false
  action!
end
resolve(name) click to toggle source
# File lib/blue_print/context.rb, line 6
def self.resolve(name)
  if name.respond_to?(:active?)
    return name
  else
    name.to_s.classify.sub(/(Context)?$/, 'Context').safe_constantize
  end
end