Class: KafoWizards::AbstractWizard

Inherits:
Object
  • Object
show all
Defined in:
lib/kafo_wizards/abstract_wizard.rb

Direct Known Subclasses

HighLine::Wizard

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(header, options = {}) ⇒ AbstractWizard

Returns a new instance of AbstractWizard.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 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

Instance Attribute Details

#descriptionObject (readonly)

Returns the value of attribute description.



5
6
7
# File 'lib/kafo_wizards/abstract_wizard.rb', line 5

def description
  @description
end

#entriesObject

Returns the value of attribute entries.



6
7
8
# File 'lib/kafo_wizards/abstract_wizard.rb', line 6

def entries
  @entries
end

#headerObject (readonly)

Returns the value of attribute header.



5
6
7
# File 'lib/kafo_wizards/abstract_wizard.rb', line 5

def header
  @header
end

#interactiveObject

Returns the value of attribute interactive.



6
7
8
# File 'lib/kafo_wizards/abstract_wizard.rb', line 6

def interactive
  @interactive
end

#loggerObject (readonly)

Returns the value of attribute logger.



5
6
7
# File 'lib/kafo_wizards/abstract_wizard.rb', line 5

def logger
  @logger
end

#renderersObject

Returns the value of attribute renderers.



6
7
8
# File 'lib/kafo_wizards/abstract_wizard.rb', line 6

def renderers
  @renderers
end

#validatorsObject

Returns the value of attribute validators.



6
7
8
# File 'lib/kafo_wizards/abstract_wizard.rb', line 6

def validators
  @validators
end

Class Method Details

.default_renderersObject



79
80
81
# File 'lib/kafo_wizards/abstract_wizard.rb', line 79

def self.default_renderers
  @default_renderers ||= {}
end

.register_default_renderer(display_type, renderer) ⇒ Object



83
84
85
# File 'lib/kafo_wizards/abstract_wizard.rb', line 83

def self.register_default_renderer(display_type, renderer)
  default_renderers[display_type] = renderer
end

Instance Method Details

#buttonsObject



36
37
38
# File 'lib/kafo_wizards/abstract_wizard.rb', line 36

def buttons
  @entries.select { |e| e.class >= KafoWizards::Entries::ButtonEntry }
end

#execute_menuObject



33
34
# File 'lib/kafo_wizards/abstract_wizard.rb', line 33

def execute_menu
end

#factoryObject



75
76
77
# File 'lib/kafo_wizards/abstract_wizard.rb', line 75

def factory
  Factory.new(self)
end

#runObject



22
23
24
25
26
27
28
29
30
31
# 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

#triggersObject



40
41
42
43
44
45
# 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 = {}) ⇒ Object



54
55
56
57
58
59
# 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) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
# 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

#valuesObject



47
48
49
50
51
52
# 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