module Featuring::Persistence::ActiveRecord
- public
-
Persists feature flag values using an
ActiveRecord
model. Postgres is currently the only
supported database (see ‘Featuring::Persistence` for details on how to use persistence).
class User < ActiveRecord::Base extend Featuring::Persistence::ActiveRecord extend Featuring::Declarable feature :some_feature end User.find(1).features.enable :some_feature User.find(1).features.some_feature? => true
Public Class Methods
create(target, **features)
click to toggle source
# File lib/featuring/persistence/activerecord.rb, line 46 def create(target, **features) target.feature_flag_model.create( flaggable_id: target.id, flaggable_type: target.class.name, metadata: features ) end
fetch(target)
click to toggle source
# File lib/featuring/persistence/activerecord.rb, line 42 def fetch(target) target.feature_flag_model.find_by(flaggable_id: target.id, flaggable_type: target.class.name)&.metadata end
replace(target, **features)
click to toggle source
# File lib/featuring/persistence/activerecord.rb, line 58 def replace(target, **features) scoped_dataset(target).update_all("metadata = '#{features.to_json}'") end
update(target, **features)
click to toggle source
# File lib/featuring/persistence/activerecord.rb, line 54 def update(target, **features) scoped_dataset(target).update_all("metadata = metadata || '#{features.to_json}'") end
Private Class Methods
scoped_dataset(target)
click to toggle source
# File lib/featuring/persistence/activerecord.rb, line 62 def scoped_dataset(target) target.feature_flag_model.where( flaggable_type: target.class.name, flaggable_id: target.id ) end
Public Instance Methods
feature_flag_model()
click to toggle source
- public
-
Returns the
ActiveRecord
model used to persist feature flag values.
# File lib/featuring/persistence/activerecord.rb, line 37 def feature_flag_model ::FeatureFlag end