Sha256: c5a0a6d9f3bf568d2556af660d6fc7be558eeba1ec3613fb371e2f7fd3ab9158

Contents?: true

Size: 1.36 KB

Versions: 6

Compression:

Stored size: 1.36 KB

Contents

# frozen_string_literal: true

module Loco
  class Hub
    PREFIX = 'loco:hub:'

    attr_reader :raw_members

    def initialize name, members = []
      @name = "#{PREFIX}#{name}"
      @raw_members = members.map { |m| serialize m }
    end

    class << self
      def get name
        hub = WsConnectionStorage.current.get "#{PREFIX}#{name}"
        return nil if hub.blank?
        new name, JSON.parse(hub)
      end
    end

    def name
      @name.split(PREFIX).last
    end

    def add_member member
      serialized = serialize member
      return raw_members if raw_members.include? serialized
      raw_members << serialized
      save
      raw_members
    end

    def del_member member
      serialized = serialize member
      return nil unless raw_members.include? serialized
      raw_members.delete serialized
      save
      serialized
    end

    def destroy
      WsConnectionStorage.current.del @name
      true
    end

    def save
      WsConnectionStorage.current.set @name, raw_members.to_json
      self
    end

    def include? resource
      raw_members.include? serialize(resource)
    end

    def members
      raw_members.map do |str|
        klass, id = str.split ':'
        klass.classify.constantize.find_by id: id
      end
    end

    private

      def serialize member
        WsConnectionManager.new(member).identifier
      end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
loco-rails-3.0.6 lib/loco/hub.rb
loco-rails-3.0.5 lib/loco/hub.rb
loco-rails-3.0.4 lib/loco/hub.rb
loco-rails-3.0.3 lib/loco/hub.rb
loco-rails-3.0.2 lib/loco/hub.rb
loco-rails-3.0.1 lib/loco/hub.rb