Sha256: 6fa1b1d1d2fe8f0c3144e5117744d092e55a06efca17d066dc35c1aea75c283b

Contents?: true

Size: 1.14 KB

Versions: 40

Compression:

Stored size: 1.14 KB

Contents

#!/usr/bin/env ruby

require 'set'
require 'redis'

module Flapjack
  module Data

    class Tag < ::Set

      attr_accessor :name

      def initialize(opts = {})
        raise "Redis connection not set" unless @redis = opts[:redis]

        @name  = opts[:name]
        preset = @redis.smembers(@name)
        enum = opts[:create] || []
        @redis.sadd(@name, enum) unless enum.empty?
        super(enum | preset)
      end

      def self.find(name, opts)
        self.new(:name => name,
                 :redis => opts[:redis])
      end

      def self.find_intersection(tags, opts)
        @redis = opts[:redis]
        @redis.sinter(tags)
      end

      def self.create(name, enum = [], opts)
        self.new(:name => name,
                 :create => enum,
                 :redis => opts[:redis])
      end

      def add(o)
        @redis.sadd(@name, o) unless o.empty?
        super(o)
      end

      def delete(o)
        @redis.srem(@name, o)
        super(o)
      end

      def merge(o)
        @redis.sadd(@name, o) unless o.empty?
        super(o)
      end

      def to_json(*a)
        self.to_a.to_json(*a)
      end

    end
  end
end

Version data entries

40 entries across 40 versions & 1 rubygems

Version Path
flapjack-0.9.6 lib/flapjack/data/tag.rb
flapjack-0.9.5 lib/flapjack/data/tag.rb
flapjack-0.9.4 lib/flapjack/data/tag.rb
flapjack-1.1.0 lib/flapjack/data/tag.rb
flapjack-1.0.0 lib/flapjack/data/tag.rb
flapjack-1.0.0rc6 lib/flapjack/data/tag.rb
flapjack-1.0.0rc5 lib/flapjack/data/tag.rb
flapjack-0.9.3 lib/flapjack/data/tag.rb
flapjack-1.0.0rc3 lib/flapjack/data/tag.rb
flapjack-1.0.0rc2 lib/flapjack/data/tag.rb
flapjack-0.9.2 lib/flapjack/data/tag.rb
flapjack-0.9.1 lib/flapjack/data/tag.rb
flapjack-1.0.0rc1 lib/flapjack/data/tag.rb
flapjack-0.9.0 lib/flapjack/data/tag.rb
flapjack-0.8.12 lib/flapjack/data/tag.rb
flapjack-0.8.11 lib/flapjack/data/tag.rb
flapjack-0.8.10 lib/flapjack/data/tag.rb
flapjack-0.8.9 lib/flapjack/data/tag.rb
flapjack-0.8.8 lib/flapjack/data/tag.rb
flapjack-0.8.7 lib/flapjack/data/tag.rb