class Rox::Core::StateSender
Public Class Methods
md5_signature(serialized_feature_flags, serialized_custom_properties, device_properties, dev_mode_secret)
click to toggle source
# File lib/rox/core/network/state_sender.rb, line 76 def self.md5_signature(serialized_feature_flags, serialized_custom_properties, device_properties, dev_mode_secret) values = state_payload(serialized_feature_flags, serialized_custom_properties, device_properties, dev_mode_secret).values hash = Digest::MD5.hexdigest(values.join('|')) hash.upcase end
new(sdk_settings, device_properties, flag_repository, custom_property_repository)
click to toggle source
# File lib/rox/core/network/state_sender.rb, line 15 def initialize(sdk_settings, device_properties, flag_repository, custom_property_repository) @sdk_settings = sdk_settings @device_properties = device_properties @flag_repository = flag_repository @custom_property_repository = custom_property_repository @request = Request.new @debouncer = Debouncer.new(1, proc { send }) end
seralize_flag_repository(flag_repository)
click to toggle source
# File lib/rox/core/network/state_sender.rb, line 95 def self.seralize_flag_repository(flag_repository) flags = [] flag_repository.all_flags.sort_by(&:name).each do |f| flags << { name: f.name, defaultValue: f.default_value, options: f.options } end flags end
seralize_flag_repository_with_values(flag_repository)
click to toggle source
# File lib/rox/core/network/state_sender.rb, line 107 def self.seralize_flag_repository_with_values(flag_repository) flags = [] flag_repository.all_flags.sort_by(&:name).each do |f| flags << { name: f.name, enabled: f.enabled?, defaultValue: f.default_value, options: f.options } end flags end
serialize_custom_properties_repository(custom_property_repository)
click to toggle source
# File lib/rox/core/network/state_sender.rb, line 120 def self.serialize_custom_properties_repository(custom_property_repository) properties = [] custom_property_repository.all_custom_properties.sort_by(&:name).each do |p| properties << { name: p.name, type: p.type.type, externalType: p.type.external_type } end properties end
serialize_custom_properties_repository_with_values(custom_property_repository)
click to toggle source
# File lib/rox/core/network/state_sender.rb, line 132 def self.serialize_custom_properties_repository_with_values(custom_property_repository) properties = [] custom_property_repository.all_custom_properties.sort_by(&:name).each do |p| properties << { name: p.name, value: p.value(nil), type: p.type.type, externalType: p.type.external_type } end properties end
state_payload(seralized_flag_repository, serialized_custom_property_repository, device_properties, dev_mode_secret)
click to toggle source
# File lib/rox/core/network/state_sender.rb, line 84 def self.state_payload(seralized_flag_repository, serialized_custom_property_repository, device_properties, dev_mode_secret) values = {} values[PropertyType::APP_KEY.name] = device_properties.all_properties[PropertyType::APP_KEY.name] values[PropertyType::PLATFORM.name] = device_properties.all_properties[PropertyType::PLATFORM.name] values.merge!(device_properties.all_properties) values.merge!({ feature_flags: seralized_flag_repository }) values.merge!({ custom_properties: serialized_custom_property_repository }) values['devModeSecret'] = dev_mode_secret values end
Public Instance Methods
delayed_send()
click to toggle source
# File lib/rox/core/network/state_sender.rb, line 24 def delayed_send @debouncer.call end
dump_state()
click to toggle source
# File lib/rox/core/network/state_sender.rb, line 57 def dump_state serialized_feature_flags = StateSender.seralize_flag_repository_with_values(@flag_repository) serialized_custom_properties = StateSender.serialize_custom_properties_repository_with_values(@custom_property_repository) StateSender.state_payload(serialized_feature_flags, serialized_custom_properties, @device_properties, @sdk_settings.dev_mode_secret) end
get_state_from_CDN(rollout_key, md5_signature)
click to toggle source
# File lib/rox/core/network/state_sender.rb, line 64 def get_state_from_CDN(rollout_key, md5_signature) url_for_state_cdn = RequestData.new("#{Rox::Core::Environment.state_cdn_path}/#{rollout_key}/#{md5_signature}", {}) @request.send_get(url_for_state_cdn) end
send()
click to toggle source
# File lib/rox/core/network/state_sender.rb, line 28 def send rollout_key = @device_properties.rollout_key serialized_feature_flags = StateSender.seralize_flag_repository(@flag_repository) serialized_custom_properties = StateSender.serialize_custom_properties_repository(@custom_property_repository) state_payload = StateSender.state_payload(serialized_feature_flags, serialized_custom_properties, @device_properties, @sdk_settings.dev_mode_secret) md5_signature = StateSender.md5_signature(serialized_feature_flags, serialized_custom_properties, @device_properties, @sdk_settings.dev_mode_secret) unless @device_properties.rox_options.self_managed? response = get_state_from_CDN(rollout_key, md5_signature) if response.success? Rox::Core::Logging.logger.debug('Successfully fetched state from CDN') return else Rox::Core::Logging.logger.debug('Failed to fetch state from CDN. Sending state to API...') end end response = send_state_to_API(rollout_key, md5_signature, state_payload) message = if response.success? 'Successfully sent state to API.' else 'Failed to send state to API.' end Rox::Core::Logging.logger.debug(message) end
send_state_to_API(rollout_key, md5_signature, state_payload)
click to toggle source
# File lib/rox/core/network/state_sender.rb, line 70 def send_state_to_API(rollout_key, md5_signature, state_payload) @request.send_post( "#{Rox::Core::Environment.state_api_path(@device_properties.rox_options.self_managed_options&.server_url)}/#{rollout_key}/#{md5_signature}", state_payload ) end