flipper 0.6.3 → 0.7.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -2
  3. data/Gemfile +10 -10
  4. data/Guardfile +2 -1
  5. data/README.md +54 -23
  6. data/Rakefile +1 -1
  7. data/examples/dsl.rb +2 -2
  8. data/examples/{percentage_of_random.rb → percentage_of_time.rb} +1 -1
  9. data/lib/flipper.rb +25 -12
  10. data/lib/flipper/dsl.rb +96 -8
  11. data/lib/flipper/feature.rb +216 -37
  12. data/lib/flipper/gate.rb +6 -38
  13. data/lib/flipper/gate_values.rb +42 -0
  14. data/lib/flipper/gates/actor.rb +11 -13
  15. data/lib/flipper/gates/boolean.rb +3 -12
  16. data/lib/flipper/gates/group.rb +14 -16
  17. data/lib/flipper/gates/percentage_of_actors.rb +12 -13
  18. data/lib/flipper/gates/{percentage_of_random.rb → percentage_of_time.rb} +8 -11
  19. data/lib/flipper/instrumentation/log_subscriber.rb +1 -1
  20. data/lib/flipper/instrumentation/subscriber.rb +1 -1
  21. data/lib/flipper/spec/shared_adapter_specs.rb +16 -16
  22. data/lib/flipper/type.rb +1 -1
  23. data/lib/flipper/typecast.rb +44 -0
  24. data/lib/flipper/types/actor.rb +2 -5
  25. data/lib/flipper/types/group.rb +6 -0
  26. data/lib/flipper/types/percentage.rb +7 -1
  27. data/lib/flipper/types/{percentage_of_random.rb → percentage_of_time.rb} +1 -1
  28. data/lib/flipper/version.rb +1 -1
  29. data/script/bootstrap +21 -0
  30. data/script/guard +15 -0
  31. data/script/release +15 -0
  32. data/script/test +30 -0
  33. data/spec/flipper/dsl_spec.rb +67 -8
  34. data/spec/flipper/feature_spec.rb +424 -12
  35. data/spec/flipper/gate_spec.rb +1 -20
  36. data/spec/flipper/gate_values_spec.rb +134 -0
  37. data/spec/flipper/gates/actor_spec.rb +1 -21
  38. data/spec/flipper/gates/boolean_spec.rb +3 -71
  39. data/spec/flipper/gates/group_spec.rb +3 -23
  40. data/spec/flipper/gates/percentage_of_actors_spec.rb +5 -26
  41. data/spec/flipper/gates/percentage_of_time_spec.rb +23 -0
  42. data/spec/flipper/middleware/memoizer_spec.rb +1 -2
  43. data/spec/flipper/typecast_spec.rb +63 -0
  44. data/spec/flipper/types/group_spec.rb +21 -1
  45. data/spec/flipper/types/percentage_of_time_spec.rb +6 -0
  46. data/spec/flipper/types/percentage_spec.rb +20 -0
  47. data/spec/flipper_spec.rb +31 -9
  48. data/spec/helper.rb +1 -3
  49. data/spec/integration_spec.rb +22 -22
  50. metadata +21 -11
  51. data/spec/flipper/gates/percentage_of_random_spec.rb +0 -46
  52. data/spec/flipper/types/percentage_of_random_spec.rb +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e34faac8f845079716a91656c21c42152e6fca2f
4
- data.tar.gz: 6520f47773e83622cc34a6c1fa00f7a5909626e8
3
+ metadata.gz: 94132c1c49e833a166069931d26beee25f9f5a1e
4
+ data.tar.gz: 8575c2db458321be6d371f04b842e04f6a99daeb
5
5
  SHA512:
6
- metadata.gz: e7b87ac273822f26046f712bb745869677e9a92039a14f17fc3457743c963e4359b8439c0196654f6ab2f26be2ae78a062e62e80f1f92661a24b875e90ec9a1c
7
- data.tar.gz: f79a13fd623d67a12f17a90da97143df4152bbf87ff76c5556439d02f0a62d6c8993dbd6d1850f4267c37a1b29708a204343840b43d5904e1f5b1b06cabe08db
6
+ metadata.gz: 51df2910a358380d4b1eace919c8f6277210cf4b007b1ab34c10376070041dc3ab843ab551d1d3524ac42599a1e3556bab53c3aaf890c2e81a24f40f7980ab26
7
+ data.tar.gz: bcce3fe6e79483dbc1eeae59b32743bdfef65cb711f532b9f4aa33752d74b5e31fef5ed39a76c6fb7be9fd3796ea4be23561cf1e1f5264d2f99c6da07779b444
data/.travis.yml CHANGED
@@ -1,8 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.8.7
4
- - ree
5
3
  - 1.9.3
