launchdarkly_api_helper 0.4.0 → 0.5.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
  SHA256:
3
- metadata.gz: f063313104693353f6dd3e18a6ecd69c5142b62eb3f072b08f96b8b51e9175e0
4
- data.tar.gz: 1f83a4dc6665e8864605decdb1d265178232785d44cca584488533fe21bd4ce6
3
+ metadata.gz: b32c8619c0d002bd0974ae86f4172b4caa5733633919373d74956df9016a02f8
4
+ data.tar.gz: aa4328e4904f808b0588c02ecaf04068cc2a6d6a523500dd56a9acda0d872efd
5
5
  SHA512:
6
- metadata.gz: e9fadbf1588e1d429f3cf3d1bf9bcccf6b06bda032baa707970a65714321a970e8e5d8f952baa99be5115e4986564c45bbcfcc07034f829637522569e5fd9f15
7
- data.tar.gz: b947d46ef24947acba122a57ce2e2c582af6342806e357de59864523ba4b8e78e9d81185dc6f51d4b183621d94b97d206840d020dc5226731db866ef77a25c7a
6
+ metadata.gz: f411f430c4c844dbb4845d678ab77d0fffbc1a0f34cec14246de70e80d1f8ab787e6e3497678abaf85fb1fea61e3f6a296f7f8892f597864724d40ab13190542
7
+ data.tar.gz: f851657526a6d3efb998159ef78920882dedfab9f71bdd10597c0db0fe49a3885cdfc5b963ac6e244a32a074ddad0112904ad7199e9f6912f4967b917748f234
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # LaunchdarklyApiHelper
1
+ # LaunchdarklyApiHelper ![alt_text](https://badge.fury.io/rb/launchdarkly_api_helper.svg)
2
2
 
