# frozen_string_literal: true require_relative 'capybara_interactor' require_relative 'command/fetch_last_punch_command' require_relative 'command/fill_punch_command' require_relative 'command/login_command' require_relative '../schedule' module Balboa module Interactor class InteractorBuilder def self.create(*args) new(*args).create end def initialize(options) @options = options @interactor = CapybaraInteractor.new(options) end def create last_punch = Command::FetchLastPunchCommand.new @interactor.tap do |itr| itr.add_command(:punch, fill_punch) itr.add_command(:last, last_punch) itr.add_command(:login, login) end end private def schedule Balboa::Schedule.new(@options['start_at'], @options['lunch_at'], @options['restart_at'], @options['leave_at']) end def fill_punch Command::FillPunchCommand.new(schedule, @options['project']) end def login Command::LoginCommand.new(@options['email'], @options['password']) end end end end