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