<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/velo/activity.rb</filename>
    </added>
    <added>
      <filename>lib/velo/device.rb</filename>
    </added>
    <added>
      <filename>lib/velo/lap.rb</filename>
    </added>
    <added>
      <filename>lib/velo/trackpoint.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -3,118 +3,93 @@ require &quot;time&quot;
 require &quot;rubygems&quot;
   require &quot;nokogiri&quot;
 
+require &quot;velo/activity&quot;
+require &quot;velo/device&quot;
+require &quot;velo/lap&quot;
+require &quot;velo/trackpoint&quot;
 
-class Activity &lt; Struct.new(:id, :sport, :creator, :laps)
 
-  def self.from(activity)
-    a = new
+module Velo
 
-    a.id = activity.css(&quot;Id&quot;).text
-    a.sport = activity[&quot;Sport&quot;]
-    a.creator = Creator.from activity.css(&quot;Creator&quot;)
+  class Activity
+    def self.from_tcx(activity)
+      a = new
 
-    activity.css(&quot;Lap&quot;).each {|lap|
-      a.laps &lt;&lt; Lap.from(lap)
-    }
+      a.id = activity.css(&quot;Id&quot;).text
+      a.sport = activity[&quot;Sport&quot;]
+      a.device = Device.from_tcx activity.css(&quot;Creator&quot;)
 
-    a
-  end
-
-  def initialize()
-    super
-    self.laps = []
-  end
-
-  def inspect()
-    s = &quot;#&lt;Activity: &quot;
+      activity.css(&quot;Lap&quot;).each {|lap|
+        a.laps &lt;&lt; Lap.from_tcx(lap)
+      }
 