4
+ - 2.1.0
5
+ - 2.2.0
6
6
  notifications:
7
7
  email: false
8
8
  bundler_args: --without guard
data/Gemfile CHANGED
@@ -1,16 +1,16 @@
1
1
  source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
- gem 'rake'
5
- gem 'metriks', :require => false
6
- gem 'statsd-ruby', :require => false
7
- gem 'rspec'
8
- gem 'rack-test'
9
- gem 'activesupport', :require => false
4
+ gem 'rake', '~> 10.4.2'
5
+ gem 'metriks', '~> 0.9.9', :require => false
6
+ gem 'statsd-ruby', '~> 1.2.1', :require => false
7
+ gem 'rspec', '~> 2.14'
8
+ gem 'rack-test', '~> 0.6.3'
9
+ gem 'activesupport', '~> 4.2.0', :require => false
10
10
 
11
11
  group(:guard) do
12
- gem 'guard'
13
- gem 'guard-rspec'
14
- gem 'guard-bundler'
15
- gem 'rb-fsevent'
12
+ gem 'guard', '~> 2.12.5'
13
+ gem 'guard-rspec', '~> 4.5.0'
14
+ gem 'guard-bundler', '~> 2.1.0'
15
+ gem 'rb-fsevent', '~> 0.9.4'
16
16
  end
data/Guardfile CHANGED
@@ -9,7 +9,8 @@ end
9
9
  rspec_options = {
10
10
  :all_after_pass => false,
11
11
  :all_on_start => false,
12
- :keep_failed => false,
12
+ :failed_mode => :keep,
13
+ :cmd => "bundle exec rspec",
13
14
  }
14
15
 
