Sha256: b74c245603b69d3f3935fc3bf36dd011461d243eb0218162742a083f2c62bd99

Contents?: true

Size: 1.37 KB

Versions: 3

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

module Loco
  class WsConnectedResourcesManager
    def initialize(resources)
      @resources = resources
      @connected_resources = nil
    end

    class << self
      def identifiers
        val = WsConnectionStorage.current.get key
        return [] if val.blank?

        JSON.parse val
      end

      def add(identifier)
        ids = identifiers
        return if ids.include? identifier

        ids << identifier
        WsConnectionStorage.current.set key, ids.to_json
      end

      def del(identifier)
        ids = identifiers
        return unless ids.include? identifier

        ids.delete identifier
        WsConnectionStorage.current.set key, ids.to_json
      end

      def key
        'loco:conn_ids'
      end
    end

    def connected_resources
      return @connected_resources if @connected_resources

      @resources.each do |resource|
        next if WsConnectionManager.new(resource).connected_uuids.empty?

        add resource
      end
      @connected_resources || []
    end

    def connected?(resource)
      connected_resources.map do |res|
        WsConnectionManager.new(res).identifier
      end.include? WsConnectionManager.new(resource).identifier
    end

    private

    def add(resource)
      @connected_resources ||= []
      @connected_resources << resource
      @connected_resources.uniq!
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
loco-rails-4.1.1 lib/loco/ws_connected_resources_manager.rb
loco-rails-4.1.0 lib/loco/ws_connected_resources_manager.rb
loco-rails-4.0.0 lib/loco/ws_connected_resources_manager.rb