-    each_pair {|k, v| s &lt;&lt; &quot;#{k}: #{v} &quot; unless k == :laps }
-
-    s &lt;&lt; &quot;(#{laps.size} laps)&gt;&quot;
+      a
+    end
   end
-end
 
-class Creator &lt; Struct.new(:name, :unit_id, :product_id, :version)
+  class Device
+    def self.from_tcx(device)
+      c = new
 
-  def self.from(creator)
-    c = new
+      c.name = device.css(&quot;Name&quot;).text
+      c.unit_id = device.css(&quot;UnitId&quot;).text
+      c.product_id = device.css(&quot;ProductID&quot;).text
 
-    c.name = creator.css(&quot;Name&quot;).text
-    c.unit_id = creator.css(&quot;UnitId&quot;).text
-    c.product_id = creator.css(&quot;ProductID&quot;).text
+      c.version = [device.css(&quot;Version VersionMajor&quot;).text.to_i,
+                   device.css(&quot;Version VersionMinor&quot;).text.to_i,
+                   device.css(&quot;Version BuildMajor&quot;).text.to_i,
+                   device.css(&quot;Version BuildMinor&quot;).text.to_i]
 
-    c.version = [creator.css(&quot;Version VersionMajor&quot;).text.to_i,
-                 creator.css(&quot;Version VersionMinor&quot;).text.to_i,
-                 creator.css(&quot;Version BuildMajor&quot;).text.to_i,
-                 creator.css(&quot;Version BuildMinor&quot;).text.to_i]
-
-    c
+      c
+    end
   end
-end
 
-class Lap &lt; Struct.new(:start_time, :trigger, :duration, :distance,
-                       :speed_max, :calories, :hr_average, :hr_max,
-                       :intensity, :cadence_average, :watts_average,
-                       :trackpoints)
+  class Lap
+    def self.from_tcx(lap)
+      l = new
 
-  def self.from(lap)
-    l = new
+      l.start_time = Time.parse lap[&quot;StartTime&quot;]
+      l.trigger = lap.css(&quot;TriggerMethod&quot;).text
+      l.intensity = lap.css(&quot;Intensity&quot;).text
+      l.duration = lap.css(&quot;TotalTimeSeconds&quot;).text.to_f
+      l.distance = lap.css(&quot;DistanceMeters&quot;).text.to_f
+      l.calories = lap.css(&quot;Calories&quot;).text.to_f
+      l.speed_max = lap.css(&quot;MaximumSpeed&quot;).text.to_f
+      l.hr_average = lap.css(&quot;AverageHeartRateBpm&quot;).text.to_i
+      l.hr_max = lap.css(&quot;MaximumHeartRateBpm&quot;).text.to_i
 
-    l.start_time = Time.parse lap[&quot;StartTime&quot;]
-    l.trigger = lap.css(&quot;Trigger&quot;).text
-    l.intensity = lap.css(&quot;Intensity&quot;).text
-    l.duration = lap.css(&quot;TotalTimeSeconds&quot;).text.to_f
-    l.distance = lap.css(&quot;DistanceMeters&quot;).text.to_f
-    l.calories = lap.css(&quot;Calories&quot;).text.to_f
-    l.speed_max = lap.css(&quot;MaximumSpeed&quot;).text.to_f
-    l.hr_average = lap.css(&quot;AverageHeartRateBpm&quot;).text.to_i
-    l.hr_max = lap.css(&quot;MaximumHeartRateBpm&quot;).text.to_i
+      # O.M.G.
+      l.cadence_average = lap.children.each {|c| break c.text if c.name == &quot;Cadence&quot; }
 
-    # O.M.G.
-    l.cadence_average = lap.children.each {|c| break c.text if c.name == &quot;Cadence&quot; }
+      l.watts_average = lap.css(&quot;Extensions&quot;).children.first.children.text.to_i
 
-    l.watts_average = lap.css(&quot;Extensions&quot;).children.first.children.text.to_i
+      lap.css(&quot;Track Trackpoint&quot;).each {|point|
+        l.trackpoints &lt;&lt; TrackPoint.from_tcx(point)
+      }
 
-    lap.css(&quot;Track Trackpoint&quot;).each {|point|
-      l.trackpoints &lt;&lt; TrackPoint.from(point)
-    }
-
-    l
+      l
+    end
   end
 
-  def initialize()
-    super
-    self.trackpoints = []
-  end
+  class TrackPoint
+    def self.from_tcx(trackpoint)
+      t = new
 
-  def inspect()
-    s = &quot;#&lt;Lap: &quot;
+      t.time = Time.parse trackpoint.css(&quot;Time&quot;).text
+      t.position = [trackpoint.css(&quot;Position LatitudeDegrees&quot;).text,
+                    trackpoint.css(&quot;Position LongitudeDegrees&quot;).text]
+      t.altitude = trackpoint.css(&quot;AltitudeMeters&quot;).text.to_f
+      t.distance = trackpoint.css(&quot;DistanceMeters&quot;).text.to_f
+      t.hr        = trackpoint.css(&quot;HeartRateBpm Value&quot;).text.to_i
+      t.cadence      = trackpoint.css(&quot;Cadence&quot;).text.to_i
+      t.sensor = trackpoint.css(&quot;SensorState&quot;).text
 
-    each_pair {|k, v| s &lt;&lt; &quot;#{k}: #{v} &quot; unless k == :trackpoints }
+      # Ugh. Namespacing problem, and the workaround is painful.
+      t.watts = trackpoint.css(&quot;Extensions&quot;).children.first.children.text.to_i
 
-    s &lt;&lt; &quot;(#{trackpoints.size} trackpoints)&gt;&quot;
+      t
+    end
   end
 
 end
 
-class TrackPoint &lt; Struct.new(:time, :position, :altitude, :distance,
-                              :hr, :cadence, :sensor, :watts)
-
-  def self.from(trackpoint)
-    t = new
-
-    t.time = Time.parse trackpoint.css(&quot;Time&quot;).text
-    t.position = [trackpoint.css(&quot;Position LatitudeDegrees&quot;).text,
-                  trackpoint.css(&quot;Position LongitudeDegrees&quot;).text]
-    t.altitude = trackpoint.css(&quot;AltitudeMeters&quot;).text.to_f
-    t.distance = trackpoint.css(&quot;DistanceMeters&quot;).text.to_f
-    t.hr        = trackpoint.css(&quot;HeartRateBpm Value&quot;).text.to_i
-    t.cadence      = trackpoint.css(&quot;Cadence&quot;).text.to_i
-    t.sensor = trackpoint.css(&quot;SensorState&quot;).text
-
-    # Ugh. Namespacing problem, and the workaround is painful.
-    t.watts = trackpoint.css(&quot;Extensions&quot;).children.first.children.text.to_i
-
-    t
-  end
-end</diff>
      <filename>lib/velo/tcx.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,7 @@
-files = Dir.glob &quot;/Users/ruerue/Documents/705\ Backups/2009-10-15/History/*.tcx&quot;
-load &quot;lib/velo/tcx.rb&quot;
-$xml = Nokogiri::XML.parse(File.open files[-4])
-$a = Activity.from $xml.css(&quot;Activity&quot;).first
+require &quot;lib/velo/tcx&quot;
 
+# IRB dies on ARGF trying to start it here..
+$xml = File.open(ARGV.first) {|f| Nokogiri::XML.parse f }
+$a = Velo::Activity.from_tcx $xml.css(&quot;Activity&quot;).first
+
+p $a, $a.laps.first, $a.laps.first.trackpoints.first</diff>
      <filename>test.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>README</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>1bc05581245964027604cd9dd221867aa1f192c6</id>
    </parent>
  </parents>
  <author>
    <name>Eero Saynatkari</name>
    <email>projects@kittensoft.org</email>
  </author>
  <url>http://github.com/rue/velo/commit/057ea34a32c2155ea52c875a2e1a79e870736f79</url>
  <id>057ea34a32c2155ea52c875a2e1a79e870736f79</id>
  <committed-date>2009-10-15T19:25:08-07:00</committed-date>
  <authored-date>2009-10-15T19:25:08-07:00</authored-date>
  <message>Restructured a bit.</message>
  <tree>eecb8d51e38aedf95c53b00e4be362667c6b7eaf</tree>
  <committer>
    <name>Eero Saynatkari</name>
    <email>projects@kittensoft.org</email>
  </committer>
</commit>
