Skip to content

Instantly share code, notes, and snippets.

@davidjbeveridge
Forked from mrgenixus/strategy.rb
Created January 31, 2012 01:36
Show Gist options
  • Save davidjbeveridge/1708113 to your computer and use it in GitHub Desktop.
Save davidjbeveridge/1708113 to your computer and use it in GitHub Desktop.
Strategy Pattern
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