Class: GreenFlag::FeatureDecision
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- GreenFlag::FeatureDecision
- Defined in:
- app/models/green_flag/feature_decision.rb
Class Method Summary collapse
- .ensure_feature_enabled(feature_code, user, manual = false) ⇒ Object
-
.feature_enabled?(feature_code, site_visitor_id) ⇒ Boolean
Check if the feature is enabled, AND store the result as a FeatureDecision.
- .feature_enabled_for_user?(feature_code, user) ⇒ Boolean
-
.whitelist_user!(feature_code, user) ⇒ Object
Force the given user to have the feature enabled.
- .whitelisted_users(feature_id) ⇒ Object
Instance Method Summary collapse
Class Method Details
.ensure_feature_enabled(feature_code, user, manual = false) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'app/models/green_flag/feature_decision.rb', line 43 def self.ensure_feature_enabled(feature_code, user, manual=false) feature = GreenFlag::Feature.for_code!(feature_code) visitor = GreenFlag::SiteVisitor.for_user!(user) fd = GreenFlag::FeatureDecision.where(feature_id: feature.id, site_visitor_id: visitor.id).first_or_initialize unless fd.enabled? && fd.manual == manual fd.enabled = true fd.manual = manual fd.save! end fd end |
.feature_enabled?(feature_code, site_visitor_id) ⇒ Boolean
Check if the feature is enabled, AND store the result as a FeatureDecision
27 28 29 30 31 32 |
# File 'app/models/green_flag/feature_decision.rb', line 27 def self.feature_enabled?(feature_code, site_visitor_id) feature = GreenFlag::Feature.for_code!(feature_code) fd = feature.decide_if_enabled_for_visitor(site_visitor_id) fd.enabled end |
.feature_enabled_for_user?(feature_code, user) ⇒ Boolean
34 35 36 |
# File 'app/models/green_flag/feature_decision.rb', line 34 def self.feature_enabled_for_user?(feature_code, user) feature_enabled? feature_code, GreenFlag::SiteVisitor.for_user!(user).id end |
.whitelist_user!(feature_code, user) ⇒ Object
Force the given user to have the feature enabled
39 40 41 |
# File 'app/models/green_flag/feature_decision.rb', line 39 def self.whitelist_user!(feature_code, user) ensure_feature_enabled(feature_code, user, true) end |
.whitelisted_users(feature_id) ⇒ Object
58 59 60 61 62 |
# File 'app/models/green_flag/feature_decision.rb', line 58 def self.whitelisted_users(feature_id) # inefficient, but shouldn't matter. feature_decisions = whitelisted(feature_id).joins(:site_visitor => :user).all users = feature_decisions.map(&:user) end |
Instance Method Details
#safe_save! ⇒ Object
68 69 70 71 72 73 74 75 76 |
# File 'app/models/green_flag/feature_decision.rb', line 68 def safe_save! begin save! true rescue ActiveRecord::RecordNotUnique, PG::Error => ex # Race condition self.class.where(feature_id: feature_id, site_visitor_id: site_visitor_id).first || raise end end |
#undecided? ⇒ Boolean
64 65 66 |
# File 'app/models/green_flag/feature_decision.rb', line 64 def undecided? self.enabled.nil? end |