eppo-server-sdk 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d9c570d34608a7d3037d80c5aa161c383e2d7b618eef75383f53d002e772204a
4
- data.tar.gz: 6fd21d3000781bada11f2f43b49fce0871fc74b1929387bddf277a1cb3c5db7f
3
+ metadata.gz: 98acb6907559d59d41dabba40eff3cc95404c1d2283144f73a64e05dd94b4688
4
+ data.tar.gz: 86b21cbf7552a6641e34dafedb1c158812777d27821818ee3e067dd6ca1e6eff
5
5
  SHA512:
6
- metadata.gz: 27fbeb76e52adcce05cffa3a41e92b09790db53e76dafa4ded3d5d7df4d6b4cce37cb7c79056153d6965ec01d579a42a3140b88626c26c0eebe3874cde49dee4
7
- data.tar.gz: 3a1f20881a19c385e4c37c141045d8e870d85fc81f650d07a736b4c8f39b8ebba0a24380231da334c40a51c8b49b3431a2096746d3e9d4f2fdaaa8d382e568c4
6
+ metadata.gz: 38d1f7c43ded991c029cd7ac3e3c3c71116862899008d7163d216be45dd585cc7a3ea00ba04870cba2f771aeb589a75b50835c2a4d4e792de3d886879bfda7bd
7
+ data.tar.gz: 2e2e690225134fb4d76d36d605f4d391aeddd3b8d0f831e5f12516ca3d9fab2f5d4267812158d266a243b4d0f53d86a0d752d14a8420e6ad8bc996ded7f13184
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'semver'
4
+
3
5
  # The helper module for rules
4
6
  module EppoClient
5
7
  module OperatorType
@@ -60,7 +62,12 @@ module EppoClient
60
62
  when OperatorType::NOT_ONE_OF
61
63
  !condition.value.map(&:downcase).include?(subject_value.to_s.downcase)
62
64
  else
63
- subject_value.is_a?(Numeric) && evaluate_numeric_condition(subject_value, condition)
65
+ # Numeric operator: value could be numeric or semver.
66
+ if subject_value.is_a?(Numeric)
67
+ evaluate_numeric_condition(subject_value, condition)
68
+ elsif valid_semver?(subject_value)
69
+ compare_semver(subject_value, condition.value, condition.operator)
70
+ end
64
71
  end
65
72
  end
66
73
  # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
@@ -82,6 +89,31 @@ module EppoClient
82
89
  end
83
90
  # rubocop:enable Metrics/MethodLength
84
91
 
92
+ # rubocop:disable Metrics/MethodLength
93
+ def compare_semver(attribute_value, condition_value, operator)
94
+ unless valid_semver?(attribute_value) && valid_semver?(condition_value)
95
+ return false
96
+ end
97
+
98
+ case operator
99
+ when OperatorType::GT
100
+ SemVer.parse(attribute_value) > SemVer.parse(condition_value)
101
+ when OperatorType::GTE
102
+ SemVer.parse(attribute_value) >= SemVer.parse(condition_value)
103
+ when OperatorType::LT
104
+ SemVer.parse(attribute_value) < SemVer.parse(condition_value)
105
+ when OperatorType::LTE
106
+ SemVer.parse(attribute_value) <= SemVer.parse(condition_value)
107
+ else
108
+ false
109
+ end
110
+ end
111
+ # rubocop:enable Metrics/MethodLength
112
+
113
+ def valid_semver?(string)
114
+ !SemVer.parse(string).nil?
115
+ end
116
+
85
117
  module_function :find_matching_rule, :matches_rule, :evaluate_condition,
86
- :evaluate_numeric_condition
118
+ :evaluate_numeric_condition, :valid_semver?, :compare_semver
87
119
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EppoClient
4
- VERSION = '0.2.3'
4
+ VERSION = '0.2.4'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eppo-server-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eppo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-27 00:00:00.000000000 Z
11
+ date: 2024-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby