Class: GreenFlag::Feature

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/green_flag/feature.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.for_code!(code) ⇒ Object



12
13
14
15
16
17
18
19
20
21
# File 'app/models/green_flag/feature.rb', line 12

def self.for_code!(code)
  feature = where(code: code.to_s).first
  unless feature
    feature = create!(code: code.to_s)
  end
  feature
rescue ActiveRecord::RecordNotUnique, PG::Error => ex
  # Race condition
  where(code: code.to_s).first || raise
end

Instance Method Details

#decide_if_enabled_for_visitor(site_visitor_id) ⇒ Object



23
24
25
26
27
28
29
30
31
32
# File 'app/models/green_flag/feature.rb', line 23

def decide_if_enabled_for_visitor(site_visitor_id)
  fd_query         = GreenFlag::FeatureDecision.where(feature_id: id, site_visitor_id: site_visitor_id)
  feature_decision = fd_query.first_or_initialize

  if feature_decision.undecided?
    decide_feature_decision(feature_decision)
  end

  feature_decision
end

#disabled_countObject



38
39
40
# File 'app/models/green_flag/feature.rb', line 38

def disabled_count
  feature_decisions.disabled.count
end

#enabled_countObject



34
35
36
# File 'app/models/green_flag/feature.rb', line 34

def enabled_count
  feature_decisions.enabled.count
end

#forget_non_manual_decisions!(enabled) ⇒ Object



42
43
44
45
46
47
48
49
# File 'app/models/green_flag/feature.rb', line 42

def forget_non_manual_decisions!(enabled)
  non_manual_fds = feature_decisions.non_manual.where(enabled: enabled)

  if non_manual_fds.count > 0
    create_feature_event(enabled, non_manual_fds.count)
    non_manual_fds.delete_all
  end
end

#latest_versionObject



51
52
53
54
55
# File 'app/models/green_flag/feature.rb', line 51

def latest_version
  last_rule = GreenFlag::Rule.order('version_number DESC').where(feature_id: id).first

  last_rule.present? ? last_rule.version_number : version_number
end