module Phaedra::Initializers

Constants

DEFAULT_PRIORITY
NotAvailable
PRIORITY_MAP
Registration
Uncallable

Public Class Methods

prioritized_initializers() click to toggle source
# File lib/phaedra/initializers_module.rb, line 61
def self.prioritized_initializers
  # sort initializers according to priority and load order
  grouped_initializers = @registry.group_by(&:priority)
  grouped_initializers.keys.sort.reverse.map do |priority|
    grouped_initializers[priority]
  end.flatten
end
priority_value(priority) click to toggle source

Ensure the priority is a Fixnum

# File lib/phaedra/initializers_module.rb, line 29
def self.priority_value(priority)
  return priority if priority.is_a?(Integer)

  PRIORITY_MAP[priority] || DEFAULT_PRIORITY
end
register(origin, priority: DEFAULT_PRIORITY, &block) click to toggle source
# File lib/phaedra/initializers_module.rb, line 35
def self.register(origin, priority: DEFAULT_PRIORITY, &block)
  raise Uncallable, "Initializers must respond to :call" unless block.respond_to? :call

  @registry << Registration.new(
    origin: origin,
    priority: priority_value(priority),
    block: block
  )

  block
end
remove(origin) click to toggle source
# File lib/phaedra/initializers_module.rb, line 47
def self.remove(origin)
  @registry.delete_if { |item| item.origin == origin }
end
run(force: false) click to toggle source
# File lib/phaedra/initializers_module.rb, line 51
def self.run(force: false)
  if !@initializers_ran || force
    prioritized_initializers.each do |initializer|
      initializer.block.call
    end
  end

  @initializers_ran = true
end