i was looking for some way out to implement factory method on ruby code. where i have a VersionControl::ServiceFactory which will take different implementation as factory method. ie. VersionControl::ServiceFactory::subversion, VersionControl::ServiceFactory::git and so on.
though all these “subversion, git, perforce” methods are not predefined, these will be added while new implemention is added. my skeleton (abstract) implementation was in VersionControl::Service, so whatever implemention (svn, git, perforce, other) comes ahead it will implement method from VersionControl::Service method. since ruby doesn’t support class abstraction so this was the only way i got in head.
so my skeleton implemention was consist of the following code in summary -
module VersionControl
# log entry class for data object
class LogEntry; end
# local repository information
class Information; end
# abstract service class.
# define service which will be exposed for a
# normal version controlling service.
class Service
# retrieve recent logs from the current directory
# required parameters - *base project path* and other options.
def logs(p_path, p_options = {}); raise "not implemented method" end
# generate diff from mentioned revision number
# or current revision number
# required parameters - *base project path* and other options.
def diff(p_path, p_options = {}); raise "not implemented method" end
# find repository information
def info(p_path, p_options = {}); raise "not implemented method" end
# check out content from version control server
def checkout(p_source, p_path, p_options = {}); raise "not implemented method" end
end
# factory class for supporting different version control implementation
class ServiceFactory; end
end
and the implementation is written in this way -
class ServiceFactory class < < self # add subversion factory method implementation @@subversion_instance = SubversionService.new def subversion return @@subversion_instance end end end
so every implementation also push it’s factory method to “VersionControl::ServiceFactory” class. so this way i have implemented dynamic factory method on ruby.





Recent Comments