Class: YggdrasilEngine
- Inherits:
-
Object
- Object
- YggdrasilEngine
- Extended by:
- FFI::Library
- Defined in:
- lib/yggdrasil_engine.rb
Class Attribute Summary collapse
-
.logger ⇒ Object
Returns the value of attribute logger.
Class Method Summary collapse
Instance Method Summary collapse
- #count_toggle(toggle_name, enabled) ⇒ Object
- #count_variant(toggle_name, variant_name) ⇒ Object
- #enabled?(toggle_name, context) ⇒ Boolean
- #get_metrics ⇒ Object
- #get_state ⇒ Object
- #get_variant(name, context) ⇒ Object
-
#initialize ⇒ YggdrasilEngine
constructor
A new instance of YggdrasilEngine.
- #list_known_toggles ⇒ Object
- #register_custom_strategies(strategies) ⇒ Object
- #take_state(toggles) ⇒ Object
Constructor Details
#initialize ⇒ YggdrasilEngine
Returns a new instance of YggdrasilEngine.
79 80 81 82 83 |
# File 'lib/yggdrasil_engine.rb', line 79 def initialize @engine = YggdrasilEngine.new_engine @custom_strategy_handler = CustomStrategyHandler.new ObjectSpace.define_finalizer(self, self.class.finalize(@engine)) end |
Class Attribute Details
.logger ⇒ Object
Returns the value of attribute logger.
74 75 76 |
# File 'lib/yggdrasil_engine.rb', line 74 def logger @logger end |
Class Method Details
.finalize(engine) ⇒ Object
85 86 87 |
# File 'lib/yggdrasil_engine.rb', line 85 def self.finalize(engine) proc { YggdrasilEngine.free_engine(engine) } end |
Instance Method Details
#count_toggle(toggle_name, enabled) ⇒ Object
143 144 145 146 |
# File 'lib/yggdrasil_engine.rb', line 143 def count_toggle(toggle_name, enabled) response_ptr = YggdrasilEngine.count_toggle(@engine, toggle_name, enabled) YggdrasilEngine.free_response(response_ptr) end |
#count_variant(toggle_name, variant_name) ⇒ Object
148 149 150 151 |
# File 'lib/yggdrasil_engine.rb', line 148 def count_variant(toggle_name, variant_name) response_ptr = YggdrasilEngine.count_variant(@engine, toggle_name, variant_name) YggdrasilEngine.free_response(response_ptr) end |
#enabled?(toggle_name, context) ⇒ Boolean
128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/yggdrasil_engine.rb', line 128 def enabled?(toggle_name, context) context_json = (context || {}).to_json custom_strategy_results = @custom_strategy_handler.evaluate_custom_strategies(toggle_name, context).to_json response_ptr = YggdrasilEngine.check_enabled(@engine, toggle_name, context_json, custom_strategy_results) response_json = response_ptr.read_string YggdrasilEngine.free_response(response_ptr) response = JSON.parse(response_json, symbolize_names: true) raise "Error: #{response[:error_message]}" if response[:status_code] == ERROR_RESPONSE return nil if response[:status_code] == TOGGLE_MISSING_RESPONSE return response[:value] == true end |
#get_metrics ⇒ Object
153 154 155 156 157 158 |
# File 'lib/yggdrasil_engine.rb', line 153 def get_metrics metrics_ptr = YggdrasilEngine.get_metrics(@engine) metrics = JSON.parse(metrics_ptr.read_string, symbolize_names: true) YggdrasilEngine.free_response(metrics_ptr) metrics[:value] end |
#get_state ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/yggdrasil_engine.rb', line 99 def get_state response_ptr = YggdrasilEngine.get_state(@engine) begin response_json = response_ptr.read_string response = JSON.parse(response_json, symbolize_names: true) raise "Error: #{response[:error_message]}" if response[:status_code] == ERROR_RESPONSE response[:value].to_json ensure YggdrasilEngine.free_response(response_ptr) end end |
#get_variant(name, context) ⇒ Object
113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/yggdrasil_engine.rb', line 113 def get_variant(name, context) context_json = (context || {}).to_json custom_strategy_results = @custom_strategy_handler.evaluate_custom_strategies(name, context).to_json variant_def_json_ptr = YggdrasilEngine.check_variant(@engine, name, context_json, custom_strategy_results) variant_def_json = variant_def_json_ptr.read_string YggdrasilEngine.free_response(variant_def_json_ptr) variant_response = JSON.parse(variant_def_json, symbolize_names: true) return nil if variant_response[:status_code] == TOGGLE_MISSING_RESPONSE variant = variant_response[:value] return to_variant(variant) if variant_response[:status_code] == OK_RESPONSE end |
#list_known_toggles ⇒ Object
160 161 162 163 164 165 |
# File 'lib/yggdrasil_engine.rb', line 160 def list_known_toggles response_ptr = YggdrasilEngine.list_known_toggles(@engine) response_json = response_ptr.read_string YggdrasilEngine.free_response(response_ptr) JSON.parse(response_json, symbolize_names: true) end |
#register_custom_strategies(strategies) ⇒ Object
167 168 169 |
# File 'lib/yggdrasil_engine.rb', line 167 def register_custom_strategies(strategies) @custom_strategy_handler.register_custom_strategies(strategies) end |
#take_state(toggles) ⇒ Object
89 90 91 92 93 94 95 96 97 |
# File 'lib/yggdrasil_engine.rb', line 89 def take_state(toggles) @custom_strategy_handler.update_strategies(toggles) response_ptr = YggdrasilEngine.take_state(@engine, toggles) take_toggles_response = JSON.parse(response_ptr.read_string, symbolize_names: true) if take_toggles_response[:status_code] == ERROR_RESPONSE self.class.logger.error("Error taking state, flags were not updated: #{take_toggles_response[:error_message]}") end YggdrasilEngine.free_response(response_ptr) end |