Class: Shipeasy::SDK::Eval::Assignment

Inherits:
Object
  • Object
show all
Defined in:
lib/shipeasy/sdk/eval.rb

Overview

The result of universe(name).assign(user) — a unit's standing in a universe (a mutual-exclusion pool, so it lands in at most one experiment). Never raises: an un-enrolled unit still resolves get to the universe defaults (or the caller's fallback). Reading is side-effect free — the single exposure is logged once by assign() when the unit is enrolled.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, group, params) ⇒ Assignment

params is already merged (universeDefaults ⊕ variantOverride) when enrolled; defaults-only (or {}) when not.



236
237
238
239
240
# File 'lib/shipeasy/sdk/eval.rb', line 236

def initialize(name, group, params)
  @name   = name
  @group  = group
  @params = params || {}
end

Instance Attribute Details

#groupObject (readonly)

The assigned variant/group name, or nil when not enrolled.



232
233
234
# File 'lib/shipeasy/sdk/eval.rb', line 232

def group
  @group
end

#nameObject (readonly)

The experiment the unit landed in, or nil when not enrolled.



230
231
232
# File 'lib/shipeasy/sdk/eval.rb', line 230

def name
  @name
end

Instance Method Details

#enrolled?Boolean

True iff the unit is enrolled in an experiment in this universe.

Returns:

  • (Boolean)


243
244
245
# File 'lib/shipeasy/sdk/eval.rb', line 243

def enrolled?
  !@group.nil?
end

#get(field, fallback = nil) ⇒ Object

Read a resolved param: the assigned variant's override, else the universe default, else fallback. Works even when not enrolled (the variant layer is absent, so you get universeDefault ?? fallback). Looks up both string and symbol keys.



251
252
253
254
255
256
257
258
259
260
261
# File 'lib/shipeasy/sdk/eval.rb', line 251

def get(field, fallback = nil)
  if @params.key?(field)
    @params[field]
  elsif field.respond_to?(:to_s) && @params.key?(field.to_s)
    @params[field.to_s]
  elsif field.respond_to?(:to_sym) && @params.key?(field.to_sym)
    @params[field.to_sym]
  else
    fallback
  end
end