Sha256: a393dbcfa343badae81e08a29608c0d3789371b9ba89f811bdf6eb4c4908c521
Contents?: true
Size: 1.95 KB
Versions: 1
Compression:
Stored size: 1.95 KB
Contents
require 'rubygems' module Baltix::Actor class InvalidActorKindError < StandardError; end class InvalidContextKindForActorError < StandardError; end Gem.load_yaml AUTOMAP = { Spec: "baltix/actor/spec", Link: "baltix/actor/link", Touch: "baltix/actor/touch", Copy: "baltix/actor/copy", } class << self def kinds @kinds ||= AUTOMAP.keys.map(&:to_s).map(&:downcase) end def actors @actors ||= AUTOMAP.keys.map do |const| require(AUTOMAP[const]) [ const.to_s.downcase, const_get(const) ] end.to_h end def scheme @scheme ||= YAML.load(IO.read(File.join(File.dirname(__FILE__), "scheme.erb.yaml"))) end def config @config ||= ObjectSpace.each_object(Baltix::Configuration).first end def procline file scheme.map.with_index do |rule, index| match = rule['match'] if !match || /#{match}$/ =~ file rule['proc'].map do |data| # TODO cache it by match or index context_in = ERB.new(data['context'].to_yaml) c = yield(data['actor'], context_in) c.merge('$' => actors[data['actor']]) end end end.compact end def objectize target target.source.trees do |kind, h| h.map do |dir, files| files.map do |file| procline(file) do |actor, context_in| YAML.load(context_in.result(binding)) end end end end.flatten end def for! task, context actor = actors[task.to_s] || raise(InvalidActorKindError) actor.context_kind == context.class || raise(InvalidContextKindForActorError) actor end def for task, context for!(task, context) rescue InvalidActorKindError end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
baltix-0.1.1 | lib/baltix/actor.rb |