Module: LaunchDarkly::Impl::EvaluatorOperators
- Defined in:
- lib/ldclient-rb/impl/evaluator_operators.rb
Overview
Defines the behavior of all operators that can be used in feature flag rules and segment rules.
Class Method Summary collapse
-
.apply(op, user_value, clause_value) ⇒ Boolean
Applies an operator to produce a boolean result.
-
.user_value(user, attribute) ⇒ Object
Retrieves the value of a user attribute by name.
Class Method Details
.apply(op, user_value, clause_value) ⇒ Boolean
Applies an operator to produce a boolean result.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/ldclient-rb/impl/evaluator_operators.rb', line 18 def self.apply(op, user_value, clause_value) case op when :in user_value == clause_value when :startsWith string_op(user_value, clause_value, lambda { |a, b| a.start_with? b }) when :endsWith string_op(user_value, clause_value, lambda { |a, b| a.end_with? b }) when :contains string_op(user_value, clause_value, lambda { |a, b| a.include? b }) when :matches string_op(user_value, clause_value, lambda { |a, b| begin re = Regexp.new b !re.match(a).nil? rescue false end }) when :lessThan numeric_op(user_value, clause_value, lambda { |a, b| a < b }) when :lessThanOrEqual numeric_op(user_value, clause_value, lambda { |a, b| a <= b }) when :greaterThan numeric_op(user_value, clause_value, lambda { |a, b| a > b }) when :greaterThanOrEqual numeric_op(user_value, clause_value, lambda { |a, b| a >= b }) when :before date_op(user_value, clause_value, lambda { |a, b| a < b }) when :after date_op(user_value, clause_value, lambda { |a, b| a > b }) when :semVerEqual semver_op(user_value, clause_value, lambda { |a, b| a == b }) when :semVerLessThan semver_op(user_value, clause_value, lambda { |a, b| a < b }) when :semVerGreaterThan semver_op(user_value, clause_value, lambda { |a, b| a > b }) when :segmentMatch # We should never reach this; it can't be evaluated based on just two parameters, because it requires # looking up the segment from the data store. Instead, we special-case this operator in clause_match_user. false else false end end |
.user_value(user, attribute) ⇒ Object
Retrieves the value of a user attribute by name.
Built-in attributes correspond to top-level properties in the user object. They are treated as strings and non-string values are coerced to strings, except for ‘anonymous` which is meant to be a boolean if present and is not currently coerced. This behavior is consistent with earlier versions of the Ruby SDK, but is not guaranteed to be consistent with other SDKs, since the evaluator specification is based on the strongly-typed SDKs where it is not possible for an attribute to have the wrong type.
Custom attributes correspond to properties within the ‘custom` property, if any, and can be of any type.
77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/ldclient-rb/impl/evaluator_operators.rb', line 77 def self.user_value(user, attribute) attribute = attribute.to_sym if BUILTINS.include? attribute value = user[attribute] return nil if value.nil? (attribute == :anonymous) ? value : value.to_s elsif !user[:custom].nil? user[:custom][attribute] else nil end end |