yggdrasil-engine 1.0.4-arm64-mingw32 → 1.1.1-arm64-mingw32

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: 490ba7949cb81b929e25b6fef152b052e718d20cee289ce86c29a34ea400cddd
4
- data.tar.gz: c2314e2bbc9744707bb6bd7da3c65a2dc4123e54c77b1f73705f347a2558c728
3
+ metadata.gz: 4e29c26386b0aeb5389d467693642f5edfd369143833b5042e1af8142075b60f
4
+ data.tar.gz: 56ff77deeb79b9a5100a7831f68aee1cab6ac21914a664ec7acfe58ccf4bcbc9
5
5
  SHA512:
6
- metadata.gz: 33c7866ad231f1e51437896652e7f97300f5bf328371a2cd3f0d35cb26640e80dee0749108ea6f0882ccbf0a318deb88f06c9d395975a8b918d9ff11929790b5
7
- data.tar.gz: 5904b5b754dd1bfff6c3113de0957a0e50373046986111497f2eab78745a731aaf08ae8989713c1e0994099414988ad6018538fd62599896aae8fb99df26477a
6
+ metadata.gz: 228aa9190c1daeb2a1eebcafe9823fbc22b0e991a05ac661b86823d79ca2b447d6321bd9a0f11ad751a1957c4ecaf7e8f4305e5f850bc1cd751eb6755dd10bbd
7
+ data.tar.gz: c037240b216acde77284a7835cb1861e983747fde39b87a795151d310cdaeca55887a4c9f2dd432e6951376d6650578e68bac1cf598cd1aee5e6f9727592c672
@@ -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
@@ -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,14 +1,14 @@
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: arm64-mingw32
6
6
  authors:
7
7
  - Unleash
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-28 00:00:00.000000000 Z
11
+ date: 2025-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.16.3
19
+ version: 1.17.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.16.3
26
+ version: 1.17.2
27
27
  description: "..."
28
28
  email: liquidwicked64@gmail.com
29
29
  executables: []
@@ -36,11 +36,11 @@ files:
36
36
  - lib/yggdrasilffi_arm64.dll
37
37
  - spec/custom_strategy_spec.rb
38
38
  - spec/yggdrasil_engine_spec.rb
39
- homepage: http://github.com/username/my_gem
39
+ homepage: https://github.com/Unleash/yggdrasil-bindings
40
40
  licenses:
41
41
  - MIT
42
42
  metadata:
43
- yggdrasil_core_version: 0.17.0
43
+ yggdrasil_core_version: 0.18.2
44
44
  post_install_message:
45
45
  rdoc_options: []
46
46
  require_paths: