determinator 2.5.1 → 2.5.2

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: 4466edc3643125ca6b84591b4db51083d215c5c6ea8201694e99d16e403eab24
4
- data.tar.gz: 326d45e3f0ac249e5a358ee3911c1da4da01db81c14ab1b3c827a8fd5d0f4ef9
3
+ metadata.gz: acc3109dbf66955d32841b5fe5a56077e0e3b6f60bc0dfa39cb4318c2bb98ea8
4
+ data.tar.gz: f190ea639d1e0215045340be697d9493fd09bbe65c91072029b31f2ab3fcf20a
5
5
  SHA512:
6
- metadata.gz: c83ad23860f0d5565618e3cfbf1f9975763f3f64c0db49668fa2259aae06c972689e000538a734571906edbf766c8d1d46e58ad2d7c657461c76759768f37bfa
7
- data.tar.gz: 777556d4606d6a10514b5f7c6311e498117845f9bf5bc3bd1be7f8c47cee837fb17243348d11ee0f2fff3931493e97e65cb06608dcbc9b435916aabad07e69f1
6
+ metadata.gz: c2fcd6ce6e7327d1d710ae0f1d2661da23d2b2407a919796c9a963aea1431889704641d7696842acb6076aab0be10176502056baf9c10ef5467ad41c937a8d5d
7
+ data.tar.gz: 1d2632f3df8056ca79870722efad6790ba8685ab618bc87b17cb33df4bfc773b82999f0b0af1644e3989ca9f6c19f229b35fe49a6890060e9fda5b3c8d4d68da
@@ -1,3 +1,10 @@
1
+ # 2.5.2
2
+
3
+ Feature:
4
+ - Add structured_bucket to Feature
5
+ - Add `#retrieve` method to the Control
6
+ - Add optional `feature` argument to `feature_flag_on?` and `which_variant`, to reuse an existing feature
7
+
1
8
  # 2.5.1
2
9
 
3
10
  Feature:
@@ -30,10 +30,11 @@ module Determinator
30
30
  # @param :id [#to_s] The id of the actor being determinated for
31
31
  # @param :guid [#to_s] The Anonymous id of the actor being determinated for
32
32
  # @param :properties [Hash<Symbol,String>] The properties of this actor which will be used for including this actor or not
33
+ # @param :feature [Feature] The feature to use instead of retrieving one
33
34
  # @raise [ArgumentError] When the arguments given to this method aren't ever going to produce a useful response
34
35
  # @return [true,false] Whether the feature is on (true) or off (false) for this actor
35
- def feature_flag_on?(name, id: nil, guid: nil, properties: {})
36
- determinate_and_notice(name, id: id, guid: guid, properties: properties) do |feature|
36
+ def feature_flag_on?(name, id: nil, guid: nil, properties: {}, feature: nil)
37
+ determinate_and_notice(name, id: id, guid: guid, properties: properties, feature: feature) do |feature|
37
38
  feature.feature_flag?
38
39
  end
39
40
  end
@@ -44,10 +45,11 @@ module Determinator
44
45
  # @param :id [#to_s] The id of the actor being determinated for
45
46
  # @param :guid [#to_s] The Anonymous id of the actor being determinated for
46
47
  # @param :properties [Hash<Symbol,String>] The properties of this actor which will be used for including this actor or not
48
+ # @param :feature [Feature] The feature to use instead of retrieving one
47
49
  # @raise [ArgumentError] When the arguments given to this method aren't ever going to produce a useful response
48
50
  # @return [false,String] Returns false, if the actor is not in this experiment, or otherwise the variant name.
49
- def which_variant(name, id: nil, guid: nil, properties: {})
50
- determinate_and_notice(name, id: id, guid: guid, properties: properties) do |feature|
51
+ def which_variant(name, id: nil, guid: nil, properties: {}, feature: nil)
52
+ determinate_and_notice(name, id: id, guid: guid, properties: properties, feature: feature) do |feature|
51
53
  feature.experiment?
52
54
  end
53
55
  end
@@ -58,6 +60,14 @@ module Determinator
58
60
  end
59
61
  end
60
62
 
63
+ # Uses the retrieval (and a cache if set on the Determinator config) to fetch a feature definition.
64
+ #
65
+ # @param name [#to_s] The name of the experiment being checked
66
+ # @return [Feature, MissingResponse] Returns the Feature object, or MissingResponse if the feature is not found.
67
+ def retrieve(name)
68
+ Determinator.with_retrieval_cache(name) { retrieval.retrieve(name) }
69
+ end
70
+
61
71
  def inspect
