Chatwoot/app/models/concerns/featurable.rb
Sony Mathew b803ae3300
Bugfix: Private notes in emails & broken Signup (#1068)
* Bugfix: Private notes in emails

Private notes were sent in the emails as part of
conversation continuity. Fixed this issue.

Also made the changes to not even queue the mails
if message is a private note.

* Bugfix: Change issue with featurable in signup - passing array
* Bugfix: Added specs for checking  private notes being sent in email
2020-07-20 12:47:02 +05:30

60 lines
1.4 KiB
Ruby

module Featurable
extend ActiveSupport::Concern
QUERY_MODE = {
flag_query_mode: :bit_operator
}.freeze
FEATURE_LIST = YAML.safe_load(File.read(Rails.root.join('config/features.yml'))).freeze
FEATURES = FEATURE_LIST.each_with_object({}) do |feature, result|
result[result.keys.size + 1] = "feature_#{feature['name']}".to_sym
end
included do
include FlagShihTzu
has_flags FEATURES.merge(column: 'feature_flags').merge(QUERY_MODE)
before_create :enable_default_features
end
def enable_features(*names)
names.each do |name|
send("feature_#{name}=", true)
end
end
def disable_features(*names)
names.each do |name|
send("feature_#{name}=", false)
end
end
def feature_enabled?(name)
send("feature_#{name}?")
end
def all_features
FEATURE_LIST.map { |f| f['name'] }.index_with do |feature_name|
feature_enabled?(feature_name)
end
end
def enabled_features
all_features.select { |_feature, enabled| enabled == true }
end
def disabled_features
all_features.select { |_feature, enabled| enabled == false }
end
private
def enable_default_features
config = InstallationConfig.find_by(name: 'ACCOUNT_LEVEL_FEATURE_DEFAULTS')
return true if config.blank?
features_to_enabled = config.value.select { |f| f[:enabled] }.map { |f| f[:name] }
enable_features(*features_to_enabled)
end
end