rollout 1.0.0 → 1.1.0
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/VERSION +1 -1
- data/lib/rollout.rb +24 -2
- data/rollout.gemspec +3 -3
- data/spec/rollout_spec.rb +32 -0
- metadata +42 -76
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.0
|
data/lib/rollout.rb
CHANGED
@@ -44,6 +44,14 @@ class Rollout
|
|
44
44
|
@redis.del(percentage_key(feature))
|
45
45
|
end
|
46
46
|
|
47
|
+
def info(feature)
|
48
|
+
{
|
49
|
+
:percentage => (active_percentage(feature) || 0).to_i,
|
50
|
+
:groups => active_groups(feature).map { |g| g.to_sym },
|
51
|
+
:users => active_user_ids(feature)
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
47
55
|
private
|
48
56
|
def key(name)
|
49
57
|
"feature:#{name}"
|
@@ -61,8 +69,22 @@ class Rollout
|
|
61
69
|
"#{key(name)}:percentage"
|
62
70
|
end
|
63
71
|
|
72
|
+
def active_groups(feature)
|
73
|
+
@redis.smembers(group_key(feature)) || []
|
74
|
+
end
|
75
|
+
|
76
|
+
def active_user_ids(feature)
|
77
|
+
@redis.smembers(user_key(feature)).map { |id| id.to_i }
|
78
|
+
end
|
79
|
+
|
80
|
+
def active_percentage(feature)
|
81
|
+
@redis.get(percentage_key(feature))
|
82
|
+
end
|
83
|
+
|
64
84
|
def user_in_active_group?(feature, user)
|
65
|
-
(
|
85
|
+
active_groups(feature).any? do |group|
|
86
|
+
@groups.key?(group) && @groups[group].call(user)
|
87
|
+
end
|
66
88
|
end
|
67
89
|
|
68
90
|
def user_active?(feature, user)
|
@@ -70,7 +92,7 @@ class Rollout
|
|
70
92
|
end
|
71
93
|
|
72
94
|
def user_within_active_percentage?(feature, user)
|
73
|
-
percentage =
|
95
|
+
percentage = active_percentage(feature)
|
74
96
|
return false if percentage.nil?
|
75
97
|
user.id % 100 < percentage.to_i
|
76
98
|
end
|
data/rollout.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "rollout"
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["James Golick"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2012-02-20"
|
13
13
|
s.description = "Conditionally roll out features with redis."
|
14
14
|
s.email = "jamesgoick@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
|
|
30
30
|
]
|
31
31
|
s.homepage = "http://github.com/jamesgolick/rollout"
|
32
32
|
s.require_paths = ["lib"]
|
33
|
-
s.rubygems_version = "1.
|
33
|
+
s.rubygems_version = "1.8.10"
|
34
34
|
s.summary = "Conditionally roll out features with redis."
|
35
35
|
|
36
36
|
if s.respond_to? :specification_version then
|
data/spec/rollout_spec.rb
CHANGED
@@ -147,4 +147,36 @@ describe "Rollout" do
|
|
147
147
|
@rollout.should_not be_active(:chat, stub(:id => 24))
|
148
148
|
end
|
149
149
|
end
|
150
|
+
|
151
|
+
describe "#info" do
|
152
|
+
describe "with a percentage set" do
|
153
|
+
before do
|
154
|
+
@rollout.activate_percentage(:chat, 10)
|
155
|
+
@rollout.activate_group(:chat, :caretakers)
|
156
|
+
@rollout.activate_group(:chat, :greeters)
|
157
|
+
@rollout.activate_user(:chat, stub(:id => 42))
|
158
|
+
end
|
159
|
+
|
160
|
+
it "returns info about all the activations" do
|
161
|
+
@rollout.info(:chat).should == {
|
162
|
+
:percentage => 10,
|
163
|
+
:groups => [:greeters, :caretakers],
|
164
|
+
:users => [42]
|
165
|
+
}
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe "without a percentage set" do
|
170
|
+
before do
|
171
|
+
end
|
172
|
+
|
173
|
+
it "the percentage defaults to 0" do
|
174
|
+
@rollout.info(:chat).should == {
|
175
|
+
:percentage => 0,
|
176
|
+
:groups => [],
|
177
|
+
:users => []
|
178
|
+
}
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
150
182
|
end
|
metadata
CHANGED
@@ -1,80 +1,57 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rollout
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 0
|
10
|
-
version: 1.0.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- James Golick
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-02-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: rspec
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70160153622800 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 13
|
30
|
-
segments:
|
31
|
-
- 1
|
32
|
-
- 2
|
33
|
-
- 9
|
18
|
+
requirements:
|
19
|
+
- - =
|
20
|
+
- !ruby/object:Gem::Version
|
34
21
|
version: 1.2.9
|
35
22
|
type: :development
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: bourne
|
39
23
|
prerelease: false
|
40
|
-
|
24
|
+
version_requirements: *70160153622800
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: bourne
|
27
|
+
requirement: &70160153621860 !ruby/object:Gem::Requirement
|
41
28
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
hash: 23
|
46
|
-
segments:
|
47
|
-
- 1
|
48
|
-
- 0
|
49
|
-
- 0
|
29
|
+
requirements:
|
30
|
+
- - =
|
31
|
+
- !ruby/object:Gem::Version
|
50
32
|
version: 1.0.0
|
51
33
|
type: :development
|
52
|
-
version_requirements: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: redis
|
55
34
|
prerelease: false
|
56
|
-
|
35
|
+
version_requirements: *70160153621860
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: redis
|
38
|
+
requirement: &70160153619840 !ruby/object:Gem::Requirement
|
57
39
|
none: false
|
58
|
-
requirements:
|
59
|
-
- -
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
|
62
|
-
segments:
|
63
|
-
- 0
|
64
|
-
- 1
|
65
|
-
version: "0.1"
|
40
|
+
requirements:
|
41
|
+
- - =
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0.1'
|
66
44
|
type: :development
|
67
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70160153619840
|
68
47
|
description: Conditionally roll out features with redis.
|
69
48
|
email: jamesgoick@gmail.com
|
70
49
|
executables: []
|
71
|
-
|
72
50
|
extensions: []
|
73
|
-
|
74
|
-
extra_rdoc_files:
|
51
|
+
extra_rdoc_files:
|
75
52
|
- LICENSE
|
76
53
|
- README.rdoc
|
77
|
-
files:
|
54
|
+
files:
|
78
55
|
- .document
|
79
56
|
- LICENSE
|
80
57
|
- README.rdoc
|
@@ -85,39 +62,28 @@ files:
|
|
85
62
|
- spec/rollout_spec.rb
|
86
63
|
- spec/spec.opts
|
87
64
|
- spec/spec_helper.rb
|
88
|
-
has_rdoc: true
|
89
65
|
homepage: http://github.com/jamesgolick/rollout
|
90
66
|
licenses: []
|
91
|
-
|
92
67
|
post_install_message:
|
93
68
|
rdoc_options: []
|
94
|
-
|
95
|
-
require_paths:
|
69
|
+
require_paths:
|
96
70
|
- lib
|
97
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
72
|
none: false
|
99
|
-
requirements:
|
100
|
-
- -
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
|
103
|
-
|
104
|
-
- 0
|
105
|
-
version: "0"
|
106
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
78
|
none: false
|
108
|
-
requirements:
|
109
|
-
- -
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
|
112
|
-
segments:
|
113
|
-
- 0
|
114
|
-
version: "0"
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
115
83
|
requirements: []
|
116
|
-
|
117
84
|
rubyforge_project:
|
118
|
-
rubygems_version: 1.
|
85
|
+
rubygems_version: 1.8.10
|
119
86
|
signing_key:
|
120
87
|
specification_version: 3
|
121
88
|
summary: Conditionally roll out features with redis.
|
122
89
|
test_files: []
|
123
|
-
|