Sha256: 7206a2475e36469c573e9d4ac29b1c5dba1499c96417cd6390902c956d863040

Contents?: true

Size: 1.17 KB

Versions: 6

Compression:

Stored size: 1.17 KB

Contents

module LIFX
  # @api private
  class TagTable
    class Entry < Struct.new(:tag_id, :label, :site_id); end

    def initialize(entries: {})
      @entries = Hash.new { |h, k| h[k] = {} }
      entries.each do |k, v|
        @entries[k] = v
      end
    end

    def entries_with(tag_id: nil, site_id: nil, label: nil)
      entries.select do |entry|
        ret = []
        ret << (entry.tag_id == tag_id) if tag_id
        ret << (entry.site_id == site_id) if site_id
        ret << (entry.label == label) if label
        ret.all?
      end
    end

    def entry_with(**args)
      entries_with(**args).first
    end

    def update_table(tag_id: tag_id, label: label, site_id: site_id)
      entry = @entries[site_id][tag_id] ||= Entry.new(tag_id, label, site_id)
      entry.label = label
    end

    def delete_entries_with(tag_id: nil, site_id: nil, label: nil)
      matching_entries = entries_with(tag_id: tag_id, site_id: site_id, label: label)
      matching_entries.each do |entry|
        @entries[entry.site_id].delete(entry.tag_id)
      end
    end

    def tags
      entries.map(&:label).uniq
    end

    def entries
      @entries.values.map(&:values).flatten
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
lifx-0.4.11 lib/lifx/tag_table.rb
lifx-0.4.10 lib/lifx/tag_table.rb
lifx-0.4.8 lib/lifx/tag_table.rb
lifx-0.4.7 lib/lifx/tag_table.rb
lifx-0.4.6.1 lib/lifx/tag_table.rb
lifx-0.4.5 lib/lifx/tag_table.rb