4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/code_sunset/event_payload.rb', line 4
def build(feature_key, attrs = {})
return unless CodeSunset.enabled?
key = feature_key.to_s.strip
return if key.blank?
return if sampled_out?
merged = merge_context(attrs)
metadata = merged.delete(:metadata).to_h.deep_symbolize_keys
org_id = merged[:org_id]
user_id = merged[:user_id]
{
feature_key: key,
occurred_at: (merged[:occurred_at] || Time.current).utc,
user_id: resolve(:user_resolver, user_id, metadata, merged) || user_id,
org_id: resolve(:org_resolver, org_id, metadata, merged) || org_id,
request_id: merged[:request_id],
metadata: metadata,
source: merged[:source].presence || infer_source(merged),
request_path: merged[:request_path],
controller: merged[:controller],
action: merged[:action],
job_class: merged[:job_class],
app_env: merged[:app_env].presence || CodeSunset.configuration.environment,
app_version: merged[:app_version].presence || CodeSunset.configuration.app_version,
plan: merged[:plan].presence || resolve(:plan_resolver, org_id, metadata, merged),
internal_org: coerce_boolean(merged.fetch(:internal_org, resolve(:internal_org_resolver, org_id, metadata, merged))),
paid_org: coerce_boolean(merged.fetch(:paid_org, resolve(:paid_org_resolver, org_id, metadata, merged)))
}.compact
end
|