Sha256: 720f467016071deb1a30b0b818441ac972d7852c9d52b82684584755043ddadb

Contents?: true

Size: 1.88 KB

Versions: 1

Compression:

Stored size: 1.88 KB

Contents

require 'yaml'
require 'pathname'
require 'erb'

module HSS
    Version = '0.2.0'
    Default_Config = '~/.hss.yml'
    Default_Library = Pathname.new(__FILE__).realpath.split()[0].to_s + '/helpers'

    class << self
        def new(*args)
            HSS::Handler.new(*args)
        end
    end

    class Handler
        attr_reader :patterns, :config

        def initialize(config_path = nil, helper_path = nil)
            load_config(config_path)
            load_parser(helper_path)
        end

        def load_config(config_path = nil)
            begin
                @config = YAML.load open(File.expand_path(config_path || HSS::Default_Config)).read
                @patterns = @config.delete('patterns')
            rescue
                raise "Failed to load config: #{config_path}"
            end
        end

        def load_parser(helper_path = nil)
            Dir::glob((helper_path || HSS::Default_Library) + '/*').each do |helper|
                begin
                    require_relative helper
                rescue LoadError
                    raise LoadError, "Failed to load helper: #{helper}"
                end
            end
            @parser = HSS::Parser.new(@config)
        end

        def handle(input)
            @patterns.each do |pattern|
                next unless @parser.check(input, pattern['short'])
                return @parser.parse(pattern['long'])
            end
            raise "Couldn't find a matching host for: #{input}"
        end

        def woof()
            puts "bark"
        end
    end

    class Parser
        def initialize(config)
            @config = config
        end

        def check(input, short_form)
            return false unless input.match short_form
            @match_data = binding
            true
        end
        def parse(long_form)
            eval '"' +  long_form + '"', @match_data
        end
    end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hss-0.2.0 lib/hss.rb