class RhetButler::Stasis::TransformQueue

Attributes

loader[RW]
mapping[RW]
writer[RW]

Public Class Methods

lookup(type) click to toggle source
# File lib/rhet-butler/stasis/transform-queue.rb, line 23
def lookup(type)
  type.sub!(/;.*/, '')
  type.chomp!
  transformers.fetch(type) do
    transformers.fetch(nil)
  end
end
new() click to toggle source
# File lib/rhet-butler/stasis/transform-queue.rb, line 32
def initialize
  @list = []
  @hash = {}
end
register(type, klass) click to toggle source
# File lib/rhet-butler/stasis/transform-queue.rb, line 19
def register(type, klass)
  transformers[type] = klass
end
transformers() click to toggle source
# File lib/rhet-butler/stasis/transform-queue.rb, line 15
def transformers
  @transformers ||= {}
end

Public Instance Methods

add(document, source) click to toggle source
# File lib/rhet-butler/stasis/transform-queue.rb, line 38
def add(document, source)
  store_to = mapping.storage_for(source)
  link_target = mapping.target_link_for(source)
  add_mapping(document, source, link_target, store_to)
  return link_target
end
add_mapping(document, source_uri, target_uri, target_path) click to toggle source
# File lib/rhet-butler/stasis/transform-queue.rb, line 45
def add_mapping(document, source_uri, target_uri, target_path)
  @hash[source_uri] = target_uri
  @list << TranformationOrder.new(document, source_uri, target_uri, target_path)
end
canonicalize_uri(string) click to toggle source
# File lib/rhet-butler/stasis/transform-queue.rb, line 67
def canonicalize_uri(string)
  uri = Addressable::URI.parse(string).normalize
  uri.fragment = nil
  uri
end
go() click to toggle source
# File lib/rhet-butler/stasis/transform-queue.rb, line 85
def go
  until @list.empty?
    order = @list.pop

    doc = load_document(order)
    transformer = transform_class(doc.type).new
    transformer.queue = self
    transformer.document = doc
    transformer.target_path = order.storage_target
    transformer.process
  end
end
load_document(order) click to toggle source
# File lib/rhet-butler/stasis/transform-queue.rb, line 73
def load_document(order)
  loader.load(canonicalize_uri(order.source_link))
rescue LoadFailed
  require 'pp'
  puts "Problem loading #{order.pretty_inspect}"
  raise
end
target_for(document, link) click to toggle source
# File lib/rhet-butler/stasis/transform-queue.rb, line 54
def target_for(document, link)
  link = Addressable::URI.parse(link)
  case link.scheme
  when 'data'
    link
  else
    link = canonicalize_uri(mapping.absolute_uri(document.source_uri).join(link))
    @hash.fetch(link) do
      add(document, link)
    end
  end
end
transform_class(type) click to toggle source
# File lib/rhet-butler/stasis/transform-queue.rb, line 50
def transform_class(type)
  self.class.lookup(type)
end
write_document(target_path, document_body) click to toggle source
# File lib/rhet-butler/stasis/transform-queue.rb, line 81
def write_document(target_path, document_body)
  writer.write(target_path, document_body)
end