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
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