ft_gem 3.0.9 → 3.1.4

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: 58fbec10bcb730b69f3f8f4289ec9eb5f21437f47cc545bd2050616c19e66d19
4
- data.tar.gz: 27096da6d9084cdcfa3a6f86ef891d1d01684a37d513019a72f653ce526365ab
3
+ metadata.gz: bd51c11b15d1f46fd98c4476c8a0d0eadbead26785f022dbae2ec1b0a661b033
4
+ data.tar.gz: 0351fb12d09f8d4ead1746247f1d1d67a41f668afc58124f4bfc22853db24ff0
5
5
  SHA512:
6
- metadata.gz: 968d5f9103a0ef28d7e2bc7adeca1a88735de32726802eb27fd00d8fa97b3d386424a599dc6e9b64d8f6c621654e701a371f0564d3157eb4102473ff4e293a0b
7
- data.tar.gz: 718da1efc3697fbc481792eb7bc2d5d3ca335db5bf2eab24a4f0ec9f27351cbc35df2b81ad1b8d5b6ae6d2aceb1c887b862cdba4d2b7e4b193e456037e188ff6
6
+ metadata.gz: 329fd3295dd560e017f8cb60d8ee92c46137e89a9941d76f3359dc7b376630cd431adbba2487c1b52155719de079e7b0e97b7547c9da5caa18da4e3b19f7bedb
7
+ data.tar.gz: 240149ba279adfdeb18d357642f306d88b1ad6ba3e6e7eb90dfcf50235d3e9edb9e94cd7a1541e3044e18d7fc2c3fc3c811589dcfe8ce04664c24490af367734
@@ -5,7 +5,7 @@ module FtGem
5
5
  TOGGLE_COOKIE_NAME = 'mnft'.freeze
6
6
  require 'base64'
7
7
 
8
- def feature_toggle_status(name:)
8
+ def feature_toggle_status(name:, user_id: nil, url: nil)
9
9
  toggles = FtShared.new.all_toggles
10
10
  update_feature_toggles(toggles: toggles)
11
11
  decoded_cookie = Base64.decode64(cookies[TOGGLE_COOKIE_NAME])
@@ -13,7 +13,12 @@ module FtGem
13
13
  return false if index.nil?
14
14
  client_percentage = calc_client_percentage(decoded_cookie: decoded_cookie, toggle_name: name)
15
15
  toggle_percentage = toggles[index.to_i]['attributes']['percentage']
16
- client_percentage.to_i <= toggle_percentage.to_i
16
+ whitelisted = FtShared.new.whitelisted?(url: url, whitelist_urls: toggles[index.to_i]['attributes']['whitelist-urls'])
17
+ if (user_id.present? && toggles[index.to_i]['attributes']['status'] == "amber" && toggles[index.to_i]['attributes']['beta-users'].split(",").include?(user_id.to_s))
18
+ return true
19
+ else
20
+ return client_percentage.to_i <= toggle_percentage.to_i && whitelisted
21
+ end
17
22
  rescue StandardError => e
18
23
  Rails.logger.error "FtGem::feature_toggle_status error #{e.backtrace}"
19
24
  false
@@ -27,7 +32,8 @@ module FtGem
27
32
  client_percentage = calc_client_percentage(decoded_cookie: decoded_cookie, toggle_name: toggle['attributes']['name'])
28
33
  new_cookie.push("#{toggle['attributes']['name']}:#{client_percentage}")
29
34
  end
30
- cookies[TOGGLE_COOKIE_NAME] = { value: Base64.encode64(new_cookie.join(',')).to_s, domain: ENV['COOKIE_DOMAIN'] }
35
+ cookies.delete TOGGLE_COOKIE_NAME, domain: ENV['COOKIE_DOMAIN']
36
+ cookies[TOGGLE_COOKIE_NAME] = { value: Base64.strict_encode64(new_cookie.join(',')).to_s, secure: true }
31
37
  rescue StandardError => e
32
38
  Rails.logger.error "FTApiGem::update_feature_toggles error #{e.backtrace}"
33
39
  nil
@@ -1,23 +1,39 @@
1
1
  class FtShared
2
2
  def fetch(name:)
3
+ http_response = ''
3
4
  Rails.cache.fetch("feature-toggle-#{name}", expires_in: 1.minute) do
