release: started

This commit is contained in:
rkiel
2017-09-19 21:18:37 -04:00
parent 8f3489d1ff
commit a1cc5f7cd5
5 changed files with 131 additions and 0 deletions

10
bin/release Executable file
View File

@@ -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

29
lib/release/base.rb Normal file
View File

@@ -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

34
lib/release/commander.rb Normal file
View File

@@ -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

30
lib/release/help.rb Normal file
View File

@@ -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

28
lib/release/loader.rb Normal file
View File

@@ -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