62
72
  '#<Determinator::Control>'
63
73
  end
@@ -66,8 +76,8 @@ module Determinator
66
76
 
67
77
  Indicators = Struct.new(:rollout, :variant)
68
78
 
69
- def determinate_and_notice(name, id:, guid:, properties:)
70
- feature = Determinator.with_retrieval_cache(name) { retrieval.retrieve(name) }
79
+ def determinate_and_notice(name, id:, guid:, properties:, feature: nil)
80
+ feature ||= retrieve(name)
71
81
 
72
82
  if feature.nil? || feature.is_a?(ErrorResponse) || feature.is_a?(MissingResponse)
73
83
  Determinator.notice_missing_feature(name)
@@ -3,9 +3,9 @@ module Determinator
3
3
  #
4
4
  # @attr_reader [nil,Hash<String,Integer>] variants The variants for this experiment, with the name of the variant as the key and the weight as the value. Will be nil for non-experiments.
5
5
  class Feature
6
- attr_reader :name, :identifier, :bucket_type, :variants, :target_groups, :fixed_determinations, :active, :winning_variant
6
+ attr_reader :name, :identifier, :bucket_type, :structured_bucket, :variants, :target_groups, :fixed_determinations, :active, :winning_variant
7
7
 
8
- def initialize(name:, identifier:, bucket_type:, target_groups:, fixed_determinations: [], variants: {}, overrides: {}, active: false, winning_variant: nil)
8
+ def initialize(name:, identifier:, bucket_type:, target_groups:, structured_bucket: nil, fixed_determinations: [], variants: {}, overrides: {}, active: false, winning_variant: nil)
9
9
  @name = name.to_s
10
10
  @identifier = identifier.to_s
11
11
  @variants = variants
@@ -14,6 +14,7 @@ module Determinator
14
14
  @winning_variant = parse_outcome(winning_variant, allow_exclusion: false)
15
15
  @active = active
16
16
  @bucket_type = bucket_type.to_sym
17
+ @structured_bucket = structured_bucket
17
18
 
18
19
  # To prevent confusion between actor id data types
19
20
  @overrides = overrides.each_with_object({}) do |(identifier, outcome), hash|
@@ -36,6 +37,11 @@ module Determinator
36
37
  variants.empty?
37
38
  end
38
39
 
40
+ # @return [true,false] Is this feature using structured identification?
41
+ def structured?
42
+ !!structured_bucket && !structured_bucket.empty?
43
+ end
44
+
39
45
  # Is this feature overridden for the given actor id?
40
46
  #
41
47
  # @return [true,false] Whether this feature is overridden for this actor
@@ -15,6 +15,7 @@ module Determinator
15
15
  name: obj['name'],
16
16
  identifier: obj['identifier'],
17
17
  bucket_type: obj['bucket_type'],
18
+ structured_bucket: obj['structured_bucket'],
18
19
  active: (obj['active'] === true),
19
20
  target_groups: obj['target_groups'],
20
21
  fixed_determinations: obj['fixed_determinations'].to_a,
@@ -1,3 +1,3 @@
1
1
  module Determinator
2
- VERSION = '2.5.1'
2
+ VERSION = '2.5.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: determinator
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.1
4
+ version: 2.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - JP Hastings-Spital
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-11 00:00:00.000000000 Z
11
+ date: 2020-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -150,7 +150,7 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
- description:
153
+ description:
154
154
  email:
155
155
  - jp@deliveroo.co.uk
156
156
  executables: []
@@ -234,7 +234,7 @@ homepage: https://github.com/deliveroo/determinator
234
234
  licenses:
235
235
  - MIT
236
236
  metadata: {}
237
- post_install_message:
237
+ post_install_message:
238
238
  rdoc_options: []
239
239
  require_paths:
240
240
  - lib
@@ -249,8 +249,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
249
249
  - !ruby/object:Gem::Version
250
250
  version: '0'
251
251
  requirements: []
252
- rubygems_version: 3.0.6
253
- signing_key:
252
+ rubygems_version: 3.0.3
253
+ signing_key:
254
254
  specification_version: 4
255
255
  summary: Determine which experiments and features a specific actor should see.
256
256
  test_files: []