Sha256: 63055ee1ba658999de92dfb14ae07a77ff3f73144ce2d09e29ab2d343bd33715
Contents?: true
Size: 1.4 KB
Versions: 5
Compression:
Stored size: 1.4 KB
Contents
require 'active_support/inflector' require 'tsort' require 'pp' module Shhh module App module Commands class DependencyResolver < Hash include TSort alias tsort_each_node each_key def tsort_each_child(node, &block) fetch(node).each(&block) end end @dependency = DependencyResolver.new @commands = Set.new class << self attr_accessor :commands, :dependency def register(command_class) self.commands << command_class self.dependency[command_class.short_name] ||= [] end def order(command_class, after) self.dependency[command_class.short_name].unshift(after) if after self.dependency[command_class.short_name].flatten! end def dependencies @dependencies ||= self.dependency.tsort @dependencies end # Sort commands based on the #dependencies array, which itself is sorted # based on command dependencies. def sorted_commands @sorted_commands ||= self.commands.to_a.sort_by{|klass| dependencies.index(klass.short_name) } @sorted_commands end def find_command_class(opts) self.sorted_commands.each do |command_class| return command_class if command_class.options_satisfied_by?(opts) end nil end end end end end
Version data entries
5 entries across 5 versions & 1 rubygems
Version | Path |
---|---|
shhh-1.6.5 | lib/shhh/app/commands.rb |
shhh-1.6.4 | lib/shhh/app/commands.rb |
shhh-1.6.3 | lib/shhh/app/commands.rb |
shhh-1.6.2 | lib/shhh/app/commands.rb |
shhh-1.6.1 | lib/shhh/app/commands.rb |