module Services
class Processor HANDLERS = { '\A\/start(\s.*|\z)' => Commands::Start, '\A\/stop\z' => Commands::Stop }.freeze def self.call(*args) new(*args).call end def initialize(message_dump) @message_dump = message_dump end def call process_message YAML.load(@message_dump) end private def process_message(message) user = user_by_message(message) command_klass(message).invoke(message, user) end def user_by_message(message) from = message.from user = Models::User.find_or_initialize_by(telegram_id: from.id) if user.new_record? user.update(first_name: from.first_name, last_name: from.last_name, username: from.username) end user end def command_klass(message) command_klass_by_text(message.text) || Commands::Missing end def command_klass_by_text(text) key = HANDLERS.keys.find { |regex| /#{regex}/ =~ prepare_text(text) } HANDLERS[key] end def prepare_text(text) text.strip end end
end