<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,16 +1,8 @@
-require 'zlib'
-require 'digest/sha1'
-require 'fileutils'
-require 'httparty'
-
 module Fiveruns
   module Tuneup
     
     class Run
-      include HTTParty
-      base_uri ENV['TUNEUP_COLLECTOR'] || 'https://tuneup-collector.fiveruns.com'
-      format :json
-      
+
       class &lt;&lt; self
         attr_accessor :directory
         attr_accessor :api_key
@@ -25,18 +17,51 @@ module Fiveruns
         }
       end
       
-      def self.files_for(url)
+      def self.slug_of(filename)
+        url_directory, file = filename.split(File::SEPARATOR)[-2, 2]
+        File.join(url_directory, File.basename(file, '.json.gz'))
+      end
+      
+      def self.all(format = :slug)
+        files = Dir[File.join(directory, '*', '*.json.gz')]
+        format == :slug ? files.map { |file| slug_of(file) } : files
+      end
+      
+      def self.all_for(url, format = :slug)
         run_directory = Digest::SHA1.hexdigest(url.to_s)
-        Dir[File.join(directory, run_directory, '*.json.gz')]
+        files = Dir[File.join(directory, run_directory, '*.json.gz')]
+        format == :slug ? files.map { |file| slug_of(file) } : files
       end
       
+      def self.last(format = :slug)
+        all(format).sort_by { |f| File.basename(f) }.last
+      end
+      
+      def self.service_uri
+        @service_uri = URI.parse(ENV['TUNEUP_COLLECTOR'] || 'https://tuneup-collector.fiveruns.com')
+      end
+            
       def self.share(slug)
         if api_key?
           file = Dir[File.join(directory, &quot;%s.json.gz&quot; % slug)].first
           if file
             run = load(File.open(file, 'rb') { |f| f.read })
-            result = post '/runs.json', :body =&gt; {:api_key =&gt; api_key, :run =&gt; run.to_json}
-            result['run_id']
+            http = Net::HTTP.new(service_uri.host, service_uri.port)
+            http.use_ssl = true if service_uri.scheme == 'https'
+            body = &quot;api_key=#{api_key}&amp;run=#{CGI.escape(run.to_json)}&quot;
+            begin
+              resp = http.post('/runs.json', body, &quot;Content-Type&quot; =&gt; 'application/x-www-form-urlencoded')
+              case resp.code.to_i
+              when 201
+                return JSON.load(resp.body)['run_id']
+              else
+                # TODO: return error info
+                return false
+              end
+            rescue Exception =&gt; e
+              # TODO: return error info
+              return false
+            end
           else
             raise ArgumentError, &quot;Invalid run: #{slug}&quot;
           end
@@ -45,13 +70,14 @@ module Fiveruns
         end
       end
       
-      def api_key?
+      def self.api_key?
         @api_key
       end
       
       def self.load(compressed)
         file = JSON.load(Zlib::Inflate.inflate(compressed))
-        new(file['url'], file['data'], file['environment'], Time.at(file['collected_at']))
+        step = Fiveruns::Tuneup::Step.load(file['data'])
+        new(file['url'], step, file['environment'], Time.at(file['collected_at']))
       end
       
       attr_reader :url, :data, :environment, :collected_at
@@ -87,6 +113,7 @@ module Fiveruns
       def to_json
         {
           :id =&gt; slug,
+          :url =&gt; url,
           :environment =&gt; environment,
           :collected_at =&gt; collected_at.to_f,
           :data =&gt; data</diff>
      <filename>lib/fiveruns/tuneup/run.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,8 @@
+require 'zlib'
+require 'digest/sha1'
+require 'fileutils'
+require 'net/https'
+
 $:.unshift(File.dirname(__FILE__))
 
 require 'fiveruns/tuneup/templating'</diff>
      <filename>lib/fiveruns_tuneup_core.rb</filename>
    </modified>
    <modified>
      <diff>@@ -34,8 +34,8 @@ class RunTest &lt; Test::Unit::TestCase
         setup_run.save        
       end
       should &quot;create Run instances&quot; do
-        assert_equal 1, Fiveruns::Tuneup::Run.files_for(@run.url).size
-        Fiveruns::Tuneup::Run.files_for(@run.url).each do |file|
+        assert_equal 1, Fiveruns::Tuneup::Run.all_for(@run.url).size
+        Fiveruns::Tuneup::Run.all_for(@run.url, :filename).each do |file|
           data = File.open(file, 'rb') { |f| f.read }
           assert_kind_of Fiveruns::Tuneup::Run, Fiveruns::Tuneup::Run.load(data)
         end</diff>
      <filename>test/run_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>faac863048ed259225181042efdcb15471de6c11</id>
    </parent>
  </parents>
  <author>
    <name>Bruce Williams</name>
    <email>bruce@codefluency.com</email>
  </author>
  <url>http://github.com/fiveruns/fiveruns_tuneup_core/commit/02006219f229cabde9f5a1485964e9f031de0fb1</url>
  <id>02006219f229cabde9f5a1485964e9f031de0fb1</id>
  <committed-date>2008-10-10T02:00:32-07:00</committed-date>
  <authored-date>2008-10-10T02:00:32-07:00</authored-date>
  <message>First pass at mechanics of posting a run.  Still needs the controller action + a refactor</message>
  <tree>e86834c9a266bc64bfd32550a244b10424ce5fc2</tree>
  <committer>
    <name>Bruce Williams</name>
    <email>bruce@codefluency.com</email>
  </committer>
</commit>
