Class: Unleash::Context

Inherits:
Object
  • Object
show all
Defined in:
lib/unleash/context.rb

Constant Summary collapse

ATTRS =
[:app_name, :environment, :user_id, :session_id, :remote_address, :current_time].freeze

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ Context

Returns a new instance of Context.

Raises:

  • (ArgumentError)


7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/unleash/context.rb', line 7

def initialize(params = {})
  raise ArgumentError, "Unleash::Context must be initialized with a hash." unless params.is_a?(Hash)

  self.app_name    = value_for('appName', params, Unleash&.configuration&.app_name)
  self.environment = value_for('environment', params, Unleash&.configuration&.environment || 'default')
  self.user_id     = value_for('userId', params)&.to_s
  self.session_id  = value_for('sessionId', params)
  self.remote_address = value_for('remoteAddress', params)
  self.current_time = value_for('currentTime', params, Time.now.utc.iso8601.to_s)

  properties = value_for('properties', params)
  self.properties = properties.is_a?(Hash) ? properties.transform_keys(&:to_sym) : {}
end

Instance Method Details

#get_by_name(name) ⇒ Object

returns the value found for the key in the context, or raises a KeyError exception if not found.



31
32
33
34
35
36
37
38
39
# File 'lib/unleash/context.rb', line 31

def get_by_name(name)
  normalized_name = underscore(name).to_sym

  if ATTRS.include? normalized_name
    self.send(normalized_name)
  else
    self.properties.fetch(normalized_name, nil) || self.properties.fetch(name.to_sym)
  end
end

#include?(name) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
44
45
46
# File 'lib/unleash/context.rb', line 41

def include?(name)
  normalized_name = underscore(name)
  return self.instance_variable_defined? "@#{normalized_name}" if ATTRS.include? normalized_name.to_sym

  self.properties.include?(normalized_name.to_sym) || self.properties.include?(name.to_sym)
end

#to_hObject



26
27
28
# File 'lib/unleash/context.rb', line 26

def to_h
  ATTRS.map{ |attr| [attr, self.send(attr)] }.to_h.merge(properties: @properties)
end

#to_sObject



21
22
23
24
# File 'lib/unleash/context.rb', line 21

def to_s
  "<Context: user_id=#{@user_id},session_id=#{@session_id},remote_address=#{@remote_address},properties=#{@properties}" \
    ",app_name=#{@app_name},environment=#{@environment},current_time=#{@current_time}>"
end