Class: Fino::Library
Defined Under Namespace
Modules: AbTestingAnalysisSupport, FeatureTogglesSupport
Constant Summary
AbTestingAnalysisSupport::AdapterDoesNotSupportAbTestingAnalysis, AbTestingAnalysisSupport::SettingNotAbTested
Instance Method Summary
collapse
#analyse, #convert, #convert!, #reset_analysis!
#disable, #disabled?, #enable, #enabled?
Constructor Details
#initialize(configuration) ⇒ Library
Returns a new instance of Library.
9
10
11
|
# File 'lib/fino/library.rb', line 9
def initialize(configuration)
@configuration = configuration
end
|
Instance Method Details
#add_override(setting_name, at: nil, **overrides) ⇒ Object
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/fino/library.rb', line 40
def add_override(setting_name, at: nil, **overrides)
setting_definition = build_setting_definition(setting_name, at: at)
current_setting = pipeline.read(setting_definition)
deserialized_overrides = overrides.transform_values { |v| setting_definition.deserialize(v) }
merged_overrides = current_setting.overrides.merge(deserialized_overrides)
variants = current_setting.experiment&.variants || []
pipeline.write(
setting_definition,
current_setting.global_value,
merged_overrides,
variants
)
true
end
|
#persisted_keys ⇒ Object
108
109
110
|
# File 'lib/fino/library.rb', line 108
def persisted_keys
adapter.read_persisted_setting_keys
end
|
#set(**data) ⇒ Object
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/fino/library.rb', line 59
def set(**data)
at = data.delete(:at)
raw_overrides = data.delete(:overrides) || {}
raw_variants = data.delete(:variants) || {}
setting_name, raw_value = data.first
setting_definition = build_setting_definition(setting_name, at: at)
value = setting_definition.deserialize(raw_value)
overrides = raw_overrides.transform_values { |v| setting_definition.deserialize(v) }
experiment = Fino::AbTesting::Experiment.new(setting_definition)
raw_variants.map do |percentage, value|
experiment << Fino::AbTesting::Variant.new(
percentage: percentage,
value: setting_definition.deserialize(value)
)
end
pipeline.write(
setting_definition,
value,
overrides,
experiment.variants
)
true
end
|
#setting(setting_name, at: nil) ⇒ Object
21
22
23
|
# File 'lib/fino/library.rb', line 21
def setting(setting_name, at: nil)
pipeline.read(build_setting_definition(setting_name, at: at))
end
|
#settings(*setting_names, at: Fino::EMPTINESS) ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/fino/library.rb', line 25
def settings(*setting_names, at: Fino::EMPTINESS)
setting_definitions =
if setting_names.empty? && at.equal?(Fino::EMPTINESS)
configuration.registry.setting_definitions
elsif at.equal?(Fino::EMPTINESS)
setting_names.map { |name| build_setting_definition(name) }
elsif setting_names.empty?
configuration.registry.setting_definitions(at: at)
else
setting_names.map { |name| build_setting_definition(name, at: at) }
end
pipeline.read_multi(setting_definitions)
end
|
#slice(*settings) ⇒ Object
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/fino/library.rb', line 89
def slice(*settings)
setting_definitions = settings.each_with_object([]) do |symbol_or_hash, memo|
case symbol_or_hash
when Symbol
memo << build_setting_definition(symbol_or_hash)
when Hash
symbol_or_hash.each do |section_name, setting_names|
Array(setting_names).each do |setting_name|
memo << build_setting_definition(setting_name, at: section_name)
end
end
else
raise ArgumentError, "Settings to preload should be either symbols or hashes"
end
end
pipeline.read_multi(setting_definitions)
end
|
#value(setting_name, at: nil, **context) ⇒ Object
13
14
15
|
# File 'lib/fino/library.rb', line 13
def value(setting_name, at: nil, **context)
setting(setting_name, at: at).value(**context)
end
|
#values(*setting_names, at: nil, **context) ⇒ Object
17
18
19
|
# File 'lib/fino/library.rb', line 17
def values(*setting_names, at: nil, **context)
settings(*setting_names, at: at).map { |s| s.value(**context) }
end
|