amplitude-experiment 1.9.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d1474764e3ae979eb8f3799a76f42513ff707a7307d7dc2eae9d9d6da4bef36f
4
- data.tar.gz: 889f7ba4cc9860523c7a5b6854b19e75b54ac8ae6330414007142779cbe7f2f3
3
+ metadata.gz: 695f535c46352189bd5e5cccfe34c17a75964c89ef371f7ee397ce6bcb76c55c
4
+ data.tar.gz: 05e993e6eb3318047cbbfc4865c559291bfd06c86701019c027e4a9a07b71d52
5
5
  SHA512:
6
- metadata.gz: 705c6b31291bf96b3f9ea93ea3c166aa8e61f28b80bf0253261d42374895e1b8f923b3536b9308a3cd03b2ba9f7d4654abdfd2e2894fe19a802d3f658b454e3a
7
- data.tar.gz: ff192b072846e12ede79277411bde7e38075be600707138a8a25090c6e325425aa1ed72c10b09fdda9c9a1e1c4dcb409c32f06ed26e3b36a27b4db0127ceeecc
6
+ metadata.gz: 7ad26b8d4673bf0e0287fbbed5f38fa64da5cb9396ce5dcf1cb10fbc3892f374f7270eec77f2b25083a8e5d157f5be638aecc65d5572c18ad9d6687bc0a87911
7
+ data.tar.gz: f4cb8b32ded5b8974e68f417d4abf306860b235a7271a823e3a62a4e8cad336223bbfeb992dba4cddd849a4b446a765f30fdb4289f00fdcc8378dac6e4af7101
@@ -18,7 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ['lib']
19
19
  spec.extra_rdoc_files = ['README.md']
20
20
 
21
+ spec.add_dependency 'base64'
21
22
  spec.add_dependency 'concurrent-ruby', '~> 1.2'
23
+ spec.add_dependency 'logger'
22
24
 
23
25
  spec.add_development_dependency 'psych', '~> 4.0'
24
26
  spec.add_development_dependency 'rake', '~> 13.0'
@@ -66,24 +66,25 @@ module AmplitudeExperiment
66
66
 
67
67
  def match_condition(target, condition)
68
68
  prop_value = Evaluation.select(target, condition.selector)
69
- # Special matching for null properties and set type prop values and operators
70
- if !prop_value
71
- match_null(condition.op, condition.values)
72
- elsif set_operator?(condition.op)
73
- prop_value_string_list = coerce_string_array(prop_value)
69
+ return match_null(condition.op, condition.values) unless prop_value
70
+
71
+ prop_value_string_list = coerce_string_array(prop_value)
72
+ if set_operator?(condition.op)
74
73
  return false unless prop_value_string_list
75
74
 
76
75
  match_set(prop_value_string_list, condition.op, condition.values)
76
+ elsif prop_value_string_list
77
+ match_strings_non_set(prop_value_string_list, condition.op, condition.values)
77
78
  else
78
79
  prop_value_string = coerce_string(prop_value)
79
- if prop_value_string
80
- match_string(prop_value_string, condition.op, condition.values)
81
- else
82
- false
83
- end
80
+ prop_value_string ? match_string(prop_value_string, condition.op, condition.values) : false
84
81
  end
85
82
  end
86
83
 
84
+ def match_strings_non_set(prop_values, op, filter_values)
85
+ prop_values.any? { |v| match_string(v, op, filter_values) }
86
+ end
87
+
87
88
  def get_hash(key)
88
89
  Murmur3.hash32x86(key)
89
90
  end
@@ -263,23 +264,19 @@ module AmplitudeExperiment
263
264
  end
264
265
 
265
266
  def coerce_string_array(value)
266
- if value.is_a?(Array)
267
- value.map { |e| coerce_string(e) }.compact
268
- else
269
- string_value = value.to_s
270
- begin
271
- parsed_value = JSON.parse(string_value)
272
- if parsed_value.is_a?(Array)
273
- parsed_value.map { |e| coerce_string(e) }.compact
274
- else
275
- s = coerce_string(string_value)
276
- s ? [s] : nil
277
- end
278
- rescue JSON::ParserError
279
- s = coerce_string(string_value)
280
- s ? [s] : nil
281
- end
267
+ return value.map { |e| coerce_string(e) }.compact if value.is_a?(Array)
268
+
269
+ string_value = value.to_s
270
+ return nil unless string_value.start_with?('[')
271
+
272
+ begin
273
+ parsed_value = JSON.parse(string_value)
274
+ rescue JSON::ParserError
275
+ return nil
282
276
  end
277
+ return nil unless parsed_value.is_a?(Array)
278
+
279
+ parsed_value.map { |e| coerce_string(e) }.compact
283
280
  end
284
281
 
285
282
  def set_operator?(op)
@@ -1,3 +1,3 @@
1
1
  module AmplitudeExperiment
2
- VERSION = '1.9.0'.freeze
2
+ VERSION = '1.10.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amplitude-experiment
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amplitude
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-01-07 00:00:00.000000000 Z
11
+ date: 2026-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: base64
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: concurrent-ruby
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +38,20 @@ dependencies:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
40
  version: '1.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: logger
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: psych
29
57
  requirement: !ruby/object:Gem::Requirement