flipt_client 0.0.5 → 0.2.0

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: dff4c9d668eeb7aaa9c83e157e008483db259418034753a443e8410c47a6e992
4
- data.tar.gz: 62b0d2b34fcd4e9d3f0967f8637a1e70a047fffc1e58a70683c93a4f69d9e32b
3
+ metadata.gz: e8bc0c05bef4e63e44af80fc645966860d85d2d67955d286395b86db656813e7
4
+ data.tar.gz: bc31ef92a86f73ae137e187a5fb3a99720ac18de2ccb64da0c2a1b562f886a43
5
5
  SHA512:
6
- metadata.gz: 159db6c69a4909f775c471c6375d46c1af745fe3388ef4bacecdda726c29cfa0416c3b7608c16f3db5157a5c6676b778d8a8818a4e8f14dd6a5a2fe818a2efa6
7
- data.tar.gz: 98ef4522ab570ced6c555c7be9d174e3a9817ae1c8fdd87b18f6678945d180e0d529a79247292e7f5709fd76bcb7767feeb434712dffc871da2f9427abab1e82
6
+ metadata.gz: fd61d88defa40b66c686f1fa14b6df9bb1b578c2dc1a2e8aedc5d218c241fe9678b98002d5873cb50d0d413e46dd333ea3549e4f6bf1dd6c50a3c7699478bfa6
7
+ data.tar.gz: 4d8a6c9413564d3fa631541f05fc72dba7bad3d1bacf5b43995e61803b010e7f9517f11a1b3a231ca5fbe9b5fbd06bf47969bc55423003b5af7ff992021130a7
data/README.md CHANGED
@@ -33,7 +33,9 @@ require 'flipt_client'
33
33
  # {
34
34
  # "url": "http://localhost:8080",
35
35
  # "update_interval": 120,
36
- # "auth_token": "secret"
36
+ # "authentication": {
37
+ # "client_token": "secret"
38
+ # }
37
39
  # }
38
40
  #
39
41
  # You can replace the url with where your upstream Flipt instance points to, the update interval for how long you are willing
Binary file
@@ -24,6 +24,13 @@ const char *evaluate_variant(void *engine_ptr, const char *evaluation_request);
24
24
  */
25
25
  const char *evaluate_boolean(void *engine_ptr, const char *evaluation_request);
26
26
 
27
+ /**
28
+ * # Safety
29
+ *
30
+ * This function will take in a pointer to the engine and return a batch evaluation response.
31
+ */
32
+ const char *evaluate_batch(void *engine_ptr, const char *batch_evaluation_request);
33
+
27
34
  /**
28
35
  * # Safety
29
36
  *
Binary file
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Flipt
4
+ class AuthenticationStrategy
5
+ def strategy
6
+ raise NotImplementedError
7
+ end
8
+ end
9
+
10
+ class NoAuthentication < AuthenticationStrategy
11
+ def strategy
12
+ nil
13
+ end
14
+ end
15
+
16
+ class ClientTokenAuthentication < AuthenticationStrategy
17
+ def initialize(token)
18
+ @token = token
19
+ end
20
+
21
+ def strategy
22
+ {
23
+ client_token: @token
24
+ }
25
+ end
26
+ end
27
+
28
+ class JWTAuthentication < AuthenticationStrategy
29
+ def initialize(token)
30
+ @token = token
31
+ end
32
+
33
+ def strategy
34
+ {
35
+ jwt_token: @token
36
+ }
37
+ end
38
+ end
39
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Flipt
4
- VERSION = '0.0.5'
4
+ VERSION = '0.2.0'
5
5
  end
data/lib/flipt_client.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'flipt_client/version'
4
+ require 'flipt_client/models'
4
5
  require 'ffi'
5
6
  require 'json'
6
7
 
@@ -35,17 +36,26 @@ module Flipt
35
36
  attach_function :evaluate_variant, %i[pointer string], :string
36
37
  # const char *evaluate_boolean(void *engine_ptr, const char *evaluation_request);
37
38
  attach_function :evaluate_boolean, %i[pointer string], :string
39
+ # const char *evaluate_batch(void *engine_ptr, const char *batch_evaluation_request);
40
+ attach_function :evaluate_batch, %i[pointer string], :string
38
41
 
39
42
  # Create a new Flipt client
40
43
  #
41
44
  # @param namespace [String] namespace
42
45
  # @param opts [Hash] options
43
46
  # @option opts [String] :url Flipt server url
44
- # @option opts [String] :auth_token Flipt api key
47
+ # @option opts [AuthenticationStrategy] :authentication strategy to authenticate with Flipt
45
48
  # @option opts [Integer] :update_interval interval in seconds to update the cache
46
49
  # @option opts [String] :reference reference to use for namespace data
47
50
  def initialize(namespace = 'default', opts = {})
48
51
  @namespace = namespace
52
+
53
+ # set default no auth if not provided
54
+ authentication = opts.fetch(:authentication, Flipt::NoAuthentication.new)
55
+ raise ArgumentError, "invalid authentication strategy" unless authentication && authentication.is_a?(Flipt::AuthenticationStrategy)
56
+
57
+ opts[:authentication] = authentication.strategy
58
+
49
59
  namespace_list = [namespace]
50
60
  ns = FFI::MemoryPointer.new(:pointer, namespace_list.size)
51
61
  namespace_list.each_with_index do |namespace, i|
@@ -85,6 +95,22 @@ module Flipt
85
95
  resp = self.class.evaluate_boolean(@engine, evaluation_request.to_json)
86
96
  JSON.parse(resp)
87
97
  end
98
+
99
+ # Evaluate a batch of flags for a given request
100
+ #
101
+ # @param batch_evaluation_request [Array<Hash>] batch evaluation request
102
+ # - :entity_id [String] entity id
103
+ # - :flag_key [String] flag key
104
+ # - :namespace_key [String] override namespace key
105
+ def evaluate_batch(batch_evaluation_request = [])
106
+ for request in batch_evaluation_request do
107
+ request[:namespace_key] = @namespace
108
+ validate_evaluation_request(request)
109
+ end
110
+
111
+ resp = self.class.evaluate_batch(@engine, batch_evaluation_request.to_json)
112
+ JSON.parse(resp)
113
+ end
88
114
 
89
115
  private
90
116
  def validate_evaluation_request(evaluation_request)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flipt_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Flipt Devs
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-18 00:00:00.000000000 Z
11
+ date: 2024-02-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Flipt Client Evaluation SDK
14
14
  email:
@@ -30,6 +30,7 @@ files:
30
30
  - lib/ext/linux_x86_64/libfliptengine.rlib
31
31
  - lib/ext/linux_x86_64/libfliptengine.so
32
32
  - lib/flipt_client.rb
33
+ - lib/flipt_client/models.rb
33
34
  - lib/flipt_client/version.rb
34
35
  homepage: https://www.flipt.io
35
36
  licenses: