Sha256: 42284f10e2f086f6f076864d7f26bdf1aea8121fb92444c37c2154d1e51dff60

Contents?: true

Size: 1.36 KB

Versions: 3

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

3 entries across 3 versions & 1 rubygems

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