Class: AtomicAdmin::Interaction::Manager

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/atomic_admin/interaction/manager.rb

Constant Summary collapse

INTERACTIONS =
{
  analytics: AtomicAdmin::Interaction::Analytics,
  jsonform: AtomicAdmin::Interaction::JsonForm,
  resource: AtomicAdmin::Interaction::Resource,
  launch: AtomicAdmin::Interaction::Launch,
  readonly: AtomicAdmin::Interaction::Readonly,
}.freeze

Instance Method Summary collapse

Constructor Details

#initializeManager

Returns a new instance of Manager.



13
14
15
16
# File 'lib/atomic_admin/interaction/manager.rb', line 13

def initialize
  @interactions = {}
  @curr_index = 0
end

Instance Method Details

#[](key) ⇒ Object



38
39
40
# File 'lib/atomic_admin/interaction/manager.rb', line 38

def [](key)
  @interactions[key]
end

#add(key, type:, **kwargs) ⇒ Object



24
25
26
27
28
29
30
31
32
# File 'lib/atomic_admin/interaction/manager.rb', line 24

def add(key, type:, **kwargs)
  interaction_cls = INTERACTIONS[type] || AtomicAdmin::Interaction::Base

  interaction = interaction_cls.new(key:, type:, order: @curr_index, **kwargs)
  @interactions[key] = interaction
  @curr_index += 1

  nil
end

#each(&block) ⇒ Object



18
19
20
21
22
# File 'lib/atomic_admin/interaction/manager.rb', line 18

def each(&block)
  @interactions.each do |key, interaction|
    block.call(key, interaction)
  end
end

#for_type(type) ⇒ Object



47
48
49
# File 'lib/atomic_admin/interaction/manager.rb', line 47

def for_type(type)
  @interactions.values.select { |interaction| interaction.type == type }
end

#get(key) ⇒ Object



34
35
36
# File 'lib/atomic_admin/interaction/manager.rb', line 34

def get(key)
  @interactions[key]
end

#resolve(**kwargs) ⇒ Object



52
53
54
55
56
57
# File 'lib/atomic_admin/interaction/manager.rb', line 52

def resolve(**kwargs)
  sorted = @interactions.sort_by { |key, interaction| interaction.order }
  sorted.map do |key, interaction|
    interaction.resolve(**kwargs)
  end
end

#tap {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:



42
43
44
45
# File 'lib/atomic_admin/interaction/manager.rb', line 42

def tap
  yield self
  self
end