class Docks::Process

Public Class Methods

process(item) click to toggle source
# File lib/docks/process.rb, line 6
def self.process(item)
  case item
  when Containers::Symbol then item = process_symbol(item)
  when Containers::Pattern then process_pattern(item)
  when Containers::PatternLibrary then process_pattern_library(item)
  end

  item
end
register_pattern_library_processor(hook = :middle, &block) click to toggle source
# File lib/docks/process.rb, line 20
def self.register_pattern_library_processor(hook = :middle, &block)
  @@pattern_library_processors[hook] << block unless @@pattern_library_processors[hook].include?(block)
end
register_pattern_processor(hook = :middle, &block) click to toggle source
# File lib/docks/process.rb, line 16
def self.register_pattern_processor(hook = :middle, &block)
  @@pattern_processors[hook] << block unless @@pattern_processors[hook].include?(block)
end

Private Class Methods

clean() click to toggle source
# File lib/docks/process.rb, line 26
def self.clean
  @@pattern_processors = { early: [], middle: [], late: [] }
  @@pattern_library_processors = { early: [], middle: [], late: [] }
end
process_pattern(pattern) click to toggle source
# File lib/docks/process.rb, line 48
def self.process_pattern(pattern)
  [:early, :middle, :late].each do |hook|
    @@pattern_processors[hook].each { |processor| processor.call(pattern) }
  end
end
process_pattern_library(pattern_library) click to toggle source
# File lib/docks/process.rb, line 54
def self.process_pattern_library(pattern_library)
  [:early, :middle, :late].each do |hook|
    @@pattern_library_processors[hook].each { |processor| processor.call(pattern_library) }
  end
end
process_symbol(symbol) click to toggle source
# File lib/docks/process.rb, line 31
def self.process_symbol(symbol)
  # For when the initial symbol type was overwritten
  if symbol.symbol_type != symbol.class.type
    symbol = Containers.container_for(symbol.symbol_type).new(symbol.to_h)
  end

  # Allow tags to change the symbol's type
  tags = symbol.tags
  tags.each do |tag|
    next unless tag.respond_to?(:process)
    new_symbol = tag.process(symbol)
    symbol = new_symbol if new_symbol.kind_of?(Containers::Symbol)
  end

  symbol
end