From a1cc5f7cd5accd97ad7275165a2da06f31558749 Mon Sep 17 00:00:00 2001 From: rkiel Date: Tue, 19 Sep 2017 21:18:37 -0400 Subject: [PATCH] release: started --- bin/release | 10 ++++++++++ lib/release/base.rb | 29 +++++++++++++++++++++++++++++ lib/release/commander.rb | 34 ++++++++++++++++++++++++++++++++++ lib/release/help.rb | 30 ++++++++++++++++++++++++++++++ lib/release/loader.rb | 28 ++++++++++++++++++++++++++++ 5 files changed, 131 insertions(+) create mode 100755 bin/release create mode 100644 lib/release/base.rb create mode 100644 lib/release/commander.rb create mode 100644 lib/release/help.rb create mode 100644 lib/release/loader.rb diff --git a/bin/release b/bin/release new file mode 100755 index 0000000..d2b5d42 --- /dev/null +++ b/bin/release @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby + +require_relative '../lib/release/commander' + +commander = Release::Commander.new(ARGV) +if commander.valid? + commander.execute +else + commander.usage +end diff --git a/lib/release/base.rb b/lib/release/base.rb new file mode 100644 index 0000000..0f01b57 --- /dev/null +++ b/lib/release/base.rb @@ -0,0 +1,29 @@ +require_relative '../shared/branchability' +require_relative '../shared/runnable' + +module Release + + class Base + + include Shared::Branchability + include Shared::Runnable + + attr_reader :argv + + def initialize (argv) + @argv = argv + end + + def help + "TBD" + end + + def usage + puts + puts "USAGE: #{help}" + puts + exit + end + end + +end diff --git a/lib/release/commander.rb b/lib/release/commander.rb new file mode 100644 index 0000000..9c9ed2d --- /dev/null +++ b/lib/release/commander.rb @@ -0,0 +1,34 @@ +require_relative './loader' + +module Release + + class Commander + + COMMANDS = [ + :help, + ].sort + + DEFAULT = :help + + attr_reader :subcommand + + def initialize (argv) + key = (argv[0] ? argv[0].to_sym : :branch) + @subcommand = Release::Loader.new(COMMANDS,DEFAULT).create(key,argv) + end + + def valid? + subcommand.valid? + end + + def usage + subcommand.usage + end + + def execute + subcommand.execute + end + + end + +end diff --git a/lib/release/help.rb b/lib/release/help.rb new file mode 100644 index 0000000..f6c5932 --- /dev/null +++ b/lib/release/help.rb @@ -0,0 +1,30 @@ +require_relative './base' +require_relative './commander' +require_relative './loader' + +module Release + + class Help < Release::Base + + COMMANDS = Release::Commander::COMMANDS + DEFAULT = Release::Commander::DEFAULT + + def valid? + true + end + + def help + "release help" + end + + def execute + puts + loader = Release::Loader.new(COMMANDS,DEFAULT) + loader.create_all(argv).each do |cmd| + puts cmd.help + end + puts + end + end + +end diff --git a/lib/release/loader.rb b/lib/release/loader.rb new file mode 100644 index 0000000..7590764 --- /dev/null +++ b/lib/release/loader.rb @@ -0,0 +1,28 @@ +module Release + + 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 "Release::#{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