bastet 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +5 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/README.markdown +33 -0
- data/Rakefile +6 -0
- data/bastet.gemspec +26 -0
- data/lib/bastet/base.rb +49 -0
- data/lib/bastet/version.rb +3 -0
- data/lib/bastet.rb +9 -0
- data/spec/bastet/base_spec.rb +50 -0
- data/spec/bastet_spec.rb +13 -0
- data/spec/spec_helper.rb +12 -0
- metadata +117 -0
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm --create use "ruby-1.9.3-p0@bastet"
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# Bastet - The unstable beast
|
2
|
+
|
3
|
+
Goddess associated with war, protection of Lower Egypt and the pharaoh, the sun, perfumes, ointments and embalming
|
4
|
+
|
5
|
+
## Configuration
|
6
|
+
|
7
|
+
redis = Redis.new
|
8
|
+
$bastet = Bastet.setup(redis)
|
9
|
+
|
10
|
+
## Usage
|
11
|
+
|
12
|
+
$bastet.activate(:crazy_feature, current_user)
|
13
|
+
$bastet.active?(:crazy_feature, current_user) #=> true
|
14
|
+
|
15
|
+
$bastet.active?(:scary_feature, :admins) #=> false
|
16
|
+
$bastet.activate(:scary_feature, :admins)
|
17
|
+
$bastet.active?(:scary_feature, :admins) #=> true
|
18
|
+
|
19
|
+
## To do
|
20
|
+
|
21
|
+
1. Support activating/deactivating all features for groups/users
|
22
|
+
2. Support activating/deactivating for multiple users/groups at once
|
23
|
+
3. Percentage support
|
24
|
+
4. Logging
|
25
|
+
|
26
|
+
## Contibuting
|
27
|
+
|
28
|
+
[](http://travis-ci.org/itsmeduncan/bastet)
|
29
|
+
|
30
|
+
1. Fork Basteet
|
31
|
+
2. Create a topic branch - `git checkout -b my_branch`
|
32
|
+
3. Push to your branch - `git push origin my_branch`
|
33
|
+
4. Create a pull request from your branch
|
data/Rakefile
ADDED
data/bastet.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "bastet/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "bastet"
|
7
|
+
s.version = Bastet::VERSION
|
8
|
+
s.authors = ["Duncan Grazier"]
|
9
|
+
s.email = ["itsmeduncan@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/itsmeduncan/bastet"
|
11
|
+
s.summary = %q{Simple feature rollout for users, and groups}
|
12
|
+
s.description = %q{Simple feature rollout for users, and groups}
|
13
|
+
|
14
|
+
s.rubyforge_project = "bastet"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_development_dependency "rake", "~> 0.9.2.2"
|
22
|
+
s.add_development_dependency "rspec", "~> 2.7.0"
|
23
|
+
s.add_development_dependency "mocha", "~> 0.10.0"
|
24
|
+
s.add_development_dependency "redis", "~> 2.2.2"
|
25
|
+
s.add_development_dependency "simplecov"
|
26
|
+
end
|
data/lib/bastet/base.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
class Bastet::Base
|
2
|
+
attr_accessor :redis
|
3
|
+
|
4
|
+
def initialize redis
|
5
|
+
@redis = redis
|
6
|
+
end
|
7
|
+
|
8
|
+
def activate feature, target
|
9
|
+
act :sadd, feature, target
|
10
|
+
end
|
11
|
+
|
12
|
+
def deactivate feature, target
|
13
|
+
act :srem, feature, target
|
14
|
+
end
|
15
|
+
|
16
|
+
def active? feature, target
|
17
|
+
act :sismember, feature, target
|
18
|
+
end
|
19
|
+
|
20
|
+
def inactive? feature, target
|
21
|
+
!active? feature, target
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def act method, feature, target
|
27
|
+
@redis.send(method, key(feature, target), val(target))
|
28
|
+
end
|
29
|
+
|
30
|
+
def key feature, target
|
31
|
+
[].tap do |key|
|
32
|
+
key << "feature"
|
33
|
+
key << feature.to_s
|
34
|
+
key << namespace(target)
|
35
|
+
end.join(":")
|
36
|
+
end
|
37
|
+
|
38
|
+
def val target
|
39
|
+
instance?(target) ? target.id : target.to_s
|
40
|
+
end
|
41
|
+
|
42
|
+
def namespace target
|
43
|
+
instance?(target) ? "users" : "groups"
|
44
|
+
end
|
45
|
+
|
46
|
+
def instance? target
|
47
|
+
target.respond_to?(:id)
|
48
|
+
end
|
49
|
+
end
|
data/lib/bastet.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bastet::Base do
|
4
|
+
before do
|
5
|
+
@redis = Redis.new
|
6
|
+
@bastet = Bastet::Base.new(@redis)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "initialization" do
|
10
|
+
it "should configure the Redis instance" do
|
11
|
+
Bastet::Base.new(@redis).redis.should == @redis
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "activate" do
|
16
|
+
it "should activate the :banana for the user" do
|
17
|
+
user = mock('user')
|
18
|
+
user.expects(:id).at_least(2).returns(100)
|
19
|
+
|
20
|
+
@bastet.activate(:banana, user)
|
21
|
+
@bastet.active?(:banana, user).should be_true
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should activate the :banana for the group" do
|
25
|
+
@bastet.activate(:banana, :admins)
|
26
|
+
@bastet.active?(:banana, :admins).should be_true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "deactivate" do
|
31
|
+
it "should deactivate the :banana for the user" do
|
32
|
+
user = mock('user')
|
33
|
+
user.expects(:id).at_least(2).returns(100)
|
34
|
+
|
35
|
+
@bastet.activate(:banana, user)
|
36
|
+
@bastet.active?(:banana, user).should be_true
|
37
|
+
|
38
|
+
@bastet.deactivate(:banana, user)
|
39
|
+
@bastet.inactive?(:banana, user).should be_true
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should deactivate the :banana for the group" do
|
43
|
+
@bastet.activate(:banana, :admins)
|
44
|
+
@bastet.active?(:banana, :admins).should be_true
|
45
|
+
|
46
|
+
@bastet.deactivate(:banana, :admins)
|
47
|
+
@bastet.inactive?(:banana, :admins).should be_true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/spec/bastet_spec.rb
ADDED
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bastet
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Duncan Grazier
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-11-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: &70179606468520 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.9.2.2
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70179606468520
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &70179606468000 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.7.0
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70179606468000
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: mocha
|
38
|
+
requirement: &70179606467440 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.10.0
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70179606467440
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: redis
|
49
|
+
requirement: &70179606466900 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.2.2
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70179606466900
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: simplecov
|
60
|
+
requirement: &70179606466340 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70179606466340
|
69
|
+
description: Simple feature rollout for users, and groups
|
70
|
+
email:
|
71
|
+
- itsmeduncan@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- .rspec
|
78
|
+
- .rvmrc
|
79
|
+
- .travis.yml
|
80
|
+
- Gemfile
|
81
|
+
- README.markdown
|
82
|
+
- Rakefile
|
83
|
+
- bastet.gemspec
|
84
|
+
- lib/bastet.rb
|
85
|
+
- lib/bastet/base.rb
|
86
|
+
- lib/bastet/version.rb
|
87
|
+
- spec/bastet/base_spec.rb
|
88
|
+
- spec/bastet_spec.rb
|
89
|
+
- spec/spec_helper.rb
|
90
|
+
homepage: https://github.com/itsmeduncan/bastet
|
91
|
+
licenses: []
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options: []
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ! '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
requirements: []
|
109
|
+
rubyforge_project: bastet
|
110
|
+
rubygems_version: 1.8.10
|
111
|
+
signing_key:
|
112
|
+
specification_version: 3
|
113
|
+
summary: Simple feature rollout for users, and groups
|
114
|
+
test_files:
|
115
|
+
- spec/bastet/base_spec.rb
|
116
|
+
- spec/bastet_spec.rb
|
117
|
+
- spec/spec_helper.rb
|