class Content::Pipeline

Constants

VERSION

Attributes

filters[R]
opts[R]

Public Class Methods

new(filters = nil, opts = nil) click to toggle source
# File lib/content/pipeline.rb, line 9
def initialize(filters = nil, opts = nil)
  if filters.is_a?(Hash) && opts.nil?
    opts = filters
    filters =  nil
  end


  opts = {} if opts.nil?
  filters = Filters::DEFAULT_FILTERS if filters.nil?
  @opts, @filters = opts.freeze, [ filters ].flatten.freeze
end

Public Instance Methods

filter(out, opts = {}) click to toggle source
# File lib/content/pipeline.rb, line 21
def filter(out, opts = {})
  return out if out.nil? || out.empty? || @filters.empty?

  opts = @opts.deep_merge(opts)
  @filters.each_with_index do |f, i|
    fopts = opts.values_at(*to_opt(f)).delete_if(&:nil?). \
      reduce({}, :merge)

    out = f.new(out, fopts).run(@filters[i + 1])
  end

out
end

Private Instance Methods

to_opt(cls) click to toggle source
# File lib/content/pipeline.rb, line 36
def to_opt(cls)
  cls = cls.name.split(/::/).last
  [cls.downcase, underscore_cls(cls) ].uniq.map(
    &:to_sym
  )
end
underscore_cls(cls) click to toggle source
# File lib/content/pipeline.rb, line 44
def underscore_cls(cls)
  (cls[0].downcase + cls[1..-1]).gsub(/([A-Z])/) do
    "_" + $1.downcase
  end
end