lib/specinfra/command/base.rb in specinfra-2.0.0.beta32 vs lib/specinfra/command/base.rb in specinfra-2.0.0.beta33

- old
+ new

@@ -1,10 +1,8 @@ require 'shellwords' class Specinfra::Command::Base class << self - @@types = nil - class NotImplementedError < Exception; end def create self end @@ -17,80 +15,7 @@ target.to_s end Shellwords.shellescape(str) end - - def get(meth, *args) - action, resource_type, subaction = breakdown(meth) - method = action - method += "_#{subaction}" if subaction - command_class = create_command_class(resource_type) - if command_class.respond_to?(method) - command_class.send(method, *args) - else - raise NotImplementedError.new("#{method} is not implemented in #{command_class}") - end - end - - def create_command_class(resource_type) - family = os[:family] - version = os[:release] ? "V#{os[:release].to_i}" : nil - - common_class = Specinfra::Command - base_class = common_class.const_get('Base') - os_class = family.nil? ? base_class : common_class.const_get(family.capitalize) - - if family && version - begin - version_class = os_class.const_get(version) - rescue - version_class = os_class.const_get('Base') - end - elsif family.nil? - version_class = os_class - elsif family != 'base' && version.nil? - version_class = os_class.const_get('Base') - end - - begin - command_class = version_class.const_get(resource_type.to_camel_case) - rescue - end - - if command_class.nil? ||( (command_class < Specinfra::Command::Base).nil? && (command_class < Specinfra::Command::Windows::Base).nil? ) - command_class = base_class.const_get(resource_type.to_camel_case) - end - - command_class.create - end - - private - def breakdown(meth) - types = resource_types.map {|t| t.to_snake_case }.join('|') - md = meth.to_s.match(/^([^_]+)_(#{types})_?(.+)?$/) - if md.nil? - message = "Could not break down `#{meth}' to appropriate type and method.\n" - message += "The method name shoud be in the form of `action_type_subaction'." - raise message - end - return md[1], md[2], md[3] - end - - def resource_types - if @@types.nil? - @@types = [] - Specinfra::Command::Base.subclasses.each do |s| - @@types << s.to_s.split(':')[-1] - end - Specinfra::Command::Windows::Base.subclasses.each do |s| - @@types << s.to_s.split(':')[-1] - end - @@types.uniq! - end - @@types - end end end - - -