Sha256: 7033248a1349dc6dc500a8a20e5bc71221fd2e8d5b2c5e82775475c0d778bf68
Contents?: true
Size: 1.31 KB
Versions: 3
Compression:
Stored size: 1.31 KB
Contents
# -*- coding: utf-8 -*- # vim:ft=ruby:enc=utf-8 require 'pathname' require 'yaml' # The AlgorithmReader's primary API is to load the rules from a YAML-file # into a Hash. # # Algorithms are searched in the following locations # # 1. ~/.to_pass/algorithms # 2. bundled algorithms of gem # class ToPass::AlgorithmReader attr_reader :load_path def initialize(algorithm) # :nodoc: @algorithm = algorithm @load_path = [] [ '~/.to_pass/algorithms', "#{File.dirname(__FILE__)}/algorithms" ].each do |dir| dir = Pathname.new(dir).expand_path @load_path << dir if dir.exist? end end class << self # load an algorithm with a given identifier def load(algorithm) new(algorithm).load_from_file end # searches for available algorithms def discover new(nil).load_path.collect do |dir| Dir["#{dir}/*.yml"] end.flatten.compact.map do |fn| File.basename(fn).gsub('.yml', '') end end end def load_from_file # :nodoc: fn = load_path.map do |dir| file = Pathname.new("#{dir}/#{@algorithm}.yml") if file.exist? file else next end end.compact.first raise LoadError, "algorithm #{@algorithm} could not be found in #{load_path}" if fn.nil? YAML.load_file(fn.expand_path) end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
to_pass-0.5.2 | lib/to_pass/algorithm_reader.rb |
to_pass-0.5.0 | lib/to_pass/algorithm_reader.rb |
to_pass-0.4.0 | lib/to_pass/algorithm_reader.rb |