Sha256: 1f1952bbeee49990b744430b4ebface27c4f2dea6c6ab112ab53cf4dc78a9ac5
Contents?: true
Size: 1.09 KB
Versions: 45
Compression:
Stored size: 1.09 KB
Contents
require 'singleton' module BibTeX class Filter include Singleton class << self # Hook called by Ruby if Filter is subclassed def inherited(base) base.class_eval { include Singleton } subclasses << base end # Returns a list of all current Filters def subclasses @subclasses ||= [] end end def apply(value) value end alias convert apply alias << apply end module Filters LOAD_PATH = [File.expand_path('..', __FILE__), 'filters'].join('/').freeze Dir.glob("#{LOAD_PATH}/*.rb").each do |filter| require filter end def self.resolve!(filter) resolve(filter) || raise(ArgumentError, "Failed to load filter #{filter.inspect}") end def self.resolve(filter) case when filter.respond_to?(:apply) filter when filter.respond_to?(:to_s) klass = Filter.subclasses.detect do |c| c.name == filter.to_s || c.name.split(/::/)[-1] =~ /^#{filter}$/i end klass && klass.instance else nil end end end end
Version data entries
45 entries across 45 versions & 2 rubygems