yggdrasil-engine 1.0.4-universal-java-21 → 1.1.1-universal-java-21

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: 4eb54c5def76ad6a35805d9581fbff9045fb12144ca674b7fec17db3fe6b03dd
4
- data.tar.gz: e99f9c04adfdc2edb9bb6ba465dd61eea78c586d8319eb78238f02222c07ada1
3
+ metadata.gz: 33c223e91f0e741648311824b937cefe376d26d5311bfeaf7f1572e150292903
4
+ data.tar.gz: ff91d3252e32294cdc10574b7be0b9d769332f57ac51499601e832396b6e1689
5
5
  SHA512:
6
- metadata.gz: a518c53c9c600aa6d0ecd850dcdeb6c9a9748274bb952b5da1db1563a1e4ce7fe9503d69289c3263d7ef65cc1ca9af98148512c8bf55a99ee3e6f576e3057a17
7
- data.tar.gz: a464f197afeec9a8e571d0f2c624735ad8f2211b6306299cabcb90be02284ec2fd0bd41fdc56c263913cdb7416ea663232bc3859c22a3dfc8837f21db5728847
6
+ metadata.gz: e3a0b054ea1f4cb43cff499875dc535476ec15e7e3601dba539efad235125c9ace0e43f3e2412cb68a70faccc5df90f1aae37eba2a02d98ec1dcc6b4332cb7cf
7
+ data.tar.gz: 7eecacfa82747b931f7942950c0eb82dbda7b7a5fd89fce0cd626267d11b2450e10ab88b45986d8988a8c06cd3d8564e38c007e961488914eedc82126aff15da
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,5 +1,6 @@
1
1
  require 'ffi'
2
2
  require 'json'
3
+ require 'logger'
3
4
  require 'custom_strategy'
4
5
 
5
6
  TOGGLE_MISSING_RESPONSE = 'NotFound'.freeze
@@ -58,6 +59,7 @@ class YggdrasilEngine
58
59
  attach_function :free_engine, [:pointer], :void
59
60
 
60
61
  attach_function :take_state, %i[pointer string], :pointer
62
+ attach_function :get_state, [:pointer], :pointer
61
63
  attach_function :check_enabled, %i[pointer string string string], :pointer
62
64
  attach_function :check_variant, %i[pointer string string string], :pointer
63
65
  attach_function :get_metrics, [:pointer], :pointer
@@ -68,6 +70,12 @@ class YggdrasilEngine
68
70
 
69
71
  attach_function :list_known_toggles, [:pointer], :pointer
70
72
 
73
+ class << self
74
+ attr_accessor :logger
75
+ end
76
+
77
+ self.logger = Logger.new($stderr, level: Logger::WARN)
78
+
71
79
  def initialize
72
80
  @engine = YggdrasilEngine.new_engine
73
81
  @custom_strategy_handler = CustomStrategyHandler.new
@@ -82,9 +90,26 @@ class YggdrasilEngine
82
90
  @custom_strategy_handler.update_strategies(toggles)
83
91
  response_ptr = YggdrasilEngine.take_state(@engine, toggles)
84
92
  take_toggles_response = JSON.parse(response_ptr.read_string, symbolize_names: true)
93
+ if take_toggles_response[:status_code] == ERROR_RESPONSE
94
+ self.class.logger.error("Error taking state, flags were not updated: #{take_toggles_response[:error_message]}")
95
+ end
85
96
  YggdrasilEngine.free_response(response_ptr)
86
97
  end
87
98
 
99
+ def get_state
100
+ response_ptr = YggdrasilEngine.get_state(@engine)
101
+ begin
102
+ response_json = response_ptr.read_string
103
+ response = JSON.parse(response_json, symbolize_names: true)
104
+
105
+ raise "Error: #{response[:error_message]}" if response[:status_code] == ERROR_RESPONSE
106
+
107
+ response[:value].to_json
108
+ ensure
109
+ YggdrasilEngine.free_response(response_ptr)
110
+ end
111
+ end
112
+
88
113
  def get_variant(name, context)
89
114
  context_json = (context || {}).to_json
90
115
  custom_strategy_results = @custom_strategy_handler.evaluate_custom_strategies(name, context).to_json
Binary file
Binary file
Binary file
@@ -25,6 +25,27 @@ RSpec.describe YggdrasilEngine do
25
25
  end
26
26
  end
27
27
 
28
+ describe '#getting state' do
29
+ it 'should return JSON string of state value (not wrapped response) and support roundtrip' do
30
+ empty_state = yggdrasil_engine.get_state
31
+
32
+ expect(empty_state).to include('"features":[]')
33
+ expect(empty_state).not_to include('status_code')
34
+ expect(empty_state).not_to include('error_message')
35
+
36
+ test_state = '{"version":1,"features":[{"name":"testFeature","enabled":true,"strategies":[{"name":"default"}]}]}'
37
+ yggdrasil_engine.take_state(test_state)
38
+ retrieved_state = yggdrasil_engine.get_state
39
+
40
+ expect(retrieved_state).to include('testFeature')
41
+ expect(retrieved_state).to include('"version":1')
42
+ expect(retrieved_state).to include('"name":"testFeature"')
43
+ expect(retrieved_state).to include('"name":"default"')
44
+ expect(retrieved_state).not_to include('status_code')
45
+ expect(retrieved_state).not_to include('error_message')
46
+ end
47
+ end
48
+
28
49
  describe '#metrics' do
29
50
  it 'should clear metrics when get_metrics is called' do
30
51
  feature_name = 'Feature.A'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yggdrasil-engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.1.1
5
5
  platform: universal-java-21
6
6
  authors:
7
7
  - Unleash
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2023-06-28 00:00:00.000000000 Z
10
+ date: 2025-12-04 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: ffi
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: 1.16.3
18
+ version: 1.17.2
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: 1.16.3
25
+ version: 1.17.2
26
26
  description: "..."
27
27
  email: liquidwicked64@gmail.com
28
28
  executables: []
@@ -39,14 +39,15 @@ files:
39
39
  - lib/libyggdrasilffi_x86_64.so
40
40
  - lib/yggdrasil_engine.rb
41
41
  - lib/yggdrasilffi_arm64.dll
42
+ - lib/yggdrasilffi_i686.dll
42
43
  - lib/yggdrasilffi_x86_64.dll
43
44
  - spec/custom_strategy_spec.rb
44
45
  - spec/yggdrasil_engine_spec.rb
45
- homepage: http://github.com/username/my_gem
46
+ homepage: https://github.com/Unleash/yggdrasil-bindings
46
47
  licenses:
47
48
  - MIT
48
49
  metadata:
49
- yggdrasil_core_version: 0.17.0
50
+ yggdrasil_core_version: 0.18.2
50
51
  rdoc_options: []
51
52
  require_paths:
52
53
  - lib