3
3
  [LaunchDarklyApiHelper](https://rubygems.org/gems/launchdarkly_api_helper) provides you a way to access your [Launch Darkly](https://apidocs.launchdarkly.com/) account using [API token](https://app.launchdarkly.com/settings/authorization/tokens/new) to view, edit or delete them accordingly.
4
4
 
@@ -27,10 +27,11 @@ To perform any operations such as add, remove, replace, move, copy, test you sho
27
27
  ```ruby
28
28
  parameters:
29
29
  access_token (*required): this token will be used to send all requests to LaunchDarkly (string)
30
- log_file: all logs will be writeen to file 'launchdarkly.log' by default if no file name specified
30
+ project_name: provide project name of your organistaion (NOTE: for most, it should be `default` unless you have made some explicit changes)
31
+ log_file: all logs will be written to file 'launchdarkly.log' by default if no file name specified (string)
31
32
 
32
33
  # set your LD API token and log file to capture logs
33
- def ld_access_token(access_token, log_file = 'launchdarkly.log')
34
+ def ld_access_token(access_token, project_name = 'default', log_file = 'launchdarkly.log')
34
35
  # code ...
35
36
  end
36
37
  ```
@@ -41,21 +42,21 @@ end
41
42
  GET REQUEST
42
43
  https://app.launchdarkly.com/api/v2/flags/default/developer_flag_for_regression
43
44
 
44
- parameters:
45
- env (*required): name of the environment for which you want to get the details (string)
46
- flag (*required): name of the feature flag for which you want to get the details (string)
47
-
48
- Here, 'developer_flag_for_regression' is the feature flag name and default is our Project name - eg. AmitSinghBisht
45
+ Here, 'developer_flag_for_regression' is the feature flag name and `default` is our Project name - eg. AmitSinghBisht
49
46
  By default, this returns the configurations for all environments
50
47
  You can filter environments with the env query parameter. For example, setting env=staging restricts the returned configurations to just the staging environment
51
48
  https://app.launchdarkly.com/api/v2/flags/default/developer_flag_for_regression?env=staging
52
49
 
50
+ parameters:
51
+ env (*required): name of the environment for which you want to get the details (string)
52
+ flag (*required): name of the feature flag for which you want to get the details (string)
53
+
53
54
  # this method will give you entire details about a flag for that particular environment
54
55
  def ld_fetch_flag_details(env, flag)
55
56
  # code ...
56
57
  end
57
58
 
58
- @return value (response of feature flag details):
59
+ @return parameter: (response of feature flag details)
59
60
  response = "https://app.launchdarkly.com/api/v2/flags/default/#{flag}?env=#{env}" (string)
60
61
  ```
61
62
 
@@ -66,15 +67,12 @@ parameters:
66
67
  env (*required): name of the environment for which you want to get the details (string)
67
68
  flag (*required): name of the feature flag for which you want to get the details (string)
68
69
 
69
- response = https://app.launchdarkly.com/api/v2/flags/default/developer_flag_for_regression?env=staging
70
- grab the value of the ['environments'][env]['on'] obtained from the above response
71
-
72
70
  # this method will return the status of the flag, whether it is on or off viz set to true or false
73
71
  def ld_fetch_flag_toggle_status(env, flag)
74
72
  # code ...
75
73
  end
76
74
 
77
- @return value (response of feature flag toggle status):
75
+ @return parameter: (response of feature flag toggle status)
78
76
  response = "https://app.launchdarkly.com/api/v2/flags/default/#{flag}?env=#{env}"
79
77
  response['environments'][env]['on'] (boolean)
80
78
  ```
@@ -141,20 +139,20 @@ https://apidocs.launchdarkly.com/tag/Feature-flags#operation/patchFeatureFlag
141
139
  PATCH REQUEST
142
140
  https://app.launchdarkly.com/api/v2/flags/default/developer_flag_for_regression
143
141
 
142
+ Here, 'developer_flag_for_regression' is the flag key and `default` is our Project name - eg. AmitSinghBisht
143
+ You can update any parameter of feature flag using this method
144
+
144
145
  parameters:
145
146
  env (*required): name of the environment for which you want to get the details (string)
146
147
  flag (*required): name of the feature flag for which you want to get the details (string)
147
148
  flag_value: status of the feature flag that you want to set either on (true) or off (false) (boolean)
148
149
 
149
- Here, 'developer_flag_for_regression' is the flag key and default is our Project name - eg. AmitSinghBisht
150
- You can update any parameter of feature flag using this method
151
-
152
150
  # this method will be used to toggle status of feature flag either on / off for a particular environment
153
151
  def ld_toggle_specific_environment(env, flag, flag_value = true)
154
152
  # code ...
155
153
  end
156
154
 
157
- @return value (response of feature flag toggle status):
155
+ @return parameter: (response of feature flag toggle status)
158
156
  response = "https://app.launchdarkly.com/api/v2/flags/default/#{flag}?env=#{env}"
159
157
  response['environments'][env]['on'] (boolean)
160
158
  ```
@@ -162,8 +160,13 @@ response['environments'][env]['on'] (boolean)
162
160
  ```ruby
163
161
  Get status of feature flag
164
162
  https://apidocs.launchdarkly.com/tag/Feature-flags#operation/patchFeatureFlag
165
-
166
- def ld_toggle_variation_served(env, flag)
163
+
164
+ parameters:
165
+ env (*required): name of the environment for which you want to get the details (string)
166
+ flag (*required): name of the feature flag for which you want to get the details (string)
167
+
168
+ # this method will get important parameters from the response
169
+ def flag_variation_served(env, flag)
167
170
  # code ...
168
171
  end
169
172
 
@@ -172,38 +175,131 @@ end
172
175
  response = "https://app.launchdarkly.com/api/v2/flags/default/#{flag}?env=#{env}"
173
176
  fetch_flag_toggle_status_response: response['environments'][env]['on'] (boolean)
174
177
  feature_flag_variation_index_response: response (integer)
175
- feature_flag_variation_value_response: response['variations'][feature_flag_variation_index_response]['value'] (object)
178
+ feature_flag_variation_value_response: response['variations'][feature_flag_variation_index_response]['value'] (string)
176
179
  feature_flag_variation_name_response: response['variations'][feature_flag_variation_index_response]['name'] (string)
177
180
  ```
178
181
 
179
182
  ```ruby
183
+
184
+ "rules": [
185
+ { # rules/0
186
+ "variation": 0,
187
+ "clauses": [
188
+ { # rules/0/clauses/0
189
+ "attribute": "groups",
190
+ "op": "in",
191
+ "values": ["Top Customers"],
192
+ "negate": false
193
+ },
194
+ { # rules/0/clauses/1
195
+ "attribute": "email",
196
+ "op": "endsWith",
197
+ "values": ["gmail.com"],
198
+ "negate": false
199
+ }
200
+ ]
201
+ },
202
+ { # rules/1
203
+ "variation": 1,
204
+ "clauses": [
205
+ { # rules/1/clauses/0
206
+ "attribute": "country",
207
+ "op": "in",
208
+ "values": [
209
+ "in", # rules/1/clauses/0/values/0
210
+ "eu" # rules/1/clauses/0/values/1
211
+ ],
212
+ "negate": false
213
+ }
214
+ ]
215
+ }
216
+ ]
217
+
218
+ parameters:
219
+ env (*required): name of the environment for which you want to get the details (string)
220
+ flag (*required): name of the feature flag for which you want to get the details (string)
221
+ clause_name (*required): name of clause that you want to search for in response
222
+
223
+ # this method will return the index of rules and clauses by searching for clause_name in response
180
224
  def ld_rules_clauses_index(env, flag, clause_name)
181
225
  # code ...
182
226
  end
227
+
228
+ @returns: [rule_at_index, clause_at_index]
229
+ @return parameter:
230
+ response = "https://app.launchdarkly.com/api/v2/flags/default/#{flag}?env=#{env}" ['environments'][env]['rules']
231
+ rule_at_index = response[rule_index] (integer) # index at which rule is found
232
+ clause_at_index = response[rule_index]['clauses'][clause_index] (integer) # index at which clause is found
183
233
  ```
184
234
 
185
235
  ```ruby
236
+ parameters:
237
+ env (*required): name of the environment for which you want to get the details (string)
238
+ flag (*required): name of the feature flag for which you want to get the details (string)
239
+ clause_name (*required): name of clause that you want to search for in response
240
+
241
+ # this method will return values inside a particular clause by searching for clause_name in response
186
242
  def ld_get_values_from_clauses(env, flag, clause_name)
187
243
  # code ...
188
244
  end
245
+
246
+ @return parameter: values_for_clause_name
247
+ response = "https://app.launchdarkly.com/api/v2/flags/default/#{flag}?env=#{env}" ['environments'][env]['rules']
248
+ values_for_clause_name = response[rule_at_index]['clauses'][clause_at_index]['values'] (string)
189
249
  ```
190
250
 
191
251
  ```ruby
252
+ parameters:
253
+ env (*required): name of the environment for which you want to get the details (string)
254
+ flag (*required): name of the feature flag for which you want to get the details (string)
255
+ clause_name (*required): name of clause that you want to search for in response
256
+ clause_value (*required): value that you want to add to a particular clause (NOTE: it will be appened at zeroth 0th index)
257
+
258
+ # this method will help you to add a value to a particular clause by searching for clause_name in response
192
259
  def ld_add_values_to_clause(env, flag, clause_name, clause_value)
193
260
  # code ...
194
261
  end
262
+
263
+ @return parameter: (response of feature flag details)
264
+ response = "https://app.launchdarkly.com/api/v2/flags/default/#{flag}?env=#{env}" (string)
195
265
  ```
196
266
 
197
267
  ```ruby
198
- def ld__remove_values_from_clause(env, flag, clause_name, clause_value)
268
+ parameters:
269
+ env (*required): name of the environment for which you want to get the details (string)
270
+ flag (*required): name of the feature flag for which you want to get the details (string)
271
+ clause_name (*required): name of clause that you want to search for in response
272
+ clause_value (*required): value that you want to add to a particular clause (NOTE: it will be appened at zeroth 0th index)
273
+
274
+ # this method will help you to remove a value to a particular clause by searching for clause_name in response
275
+ def ld_remove_values_from_clause(env, flag, clause_name, clause_value)
199
276
  # code ...
200
277
  end
278
+
279
+ @return parameter: (response of feature flag details)
280
+ response = "https://app.launchdarkly.com/api/v2/flags/default/#{flag}?env=#{env}" (string)
201
281
  ```
202
282
 
203
283
  ```ruby
284
+ Delete feature flag
285
+ https://apidocs.launchdarkly.com/tag/Feature-flags#operation/deleteFeatureFlag
286
+
287
+ DELETE REQUEST
288
+ https://app.launchdarkly.com/api/v2/flags/default/developer_flag_for_regression
289
+
290
+ Here, 'developer_flag_for_regression' is the flag key and default is our Project name - eg. AmitSinghBisht
291
+ You can delete any feature flag using this method
292
+
293
+ parameters:
294
+ flag (*required): name of the feature flag for which you want to get the details (string)
295
+
296
+ # this method will delete a feature flag in launchdarkly (NOTE: env resided inside flag which means flag is parent, so deleting a feature flag will delete it from all environment)
204
297
  def ld_delete_flag(flag)
205
298
  # code ...
206
299
  end
300
+
301
+ @return parameter: (response of feature flag details)
302
+ response = "https://app.launchdarkly.com/api/v2/flags/default/#{flag}?env=#{env}" (string)
207
303
  ```
208
304
 
209
305
  ## Development
@@ -1,5 +1,3 @@
1
- LAUNCH_DARKLY_FLAGS = 'https://app.launchdarkly.com/api/v2/flags/default'.freeze
2
- LAUNCH_DARKLY_PROJECTS = 'https://app.launchdarkly.com/api/v2/projects/default'.freeze
3
1
  REQUEST_CLASSES = {
4
2
  get: {
5
3
  'method' => Net::HTTP::Get,
@@ -8,8 +8,12 @@ require_relative 'constants'
8
8
 
9
9
  # All methods related to launch darkly api are defined here
10
10
  class LaunchdarklyApiHelperClass
11
- def initialize(access_token, log_file)
11
+
12
+ @launch_darkly_flags = 'https://app.launchdarkly.com/api/v2/flags/project_name'
13
+
14
+ def initialize(access_token, project_name, log_file)
12
15
  @access_token = access_token
16
+ @launch_darkly_flags.gsub! 'project_name', project_name
13
17
  @logger = Logger.new(log_file)
14
18
  end
15
19
 
@@ -43,7 +47,7 @@ class LaunchdarklyApiHelperClass
43
47
  end
44
48
 
45
49
  def fetch_flag_details(env, flag)
46
- request_url = "#{LAUNCH_DARKLY_FLAGS}/#{flag}?env=#{env}"
50
+ request_url = "#{@launch_darkly_flags}/#{flag}?env=#{env}"
47
51
  ld_request(:get, request_url)
48
52
  end
49
53
 
@@ -53,14 +57,14 @@ class LaunchdarklyApiHelperClass
53
57
  end
54
58
 
55
59
  def create_flag(key, name, description, tags)
56
- request_url = LAUNCH_DARKLY_FLAGS
60
+ request_url = @launch_darkly_flags
57
61
  request_body = {}
58
62
  request_body.merge!(key: key, name: name, description: description, tags: tags)
59
63
  ld_request(:post, request_url, request_body)
60
64
  end
61
65
 
62
66
  def toggle_specific_environment(env, flag, flag_value)
63
- request_url = "#{LAUNCH_DARKLY_FLAGS}/#{flag}"
67
+ request_url = "#{@launch_darkly_flags}/#{flag}"
64
68
  request_body = { 'op' => 'replace', 'path' => "/environments/#{env}/on", 'value' => flag_value }
65
69
  response_body = ld_request(:patch, request_url, [request_body])
66
70
  response_body['environments'][env]['on']
@@ -86,7 +90,7 @@ class LaunchdarklyApiHelperClass
86
90
  details_response['variations'][index_response]['name']
87
91
  end
88
92
 
89
- def ld_toggle_variation_served(env, flag)
93
+ def flag_variation_served(env, flag)
90
94
  details_response = fetch_flag_details(env, flag)
91
95
  toggle_status_response = fetch_flag_toggle_status(env, flag)
92
96
  variation_index_response = feature_flag_variation_index(toggle_status_response, details_response) # ['environments'][env]['fallthrough']['variation']
@@ -130,29 +134,29 @@ class LaunchdarklyApiHelperClass
130
134
  end
131
135
 
132
136
  def get_values_from_clauses(env, flag, clause_name)
133
- rule_at_index, clause_at_index = feature_flag_rules_clauses_index(env, flag, clause_name)
137
+ rule_at_index, clause_at_index = rules_clauses_index(env, flag, clause_name)
134
138
  @feature_flag_rules_list[rule_at_index]['clauses'][clause_at_index]['values']
135
139
  end
136
140
 
137
141
  def add_values_to_clause(env, flag, clause_name, clause_value)
138
- rule_at_index, clause_at_index = feature_flag_rules_clauses_index(env, flag, clause_name)
139
- request_url = "#{LAUNCH_DARKLY_FLAGS}/#{flag}"
142
+ rule_at_index, clause_at_index = rules_clauses_index(env, flag, clause_name)
143
+ request_url = "#{@launch_darkly_flags}/#{flag}"
140
144
  request_body = { 'op' => 'add', 'path' => "/environments/#{env}/rules/#{rule_at_index}/clauses/#{clause_at_index}/values/0", 'value' => clause_value }
141
145
  ld_request(:patch, request_url, [request_body])
142
146
  end
143
147
 
144
148
  def remove_values_from_clause(env, flag, clause_name, clause_value)
145
- rule_at_index, clause_at_index = feature_flag_rules_clauses_index(env, flag, clause_name)
149
+ rule_at_index, clause_at_index = rules_clauses_index(env, flag, clause_name)
146
150
  value_at_index = search_value_index(rule_at_index, clause_at_index, clause_value)
147
151
  puts "value_index: #{value_at_index}"
148
- request_url = "#{LAUNCH_DARKLY_FLAGS}/#{flag}"
152
+ request_url = "#{@launch_darkly_flags}/#{flag}"
149
153
  request_body = { 'op' => 'test', 'path' => "/environments/#{env}/rules/#{rule_at_index}/clauses/#{clause_at_index}/values/#{value_at_index}", 'value' => clause_value },
150
154
  { 'op' => 'remove', 'path' => "/environments/#{env}/rules/#{rule_at_index}/clauses/#{clause_at_index}/values/#{value_at_index}" }
151
155
  ld_request(:patch, request_url, request_body)
152
156
  end
153
157
 
154
158
  def delete_flag(flag)
155
- request_url = "#{LAUNCH_DARKLY_FLAGS}/#{flag}"
159
+ request_url = "#{@launch_darkly_flags}/#{flag}"
156
160
  ld_request(:delete, request_url)
157
161
  end
158
162
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LaunchdarklyApiHelper
4
- VERSION = '0.4.0'
4
+ VERSION = '0.5.0'
5
5
  end
@@ -34,8 +34,8 @@ module LaunchdarklyApiHelper
34
34
  # == To perform any operations such as add, remove, replace, move, copy, test you should have a working knowledge of JSON Patch
35
35
  # https://datatracker.ietf.org/doc/html/rfc6902
36
36
 
37
- def ld_access_token(access_token, log_file = 'launchdarkly.log')
38
- @launchdarkly_helper = LaunchdarklyApiHelperClass.new(access_token, log_file)
37
+ def ld_access_token(access_token, project_name = 'default', log_file = 'launchdarkly.log')
38
+ @launchdarkly_helper = LaunchdarklyApiHelperClass.new(access_token, project_name, log_file)
39
39
  end
40
40
 
41
41
  # == Get feature flag
@@ -144,8 +144,8 @@ module LaunchdarklyApiHelper
144
144
  #
145
145
  # [fetch_flag_toggle_status_response, feature_flag_variation_index_response, feature_flag_variation_value_response, feature_flag_variation_name_response]
146
146
 
147
- def ld_toggle_variation_served(env, flag)
148
- @launchdarkly_helper.ld_toggle_variation_served(env, flag)
147
+ def ld_flag_variation_served(env, flag)
148
+ @launchdarkly_helper.flag_variation_served(env, flag)
149
149
  end
150
150
 
151
151
  def ld_rules_clauses_index(env, flag, clause_name)
@@ -160,7 +160,7 @@ module LaunchdarklyApiHelper
160
160
  @launchdarkly_helper.add_values_to_clause(env, flag, clause_name, clause_value)
161
161
  end
162
162
 
163
- def ld__remove_values_from_clause(env, flag, clause_name, clause_value)
163
+ def ld_remove_values_from_clause(env, flag, clause_name, clause_value)
164
164
  @launchdarkly_helper.remove_values_from_clause(env, flag, clause_name, clause_value)
165
165
  end
166
166
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: launchdarkly_api_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - amit-singh-bisht
@@ -33,7 +33,7 @@ metadata:
33
33
  allowed_push_host: https://rubygems.org
34
34
  homepage_uri: https://github.com/amit-singh-bisht/launchdarkly_api_helper_ruby
35
35
  source_code_uri: https://github.com/amit-singh-bisht/launchdarkly_api_helper_ruby
36
- changelog_uri: https://github.com/amit-singh-bisht/launchdarkly_api_helper_ruby/blob/main/README.md
36
+ changelog_uri: https://github.com/amit-singh-bisht/launchdarkly_api_helper_ruby/blob/master/README.md
37
37
  post_install_message:
38
38
  rdoc_options: []
39
39
  require_paths: