Sha256: cc69f67d95a84a6331853e7cbdc52a940b20288bb2391db6ca0d06d8b9b113b5

Contents?: true

Size: 619 Bytes

Versions: 1

Compression:

Stored size: 619 Bytes

Contents

class Bastet::Group
  attr_accessor :name, :criteria

  def initialize name, &block
    raise ArgumentError.new("Need to pass a criteria") unless block_given?
    validate_name!(name.to_s)

    @name = name.to_s
    @criteria = block

    persist!
  end

  def contains? entity
    criteria.call(entity)
  end

  private

    def validate_name! name
      if Bastet.redis.sismember('bastet_groups', name)
        raise ArgumentError.new("#{name} is already initialized as a group.")
      else
        Bastet.redis.sadd('bastet_groups', name)
      end
    end

    def persist!
      Bastet.groups << self
    end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bastet-0.1.0 lib/bastet/group.rb