<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/screw_unit/array_extension.rb</filename>
    </added>
    <added>
      <filename>lib/screw_unit/string_extension.rb</filename>
    </added>
    <added>
      <filename>spec/screw_unit/array_extension_spec.rb</filename>
    </added>
    <added>
      <filename>spec/screw_unit/asset_location_spec.rb</filename>
    </added>
    <added>
      <filename>spec/screw_unit/file_system_fixtures_for_asset_manager_specs/dir/6.js</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,4 +1,4 @@
-  ScrewUnit.configure do
+ScrewUnit.configure do
   port 8181
   add_js_location &quot;/under_test&quot;, &quot;client/lib&quot;
   add_js_location &quot;/specs&quot;, &quot;client/spec&quot;</diff>
      <filename>.screwrc</filename>
    </modified>
    <modified>
      <diff>@@ -6,6 +6,8 @@ require &quot;#{dir}/screw_unit/server&quot;
 require &quot;#{dir}/screw_unit/resources&quot;
 require &quot;#{dir}/screw_unit/configuration&quot;
 require &quot;#{dir}/screw_unit/asset_manager&quot;
+require &quot;#{dir}/screw_unit/string_extension&quot;
+require &quot;#{dir}/screw_unit/array_extension&quot;
 require &quot;#{dir}/screw_unit/asset_location&quot;
 require &quot;#{dir}/screw_unit/js_file&quot;
 </diff>
      <filename>lib/screw_unit.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,6 +3,9 @@ module ScrewUnit
     attr_reader :virtual_prefix, :physical_prefix
 
     def initialize(virtual_prefix, physical_prefix)
+
+      raise &quot;No directory exists at #{physical_prefix}&quot; unless File.exist?(physical_prefix) &amp;&amp; File.directory?(physical_prefix)
+
       @virtual_prefix, @physical_prefix = virtual_prefix, physical_prefix
     end
 
@@ -21,11 +24,11 @@ module ScrewUnit
     end
 
     def matches_physical_path?(physical_path)
-      physical_path.starts_with?(physical_prefix)
+      physical_path.path_starts_with?(physical_prefix)
     end
 
     def matches_virtual_path?(virtual_path)
-      virtual_path.starts_with?(virtual_prefix)
+      virtual_path.path_starts_with?(virtual_prefix)
     end
 
     def matches_virtual_glob_pattern?(virtual_glob_pattern)
@@ -34,11 +37,11 @@ module ScrewUnit
 
     def is_subsumed_by_virtual_glob_pattern?(pattern)
       glob_pattern_without_wildcards = pattern.gsub(/\/\*.*/, &quot;&quot;)
-      virtual_prefix.starts_with?(glob_pattern_without_wildcards)
+      virtual_prefix.path_starts_with?(glob_pattern_without_wildcards)
     end
 
     def subsumes_virtual_glob_pattern?(pattern)
-      pattern.starts_with?(virtual_prefix)
+      pattern.path_starts_with?(virtual_prefix)
     end
 
     def virtual_glob(virtual_glob_pattern)</diff>
      <filename>lib/screw_unit/asset_location.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,3 @@
-class String
-  def starts_with?(prefix)
-    index(prefix) == 0
-  end
-end
-
 module ScrewUnit
   class AssetManager
     attr_reader :locations, :js_locations</diff>
      <filename>lib/screw_unit/asset_manager.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,6 +6,8 @@ module ScrewUnit
     attr_reader :physical_path, :containing_dir, :asset_manager
     
     def initialize(physical_path, asset_manager)
+      raise &quot;JsFile created with nil physical_path&quot; if physical_path.nil? 
+
       @physical_path, @asset_manager = physical_path, asset_manager
       @containing_dir = File.dirname(physical_path)
     end
@@ -49,7 +51,9 @@ module ScrewUnit
     class GlobalRequireDeclaration
       attr_reader :js_file
       def initialize(global_path, asset_manager)
-        @js_file = JsFile.new(asset_manager.physicalize_path_from_js_load_path(global_path + &quot;.js&quot;), asset_manager)
+        physical_path = asset_manager.physicalize_path_from_js_load_path(global_path + &quot;.js&quot;)
+        raise &quot;No file '#{global_path}.js' found on load path&quot; unless physical_path
+        @js_file = JsFile.new(physical_path, asset_manager)
       end
     end
   end</diff>
      <filename>lib/screw_unit/js_file.rb</filename>
    </modified>
    <modified>
      <diff>@@ -25,6 +25,11 @@ module ScrewUnit
         manager.add_location('/', &quot;#{dir}/file_system_fixtures_for_asset_manager_specs/dir_4&quot;)
         manager.virtualize_path(&quot;#{dir}/file_system_fixtures_for_asset_manager_specs/dir_4/1.css&quot;).should == &quot;/1.css&quot;
       end
+
+      it &quot;is not confused by multiple physical paths with the same partial prefix&quot; do
+        manager.add_location(&quot;/specs/b&quot;, &quot;#{dir}/file_system_fixtures_for_asset_manager_specs/dir&quot;)
+        manager.virtualize_path(&quot;#{dir}/file_system_fixtures_for_asset_manager_specs/dir_1/1.js&quot;).should == &quot;/specs/1/1.js&quot;
+      end
     end
 
     describe &quot;#physicalize_path&quot; do
@@ -38,6 +43,12 @@ module ScrewUnit
         manager.add_location('/', &quot;#{dir}/file_system_fixtures_for_asset_manager_specs/dir_4&quot;)
         manager.physicalize_path('/1.css').should == &quot;#{dir}/file_system_fixtures_for_asset_manager_specs/dir_4/1.css&quot;
       end
+
+      it &quot;is not confused by multiple virtual paths with the same partial prefix&quot; do
+        manager.add_location(&quot;/foo_prime&quot;, &quot;#{dir}/file_system_fixtures_for_asset_manager_specs/dir_1&quot;)
+        manager.add_location(&quot;/foo&quot;, &quot;#{dir}/file_system_fixtures_for_asset_manager_specs/dir_2&quot;)
+        manager.physicalize_path(&quot;/foo_prime/1.js&quot;).should == &quot;#{dir}/file_system_fixtures_for_asset_manager_specs/dir_1/1.js&quot;
+      end
     end
 
     describe &quot;#glob_virtual_paths&quot; do</diff>
      <filename>spec/screw_unit/asset_manager_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>efbf242a6ad31d1f59f5ec52883778157048cc7c</id>
    </parent>
  </parents>
  <author>
    <name>Grockit</name>
    <email>grockit@grok-a.local</email>
  </author>
  <url>http://github.com/nathansobo/screw-unit/commit/784d7162106caaaa0b10481bf31cac705ccc0a81</url>
  <id>784d7162106caaaa0b10481bf31cac705ccc0a81</id>
  <committed-date>2009-09-08T12:02:37-07:00</committed-date>
  <authored-date>2009-09-08T12:02:37-07:00</authored-date>
  <message>Fixed AssetLocation to only consider / separated tokens when determining prefix matches. This avoids locations like 'foo_a' from matching virtual paths ending in 'foo'</message>
  <tree>efb861ee0eedf704e5079da474609bb1afa395de</tree>
  <committer>
    <name>Grockit</name>
    <email>grockit@grok-a.local</email>
  </committer>
</commit>
