ar_rollout 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/lib/ar_rollout.rb CHANGED
@@ -11,26 +11,31 @@ module ArRollout
11
11
  end
12
12
  end
13
13
 
14
- def self.activate_user(feature = nil, user = nil)
14
+ def self.activate_user(feature, user)
15
15
  return false if feature.nil? || user.nil?
16
16
  res_id = [Fixnum, String].include?(user.class) ? user : user.id
17
17
  Rollout.find_or_create_by_name_and_user_id(feature, res_id)
18
18
  end
19
19
 
20
- def self.deactivate_user(feature = nil, user = nil)
20
+ def self.deactivate_user(feature, user)
21
21
  res_id = [Fixnum, String].include?(user.class) ? user : user.id
22
22
  Rollout.find_all_by_name_and_user_id(feature, res_id).map(&:destroy)
23
23
  end
24
24
 
25
- def self.activate_group(feature = nil, group = nil)
25
+ def self.activate_group(feature, group)
26
26
  return false if feature.nil? || group.nil?
27
27
  Rollout.find_or_create_by_name_and_group(feature, group)
28
28
  end
29
29
 
30
- def self.deactivate_group(feature = nil, group = nil)
30
+ def self.deactivate_group(feature, group)
31
31
  Rollout.find_all_by_name_and_group(feature, group).map(&:destroy)
32
32
  end
33
33
 
34
+ def self.activate_percentage(feature, percentage)
35
+ Rollout.where("name = ? and percentage is not null", feature).destroy_all
36
+ Rollout.create(name: feature, percentage: percentage)
37
+ end
38
+
34
39
  def self.deactivate_all(feature)
35
40
  Rollout.find_all_by_name(feature).map(&:destroy)
36
41
  end
@@ -72,10 +77,9 @@ private
72
77
  end
73
78
 
74
79
  def self.active_percentage(feature)
75
- Rollout.where('"name" = ? and "percentage" is not null', feature).map(&:percentage).first
80
+ Rollout.select("percentage").where('"name" = ? and "percentage" is not null', feature).first
76
81
  end
77
82
 
78
-
79
83
  end
80
84
 
81
85
  ActionController::Base.send :include, ArRollout::Controller::Helpers
@@ -84,4 +88,4 @@ class RolloutTask < Rails::Railtie
84
88
  rake_tasks do
85
89
  Dir[File.join(File.dirname(__FILE__),'tasks/*.rake')].each { |f| load f }
86
90
  end
87
- end
91
+ end
@@ -1,4 +1,6 @@
1
1
  class Rollout < ActiveRecord::Base
2
+ attr_accessible :name, :group, :user_id, :percentage
3
+
2
4
  def match?(user)
3
5
  enabled? && (match_user?(user) || match_group?(user) || match_percentage?(user))
4
6
  end
@@ -15,12 +17,12 @@ class Rollout < ActiveRecord::Base
15
17
  end
16
18
  end
17
19
 
18
- def match_user?(user = nil)
20
+ def match_user?(user)
19
21
  user_id ? user_id.to_s == user.id.to_s : false
20
22
  end
21
23
 
22
24
  def match_percentage?(user)
23
- percentage ? user.id % 100 < percentage : false
25
+ percentage ? ((user.id.to_i % 100) < percentage.to_i) : false
24
26
  end
25
27
 
26
- end
28
+ end
@@ -1,3 +1,3 @@
1
1
  module ArRollout
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -15,8 +15,12 @@ namespace :rollout do
15
15
  task :deactivate_group, [:feature, :user_id] => :environment do |t, args|
16
16
  ArRollout.deactivate_group(args.feature,args.user_id)
17
17
  end
18
+ desc "Activate a feature for a percentage"
19
+ task :activate_percentage, [:feature, :percentage] => :environment do |t, args|
20
+ ArRollout.activate_percentage(args.feature,args.percentage)
21
+ end
18
22
  desc "Deactivate a feature"
19
23
  task :deactivate_all, [:feature] => :environment do |t, args|
20
24
  ArRollout.deactivate_all(args.feature)
21
25
  end
22
- end
26
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar_rollout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-08-20 00:00:00.000000000 Z
14
+ date: 2012-09-05 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -137,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
137
  version: '0'
138
138
  requirements: []
139
139
  rubyforge_project:
140
- rubygems_version: 1.8.24
140
+ rubygems_version: 1.8.23
141
141
  signing_key:
142
142
  specification_version: 3
143
143
  summary: An ActiveRecord version of Rollout gem (https://github.com/jamesgolick/rollout).