class Wizardry::Framework

Framework holds data on how the wizard itself is constructed. It’ll be the same for every instance

Attributes

class_name[RW]
completion_flag[RW]
edit_path_helper[RW]
name[RW]
pages[RW]
update_path_helper[RW]

Public Class Methods

new(name:, pages:, class_name:, edit_path_helper:, update_path_helper:, completion_flag: 'complete') click to toggle source
# File lib/wizardry/framework.rb, line 7
def initialize(name:, pages:, class_name:, edit_path_helper:, update_path_helper:, completion_flag: 'complete')
  @name               = name
  @pages              = setup_pages(pages)
  @class_name         = class_name
  @edit_path_helper   = edit_path_helper
  @update_path_helper = update_path_helper
  @completion_flag    = completion_flag

  page_sense_check
end

Public Instance Methods

branch_pages() click to toggle source
# File lib/wizardry/framework.rb, line 30
def branch_pages
  pages.select(&:branch?)
end
page(name) click to toggle source
# File lib/wizardry/framework.rb, line 34
def page(name)
  pages.detect { |p| p.name == name }
end
page_names() click to toggle source
# File lib/wizardry/framework.rb, line 22
def page_names
  pages.map(&:name)
end
trunk_pages() click to toggle source
# File lib/wizardry/framework.rb, line 26
def trunk_pages
  pages.reject(&:branch?)
end

Private Instance Methods

page_sense_check() click to toggle source
# File lib/wizardry/framework.rb, line 40
def page_sense_check
  # should have no more than one check your answers page
  pages.count { |page| page.is_a?(Wizardry::Pages::CheckYourAnswersPage) }.tap do |check_your_answers_pages|
    Rails.logger.warn("🧙 More than one check your answers page detected") if check_your_answers_pages > 1
  end

  # should have no more than one completion page
  pages.count { |page| page.is_a?(Wizardry::Pages::CompletionPage) }.tap do |completion_pages|
    Rails.logger.warn("🧙 More than one completion page detected") if completion_pages > 1
  end
end
setup_pages(pages) click to toggle source
# File lib/wizardry/framework.rb, line 52
def setup_pages(pages)
  pages.map { |page| [page, page.pages.each(&:branch!)].select(&:presence) }.flatten
end