determinator 0.11.1 → 0.12.0

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
  SHA1:
3
- metadata.gz: d743c707c8d4b9e9e28c122aee5bd965ab3e097d
4
- data.tar.gz: 540858ec639b34a39ceeef760ee51831f4c5a4a3
3
+ metadata.gz: 4ccc82084d2734ddf50ebb5900f73b9e985bd05f
4
+ data.tar.gz: 1b231a0fc9228692f357a2db213a170c046fb92e
5
5
  SHA512:
6
- metadata.gz: 14391fb80975ee14cea5982fb345507794c5c07824f750bbc972b21dd847df5872ecbb054842fe8ceea42944c2aa7f2e696cb8d176dc904a03ff77ff150f2b45
7
- data.tar.gz: 6819a9318fbce45ff3b096299d104872ad16b3cfb267277050ea3480423ba180f3881484b6b1fd5a2c7ab78d424e43fd8b3690057d7962405283dcde85f31027
6
+ metadata.gz: 968a15520388364e962099c8d762431c38a7ff21825263352f506ace9ee568f03564e2aa5428d9ede53c46a33a2d7c3e482da4339d9503ecaf890b7cdf18a850
7
+ data.tar.gz: fbe0fface76305e3348c76647f34272df03a0fde293db796d565db8fe3e615c7ebcfd743288d783e7c2892c3847afed85e849b35ca987cb10ada1d24121174d4
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ # v0.12.0 (2018-01-23)
2
+
3
+ Feature:
4
+ - Adds the `Determinator.feature_details` method, which allows lookup of feature details as are currently available to Determinator. Whatever is returned here is what Determinator is acting upon. (#38)
5
+
6
+ Bug Fix:
7
+ - Upgrades a dependency of the example rails app which has a known vulnerability. (#39)
8
+
1
9
  # v0.11.1 (2017-10-27)
2
10
 
3
11
  Feature:
data/README.md CHANGED
@@ -2,14 +2,26 @@
2
2
 
3
3
  A gem that works with _Florence_ to deterministically calculate whether an **actor** should have a feature flag turned on or off, or which variant they should see in an experiment.
4
4
 
5
- ![Determinator](docs/img/determinator.jpg)
5
+ ![Arnold Schwarzenegger might say "Come with me if you want to experiment" if he played The Determinator instead of The Terminator.](docs/img/determinator.jpg)
6
6
 
7
- Useful documentation:
7
+ ---
8
+
9
+ #### Useful documentation
8
10
 
9
11
  - [Terminology and Background](docs/background.md)
10
12
  - [Local development](docs/local_development.md)
11
13
  - [Example implemention in Rails](examples/determinator-rails)
12
14
 
15
+ #### Getting help
16
+
17
+ For Deliveroo Employees:
18
+
19
+ - Many people contribute to Determinator and Florence. We hang out in [this Slack channel](slack://channel?team=T03EUNC3F&id=C7437816J)
20
+ - [This JIRA board](https://deliveroo.atlassian.net/secure/RapidBoard.jspa?rapidView=156) covers pieces of work that are planned or in-flight
21
+ - [This Workplace group](https://deliveroo.facebook.com/groups/1893254264328414/) holds more general discussions about the Florence ecosystem
22
+
23
+ At the moment we can only promise support for Determinator within Deliveroo, but if you add [issues to this github repo](https://github.com/deliveroo/determinator/issues) we'll try and help if we can!
24
+
13
25
  ## Usage
14
26
 
15
27
  Once [set up](#installation), determinator can be used to determine whether a **feature flag** or **experiment** is on or off for the current user and, for experiments, which **variant** they should see.
@@ -67,6 +79,38 @@ Determinator.configure(
67
79
  )
68
80
  ```
69
81
 
82
+ ### Using Determinator in RSpec
83
+
84
+ * Include those lines in `spec_helper.rb`.
85
+
86
+
87
+ ```
88
+ require 'rspec/determinator'
89
+
90
+ Determinator.configure(retrieval: nil)
91
+
92
+ ```
93
+
94
+ * Tag your rspec test with `:determinator_support`, so `forced_determination` helper method will be available.
95
+
96
+
97
+ ```
98
+
99
+ RSpec.describe "something", :determinator_support do
100
+
101
+ context "something" do
102
+ forced_determination(:my_feature_flag, true)
103
+ forced_determination(:my_experiment, "variant_a")
104
+
105
+ it "uses forced_determination" do
106
+ expect(Determinator.instance.feature_flag_on?(:my_feature_flag)).to eq(true)
107
+ expect(Determinator.instance.which_variant(:my_experiment)).to eq("variant_a")
108
+ end
109
+ end
110
+ end
111
+
112
+ ```
113
+
70
114
  ### Retrieval Cache
71
115
 
72
116
  Determinator will function fully without a retrieval_cache set, although Determinator will produce 1 Redis query for every determination. By setting a `retrieval_cache` as an instance of `ActiveSupport::Cache::MemoryStore` (or equivalent) this can be reduced per application instance. This cache is not expired so *must* have a `expires_in` set, ideally to a short amount of time.
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- determinator (0.1.0)
5
- routemaster-drain (~> 2.5)
4
+ determinator (0.11.1)
5
+ routemaster-drain (~> 3.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
@@ -44,11 +44,14 @@ GEM
44
44
  i18n (~> 0.7)
45
45
  minitest (~> 5.1)
46
46
  tzinfo (~> 1.1)
47
- addressable (2.5.0)
48
- public_suffix (~> 2.0, >= 2.0.2)
47
+ addressable (2.5.2)
48
+ public_suffix (>= 2.0.2, < 4.0)
49
49
  arel (7.1.4)
50
50
  builder (3.2.3)
51
51
  byebug (9.0.6)
52
+ circuitbox (1.1.1)
53
+ activesupport
54
+ moneta
52
55
  concurrent-ruby (1.0.5)
53
56
  connection_pool (2.2.1)
54
57
  dotenv (2.2.0)
@@ -56,16 +59,16 @@ GEM
56
59
  dotenv (= 2.2.0)
57
60
  railties (>= 3.2, < 5.1)
58
61
  erubis (2.7.0)
59
- ethon (0.10.1)
62
+ ethon (0.11.0)
60
63
  ffi (>= 1.3.0)
61
- faraday (0.11.0)
64
+ faraday (0.14.0)
62
65
  multipart-post (>= 1.2, < 3)
63
- faraday_middleware (0.11.0.1)
66
+ faraday_middleware (0.12.2)
64
67
  faraday (>= 0.7.4, < 1.0)
65
68
  ffi (1.9.18)
66
69
  globalid (0.3.7)
67
70
  activesupport (>= 4.1.0)
68
- hashie (3.5.5)
71
+ hashie (3.5.7)
69
72
  i18n (0.8.1)
70
73
  loofah (2.0.3)
71
74
  nokogiri (>= 1.5.9)
@@ -75,13 +78,14 @@ GEM
75
78
  mime-types (3.1)
76
79
  mime-types-data (~> 3.2015)
77
80
  mime-types-data (3.2016.0521)
78
- mini_portile2 (2.1.0)
81
+ mini_portile2 (2.3.0)
79
82
  minitest (5.10.1)
83
+ moneta (1.0.0)
80
84
  multipart-post (2.0.0)
81
85
  nio4r (2.0.0)
82
- nokogiri (1.7.1)
83
- mini_portile2 (~> 2.1.0)
84
- public_suffix (2.0.5)
86
+ nokogiri (1.8.1)
87
+ mini_portile2 (~> 2.3.0)
88
+ public_suffix (3.0.1)
85
89
  puma (3.8.2)
86
90
  rack (2.0.1)
87
91
  rack-protection (1.5.3)
@@ -113,10 +117,11 @@ GEM
113
117
  thor (>= 0.18.1, < 2.0)
114
118
  rake (12.0.0)
115
119
  redis (3.3.3)
116
- redis-namespace (1.5.3)
117
- redis (~> 3.0, >= 3.0.4)
118
- routemaster-drain (2.5.0)
120
+ redis-namespace (1.6.0)
121
+ redis (>= 3.0.4)
122
+ routemaster-drain (3.4.0)
119
123
  addressable
124
+ circuitbox
120
125
  concurrent-ruby
121
126
  faraday (>= 0.9.0)
122
127
  faraday_middleware
@@ -139,7 +144,7 @@ GEM
139
144
  sprockets (>= 3.0.0)
140
145
  thor (0.19.4)
141
146
  thread_safe (0.3.6)
142
- typhoeus (1.1.2)
147
+ typhoeus (1.3.0)
143
148
  ethon (>= 0.9.0)
144
149
  tzinfo (1.2.3)
145
150
  thread_safe (~> 0.1)
@@ -160,4 +165,4 @@ DEPENDENCIES
160
165
  sidekiq
161
166
 
162
167
  BUNDLED WITH
163
- 1.13.6
168
+ 1.16.0
data/lib/determinator.rb CHANGED
@@ -15,11 +15,20 @@ module Determinator
15
15
  @instance = Control.new(retrieval: retrieval)
16
16
  end
17
17
 
18
+ # @return [Determinator::Control] The currently active instance of determinator.
19
+ # @raises [RuntimeError] If no Determinator instance is set up (with `.configure`)
18
20
  def self.instance
19
21
  raise "No singleton Determinator instance defined" unless @instance
20
22
  @instance
21
23
  end
22
24
 
25
+ # Returns the feature with the given name as Determinator uses it. This is useful for
26
+ # debugging issues with the retrieval mechanism which delivers features to Determinator.
27
+ # @returns [Determinator::Feature,nil] The feature details Determinator would use for a determination right now.
28
+ def self.feature_details(name)
29
+ instance.retrieval.retrieve(name)
30
+ end
31
+
23
32
  def self.notice_error(error)
24
33
  return unless @error_logger
25
34
 
@@ -27,9 +27,11 @@ module Determinator
27
27
 
28
28
  end
29
29
 
30
- def retrieve(feature_id)
31
- cached_feature_lookup(feature_id) do
32
- @actor_service.feature.show(feature_id)
30
+ # Retrieves and processes the feature that goes by the given name on this retrieval mechanism.
31
+ # @return [Determinator::Feature,nil] The details of the specified feature
32
+ def retrieve(name)
33
+ cached_feature_lookup(name) do
34
+ @actor_service.feature.show(name)
33
35
  end
34
36
  rescue ::Routemaster::Errors::ResourceNotFound
35
37
  # Don't be noisy
@@ -1,3 +1,3 @@
1
1
  module Determinator
2
- VERSION = '0.11.1'
2
+ VERSION = '0.12.0'
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: 0.11.1
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - JP Hastings-Spital
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-27 00:00:00.000000000 Z
11
+ date: 2018-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: routemaster-drain
@@ -211,3 +211,4 @@ signing_key:
211
211
  specification_version: 4
212
212
  summary: Determine which experiments and features a specific actor should see.
213
213
  test_files: []
214
+ has_rdoc: