-
-
Save davidjbeveridge/1708113 to your computer and use it in GitHub Desktop.
Strategy Pattern
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Router | |
@@routes = {} | |
@name | |
attr_accessor :name | |
def Router.register ( name) | |
@@routes[name] = self | |
name | |
end | |
def Router.factory (klass_name) | |
created_route = @@routes[klass_name] || nil | |
created_route | |
end | |
def Router.list | |
@@routes | |
end | |
def initialize (klass_name=Router) | |
@active_class = Router.factory(klass_name) | |
@active_name = klass_name | |
end | |
def method_missing(sym, *m_args) | |
if @active_class and sym and @active_class.method_defined? sym | |
context = @active_class.new | |
context.name = @active_name | |
if m_args.length > 0 | |
context.send sym,m_args | |
else | |
context.send sym | |
end | |
else | |
"Invalid Command: " + @active_name + "/" + sym.to_s | |
end | |
end | |
def dest_class | |
[ @active_class , @active_name ] | |
end | |
register "Router" | |
end | |
class Crud < Router | |
def initialize | |
end | |
def create | |
@name + " Created" | |
end | |
def read | |
@name + " Read" | |
end | |
def update | |
@name + " Updated" | |
end | |
def delete | |
@name + " Deleted " | |
end | |
register "Crud" | |
end | |
class User < Crud | |
register "User" | |
end | |
class Asset < Crud | |
register "Asset" | |
end | |
class Friend < User | |
register "Friend" | |
end | |
def process (directive) | |
match = "" | |
o_name = "" | |
o_methd = "" | |
me = /(\w+)\/(\w+)/.match(directive.downcase) | |
if me | |
o_name = me[1].sub(/\b\w/) { |first| first.upcase } | |
o_method = me[2] | |
puts Router.new(o_name).send(o_method).to_s | |
else | |
puts "Bad Directive: " + directive.downcase | |
end | |
end | |
[ | |
"User/Create", | |
"User/ReaD", | |
"User/Update", | |
"user/deletE" | |
].each {|arg| process arg} | |
ARGV.each { |arg| process arg} #ruby ./strat.rb asset/create AssEt/read asset/Update asset/DELETE | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment