Sha256: 14450df0f35c95d14e0fe5847bbb09cbc6e20dc383699063a331ca1cf44ee33a

Contents?: true

Size: 1.47 KB

Versions: 3

Compression:

Stored size: 1.47 KB

Contents

# frozen_string_literal: true

module RubySmart
  module SimpleLogger
    module Devices
      class MultiDevice

        attr_reader :devices
        attr_reader :status

        def self.register(*args)
          new.register(*args)
        end

        def initialize
          @devices = []
          @status  = true
        end

        # pass data to the devices
        # @param [Object] data
        def write(data)
          return false unless status

          devices.each do |device|
            if device[:formatter]
              device[:dev].write(device[:formatter].(*data))
            else
              device[:dev].write(data)
            end
          end
        end

        alias_method :<<, :write

        # disables writing
        def close
          @status = false
        end

        # enables writing
        def reopen
          @status = true
        end

        # clears all devices
        def clear!
          @devices = []
        end

        # registers a new device.
        # CHAINABLE
        #
        # @param [Object] dev
        def register(dev, formatter = nil)
          @devices << {
            dev:       dev,
            formatter: formatter
          }

          self
        end

        # returns logs from the first loggable device
        # @return [Array] logs
        def logs
          logdev = devices.detect { |device| device[:dev].respond_to?(:logs) }
          logdev.nil? ? [] : logdev[:dev].logs
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ruby_smart-simple_logger-1.2.0 lib/ruby_smart/simple_logger/devices/multi_device.rb
ruby_smart-simple_logger-1.1.1 lib/ruby_smart/simple_logger/devices/multi_device.rb
ruby_smart-simple_logger-1.1.0 lib/ruby_smart/simple_logger/devices/multi_device.rb