Sha256: 3ef5844837c9c681e8be7143c2bdb3fb5ea89f7b2769ddcbb482b7ce086740da

Contents?: true

Size: 1.41 KB

Versions: 2

Compression:

Stored size: 1.41 KB

Contents

require 'fattr'
require File.expand_path("publisher", File.dirname(__FILE__))

class Germinate::Publisher
  Fattr :identifier
  Fattr :registered_publishers => {}

  fattr :name
  fattr :librarian
  fattr :options

  fattr(:pipeline) 
  fattr(:log) { Germinate.logger }
  fattr(:selector) 

  @registered_publishers = {}

  def self.make(name, identifier, librarian, options)
    @registered_publishers.fetch(identifier).new(name, librarian, options)
  rescue IndexError => error
    raise error.exception("Unknown publisher type #{identifier.inspect}")
  end

  def self.register_publisher_type(identifier, klass)
    @registered_publishers[identifier] = klass
  end

  def self.identifier(*args)
    if args.empty?
      @identifier
    else
      id = args.first
      self.identifier = id
      Germinate::Publisher.register_publisher_type(id, self)
    end
  end

  def initialize(name, librarian, options={})
    self.name      = name
    self.librarian = librarian
    self.options   = options
    self.pipeline  = librarian.make_pipeline(options.delete(:pipeline){""})
    self.selector  = options.delete(:selector) {
      options.delete(:select){"$TEXT|_transform"}
    }

    # All options should have been removed by this point
    options.keys.each do |key|
      log.warn "Unknown publisher option '#{key}'"
    end
  end

  def input
    source = librarian[selector, "publish #{name} command"]
    pipeline.call(source)
  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
devver-germinate-1.2.0 lib/germinate/publisher.rb
germinate-1.2.0 lib/germinate/publisher.rb