# encoding: utf-8 #-- # Copyright (C) 2010 Tero Hänninen # Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . #++ include GrmfHelper class RepositoryCreationProcessor < ApplicationProcessor subscribes_to :create_repo def on_message(message) verify_connections! message_hash = ActiveSupport::JSON.decode(message) target_class = message_hash['target_class'] target_id = message_hash['target_id'] command = message_hash['command'] arguments = message_hash['arguments'] logprefix = "#{self.class.name}: #{target_class}(#{target_id.inspect}): " logger.info(logprefix + "#{command}(#{arguments.inspect}..)") target_class.constantize.send(command, *arguments) unless target_id.blank? #Trying max 5 times if find_by_id would return a correct value 5.times do obj = target_class.constantize.find_by_id(target_id) if obj && obj.respond_to?(:ready) obj.ready = true obj.save! # Add metafiles to repository if not an internal repo like wiki repo GrmfHelper::update_metainfo_to_repository(obj) if !Repository::KINDS_INTERNAL_REPO.include?(obj.kind) logger.info(logprefix + "Success") return else logger.error(logprefix + "Problem: obj.respond_to?(:ready).to_s == #{obj.respond_to?(:ready)}") sleep(3) end end end logger.fatal(logprefix + "FATAL: Repository was not marked ready.") end end