4
- JSON.parse(HTTParty.get("#{ENV['SITE_URL']}/service/ft/api/v1/feature-toggles/status", {query: { name: name },headers:authentication_header}).to_json)['data']
5
+ http_response = HTTParty.get("#{ENV['SITE_URL']}/service/ft/api/v1/feature-toggles/status", query: { name: name }, headers: authentication_header)
6
+ JSON.parse(http_response.to_json)['data']
5
7
  end
6
8
  rescue StandardError => e
7
- Rails.logger.error "FtHelper::fetch error #{e.backtrace}"
9
+ Rails.logger.error "FtHelper::fetch error for #{name}\nerror: #{e.message}\nhttp_response: #{http_response}"
8
10
  nil
9
11
  end
10
12
 
11
13
  def all_toggles
12
14
  Rails.cache.fetch('all-feature-toggles', expires_in: 1.minute) do
13
- JSON.parse(HTTParty.get("#{ENV['SITE_URL']}/service/ft/api/v1/feature-toggles/",{headers:authentication_header}).to_json)['data']
15
+ JSON.parse(HTTParty.get("#{ENV['SITE_URL']}/service/ft/api/v1/feature-toggles", headers: authentication_header).to_json)['data']
14
16
  end
15
17
  rescue StandardError => e
16
- Rails.logger.error "FtHelper::all_toggles error #{e.backtrace}"
18
+ Rails.logger.error "FtHelper::all_toggles error #{e.message}"
17
19
  {}
18
20
  end
19
21
 
20
22
  def authentication_header
21
23
  { Authorization: "Bearer #{MumsnetJWT.tokenify}" }
22
24
  end
25
+
26
+ def whitelisted?(url:, whitelist_urls:)
27
+ return true if whitelist_urls.empty? || url.nil?
28
+ whitelisted = false
29
+ whitelist_urls.each do |whitelist_url|
30
+ if whitelist_url[whitelist_url.length - 1] == '*'
31
+ whitelist_url.chomp!('*')
32
+ whitelisted = true if url.starts_with?(whitelist_url)
33
+ elsif whitelist_url == url
34
+ whitelisted = true
35
+ end
36
+ end
37
+ whitelisted
38
+ end
23
39
  end
@@ -1,12 +1,13 @@
1
1
  module FtGem
2
2
  module View
3
3
  module Helpers
4
- def self.status(name:)
4
+ def self.status(name:, url: nil)
5
5
  toggle = FtShared.new.fetch(name: name)
6
6
  return false if toggle.nil?
7
- toggle['attributes']['percentage'].to_i == 100
7
+ whitelisted = FtShared.new.whitelisted?(url: url, whitelist_urls: toggle['attributes']['whitelist-urls'])
8
+ toggle['attributes']['percentage'].to_i == 100 && whitelisted
8
9
  rescue StandardError => e
9
- Rails.logger.error "FtHelper::status error #{e.backtrace}"
10
+ Rails.logger.error "FtHelper::status error #{e.message}"
10
11
  false
11
12
  end
12
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ft_gem
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.9
4
+ version: 3.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Murray Catto
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-09 00:00:00.000000000 Z
11
+ date: 2020-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mumsnet_jwt
@@ -38,8 +38,8 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- description:
42
- email:
41
+ description:
42
+ email:
43
43
  executables: []
44
44
  extensions: []
45
45
  extra_rdoc_files: []
@@ -48,10 +48,10 @@ files:
48
48
  - lib/ft_gem/controllers/helpers.rb
49
49
  - lib/ft_gem/shared/ft_shared.rb
50
50
  - lib/ft_gem/view/helpers.rb
51
- homepage:
51
+ homepage:
52
52
  licenses: []
53
53
  metadata: {}
54
- post_install_message:
54
+ post_install_message:
55
55
  rdoc_options: []
56
56
  require_paths:
57
57
  - lib
@@ -66,9 +66,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  requirements: []
69
- rubyforge_project:
70
- rubygems_version: 2.7.8
71
- signing_key:
69
+ rubygems_version: 3.0.8
70
+ signing_key:
72
71
  specification_version: 4
73
72
  summary: Client side feature toggle
74
73
  test_files: []