groundcontrolsh 0.1.0 → 0.1.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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/groundcontrolsh.rb +70 -5
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1815a625435acc5d42f202b22a7063f341e3eb9c0c05facc27ddfb1d8ad03be
4
- data.tar.gz: 0f82baed500dee1353a7739da580a1cf3d0d3ba71cfe65f2ae324dcbfb340d6e
3
+ metadata.gz: fbb4c78256193b2d63d5b09205c3af71a772edb38fa53b9f012d657d8f9a17a0
4
+ data.tar.gz: 70180d66d32577f53c6ab8c20e677d0128acb08fe6e62dbb8f4fa1db3c2b09bf
5
5
  SHA512:
6
- metadata.gz: 4768ee64d4ece417d18f777e6757249ab96e1d7f86de50a90a0d6c69c92eaac5b5f19a4be6b7913db4aa92fe8a631edbf8d18244e0e6860fabf5d04f26369099
7
- data.tar.gz: 004aeef30d08c454dd05c49d800cfc2bfbd9a618cef24240b2ffcf86abafbfc754196ee74c2d0bcab777165df36c56024ab1610d80bfc2936d79a017f6b3453e
6
+ metadata.gz: 1b4e2f66c352ec75d11fd571696c711438993a83cd9d3c53bd7358734f0936cf0a41cb9f4feab65ac019b65d2c9921621043f575128025804292e95fe3272a7d
7
+ data.tar.gz: '086b2c0b8dcc12739e0e20bcf48cb7c5f03408e615d653bed12a8b621bb3427a0645ae81ed3fef4147d89a8a0adb114aa482e2d49552a27bf2c18a64837da978'
@@ -9,16 +9,38 @@ class GroundControl
9
9
  @project_id = project_id
10
10
  @api_key = api_key
11
11
  @base_url = options[:base_url] || 'https://api.groundcontrol.sh'
12
- # @cache = options[:cache] || nil
12
+ @ttl = options[:cache] || nil
13
+ @cache = {}
14
+
15
+ @_actor_overrides = {}
16
+ @_flag_overrides = {}
17
+ @full_override = nil
13
18
  end
14
19
 
15
- def feature_flag_enabled?(feature_name, options = {})
20
+ def feature_flag_enabled?(flag_name, options = {})
16
21
  actors = options[:actors] || []
17
22
 
23
+ actor_overrides = @_actor_overrides[flag_name]
24
+ actors.each do |actor_id|
25
+ override = actor_overrides[actor_id]
26
+ return override if override != nil
27
+ end if actor_overrides != nil && actors != nil
28
+
29
+ flag_override = @_flag_overrides[flag_name]
30
+ return flag_override if flag_override != nil
31
+ return @_full_override if @_full_override != nil
32
+
18
33
  query = actors.map { |actor| "actorIds=#{CGI.escape(actor)}" }
19
- # query << "cache=#{@cache}" if @cache
34
+ url = URI("#{@base_url}/projects/#{@project_id}/flags/#{flag_name}/check?#{query.join('&')}")
35
+ cached = @cache[url]
36
+ if cached
37
+ if cached[:expires] < Time.now.to_i
38
+ @cache.delete(url)
39
+ else
40
+ return cached[:enabled]
41
+ end
42
+ end
20
43
 
21
- url = URI("#{@base_url}/projects/#{@project_id}/flags/#{feature_name}/check?#{query.join('&')}")
22
44
  http = Net::HTTP.new(url.host, url.port)
23
45
  http.use_ssl = true
24
46
 
@@ -29,7 +51,50 @@ class GroundControl
29
51
  return nil if response.code != '200'
30
52
 
31
53
  body = JSON.parse(response.body)
54
+ enabled = body["enabled"]
55
+
56
+ if @ttl
57
+ @cache[url] = { expires: Time.now.to_i + @ttl, enabled: enabled }
58
+ end
59
+
60
+ return enabled
61
+ end
62
+
63
+ def disable_feature_flag(flag_name, options = nil)
64
+ set_feature_flag_enabled(false, flag_name, options)
65
+ end
66
+
67
+ def disable_all_feature_flags
68
+ @_full_override = false
69
+ end
70
+
71
+ def enable_feature_flag(flag_name, options = nil)
72
+ set_feature_flag_enabled(true, flag_name, options)
73
+ end
74
+
75
+ def enable_all_feature_flags()
76
+ @_full_override = true
77
+ end
78
+
79
+ def reset
80
+ @_actor_overrides.clear
81
+ @_flag_overrides.clear
82
+ @_full_override = nil
83
+ end
84
+
85
+ private
32
86
 
33
- return body["enabled"]
87
+ def set_feature_flag_enabled(enabled, flag_name, options)
88
+ options = {} if options == nil
89
+ actors_ops = options[:actors]
90
+ if actors_ops == nil
91
+ @_flag_overrides[flag_name] = enabled
92
+ else
93
+ actors = @_actor_overrides[flag_name] || {}
94
+ actors_ops.each do |actor_id|
95
+ actors[actor_id] = enabled
96
+ end
97
+ @_actor_overrides[flag_name] = actors
98
+ end
34
99
  end
35
100
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: groundcontrolsh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alberto Gimeno
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-17 00:00:00.000000000 Z
11
+ date: 2023-09-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Verify the rollout status of feature flags created in your groundcontrol.sh
14
14
  project