Class: ABMeter::Core::AssignmentConfig::Experiment
- Inherits:
-
Object
- Object
- ABMeter::Core::AssignmentConfig::Experiment
- Includes:
- Exposable
- Defined in:
- lib/abmeter/core/assignment_config/experiment.rb
Instance Attribute Summary collapse
-
#audience_variants ⇒ Object
readonly
Returns the value of attribute audience_variants.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#range ⇒ Object
readonly
Returns the value of attribute range.
-
#salt ⇒ Object
readonly
Returns the value of attribute salt.
-
#space_id ⇒ Object
readonly
Returns the value of attribute space_id.
-
#space_salt ⇒ Object
readonly
Returns the value of attribute space_salt.
Class Method Summary collapse
Instance Method Summary collapse
-
#expose_parameter(user, parameter, variant, audience) ⇒ Object
Expose parameter for experiments For experiments: audience is required, variant is optional (nil for control).
-
#initialize(id:, range:, audience_variants:, space_id:, salt:, space_salt:) ⇒ Experiment
constructor
The six keyword args are this value object’s assignment inputs; a params object would only add indirection for a plain data holder.
- #serialize ⇒ Object
Constructor Details
#initialize(id:, range:, audience_variants:, space_id:, salt:, space_salt:) ⇒ Experiment
The six keyword args are this value object’s assignment inputs; a params object would only add indirection for a plain data holder.
13 14 15 16 17 18 19 20 |
# File 'lib/abmeter/core/assignment_config/experiment.rb', line 13 def initialize(id:, range:, audience_variants:, space_id:, salt:, space_salt:) # rubocop:disable Metrics/ParameterLists @id = id @range = range @audience_variants = audience_variants @space_id = space_id @salt = salt @space_salt = space_salt end |
Instance Attribute Details
#audience_variants ⇒ Object (readonly)
Returns the value of attribute audience_variants.
9 10 11 |
# File 'lib/abmeter/core/assignment_config/experiment.rb', line 9 def audience_variants @audience_variants end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
9 10 11 |
# File 'lib/abmeter/core/assignment_config/experiment.rb', line 9 def id @id end |
#range ⇒ Object (readonly)
Returns the value of attribute range.
9 10 11 |
# File 'lib/abmeter/core/assignment_config/experiment.rb', line 9 def range @range end |
#salt ⇒ Object (readonly)
Returns the value of attribute salt.
9 10 11 |
# File 'lib/abmeter/core/assignment_config/experiment.rb', line 9 def salt @salt end |
#space_id ⇒ Object (readonly)
Returns the value of attribute space_id.
9 10 11 |
# File 'lib/abmeter/core/assignment_config/experiment.rb', line 9 def space_id @space_id end |
#space_salt ⇒ Object (readonly)
Returns the value of attribute space_salt.
9 10 11 |
# File 'lib/abmeter/core/assignment_config/experiment.rb', line 9 def space_salt @space_salt end |
Class Method Details
.from_json(json, space_salts) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/abmeter/core/assignment_config/experiment.rb', line 22 def self.from_json(json, space_salts) json.map do |exp| space_salt = space_salts[exp[:space_id]] raise "Space with id #{exp[:space_id]} not found" unless space_salt audience_variants = exp[:audience_variants].map do |av| [Audience.from_json(av[:audience]), av[:variant] ? Variant.from_json(av[:variant]) : nil] end new( id: exp[:id], range: Range.new(exp[:range][0], exp[:range][1]), audience_variants: audience_variants, space_id: exp[:space_id], salt: exp[:salt], space_salt: space_salt ) end end |
Instance Method Details
#expose_parameter(user, parameter, variant, audience) ⇒ Object
Expose parameter for experiments For experiments: audience is required, variant is optional (nil for control)
58 59 60 61 62 |
# File 'lib/abmeter/core/assignment_config/experiment.rb', line 58 def expose_parameter(user, parameter, variant, audience) validate_expose_parameter_args!(user.user_id, parameter, audience) make_exposure(user, parameter, 'Experiment', id, audience, variant) end |
#serialize ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/abmeter/core/assignment_config/experiment.rb', line 42 def serialize { id: id, space_id: space_id, range: [range.begin, range.end], audience_variants: audience_variants.map do |audience_variant| { audience: audience_variant.first.serialize, variant: audience_variant.last&.serialize } end } end |