Sha256: b30ad45ec8317397f4f7748cc9c69dc655ccac5bafd6b379e8ae0f81bc25bdac
Contents?: true
Size: 1.87 KB
Versions: 4
Compression:
Stored size: 1.87 KB
Contents
require 'active_support/inflector' require 'tsort' require 'pp' module Sym 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 require 'sym/app/commands/base_command' require 'sym/app/commands/bash_completion' require 'sym/app/commands/encrypt' require 'sym/app/commands/decrypt' require 'sym/app/commands/generate_key' require 'sym/app/commands/keychain_add_key' require 'sym/app/commands/open_editor' require 'sym/app/commands/password_protect_key' require 'sym/app/commands/print_key' require 'sym/app/commands/show_examples' require 'sym/app/commands/show_help' require 'sym/app/commands/show_version'
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
sym-3.0.2 | lib/sym/app/commands.rb |
sym-3.0.1 | lib/sym/app/commands.rb |
sym-3.0.0 | lib/sym/app/commands.rb |
sym-2.10.0 | lib/sym/app/commands.rb |