class WonderNavigation::DeferrableOption

Attributes

block[RW]
fixed_value[RW]
fixed_value_assigned[RW]
name[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/wonder_navigation/deferrable_option.rb, line 5
def initialize(options = {})
  @fixed_value_assigned = options.has_key?(:fixed) && !options[:fixed].nil?
  @fixed_value = options[:fixed]
  @block       = options[:block]
  @name        = options[:name]
end

Public Instance Methods

present?() click to toggle source
# File lib/wonder_navigation/deferrable_option.rb, line 12
def present?
  fixed_value_assigned || !!block
end
resolvable?(object) click to toggle source
# File lib/wonder_navigation/deferrable_option.rb, line 16
def resolvable?(object)
  fixed_value_assigned || !!block && (!!object || block.arity.zero?)
end
resolve(object) click to toggle source
# File lib/wonder_navigation/deferrable_option.rb, line 24
def resolve(object)
  check_resolvable(object)
  fixed_value_assigned ? fixed_value : block.call(object)
end
try_resolve(object) click to toggle source
# File lib/wonder_navigation/deferrable_option.rb, line 20
def try_resolve(object)
  resolve(object) if resolvable?(object)
end

Private Instance Methods

check_resolvable(object) click to toggle source
# File lib/wonder_navigation/deferrable_option.rb, line 31
def check_resolvable(object)
  unless resolvable?(object)
    if present?
      raise EObjectNotSupplied.new "A block was defined to require an object but none (or nil) was supplied on deferrable option #{name}"
    else
      raise EDeferrableOptionEmpty.new "Neither a fixed value or a block was passed to deferrable option #{name}"
    end
  end
end