<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/warning_shot/suite.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,4 +1,5 @@
 .DS_Store
+CORYSTODOS
 log/*
 tmp/*
 gems/cache/*</diff>
      <filename>.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -1,2 +1,3 @@
 ==== Contributors
- * Cory ODaniel (I'm lonely)
\ No newline at end of file
+ * Cory ODaniel (I'm lonely)
+ * Nate Murray
\ No newline at end of file</diff>
      <filename>CONTRIBUTORS</filename>
    </modified>
    <modified>
      <diff>@@ -87,13 +87,19 @@ WarningShot Dependency Resolution Framework
  * Bug reports / feature requests @:
     http://warningshot.lighthouseapp.com/projects/17241-warningshot/overview
  
- * Online Documentation available @: (eventually)
-
+ * Online Documentation available @:
+    http://github.com/coryodaniel/warningshot/wikis
+    
  * RubyForge Project @:
     http://rubyforge.org/projects/warning-shot/
  
  * All modifications should also have applicable rpsecs
     http://rspec.info/
+    
+ * A dummy gem has been created for testing the GemResolver
+    https://rubyforge.org/projects/ws-dummy/
+    http://github.com/coryodaniel/ws-dummy/tree/master
+    gem install ws-dummy
  
  * All code should be documented using YARD
     http://yard.rubyforge.org/</diff>
      <filename>README</filename>
    </modified>
    <modified>
      <diff>@@ -1,148 +1,2 @@
 Additional TODOS are at:
-http://warningshot.lighthouseapp.com
-
-====
-WarningShot should have its own set of config files so it can test its self (for WS Developers)
-
-Gems 
- * Minigems option, prepares gems as minigems
- 
-Binary Resolver
- * Apt, Yum, Ports
- * Random binaries like awk, vi, etc... (previously used `which BINARY`)
- 
-Git, Svn Resolver
-
-ServicesResolver
-  * memcached, mysql, etc...
-
-IpTableResolver
- * Confirms, sets up, and saves Iptables
- 
-Connections Resolver
- * test network connections
- # ifconfig -a =&gt; active interfaces
-
-Hardware Resolver
- * Determines if hardware requirements are met
- 
-Script Resolver
- * A scripting interface... was in old WS that enabled people to do most of this stuff
-    Should it just be left out since its so easy to extend?
-    
-MountResolver / NFSMount Resolver
- * God knows.
-  
-QA Resolvers
-  * Rspec
-  * YSlow
-  * RCoverage
-  * Watir, etc etc
-
-  - :branch: quality
-    :environments:
-      :production:
-        - {attrib: &quot;rspec&quot;, grade: &quot;&gt;98&quot;}
-        - {attrib: &quot;rcov&quot;, grade: &quot;&gt;90&quot;, rollback: &quot;true&quot;}
-
-
-  - :branch: yslow
-    :environments:
-      :production:
-        - {page: &quot;http://example.com/login&quot;, grade: &quot;&gt;90&quot;}
-        - {page: &quot;http://example.com/index&quot;, grade: &quot;&gt;=99&quot;, rollback: &quot;true&quot;}
- 
-Interfaces for Cap, Vertebra, and Vlad
- 
-==== Old SHit.
-# This is old shit from a prototype i did of file/permissions resolver...
-#     http://www.workingwithrails.com/railsplugin/6146-open4-9-3
-#     http://codeforpeople.com/lib/ruby/open4/open4-0.9.3/README
-
-module WarningShot
-  class FileSystemResource
-  
-    def initialize(path_data)
-      @attributes = parse_params(path_data)
-    end
-  
-    def [](key)
-      return @attributes[key]
-    end
-
-    def []=(key,val)
-      return @attributes[key] = val
-    end
-  
-    def chown
-      status = Open4::popen4(&quot;sh&quot;) do |p,i,o,e|
-        command = [&quot;chown&quot;]
-        command.push &quot;-R&quot; if [&quot;chown&quot;,&quot;both&quot;].member? self[:recursive]
-        command.push &quot;#{self[:user]}:#{self[:group]}&quot;
-        command.push self[:target]
-      
-        i.puts command.join(&quot; &quot;)
-        i.close
-      end
-    
-      if status.exitstatus == 0
-        return true
-      else
-        raise Exception, &quot;Could not chown:\n ~ #{@attributes.inspect}&quot;
-      end
-    end
-  
-    def chmod
-      status = Open4::popen4(&quot;sh&quot;) do |p,i,o,e|
-        command = [&quot;chmod&quot;]
-        command.push &quot;-R&quot; if [&quot;chmod&quot;,&quot;both&quot;].member? self[:recursive]
-        command.push self[:mode]
-        command.push self[:target]
-      
-        i.puts command.join(&quot; &quot;)
-        i.close
-      end  
-    
-      if status.exitstatus == 0
-        return true
-      else
-        raise Exception, &quot;Could not chmod:\n ~ #{@attributes.inspect}&quot;
-      end
-    end
-  
-    private
-
-    def parse_params(path_data)
-      attributes = defaults
-  
-      #Make path_data a hash if it was passed as a string
-      path_data = {:target =&gt; path_data} if path_data.is_a? String
-  
-      attributes.merge! path_data.symbolize_keys!
-      orig_group = attributes[:group]
-  
-      #Group defaults to user
-      attributes[:group] = attributes[:user] if orig_group.nil? || orig_group.empty?
-  
-      #Expand source and dest paths
-      #attributes[:source]   = File.expand_path(attributes[:source]) unless attributes[:source].nil?
-      #attributes[:target]  = File.expand_path(attributes[:target])
-  
-      attributes[:recursive].downcase!
-  
-      return attributes
-    end
-
-    def defaults
-      {
-        :target       =&gt; nil,
-        :source        =&gt; nil,
-        :mode       =&gt; &quot;0755&quot;,
-        :user       =&gt; &quot;nobody&quot;,
-        :group      =&gt; &quot;nobody&quot;,
-        :recursive  =&gt; &quot;none&quot;
-      }    
-    end
-  
-  end
-end
\ No newline at end of file
+http://warningshot.lighthouseapp.com
\ No newline at end of file</diff>
      <filename>TODO</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,6 @@
 #! /usr/bin/env ruby
 require 'warningshot'
+require 'warningshot/suite'
 
 # Parse ARGV
 WarningShot::Config.parse_args</diff>
      <filename>bin/warningshot</filename>
    </modified>
    <modified>
      <diff>@@ -69,6 +69,12 @@ BANNER
         WarningShot.parser.on(&quot;-r&quot;,&quot;--resolvers=PATH&quot;, String,&quot;Path to add'l resolvers (':' seperated)&quot;,&quot;Default: #{defaults[:resolvers].join(':')}&quot;) do |config|
           options[:resolvers] = config.split(':')
         end
+        WarningShot.parser.on(&quot;--oload=LIST&quot;, String, &quot;Only load specified resolvers&quot;) do
+          
+        end
+        WarningShot.parser.on(&quot;--pload=LIST&quot;, String, &quot;Load specified resolvers only, setting sequential priority&quot;) do
+          
+        end
         WarningShot.parser.on(&quot;-t&quot;,&quot;--templates=PATH&quot;, String, &quot;Generate template files&quot;, &quot;Default: False&quot;) do |template_path|
           template_path = options[:config_paths].first if template_path.nil? || template_path.empty?
           WarningShot::TemplateGenerator.create(template_path)</diff>
      <filename>lib/warning_shot/config.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,10 +2,11 @@ module WarningShot
   BeforeCallbacks= []
   AfterCallbacks   = []
   
+  # Relative paths from WarningShot.root
   PATHS       = {
     :templates  =&gt; 'templates',
     :images     =&gt; 'images',
-    :resolvers  =&gt; 'lib' / 'warning_shot' / 'resolvers'
+    :resolvers  =&gt; 'lib' / 'resolvers'
   }
   
   ConfigExt = &quot;*.{yml,yaml}&quot;.freeze
@@ -112,6 +113,47 @@ module WarningShot
     end
     alias :run :fire!
     
+    # loads only specified resolvers
+    # 
+    # @param *params [Array[~to_s]]
+    #   list of resolvers to load
+    #
+    # @note
+    # this is equivalent to:
+    #   require 'warningshot'
+    #   require 'warningshot/../resolvers/each_resolver_listed'
+    # 
+    # all add'l resolvers will be loaded still (not sure if this is good or bad)
+    # @see WarningShot.load_addl_resolvers
+    # 
+    def only_load(*params)
+      params.each{ |f| require WarningShot.dir_for(:resolvers) / &quot;#{f}_resolver&quot; }
+    end
+    
+    # loads only specified resolvers
+    # 
+    # @param *params [Array[~to_s]]
+    #   list of resolvers to load
+    #
+    # @note
+    # this is equivalent to:
+    #   require 'warningshot'
+    #   require 'warningshot/../resolvers/each_resolver_listed'
+    #   WarningShot::EachResolverListed.order(sequential_number)
+    # 
+    # all add'l resolvers will be loaded still (not sure if this is good or bad)
+    #
+    # @see WarningShot.load_addl_resolvers
+    #
+    def priority_load(*params)
+      params.each_with_index do |f,idx|
+        _resolver_name = &quot;#{f}_resolver&quot;
+        require WarningShot.dir_for(:resolvers) / _resolver_name
+        klass_name = _resolver_name.downcase.split('_').inject([]){|memo,part| memo &lt;&lt; part.capitalize}.join('')
+        const_get(klass_name).order(idx)
+      end
+    end
+    
     # Changes the working directory to that of the application
     #   Default application is '.'
     def load_app
@@ -126,5 +168,15 @@ module WarningShot
       end
     end
     
+    # returns names of all loaded resolvers in priority order
+    #
+    # @see WarningShot::Resolver.descendents
+    #
+    # @return [Array[String]]
+    #   Name of loaded resolvers
+    #
+    def resolvers
+      WarningShot::Resolver.descendents.sort_by{|d|d.order}.inject([]){|a,klass| a &lt;&lt; klass.name}
+    end
   end
 end
\ No newline at end of file</diff>
      <filename>lib/warning_shot/warning_shot.rb</filename>
    </modified>
    <modified>
      <diff>@@ -10,7 +10,4 @@ require 'rbconfig'
 Dir.glob(File.join(File.dirname(__FILE__), &quot;core_ext&quot;, &quot;**&quot;, &quot;*.rb&quot;)).each {|f| require f}
 
 # Load WarningShot
-Dir.glob(File.dirname(__FILE__) / &quot;warning_shot&quot; / &quot;**&quot; / &quot;*.rb&quot;).each {|f| require f}
-
-# Load resolvers
-Dir.glob(File.dirname(__FILE__) / &quot;resolvers&quot; / &quot;**&quot; / &quot;*.rb&quot;).each {|f| require f}
\ No newline at end of file
+Dir.glob(File.dirname(__FILE__) / &quot;warning_shot&quot; / &quot;**&quot; / &quot;*.rb&quot;).each {|f| require f}
\ No newline at end of file</diff>
      <filename>lib/warningshot.rb</filename>
    </modified>
    <modified>
      <diff>@@ -25,10 +25,6 @@ describe WarningShot::FileResolver do
   it 'should have resolutions regsitered' do
     WarningShot::FileResolver.resolutions.empty?.should be(false)
   end
-    
-  it 'should treate relative paths as from directory specified by WarningShot::Config[:application]' do
-    pending
-  end
    
   describe 'with healing enabled' do
     describe 'with heal instructions' do</diff>
      <filename>test/spec/unit/resolvers/file_resolver_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>f1efb2170d283b636e7149ccff710427e5dcc80f</id>
    </parent>
  </parents>
  <author>
    <name>Cory ODaniel</name>
    <email>github@coryodaniel.com</email>
  </author>
  <url>http://github.com/coryodaniel/warningshot/commit/86e1fd834c8750dfdfbf90906b514966d80d4818</url>
  <id>86e1fd834c8750dfdfbf90906b514966d80d4818</id>
  <committed-date>2008-11-08T15:04:38-08:00</committed-date>
  <authored-date>2008-11-08T15:04:38-08:00</authored-date>
  <message>Added ruby interface for WS to load only specific resolvers or optionally load them setting the run order sequentially</message>
  <tree>42a39a5c66a3da2650aeba4690db394bf38f77a1</tree>
  <committer>
    <name>Cory ODaniel</name>
    <email>github@coryodaniel.com</email>
  </committer>
</commit>
