class Utopia::Controller::Variables
Provides a stack-based instance variable lookup mechanism. It can flatten a stack of controllers into a single hash.
Public Class Methods
new()
click to toggle source
# File lib/utopia/controller/variables.rb, line 27 def initialize @controllers = [] end
Public Instance Methods
<<(controller)
click to toggle source
# File lib/utopia/controller/variables.rb, line 35 def << controller if top = self.top # This ensures that most variables will be at the top and controllers can naturally interactive with instance variables: controller.copy_instance_variables(top) end @controllers << controller return self end
[](key)
click to toggle source
# File lib/utopia/controller/variables.rb, line 77 def [] key fetch("@#{key}".to_sym, nil) end
fetch(key, default=self) { |key| ... }
click to toggle source
We use self as a seninel
# File lib/utopia/controller/variables.rb, line 47 def fetch(key, default=self) if controller = self.top if controller.instance_variables.include?(key) return controller.instance_variable_get(key) end end if block_given? yield(key) elsif !default.equal?(self) return default else raise KeyError.new(key) end end
to_hash()
click to toggle source
# File lib/utopia/controller/variables.rb, line 63 def to_hash attributes = {} if controller = self.top controller.instance_variables.each do |name| key = name[1..-1].to_sym attributes[key] = controller.instance_variable_get(name) end end return attributes end
top()
click to toggle source
# File lib/utopia/controller/variables.rb, line 31 def top @controllers.last end