UNPKG

@leansdk/leanrc

Version:

LeanRC is a MVC framework for creating graceful applications

106 lines (96 loc) 3.15 kB
# This file is part of LeanRC. # # LeanRC is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # LeanRC 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 Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with LeanRC. If not, see <https://www.gnu.org/licenses/>. # миксин может подмешиваться в наследники классa JunctionMediator module.exports = (Module)-> { LogMessage LogFilterMessage Pipes Mixin PointerT FuncG NotificationInterface } = Module:: { JunctionMediator PipeAwareModule FilterControlMessage } = Pipes:: { SET_PARAMS } = FilterControlMessage { STDLOG } = PipeAwareModule { SEND_TO_LOG LEVELS DEBUG ERROR FATAL INFO WARN CHANGE } = LogMessage Module.defineMixin Mixin 'LoggingJunctionMixin', (BaseClass = JunctionMediator) -> class extends BaseClass @inheritProtected() ipoMultitonKey = PointerT Symbol.for '~multitonKey' ipoJunction = PointerT Symbol.for '~junction' @public listNotificationInterests: FuncG([], Array), default: (args...)-> interests = @super args... interests.push SEND_TO_LOG interests.push LogFilterMessage.SET_LOG_LEVEL interests @public handleNotification: FuncG(NotificationInterface), default: (note)-> switch note.getName() when SEND_TO_LOG switch note.getType() when LEVELS[DEBUG] level = DEBUG break when LEVELS[ERROR] level = ERROR break when LEVELS[FATAL] level = FATAL break when LEVELS[INFO] level = INFO break when LEVELS[WARN] level = WARN break else level = DEBUG break logMessage = LogMessage.new level, @[ipoMultitonKey], note.getBody() @[ipoJunction].sendMessage STDLOG, logMessage break when LogFilterMessage.SET_LOG_LEVEL logLevel = note.getBody() setLogLevelMessage = LogFilterMessage.new SET_PARAMS, logLevel @[ipoJunction].sendMessage STDLOG, setLogLevelMessage changedLevelMessage = LogMessage.new CHANGE, @[ipoMultitonKey], " Changed Log Level to: #{LogMessage.LEVELS[logLevel]} " @[ipoJunction].sendMessage STDLOG, changedLevelMessage break else @super note return @initializeMixin()