class Gambiarra::App
Attributes
app_class[R]
debugging[R]
router[R]
Public Class Methods
app()
click to toggle source
# File lib/gambiarra/app.rb, line 29 def self.app @app ||= new end
inherited(app_class)
click to toggle source
# File lib/gambiarra/app.rb, line 10 def inherited(app_class) @app_class = app_class end
new(debugging: false)
click to toggle source
# File lib/gambiarra/app.rb, line 33 def initialize(debugging: false) debugging = true setup if respond_to?(:setup) @debugging = debugging @router = Router.new end
start(initial_route='')
click to toggle source
# File lib/gambiarra/app.rb, line 15 def self.start(initial_route='') path, params = initial_route.split(' ').each_with_object([nil, {}]) do |segment, memo| if segment =~ /:/ key, value = segment.split(':') memo[1].merge!([[key.to_sym, value.gsub('-', ' ')]].to_h) else memo[0] = [memo[0], segment].compact.join(' ') end end response = {path: (path || ''), **params} loop { response = app.flow(**response) } end
Public Instance Methods
app_name()
click to toggle source
# File lib/gambiarra/app.rb, line 70 def app_name self.class.to_s.split('::').first.underscore.gsub('_', '-') end
ask_question(question)
click to toggle source
# File lib/gambiarra/app.rb, line 44 def ask_question(question) CLI::UI::Prompt.ask(question[:statement], options: question[:options]) end
ask_questions(questions)
click to toggle source
# File lib/gambiarra/app.rb, line 40 def ask_questions(questions) questions.map { |name, question| [name, ask_question(question)] }.to_h end
exit()
click to toggle source
# File lib/gambiarra/app.rb, line 90 def exit Kernel.exit(0) end
flow(response)
click to toggle source
# File lib/gambiarra/app.rb, line 74 def flow(response) raise 'Response is empty' unless response output(response) response.delete(:content) questions = response&.delete(:questions) || {} response.merge!(navigation(response)) unless response.has_key?(:path) || questions.any? response.merge!(ask_questions(questions)) if questions.any? exit if response[:path] == 'exit' router.get(**response.compact) rescue => e puts e.backtrace if debugging puts e response.delete(:path) retry unless debugging end
output(response)
click to toggle source
# File lib/gambiarra/app.rb, line 59 def output(response) return unless response[:content] puts [ nil, "-> #{app_name} #{router.url}", nil, response[:content], nil ] end