15
16
  guard 'rspec', rspec_options do
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
- ![flipper logo](https://raw.github.com/jnunemaker/flipper-ui/master/lib/flipper/ui/public/images/logo.png)
1
+ ![flipper logo](https://raw.githubusercontent.com/jnunemaker/flipper-ui/master/lib/flipper/ui/public/images/logo.png)
2
2
 
3
3
  <pre>
4
- __
4
+ __
5
5
  _.-~ )
6
6
  _..--~~~~,' ,-/ _
7
7
  .-'. . . .' ,-',' ,' )
@@ -37,7 +37,7 @@ Or install it yourself with:
37
37
 
38
38
  ## Usage
39
39
 
40
- The goal of the API for flipper was to have everything revolve around features and what ways they can be enabled. Start with top level and dig into a feature, then dig in further and enable that feature for a given type of access, as opposed to thinking about how the feature will be accessed first (ie: stats.enable vs activate_group(:stats, ...)).
40
+ The goal of the API for flipper was to have everything revolve around features and what ways they can be enabled. Start with top level and dig into a feature, then dig in further and enable that feature for a given type of access, as opposed to thinking about how the feature will be accessed first (ie: `stats.enable` vs `activate_group(:stats, ...)`).
41
41
 
42
42
  ```ruby
43
43
  require 'flipper'
@@ -74,11 +74,11 @@ Of course there are more [examples for you to peruse](https://github.com/jnunema
74
74
 
75
75
  ## Types
76
76
 
77
- Out of the box several types of enabling are supported. They are checked in this order.
77
+ Out of the box several types of enabling are supported. They are checked in this order:
78
78
 
79
79
  ### 1. Boolean
80
80
 
81
- All on or all off. Think top level things like :stats, :search, :logging, etc. Also, an easy way to release a new feature as once a feature is boolean enabled it is on for every situation.
81
+ All on or all off. Think top level things like `:stats`, `:search`, `:logging`, etc. Also, an easy way to release a new feature as once a feature is boolean enabled it is on for every situation.
82
82
 
83
83
  ```ruby
84
84
  flipper = Flipper.new(adapter)
@@ -97,13 +97,21 @@ Flipper.register(:admins) do |actor|
97
97
  end
98
98
 
99
99
  flipper = Flipper.new(adapter)
100
+
100
101
  flipper[:stats].enable flipper.group(:admins) # turn on for admins
101
102
  flipper[:stats].disable flipper.group(:admins) # turn off for admins
103
+
102
104
  person = Person.find(params[:id])
103
105
  flipper[:stats].enabled? person # check if enabled, returns true if person.admin? is true
106
+
107
+ # you can also use shortcut methods
108
+ flipper.enable_group :stats, :admins
109
+ flipper.disable_group :stats, :admins
110
+ flipper[:stats].enable_group :admins
111
+ flipper[:stats].disable_group :admins
104
112
  ```
105
113
 
106
- There is no requirement that the thing yielded to the block be a user model or whatever. It can be anything you want therefore it is a good idea to check that the thing passed into the group block actually responds to what you are trying.
114
+ There is no requirement that the thing yielded to the block be a user model or whatever. It can be anything you want, therefore it is a good idea to check that the thing passed into the group block actually responds to what you are trying.
107
115
 
108
116
  ### 3. Individual Actor
109
117
 
@@ -121,11 +129,17 @@ flipper[:stats].enabled? user # false
121
129
  # you can enable anything, does not need to be user or person
122
130
  flipper[:search].enable group
123
131
  flipper[:search].enabled? group
132
+
133
+ # you can also use shortcut methods
134
+ flipper.enable_actor :search, user
135
+ flipper.disable_actor :search, user
136
+ flipper[:search].enable_actor user
137
+ flipper[:search].disable_actor user
124
138
  ```
125
139
 
126
- The key is to make sure you do not enable two different types of objects for the same feature. Imagine that user has a flipper_id of 6 and group has a flipper_id of 6. Enabling search for user would automatically enable it for group, as they both have a flipper_id of 6.
140
+ The key is to make sure you do not enable two different types of objects for the same feature. Imagine that user has a `flipper_id` of 6 and group has a `flipper_id` of 6. Enabling search for user would automatically enable it for group, as they both have a `flipper_id` of 6.
127
141
 
128
- The one exception to this rule is if you have globally unique flipper_ids, such as uuid's. If your flipper_ids are unique globally in your entire system, enabling two different types should be safe. Another way around this is to prefix the flipper_id with the class name like this:
142
+ The one exception to this rule is if you have globally unique `flipper_ids`, such as UUIDs. If your `flipper_ids` are unique globally in your entire system, enabling two different types should be safe. Another way around this is to prefix the `flipper_id` with the class name like this:
129
143
 
130
144
  ```ruby
131
145
  class User
@@ -158,36 +172,47 @@ flipper[:stats].enable percentage
158
172
  # user.flipper_id.to_s to ensure enabled distribution is smooth
159
173
  flipper[:stats].enabled? user
160
174
 
175
+ # you can also use shortcut methods
176
+ flipper.enable_percentage_of_actors :search, 10
177
+ flipper.disable_percentage_of_actors :search # sets to 0
178
+ flipper[:search].enable_percentage_of_actors 10
179
+ flipper[:search].disable_percentage_of_actors # sets to 0
161
180
  ```
162
181
 
163
- ### 5. Percentage of Random
182
+ ### 5. Percentage of Time
164
183
 
165
- Turn this on for a random percentage of time. Think load testing new features behind the scenes and such.
184
+ Turn this on for a percentage of time. Think load testing new features behind the scenes and such.
166
185
 
167
186
  ```ruby
168
187
  flipper = Flipper.new(adapter)
169
188
 
170
- # get percentage of random instance set to 5
171
- percentage = flipper.random(5)
189
+ # get percentage of time instance set to 5
190
+ percentage = flipper.time(5)
172
191
 
173
- # turn on logging for 5 percent of the time randomly
192
+ # turn on logging for 5 percent of the time
174
193
  # could be on during one request and off the next
175
194
  # could even be on first time in request and off second time
176
195
  flipper[:logging].enable percentage
196
+
197
+ # you can also use shortcut methods
198
+ flipper.enable_percentage_of_time :search, 5
199
+ flipper.disable_percentage_of_time :search # sets to 0
200
+ flipper[:search].enable_percentage_of_time 5
201
+ flipper[:search].disable_percentage_of_time # sets to 0
177
202
  ```
178
203
 
179
- Randomness is not a good idea for enabling new features in the UI. Most of the time you want a feature on or off for a user, but there are definitely times when I have found percentage of random to be very useful.
204
+ Timeness is not a good idea for enabling new features in the UI. Most of the time you want a feature on or off for a user, but there are definitely times when I have found percentage of time to be very useful.
180
205
 
181
206
  ## Adapters
182
207
 
183
208
  I plan on supporting [in-memory](https://github.com/jnunemaker/flipper/blob/master/lib/flipper/adapters/memory.rb), [Mongo](https://github.com/jnunemaker/flipper-mongo), and [Redis](https://github.com/jnunemaker/flipper-redis) as adapters for flipper. Others are welcome, so please let me know if you create one.
184
209
 
185
- * [memory adapter](https://github.com/jnunemaker/flipper/blob/master/lib/flipper/adapters/memory.rb) - Great for tests.
186
- * [mongo adapter](https://github.com/jnunemaker/flipper-mongo)
187
- * [redis adapter](https://github.com/jnunemaker/flipper-redis)
188
- * [cassanity adapter](https://github.com/jnunemaker/flipper-cassanity)
189
- * [activerecord 4 adapter](https://github.com/bgentry/flipper-activerecord)
190
- * [activerecord 3 adapter](https://github.com/jproudman/flipper-activerecord)
210
+ * [memory adapter](https://github.com/jnunemaker/flipper/blob/master/lib/flipper/adapters/memory.rb) great for tests
211
+ * [Mongo adapter](https://github.com/jnunemaker/flipper-mongo)
212
+ * [Redis adapter](https://github.com/jnunemaker/flipper-redis)
213
+ * [Cassanity adapter](https://github.com/jnunemaker/flipper-cassanity)
214
+ * [Active Record 4 adapter](https://github.com/bgentry/flipper-activerecord)
215
+ * [Active Record 3 adapter](https://github.com/jproudman/flipper-activerecord)
191
216
 
192
217
  The basic API for an adapter is this:
193
218
 
@@ -229,7 +254,7 @@ I would also recommend setting `fail_fast = true` in your RSpec configuration as
229
254
 
230
255
  One optimization that flipper provides is a memoizing middleware. The memoizing middleware ensures that you only make one adapter call per feature per request.
231
256
 
232
- This means if you check the same feature over and over, it will only make one mongo, redis, or whatever call per feature for the length of the request.
257
+ This means if you check the same feature over and over, it will only make one Mongo, Redis, or whatever call per feature for the length of the request.
233
258
 
234
259
  You can use the middleware from a Rails initializer like so:
235
260
 
@@ -251,7 +276,7 @@ $flipper = Flipper.new(...)
251
276
  config.middleware.use Flipper::Middleware::Memoizer, lambda { $flipper }
252
277
  ```
253
278
 
254
- **Note**: Be sure that the middlware is high enough up in your stack that all feature checks are wrapped.
279
+ **Note**: Be sure that the middleware is high enough up in your stack that all feature checks are wrapped.
255
280
 
256
281
  ## Contributing
257
282
 
@@ -261,6 +286,12 @@ config.middleware.use Flipper::Middleware::Memoizer, lambda { $flipper }
261
286
  4. Push to the branch (`git push origin my-new-feature`)
262
287
  5. Create new Pull Request
263
288
 
289
+ ## Releasing
290
+
291
+ 1. Update the version to be whatever it should be and commit.
292
+ 2. `script/release`
293
+ 3. Profit.
294
+
264
295
  ## Coming Soon™
265
296
 
266
- * [Web UI](https://github.com/jnunemaker/flipper-ui) (think resque UI for features toggling/status)
297
+ * [Web UI](https://github.com/jnunemaker/flipper-ui) (think Resque UI for features toggling/status)
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
3
 
4
- require 'rspec/core/rake_task'
4
+ require "rspec/core/rake_task"
5
5
  RSpec::Core::RakeTask.new
6
6
 
7
7
  task :default => :spec
data/examples/dsl.rb CHANGED
@@ -59,8 +59,8 @@ puts "stats.enabled?: #{stats.enabled?}"
59
59
  puts "stats.enabled? person: #{stats.enabled? person}"
60
60
  puts
61
61
 
62
- # get an instance of the percentage of random type set to 5
63
- puts flipper.random(5).inspect
62
+ # get an instance of the percentage of time type set to 5
63
+ puts flipper.time(5).inspect
64
64
 
65
65
  # get an instance of the percentage of actors type set to 15
66
66
  puts flipper.actors(15).inspect
@@ -8,7 +8,7 @@ flipper = Flipper.new(adapter)
8
8
  logging = flipper[:logging]
9
9
 
10
10
  perform_test = lambda do |number|
11
- logging.enable flipper.random(number)
11
+ logging.enable flipper.time(number)
12
12
 
13
13
  total = 1_000
14
14
  enabled = []
data/lib/flipper.rb CHANGED
@@ -24,27 +24,39 @@ module Flipper
24
24
  # Raises Flipper::DuplicateGroup if the group is already registered.
25
25
  def self.register(name, &block)
26
26
  group = Types::Group.new(name, &block)
27
- groups.add(group.name, group)
27
+ groups_registry.add(group.name, group)
28
28
  group
29
29
  rescue Registry::DuplicateKey
30
- raise DuplicateGroup, %Q{Group #{name.inspect} has already been registered}
30
+ raise DuplicateGroup, "Group #{name.inspect} has already been registered"
31
+ end
32
+
33
+ # Public: Returns a Set of registered Types::Group instances.
34
+ def self.groups
35
+ groups_registry.values.to_set
36
+ end
37
+
38
+ # Public: Returns a Set of symbols where each symbol is a registered
39
+ # group name. If you just want the names, this is more efficient than doing
40
+ # `Flipper.groups.map(&:name)`.
41
+ def self.group_names
42
+ groups_registry.keys.to_set
31
43
  end
32
44
 
33
45
  # Public: Clears the group registry.
34
46
  #
35
47
  # Returns nothing.
36
48
  def self.unregister_groups
37
- groups.clear
49
+ groups_registry.clear
38
50
  end
39
51
 
40
52
  # Public: Check if a group exists
41
53
  #
42
54
  # Returns boolean
43
55
  def self.group_exists?(name)
44
- self.groups.key?(name)
56
+ groups_registry.key?(name)
45
57
  end
46
58
 
47
- # Internal: Fetches a group by name.
59
+ # Public: Fetches a group by name.
48
60
  #
49
61
  # name - The Symbol name of the group.
50
62
  #
@@ -55,19 +67,19 @@ module Flipper
55
67
  # Returns the Flipper::Group if group registered.
56
68
  # Raises Flipper::GroupNotRegistered if group is not registered.
57
69
  def self.group(name)
58
- groups.get(name)
70
+ groups_registry.get(name)
59
71
  rescue Flipper::Registry::KeyNotFound => e
60
72
  raise GroupNotRegistered, "Group #{e.key.inspect} has not been registered"
61
73
  end
62
74
 
63
- # Internal: Registry of all groups.
64
- def self.groups
65
- @groups ||= Registry.new
75
+ # Internal: Registry of all groups_registry.
76
+ def self.groups_registry
77
+ @groups_registry ||= Registry.new
66
78
  end
67
79
 
68
- # Internal: Change the groups registry.
69
- def self.groups=(registry)
70
- @groups = registry
80
+ # Internal: Change the groups_registry registry.
81
+ def self.groups_registry=(registry)
82
+ @groups_registry = registry
71
83
  end
72
84
  end
73
85
 
@@ -78,3 +90,4 @@ require 'flipper/feature'
78
90
  require 'flipper/gate'
79
91
  require 'flipper/registry'
80
92
  require 'flipper/type'
93
+ require 'flipper/typecast'
data/lib/flipper/dsl.rb CHANGED
@@ -47,6 +47,50 @@ module Flipper
47
47
  feature(name).enable(*args)
48
48
  end
49
49
 
50
+ # Public: Enable a feature for an actor.
51
+ #
52
+ # name - The String or Symbol name of the feature.
53
+ # actor - a Flipper::Types::Actor instance or an object that responds
54
+ # to flipper_id.
55
+ #
56
+ # Returns result of Feature#enable.
57
+ def enable_actor(name, actor)
58
+ feature(name).enable_actor(actor)
59
+ end
60
+
61
+ # Public: Enable a feature for a group.
62
+ #
63
+ # name - The String or Symbol name of the feature.
64
+ # group - a Flipper::Types::Group instance or a String or Symbol name of a
65
+ # registered group.
66
+ #
67
+ # Returns result of Feature#enable.
68
+ def enable_group(name, group)
69
+ feature(name).enable_group(group)
70
+ end
71
+
72
+ # Public: Enable a feature a percentage of time.
73
+ #
74
+ # name - The String or Symbol name of the feature.
75
+ # percentage - a Flipper::Types::PercentageOfTime instance or an object
76
+ # that responds to to_i.
77
+ #
78
+ # Returns result of Feature#enable.
79
+ def enable_percentage_of_time(name, percentage)
80
+ feature(name).enable_percentage_of_time(percentage)
81
+ end
82
+
83
+ # Public: Enable a feature for a percentage of actors.
84
+ #
85
+ # name - The String or Symbol name of the feature.
86
+ # percentage - a Flipper::Types::PercentageOfActors instance or an object
87
+ # that responds to to_i.
88
+ #
89
+ # Returns result of Feature#enable.
90
+ def enable_percentage_of_actors(name, percentage)
91
+ feature(name).enable_percentage_of_actors(percentage)
92
+ end
93
+
50
94
  # Public: Disable a feature.
51
95
  #
52
96
  # name - The String or Symbol name of the feature.
@@ -57,6 +101,50 @@ module Flipper
57
101
  feature(name).disable(*args)
58
102
  end
59
103
 
104
+ # Public: Disable a feature for an actor.
105
+ #
106
+ # name - The String or Symbol name of the feature.
107
+ # actor - a Flipper::Types::Actor instance or an object that responds
108
+ # to flipper_id.
109
+ #
110
+ # Returns result of disable.
111
+ def disable_actor(name, actor)
112
+ feature(name).disable_actor(actor)
113
+ end
114
+
115
+ # Public: Disable a feature for a group.
116
+ #
117
+ # name - The String or Symbol name of the feature.
118
+ # group - a Flipper::Types::Group instance or a String or Symbol name of a
119
+ # registered group.
120
+ #
121
+ # Returns result of disable.
122
+ def disable_group(name, group)
123
+ feature(name).disable_group(group)
124
+ end
125
+
126
+ # Public: Disable a feature a percentage of time.
127
+ #
128
+ # name - The String or Symbol name of the feature.
129
+ # percentage - a Flipper::Types::PercentageOfTime instance or an object
130
+ # that responds to to_i.
131
+ #
132
+ # Returns result of disable.
133
+ def disable_percentage_of_time(name)
134
+ feature(name).disable_percentage_of_time
135
+ end
136
+
137
+ # Public: Disable a feature for a percentage of actors.
138
+ #
139
+ # name - The String or Symbol name of the feature.
140
+ # percentage - a Flipper::Types::PercentageOfActors instance or an object
141
+ # that responds to to_i.
142
+ #
143
+ # Returns result of disable.
144
+ def disable_percentage_of_actors(name)
145
+ feature(name).disable_percentage_of_actors
146
+ end
147
+
60
148
  # Public: Access a feature instance by name.
61
149
  #
62
150
  # name - The String or Symbol name of the feature.
@@ -110,20 +198,20 @@ module Flipper
110
198
  # thing - The object that you would like to wrap.
111
199
  #
112
200
  # Returns an instance of Flipper::Types::Actor.
113
- # Raises ArgumentError if thing not wrappable.
201
+ # Raises ArgumentError if thing does not respond to `flipper_id`.
114
202
  def actor(thing)
115
203
  Types::Actor.new(thing)
116
204
  end
117
205
 
118
- # Public: Shortcut for getting a percentage of random instance.
206
+ # Public: Shortcut for getting a percentage of time instance.
119
207
  #
120
- # number - The percentage of random that should be enabled.
208
+ # number - The percentage of time that should be enabled.
121
209
  #
122
- # Returns Flipper::Types::PercentageOfRandom.
123
- def random(number)
124
- Types::PercentageOfRandom.new(number)
210
+ # Returns Flipper::Types::PercentageOfTime.
211
+ def time(number)
212
+ Types::PercentageOfTime.new(number)
125
213
  end
126
- alias_method :percentage_of_random, :random
214
+ alias_method :percentage_of_time, :time
127
215
 
128
216
  # Public: Shortcut for getting a percentage of actors instance.
129
217
  #
@@ -135,7 +223,7 @@ module Flipper
135
223
  end
136
224
  alias_method :percentage_of_actors, :actors
137
225
 
138
- # Internal: Returns a Set of the known features for this adapter.
226
+ # Public: Returns a Set of the known features for this adapter.
139
227
  #
140
228
  # Returns Set of Flipper::Feature instances.
141
229
  def features