Class: CodeSunset::EventPayload

Inherits:
Object
  • Object
show all
Defined in:
lib/code_sunset/event_payload.rb

Class Method Summary collapse

Class Method Details

.build(feature_key, attrs = {}) ⇒ Object



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)
   = 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, , merged) || user_id,
    org_id: resolve(:org_resolver, org_id, , merged) || org_id,
    request_id: merged[:request_id],
    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, , merged),
    internal_org: coerce_boolean(merged.fetch(:internal_org, resolve(:internal_org_resolver, org_id, , merged))),
    paid_org: coerce_boolean(merged.fetch(:paid_org, resolve(:paid_org_resolver, org_id, , merged)))
  }.compact
end