module RSpecSystem
  # Factory class for NodeSet.
  class NodeSet
    # Returns a NodeSet object.
    #
    # @return [RSpecSystem::NodeSet::Base] returns an object based on the Base
    #   abstract class.
    # @api private
    def self.create
      provider = RSpec.configuration.rs_provider
      custom_prefabs = RSpec.configuration.rs_custom_prefabs
      setname = RSpec.configuration.rs_set || RSpec.configuration.rs_config['default_set']
      options = {:destroy => RSpec.configuration.rs_destroy}
      config = RSpec.configuration.rs_config['sets'][setname]

      begin
        require "rspec-system/node_set/#{provider.downcase}"
      rescue LoadError => e
        raise "Unsupported provider #{provider}: #{e}"
      end
      class_name = provider.split("_").map {|v| v.capitalize }.join
      const_get(class_name).new(setname, config, custom_prefabs, options)
    end
  end
end