@@ -148,11 +148,13 @@ def get_environment_flags # rubocop:disable Naming/AccessorMethodName
148148 # environment, e.g. email address, username, uuid
149149 # traits { key => value } is a dictionary of traits to add / update on the identity in
150150 # Flagsmith, e.g. { "num_orders": 10 }
151+ # in lieu of a trait value, a trait coniguration dictionary can be provided,
152+ # e.g. { "num_orders": { "value": 10, "transient": true } }
151153 # returns Flags object holding all the flags for the given identity.
152- def get_identity_flags ( identifier , **traits )
154+ def get_identity_flags ( identifier , transient = false , **traits ) # rubocop:disable Style/OptionalBooleanParameter
153155 return get_identity_flags_from_document ( identifier , traits ) if environment
154156
155- get_identity_flags_from_api ( identifier , traits )
157+ get_identity_flags_from_api ( identifier , traits , transient )
156158 end
157159
158160 def feature_enabled? ( feature_name , default : false )
@@ -253,16 +255,16 @@ def process_environment_flags_from_api
253255 end
254256
255257 # rubocop:disable Metrics/MethodLength
256- def get_identity_flags_from_api ( identifier , traits = { } )
258+ def get_identity_flags_from_api ( identifier , traits , transient )
257259 if offline_handler
258260 begin
259- process_identity_flags_from_api ( identifier , traits )
261+ process_identity_flags_from_api ( identifier , traits , transient )
260262 rescue StandardError
261263 get_identity_flags_from_document ( identifier , traits )
262264 end
263265 else
264266 begin
265- process_identity_flags_from_api ( identifier , traits )
267+ process_identity_flags_from_api ( identifier , traits , transient )
266268 rescue StandardError
267269 if default_flag_handler
268270 return Flagsmith ::Flags ::Collection . new (
@@ -276,8 +278,8 @@ def get_identity_flags_from_api(identifier, traits = {})
276278 end
277279 # rubocop:enable Metrics/MethodLength
278280
279- def process_identity_flags_from_api ( identifier , traits = { } )
280- data = generate_identities_data ( identifier , traits )
281+ def process_identity_flags_from_api ( identifier , traits , transient )
282+ data = generate_identities_data ( identifier , traits , transient )
281283 json_response = api_client . post ( @config . identities_url , data . to_json ) . body
282284
283285 Flagsmith ::Flags ::Collection . from_api (
@@ -311,10 +313,13 @@ def get_identity_model(identifier, traits = {})
311313 end
312314 # rubocop:enable Metrics/MethodLength
313315
314- def generate_identities_data ( identifier , traits = { } )
316+ def generate_identities_data ( identifier , traits , transient )
315317 {
316318 identifier : identifier ,
317- traits : traits . map { |key , value | { trait_key : key , trait_value : value } }
319+ transient : transient ,
320+ traits : traits . map do |key , value |
321+ value . is_a? ( Hash ) ? { trait_key : key , trait_value : value [ :value ] , transient : value [ :transient ] || false } : { trait_key : key , trait_value : value }
322+ end
318323 }
319324 end
320325 end
0 commit comments