diff --git a/lib/feature/commander.rb b/lib/feature/commander.rb index a9b4518..f5442c2 100644 --- a/lib/feature/commander.rb +++ b/lib/feature/commander.rb @@ -1,11 +1,28 @@ +require_relative './loader' + module Feature class Commander + + COMMANDS = [ + :branch, + :commit, + :help, + :end, + :rebase, + :merge, + :start, + :tab, + :trash + ].sort + + DEFAULT = :help + attr_reader :subcommand def initialize (argv) key = (argv[0] ? argv[0].to_sym : :branch) - @subcommand = Commander.create(key,argv) + @subcommand = Feature::Loader.new(COMMANDS,DEFAULT).create(key,argv) end def valid? @@ -20,30 +37,6 @@ module Feature subcommand.execute end - def self.commands - [ - :branch, - :commit, - :help, - :end, - :rebase, - :merge, - :start, - :tab, - :trash - ].sort - end - - def self.create key, argv - key = "help" unless Commander.commands.include? key - require_relative "./#{key}" - klass = Module.const_get "Feature::#{key.capitalize}" - klass.new(argv) - end - - def self.create_all argv - commands.map { |x| create(x,argv) } - end end end diff --git a/lib/feature/help.rb b/lib/feature/help.rb index bbaf03d..3f116a9 100644 --- a/lib/feature/help.rb +++ b/lib/feature/help.rb @@ -1,8 +1,14 @@ require_relative './base' +require_relative './commander' +require_relative './loader' module Feature class Help < Feature::Base + + COMMANDS = Feature::Commander::COMMANDS + DEFAULT = Feature::Commander::DEFAULT + def valid? true end @@ -13,7 +19,8 @@ module Feature def execute puts - Feature::Commander.create_all(argv).each do |cmd| + loader = Feature::Loader.new(COMMANDS,DEFAULT) + loader.create_all(argv).each do |cmd| puts cmd.help end puts diff --git a/lib/feature/loader.rb b/lib/feature/loader.rb new file mode 100644 index 0000000..b556559 --- /dev/null +++ b/lib/feature/loader.rb @@ -0,0 +1,28 @@ +module Feature + + class Loader + attr_reader :commands, :default + + def initialize commands, default + @commands = commands + @default = default + end + + def create key, argv + key = default unless commands.include? key + require_relative "./#{key}" + klass = Module.const_get "Feature::#{key.to_s.capitalize}" + klass.new(argv) + end + + def create_all argv + commands.map { |x| create(x,argv) } + end + + def search pattern + regexp = Regexp.new(pattern) + commands.select { |x| regexp.match(x.to_s) } + end + end + +end diff --git a/lib/feature/tab.rb b/lib/feature/tab.rb index f9a5adf..0034fb8 100644 --- a/lib/feature/tab.rb +++ b/lib/feature/tab.rb @@ -1,8 +1,14 @@ require_relative './base' +require_relative './commander' +require_relative './loader' module Feature class Tab < Feature::Base + + COMMANDS = Feature::Commander::COMMANDS + DEFAULT = Feature::Commander::DEFAULT + def valid? [1,2].include? argv.size end @@ -18,9 +24,8 @@ module Feature pattern = "^#{argv[1]}" end - regexp = Regexp.new(pattern) - - puts Feature::Commander.commands.select { |x| regexp.match(x.to_s) }.join("\n") + loader = Feature::Loader.new(COMMANDS,DEFAULT) + puts loader.search(pattern).join("\n") end end