class KafoWizards::AbstractWizard

Attributes

description[R]
entries[RW]
header[R]
interactive[RW]
logger[R]
renderers[RW]
validators[RW]

Public Class Methods

default_renderers() click to toggle source
# File lib/kafo_wizards/abstract_wizard.rb, line 79
def self.default_renderers
  @default_renderers ||= {}
end
new(header, options = {}) click to toggle source
# File lib/kafo_wizards/abstract_wizard.rb, line 7
def initialize(header, options = {})
  @header = header
  @interactive = options.fetch(:interactive, true)
  @entries = options.fetch(:entries, [])
  @description = options.fetch(:description, '')
  @renderers = options.fetch(:renderers, self.class.default_renderers)
  @validators = options.fetch(:validators, [])
  @validators << lambda { |values| check_required_entries(values) }
  @logger = options.fetch(:logger) do |l|
    logger = Logger.new(STDERR)
    logger.level = Logger::ERROR
    logger
  end
end
register_default_renderer(display_type, renderer) click to toggle source
# File lib/kafo_wizards/abstract_wizard.rb, line 83
def self.register_default_renderer(display_type, renderer)
  default_renderers[display_type] = renderer
end

Public Instance Methods

buttons() click to toggle source
# File lib/kafo_wizards/abstract_wizard.rb, line 36
def buttons
  @entries.select { |e| e.class >= KafoWizards::Entries::ButtonEntry }
end
execute_menu() click to toggle source
# File lib/kafo_wizards/abstract_wizard.rb, line 33
def execute_menu
end
factory() click to toggle source
# File lib/kafo_wizards/abstract_wizard.rb, line 75
def factory
  Factory.new(self)
end
run() click to toggle source
# File lib/kafo_wizards/abstract_wizard.rb, line 22
def run
  if @interactive
    choice = execute_menu
  else
    choice = nil
    default_button = buttons.find { |b| b.default? }
    choice = default_button.name if default_button
  end
  choice
end
triggers() click to toggle source
# File lib/kafo_wizards/abstract_wizard.rb, line 40
def triggers
  buttons.inject([]) do |b_names, b|
    b_names << b.name if b.trigger_validation?
    b_names
  end
end
update(values = {}) click to toggle source
# File lib/kafo_wizards/abstract_wizard.rb, line 54
def update(values = {})

  entries.each do |entry|
    entry.update(values[entry.name]) unless values[entry.name].nil?
  end
end
validate(values) click to toggle source
# File lib/kafo_wizards/abstract_wizard.rb, line 61
def validate(values)
  errors = []
  validated = @validators.inject(values) do |result, lam|
    begin
      lam.call(result)
    rescue ValidationError => e
      errors += e.messages
      result
    end
  end
  raise ValidationError.new errors unless errors.empty?
  validated
end
values() click to toggle source
# File lib/kafo_wizards/abstract_wizard.rb, line 47
def values
  @entries.inject({}) do |vals, entry|
    vals[entry.name] = entry.value unless entry.class >= KafoWizards::Entries::ButtonEntry
    vals
  end
end

Protected Instance Methods

call_renderer_for_entry(render_method, entry) click to toggle source
# File lib/kafo_wizards/abstract_wizard.rb, line 98
def call_renderer_for_entry(render_method, entry)
  display_type = entry.display_type(true).find { |dt| @renderers.has_key?(dt) && @renderers[dt].respond_to?(render_method) }
  @renderers[display_type].send(render_method, entry) if display_type
end
check_required_entries(values) click to toggle source
# File lib/kafo_wizards/abstract_wizard.rb, line 89
def check_required_entries(values)
  messages = entries.inject([]) do |messages, e|
    messages << "#{e.label} must be present" if e.required? && values[e.name].nil?
    messages
  end
  raise ValidationError.new(messages) unless messages.empty?
  values
end