Class: MixinBot::Models::ApiEnvelope

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/mixin_bot/models/api_envelope.rb

Overview

Wraps a raw Mixin API JSON object so callers can use both:

  • response[‘user_id’] (envelope shape)

  • response (flattened shape, matching legacy merge! behaviour)

Instance Method Summary collapse

Instance Method Details

#[](key) ⇒ Object



11
12
13
14
15
16
17
18
19
20
# File 'lib/mixin_bot/models/api_envelope.rb', line 11

def [](key)
  k = key.is_a?(Symbol) ? key.to_s : key
  inner = __getobj__
  return inner[k] if inner.key?(k)

  data = inner['data']
  return data[k] if data.is_a?(Hash) && data.key?(k)

  nil
end

#dig(*keys) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/mixin_bot/models/api_envelope.rb', line 22

def dig(*keys)
  return nil if keys.empty?

  k0 = keys[0]
  k0 = k0.to_s if k0.is_a?(Symbol)
  inner = __getobj__

  if inner.key?(k0)
    v = inner[k0]
    return v if keys.size == 1

    return v.dig(*keys[1..]) if v.respond_to?(:dig)
  end

  data = inner['data']
  return nil unless data.is_a?(Hash) && data.key?(k0)

  v = data[k0]
  return v if keys.size == 1

  v.respond_to?(:dig) ? v.dig(*keys[1..]) : nil
end

#key?(key) ⇒ Boolean Also known as: include?, has_key?

Returns:

  • (Boolean)


45
46
47
48
49
# File 'lib/mixin_bot/models/api_envelope.rb', line 45

def key?(key)
  k = key.is_a?(Symbol) ? key.to_s : key
  inner = __getobj__
  inner.key?(k) || (inner['data'].is_a?(Hash) && inner['data'].key?(k))
end

#to_hObject



62
63
64
# File 'lib/mixin_bot/models/api_envelope.rb', line 62

def to_h
  __getobj__
end

#with_indifferent_accessObject



54
55
56
57
58
59
60
# File 'lib/mixin_bot/models/api_envelope.rb', line 54

def with_indifferent_access
  inner = __getobj__
  base = inner.dup
  d = base['data']
  merged = d.is_a?(Hash) ? base.merge(d) : base
  merged.with_indifferent_access
end