groundcontrolsh 0.1.1 → 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 +56 -4
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 47cd56b1bd7755057d733359ef3e4291b1eccf94435843e1f7e6625d5131956f
4
- data.tar.gz: 7c78379b5a082803d9dd154d23a819a0fd42542efc52ce0eab2c82a56633cbcf
3
+ metadata.gz: fbb4c78256193b2d63d5b09205c3af71a772edb38fa53b9f012d657d8f9a17a0
4
+ data.tar.gz: 70180d66d32577f53c6ab8c20e677d0128acb08fe6e62dbb8f4fa1db3c2b09bf
5
5
  SHA512:
6
- metadata.gz: fb5e7467b6a1c14dbc22deb1ba984983877211c449a5a6bcf1c728aa2b3b1a8f32d938ee86b4d3d10aa995c6169078620a4f675c336474d40fa2c9b2808d17a5
7
- data.tar.gz: 67932fe1d30795d5cefcd8a8bdf4ea0166a4d43a19d150178570ba131a7eb1a922b1d5fa9933f9c33e7b26e77565f6d80219fbd84b2c9e3bb745e9edafef61bb
6
+ metadata.gz: 1b4e2f66c352ec75d11fd571696c711438993a83cd9d3c53bd7358734f0936cf0a41cb9f4feab65ac019b65d2c9921621043f575128025804292e95fe3272a7d
7
+ data.tar.gz: '086b2c0b8dcc12739e0e20bcf48cb7c5f03408e615d653bed12a8b621bb3427a0645ae81ed3fef4147d89a8a0adb114aa482e2d49552a27bf2c18a64837da978'
@@ -11,20 +11,34 @@ class GroundControl
11
11
  @base_url = options[:base_url] || 'https://api.groundcontrol.sh'
12
12
  @ttl = options[:cache] || nil
13
13
  @cache = {}
14
+
15
+ @_actor_overrides = {}
16
+ @_flag_overrides = {}
17
+ @full_override = nil
14
18
  end
15
19
 
16
- def feature_flag_enabled?(feature_name, options = {})
20
+ def feature_flag_enabled?(flag_name, options = {})
17
21
  actors = options[:actors] || []
18
22
 
19
- query = actors.map { |actor| "actorIds=#{CGI.escape(actor)}" }
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
20
32
 
21
- url = URI("#{@base_url}/projects/#{@project_id}/flags/#{feature_name}/check?#{query.join('&')}")
33
+ query = actors.map { |actor| "actorIds=#{CGI.escape(actor)}" }
34
+ url = URI("#{@base_url}/projects/#{@project_id}/flags/#{flag_name}/check?#{query.join('&')}")
22
35
  cached = @cache[url]
23
36
  if cached
24
37
  if cached[:expires] < Time.now.to_i
25
38
  @cache.delete(url)
39
+ else
40
+ return cached[:enabled]
26
41
  end
27
- return cached[:enabled]
28
42
  end
29
43
 
30
44
  http = Net::HTTP.new(url.host, url.port)
@@ -45,4 +59,42 @@ class GroundControl
45
59
 
46
60
  return enabled
47
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
86
+
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
99
+ end
48
100
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: groundcontrolsh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alberto Gimeno