Class: Growthbook::FeatureRule

Inherits:
Object
  • Object
show all
Defined in:
lib/growthbook/feature_rule.rb

Overview

Internal class that overrides the default value of a Feature based on a set of requirements.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rule) ⇒ FeatureRule



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/growthbook/feature_rule.rb', line 72

def initialize(rule)
  @coverage = get_option(rule, :coverage)
  @force = get_option(rule, :force)
  @variations = get_option(rule, :variations)
  @key = get_option(rule, :key)
  @weights = get_option(rule, :weights)
  @namespace = get_option(rule, :namespace)
  @hash_attribute = get_option(rule, :hash_attribute) || get_option(rule, :hashAttribute)
  @hash_version = get_option(rule, :hash_version) || get_option(rule, :hashVersion)
  @range = get_option(rule, :range)
  @ranges = get_option(rule, :ranges)
  @meta = get_option(rule, :meta)
  @filters = get_option(rule, :filters)
  @seed = get_option(rule, :seed)
  @name = get_option(rule, :name)
  @phase = get_option(rule, :phase)
  @tracks = get_option(rule, :tracks)

  cond = get_option(rule, :condition)
  @condition = Growthbook::Conditions.parse_condition(cond) unless cond.nil?

  @fallback_attribute = get_option(rule, :fallback_attribute) || get_option(rule, :fallbackAttribute)
  @disable_sticky_bucketing = get_option(rule, :disable_sticky_bucketing, false) || get_option(rule, :disableStickyBucketing, false)
  @bucket_version = get_option(rule, :bucket_version) || get_option(rule, :bucketVersion) || 0
  @min_bucket_version = get_option(rule, :min_bucket_version) || get_option(rule, :minBucketVersion) || 0
  @parent_conditions = get_option(rule, :parent_conditions) || get_option(rule, :parentConditions) || []

  return unless @disable_sticky_bucketing

  @fallback_attribute = nil
end

Instance Attribute Details

#bucket_versioninteger



64
65
66
# File 'lib/growthbook/feature_rule.rb', line 64

def bucket_version
  @bucket_version
end

#conditionHash? (readonly)



7
8
9
# File 'lib/growthbook/feature_rule.rb', line 7

def condition
  @condition
end

#coverageFloat? (readonly)



10
11
12
# File 'lib/growthbook/feature_rule.rb', line 10

def coverage
  @coverage
end

#disable_sticky_bucketingString?



61
62
63
# File 'lib/growthbook/feature_rule.rb', line 61

def disable_sticky_bucketing
  @disable_sticky_bucketing
end

#fallback_attributeString?



58
59
60
# File 'lib/growthbook/feature_rule.rb', line 58

def fallback_attribute
  @fallback_attribute
end

#filtersFilter[]? (readonly)



43
44
45
# File 'lib/growthbook/feature_rule.rb', line 43

def filters
  @filters
end

#forceT? (readonly)



13
14
15
# File 'lib/growthbook/feature_rule.rb', line 13

def force
  @force
end

#hash_attributeString? (readonly)



28
29
30
# File 'lib/growthbook/feature_rule.rb', line 28

def hash_attribute
  @hash_attribute
end

#hash_versionInteger? (readonly)



31
32
33
# File 'lib/growthbook/feature_rule.rb', line 31

def hash_version
  @hash_version
end

#keyString? (readonly)



19
20
21
# File 'lib/growthbook/feature_rule.rb', line 19

def key
  @key
end

#metaVariationMeta[]? (readonly)



40
41
42
# File 'lib/growthbook/feature_rule.rb', line 40

def meta
  @meta
end

#min_bucket_versioninteger



67
68
69
# File 'lib/growthbook/feature_rule.rb', line 67

def min_bucket_version
  @min_bucket_version
end

#nameString? (readonly)



49
50
51
# File 'lib/growthbook/feature_rule.rb', line 49

def name
  @name
end

#namespaceString? (readonly)



25
26
27
# File 'lib/growthbook/feature_rule.rb', line 25

def namespace
  @namespace
end

#parent_conditionsArray<Hash>



70
71
72
# File 'lib/growthbook/feature_rule.rb', line 70

def parent_conditions
  @parent_conditions
end

#phaseString? (readonly)



52
53
54
# File 'lib/growthbook/feature_rule.rb', line 52

def phase
  @phase
end

#rangeBucketRange? (readonly)



34
35
36
# File 'lib/growthbook/feature_rule.rb', line 34

def range
  @range
end

#rangesBucketRanges[]? (readonly)



37
38
39
# File 'lib/growthbook/feature_rule.rb', line 37

def ranges
  @ranges
end

#seedString? (readonly)



46
47
48
# File 'lib/growthbook/feature_rule.rb', line 46

def seed
  @seed
end

#tracksTrackData[]? (readonly)



55
56
57
# File 'lib/growthbook/feature_rule.rb', line 55

def tracks
  @tracks
end

#variationsT[]? (readonly)



16
17
18
# File 'lib/growthbook/feature_rule.rb', line 16

def variations
  @variations
end

#weightsFloat[]? (readonly)



22
23
24
# File 'lib/growthbook/feature_rule.rb', line 22

def weights
  @weights
end

Instance Method Details

#experiment?Boolean



130
131
132
133
134
# File 'lib/growthbook/feature_rule.rb', line 130

def experiment?
  return false if @variations.nil?

  !@variations&.empty?
end

#force?Boolean



136
137
138
# File 'lib/growthbook/feature_rule.rb', line 136

def force?
  !experiment? && !@force.nil?
end

#to_experiment(feature_key) ⇒ Growthbook::InlineExperiment?



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/growthbook/feature_rule.rb', line 105

def to_experiment(feature_key)
  return nil unless @variations

  Growthbook::InlineExperiment.new(
    key: @key || feature_key,
    variations: @variations,
    condition: @condition,
    coverage: @coverage,
    weights: @weights,
    hash_attribute: @hash_attribute,
    hash_version: @hash_version,
    namespace: @namespace,
    meta: @meta,
    ranges: @ranges,
    filters: @filters,
    name: @name,
    phase: @phase,
    seed: @seed,
    fallback_attribute: @fallback_attribute,
    disable_sticky_bucketing: @disable_sticky_bucketing,
    bucket_version: @bucket_version,
    min_bucket_version: @min_bucket_version
  )
end

#to_json(*_args) ⇒ Object



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/growthbook/feature_rule.rb', line 140

def to_json(*_args)
  {
    'condition'              => @condition,
    'coverage'               => @coverage,
    'force'                  => @force,
    'variations'             => @variations,
    'key'                    => @key,
    'weights'                => @weights,
    'namespace'              => @namespace,
    'hashAttribute'          => @hash_attribute,
    'range'                  => @range,
    'ranges'                 => @ranges,
    'meta'                   => @meta,
    'filters'                => @filters,
    'seed'                   => @seed,
    'name'                   => @name,
    'phase'                  => @phase,
    'tracks'                 => @tracks,
    'fallbackAttribute'      => @fallback_attribute,
    'disableStickyBucketing' => @disable_sticky_bucketing,
    'bucketVersion'          => @bucket_version,
    'minBucketVersion'       => @min_bucket_version,
    'parentConditions'       => @parent_conditions
  }.compact
end