Sha256: 27065446832a2bfea48232a6dac03cb029da4148efb1a23f51372a0cdb120b3f

Contents?: true

Size: 1.06 KB

Versions: 10

Compression:

Stored size: 1.06 KB

Contents

require 'featureflow/conditions'
require 'digest/sha1'

module Featureflow
  class EvaluateHelpers
    def self.rule_matches(rule, context)
      if rule['defaultRule']
        true # the default rule will always match true
      else
        rule['audience']['conditions'].all? do |condition|
          context_values = context[:values][condition['target']]
          # convert to array to work with test
          Array(context_values).any? do |value|
            Conditions.test condition['operator'], value, condition['values']
          end
        end
      end
    end

    def self.get_variant_split_key(variant_splits, variant_value)
      percent = 0
      variant_splits.each do |variant_split|
        percent += variant_split['split']
        return variant_split['variantKey'] if percent >= variant_value
      end
    end

    def self.calculate_hash(salt = '1', feature = 'feature', key = 'anonymous')
      (Digest::SHA1.hexdigest [salt, feature, key].join(':'))[0..14];
    end

    def self.get_variant_value(hash)
      Integer(hash, 16) % 100 + 1
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
featureflow-0.5.1 lib/featureflow/evaluate_helpers.rb
featureflow-0.5.0 lib/featureflow/evaluate_helpers.rb
featureflow-0.4.0 lib/featureflow/evaluate_helpers.rb
featureflow-0.3.7 lib/featureflow/evaluate_helpers.rb
featureflow-0.3.6 lib/featureflow/evaluate_helpers.rb
featureflow-0.3.5 lib/featureflow/evaluate_helpers.rb
featureflow-0.3.4 lib/featureflow/evaluate_helpers.rb
featureflow-0.3.2 lib/featureflow/evaluate_helpers.rb
featureflow-0.3.1 lib/featureflow/evaluate_helpers.rb
featureflow-0.3.0 lib/featureflow/evaluate_helpers.rb