<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -130,6 +130,12 @@ class Result &lt; ActiveRecord::Base
   def find_racers(_event = event)
     matches = Set.new
     
+    #license first if present and source is reliable (USAC)
+    if license.present? &amp;&amp; SANCTIONING_ORGANIZATIONS.include?(&quot;USA Cycling&quot;)
+      matches = matches + Racer.find_all_by_license(license)
+      return matches if matches.size == 1
+    end
+    
     # name
     matches = matches + Racer.find_all_by_name_or_alias(first_name, last_name)
     return matches if matches.size == 1</diff>
      <filename>app/models/result.rb</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>test/fixtures/results/pir_2006_format.xls</filename>
    </modified>
    <modified>
      <diff>@@ -893,4 +893,16 @@ class ResultTest &lt; ActiveSupport::TestCase
     assert_not_nil(Racer.find_by_name(&quot;Phil Anderson&quot;), &quot;Should keep racer that was manually entered&quot;)
     assert_not_nil(Team.find_by_name(&quot;QuickStep&quot;), &quot;Should keep team that is used by racer, even though it was created by a result&quot;)
   end
+  
+  def test_do_not_match_blank_licenses
+    # Give everyone a bogus license #
+    Racer.update_all(&quot;license = id&quot;)
+
+    blank_license_racer = Racer.create!(:name =&gt; 'Rocket, The', :license =&gt; &quot;&quot;)
+
+    race = races(:banana_belt_pro_1_2)
+    event = events(:banana_belt_1)
+    result = race.results.build(:first_name =&gt; 'Ryan', :last_name =&gt; 'Weaver')
+    assert_same_elements([racers(:weaver)], result.find_racers(event).to_a, &quot;blank license shouldn't match anything&quot;)
+  end
 end</diff>
      <filename>test/unit/result_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -34,41 +34,49 @@ class ResultsFileTest &lt; ActiveSupport::TestCase
     spreadsheet_row = book.worksheet(0).row(0)
     results_file = ResultsFile.new(File.new(&quot;#{File.dirname(__FILE__)}/../fixtures/results/pir_2006_format.xls&quot;), SingleDayEvent.new)
     column_indexes = results_file.create_columns(spreadsheet_row)
-    assert_equal({ :place =&gt; 0, :number =&gt; 1, :last_name =&gt; 2, :first_name =&gt; 3, :team_name =&gt; 4, :points =&gt; 5 }, column_indexes, &quot;column_indexes&quot;)
+    assert_equal({ :place =&gt; 0, :number =&gt; 1, :license =&gt; 2, :last_name =&gt; 3, :first_name =&gt; 4, :team_name =&gt; 5, :points =&gt; 6  }, column_indexes, &quot;column_indexes&quot;)
   end
   
   def test_import_excel
-    event = SingleDayEvent.create!(:discipline =&gt; 'Road', :date =&gt; Date.new(2006, 1, 16))
-    results_file = ResultsFile.new(File.new(&quot;#{File.dirname(__FILE__)}/../fixtures/results/pir_2006_format.xls&quot;), event)
-    results_file.import
-    expected_races = get_expected_races
-    assert_equal(expected_races.size, event.races.size, &quot;event races&quot;)
-    expected_races.each_with_index do |expected_race, index|
-      actual_race = event.races[index]
-      assert_not_nil(actual_race, &quot;race #{index}&quot;)
-      assert_not_nil(actual_race.results, &quot;results for category #{expected_race.category}&quot;)
-      assert_equal(expected_race.results.size, actual_race.results.size, &quot;Results&quot;)
-      race_date = actual_race.date
-      actual_race.results.sort.each_with_index do |result, result_index|
-        expected_result = expected_race.results[result_index]
-        assert_equal(expected_result.place, result.place, &quot;place for race #{index} result #{result_index} #{expected_result.first_name} #{expected_result.last_name}&quot;)
-        assert_equal(expected_result.first_name, result.first_name, &quot;first_name for race #{index} result #{result_index}&quot;)
-        assert_equal(expected_result.last_name, result.last_name, &quot;last_name for race #{index} result #{result_index}&quot;)
-        assert_equal(expected_result.team_name, result.team_name, &quot;team name for race #{index} result #{result_index}&quot;)
-        assert_equal(expected_result.points, result.points, &quot;points for race #{index} result #{result_index}&quot;)
-        if result.racer
-          if RaceNumber.rental?(result.number, Discipline[event.discipline])
-            assert(!result.racer.member?(race_date), &quot;Racer should not be a member because he has a rental number&quot;)
-          else
-            assert(result.racer.member?(race_date), &quot;member? for race #{index} result #{result_index} #{result.name} #{result.racer.member_from.strftime('%F')} #{result.racer.member_to.strftime('%F')}&quot;)
-            assert_not_equal(
-              Date.today, 
-              result.racer.member_from, 
-              &quot;#{result.name} membership date should existing date or race date, but never today (#{result.racer.member_from.strftime})&quot;)
-          end
-        end
-      end
-    end
+     event = SingleDayEvent.create!(:discipline =&gt; 'Road', :date =&gt; Date.new(2006, 1, 16))
+     source_path = &quot;#{File.dirname(__FILE__)}/../fixtures/results/pir_2006_format.xls&quot;
+     results_file = ResultsFile.new(File.new(source_path), event)
+     assert_equal(source_path, results_file.source.path, &quot;file path&quot;)
+     results_file.import
+
+     expected_races = get_expected_races
+     assert_equal(expected_races.size, event.races.size, &quot;Expected #{expected_races.size.to_s} event races but was #{event.races.size.to_s}&quot;)
+     expected_races.each_with_index do |expected_race, index|
+       actual_race = event.races[index]
+       assert_not_nil(actual_race, &quot;race #{index}&quot;)
+       assert_not_nil(actual_race.results, &quot;results for category #{expected_race.category}&quot;)
+       assert_equal(expected_race.results.size, actual_race.results.size, &quot;Results&quot;)
+       race_date = actual_race.date
+       actual_race.results.sort.each_with_index do |result, result_index|
+         expected_result = expected_race.results[result_index]
+         assert_equal(expected_result.place, result.place, &quot;place for race #{index} result #{result_index} #{expected_result.first_name} #{expected_result.last_name}&quot;)
+         if result.license &amp;&amp; result.license.empty? #may have found racer by license
+           assert_equal(expected_result.first_name, result.first_name, &quot;first_name for race #{index} result #{result_index}&quot;)
+           assert_equal(expected_result.last_name, result.last_name, &quot;last_name for race #{index} result #{result_index}&quot;)
+         end
+         assert_equal(expected_result.team_name, result.team_name, &quot;team name for race #{index} result #{result_index}&quot;)
+         assert_equal(expected_result.points, result.points, &quot;points for race #{index} result #{result_index}&quot;)
+         if result.racer
+           if RaceNumber.rental?(result.number, Discipline[event.discipline])
+             assert(!result.racer.member?(race_date), &quot;Racer should not be a member because he has a rental number&quot;)
+           else
+             assert(result.racer.member?(race_date), &quot;member? for race #{index} result #{result_index} #{result.name} #{result.racer.member_from.strftime('%F')} #{result.racer.member_to.strftime('%F')}&quot;)
+             assert_not_equal(
+               Date.today, 
+               result.racer.member_from, 
+               &quot;#{result.name} membership date should existing date or race date, but never today (#{result.racer.member_from.strftime})&quot;)
+           end
+           #test result by license (some with name misspelled)
+           racer_by_lic = Racer.find_by_license(result.license) if result.license
+           assert_equal(result.racer, racer_by_lic, &quot;Result should be assigned to #{racer_by_lic.name} by license but was given to #{result.racer.name}&quot;) if racer_by_lic
+         end
+       end
+     end
   end
   
   def test_import_time_trial_racers_with_same_name
@@ -414,8 +422,8 @@ class ResultsFileTest &lt; ActiveSupport::TestCase
     races = []
     
     race = Race.new(:category =&gt; Category.new(:name =&gt; &quot;Senior Men Pro 1/2/3&quot;))
-    race.results &lt;&lt; Result.new(:place =&gt; &quot;1&quot;, :first_name =&gt; &quot;Evan&quot;, :last_name =&gt; &quot;Elken&quot;, :number =&gt;&quot;154&quot;, :team_name =&gt;&quot;Jittery Joe's&quot;, :points =&gt; &quot;23.0&quot;)
-    race.results &lt;&lt; Result.new(:place =&gt; &quot;2&quot;, :first_name =&gt; &quot;Erik&quot;, :last_name =&gt; &quot;Tonkin&quot;, :number =&gt;&quot;102&quot;, :team_name =&gt;&quot;Bike Gallery/Trek/VW&quot;, :points =&gt; &quot;19.0&quot;)
+    race.results &lt;&lt; Result.new(:place =&gt; &quot;1&quot;, :first_name =&gt; &quot;Evan&quot;, :last_name =&gt; &quot;Elken&quot;, :number =&gt;&quot;154&quot;, :license =&gt;&quot;999999999&quot;, :team_name =&gt;&quot;Jittery Joe's&quot;, :points =&gt; &quot;23.0&quot;)
+    race.results &lt;&lt; Result.new(:place =&gt; &quot;2&quot;, :first_name =&gt; &quot;Erik&quot;, :last_name =&gt; &quot;Torkin&quot;, :number =&gt;&quot;102&quot;, :license =&gt;&quot;7123811&quot;, :team_name =&gt;&quot;Bike Gallery/Trek/VW&quot;, :points =&gt; &quot;19.0&quot;)
     race.results &lt;&lt; Result.new(:place =&gt; &quot;3&quot;, :first_name =&gt; &quot;John&quot;, :last_name =&gt; &quot;Browning&quot;, :number =&gt;&quot;159&quot;, :team_name =&gt;&quot;Half Fast Velo&quot;, :points =&gt; &quot;12.0&quot;)
     race.results &lt;&lt; Result.new(:place =&gt; &quot;4&quot;, :first_name =&gt; &quot;Doug&quot;, :last_name =&gt; &quot;Ollerenshaw&quot;, :number =&gt;&quot;132&quot;, :team_name =&gt;&quot;Health Net&quot;, :points =&gt; &quot;8.0&quot;)
     race.results &lt;&lt; Result.new(:place =&gt; &quot;5&quot;, :first_name =&gt; &quot;Dean&quot;, :last_name =&gt; &quot;Tracy&quot;, :number =&gt;&quot;A76&quot;, :team_name =&gt;&quot;Team Rubicon&quot;, :points =&gt; &quot;7.0&quot;)</diff>
      <filename>test/unit/results_file_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>1250523169c1b8c9c59b9f5efa4b115a27952adc</id>
    </parent>
  </parents>
  <author>
    <name>Ryan Rickerts</name>
    <email>ryan@rocketdesigns.net</email>
  </author>
  <url>http://github.com/scottwillson/racing_on_rails/commit/2a4c487b80bbbe150905b041275f96356fce43ce</url>
  <id>2a4c487b80bbbe150905b041275f96356fce43ce</id>
  <committed-date>2009-06-03T16:53:38-07:00</committed-date>
  <authored-date>2009-06-03T16:53:38-07:00</authored-date>
  <message>Trying again to find racers for a result by license first if present. Adding tests to support this time.</message>
  <tree>348a44bcc03a403a353bf7d01bbe35233c859bc9</tree>
  <committer>
    <name>Ryan Rickerts</name>
    <email>ryan@rocketdesigns.net</email>
  </committer>
</commit>
