<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>spec/fixtures/app/scripts/users/users-single.js</filename>
    </added>
    <added>
      <filename>spec/fixtures/app/styles/users/users-single.css</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -30,8 +30,8 @@ private ######################################################################
   end
 
   def files
-    support_files(:scripts).select do |filename|
-      File.dirname(filename).split('/').last == controller
+    support_files(:scripts, controller).select do |filename|
+      valid_file?(filename)
     end
   end
 
@@ -43,4 +43,10 @@ private ######################################################################
     Shoebox::Minifiers::Javascript.new(buffer).minify
   end
 
+  def valid_file?(filename)
+    name = File.basename(filename)
+    return false if params[:filename] &amp;&amp; name.split('.').first != params[:filename]
+    true
+  end
+
 end</diff>
      <filename>app/controllers/shoebox/scripts_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -39,15 +39,8 @@ private ######################################################################
   end
 
   def files
-    support_files(:styles).select do |filename|
-      next(false) unless File.dirname(filename).split('/').last == controller
-      name = File.basename(filename)
-
-      case (parts = name.split('.')).length
-        when 1 then raise &quot;Unable to parse filename: #{filename}&quot;
-        when 2 then next(true)
-        else        next(true) if parts[-2] == media.to_s
-      end
+    support_files(:styles, controller).select do |filename|
+      valid_file?(filename)
     end
   end
 
@@ -59,11 +52,26 @@ private ######################################################################
     Shoebox::Minifiers::CSS.new(buffer).minify
   end
 
+  def valid_file?(filename)
+    name = File.basename(filename)
+
+    return false unless File.dirname(filename).split('/').last == controller
+    return false if params[:filename] &amp;&amp; name.split('.').first != params[:filename]
+
+    case (parts = name.split('.')).length
+      when 1 then raise &quot;Unable to parse filename: #{filename}&quot;
+      when 2 then return true
+      else        return false unless parts[-2] == media.to_s
+    end
+
+    true
+  end
+
 private ######################################################################
 
   def load_paths
-    [ File.join(base_path(:styles), 'application'),
-      File.join(base_path(:styles), controller) ]
+    [ File.join(shoebox_base_path(:styles), 'application'),
+      File.join(shoebox_base_path(:styles), controller) ]
   end
 
   def render_less(data)</diff>
      <filename>app/controllers/shoebox/styles_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,8 @@
 ActionController::Routing::Routes.draw do |map|
   map.connect '/shoebox/scripts/:source_controller.js',        :controller =&gt; 'shoebox/scripts'
   map.connect '/shoebox/styles/:source_controller/:media.css', :controller =&gt; 'shoebox/styles'
+
+  # single-file support
+  map.connect '/shoebox/scripts/:source_controller/:filename.js',        :controller =&gt; 'shoebox/scripts'
+  map.connect '/shoebox/styles/:source_controller/:media/:filename.css', :controller =&gt; 'shoebox/styles'
 end</diff>
      <filename>config/routes.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,11 +4,11 @@ module Shoebox::Common
     render :text =&gt; buffer, :content_type =&gt; mime_type
   end
 
-  def support_files(type)
-    Dir[File.join(base_path(type), '**', '*')]
+  def support_files(type, controller)
+    Dir[File.join(shoebox_base_path(type), controller.to_s, '*')]
   end
 
-  def base_path(type)
+  def shoebox_base_path(type)
     File.join(Rails.root, 'app', type.to_s)
   end
 </diff>
      <filename>lib/shoebox/common.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,33 +1,61 @@
 module Shoebox::Helpers
 
+  include Shoebox::Common
+
   def shoebox_scripts
-    shoebox_scripts_tag(:application) +
-    shoebox_scripts_tag(shoebox_controller)
+    shoebox_scripts_tags(:application) +
+    shoebox_scripts_tags(shoebox_controller)
   end
 
   def shoebox_styles(media = :screen)
-    shoebox_styles_tag(:application, media) +
-    shoebox_styles_tag(shoebox_controller, media)
+    shoebox_styles_tags(:application, media) +
+    shoebox_styles_tags(shoebox_controller, media)
+  end
+
+  def shoebox_scripts_tags(controller)
+    if Rails.env.development?
+      support_files(:scripts, controller).map do |full_filename|
+        filename = File.basename(full_filename).split('.').first
+        shoebox_scripts_tag(controller, filename)
+      end.join
+    else
+      shoebox_scripts_tag(controller)
+    end
   end
 
-  def shoebox_scripts_tag(controller)
-    src = shoebox_scripts_uri(controller)
+  def shoebox_scripts_tag(controller, filename=nil)
+    src = shoebox_scripts_uri(controller, filename)
     %{ &lt;script type=&quot;text/javascript&quot; src=&quot;#{src}&quot;&gt;&lt;/script&gt; }
   end
 
-  def shoebox_styles_tag(controller, media)
-    href = shoebox_styles_uri(controller, media)
+  def shoebox_styles_tags(controller, media)
+    if Rails.env.development?
+      support_files(:styles, controller).map do |full_filename|
+        filename = File.basename(full_filename).split('.').first
+        shoebox_styles_tag(controller, media, filename)
+      end.join
+    else
+      shoebox_styles_tag(controller, media)
+    end
+  end
+
+  def shoebox_styles_tag(controller, media, filename=nil)
+    href = shoebox_styles_uri(controller, media, filename)
     %{ &lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;#{media}&quot; href=&quot;#{href}&quot; /&gt; }
   end
 
-  def shoebox_scripts_uri(controller)
-    src  = &quot;/shoebox/scripts/#{controller}.js&quot;
+  def shoebox_scripts_uri(controller, filename=nil)
+    src  = &quot;/shoebox/scripts/#{controller}&quot;
+    src += &quot;/#{filename}&quot; if filename
+    src += &quot;.js&quot;
     src += &quot;?#{Time.now.to_i}&quot; if Rails.env.development?
     src
   end
 
-  def shoebox_styles_uri(controller, media)
-    src  = &quot;/shoebox/styles/#{controller}/#{media}.css&quot;
+  def shoebox_styles_uri(controller, media, filename=nil)
+    src  = &quot;/shoebox/styles/#{controller}/#{media}&quot;
+    src += &quot;/#{filename}&quot; if filename
+    src += &quot;.css&quot;
     src += &quot;?#{Time.now.to_i}&quot; if Rails.env.development?
     src
   end</diff>
      <filename>lib/shoebox/helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -41,6 +41,12 @@ describe Shoebox::ScriptsController do
       @controller.index
     end
 
+    it 'should handle single files' do
+      @controller.stub('params').and_return({ :source_controller =&gt; 'users', :filename =&gt; 'users-single' })
+      @controller.should_receive(:render_buffer).with(&quot;users-single.js\n&quot;)
+      @controller.index
+    end
+
   end
 
 end</diff>
      <filename>spec/controllers/scripts_controller_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -66,6 +66,12 @@ describe Shoebox::StylesController do
       @controller.index
     end
 
+    it 'should handle single files' do
+      @controller.stub('params').and_return({ :source_controller =&gt; 'users', :media =&gt; 'screen', :filename =&gt; 'users-single' })
+      @controller.should_receive(:render_buffer).with(&quot;users-single.css\n&quot;)
+      @controller.index
+    end
+
   end
 
 end</diff>
      <filename>spec/controllers/styles_controller_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>e718ea5c5170761547399586f0bf7f03884f4093</id>
    </parent>
  </parents>
  <author>
    <name>David Dollar</name>
    <email>ddollar@gmail.com</email>
  </author>
  <url>http://github.com/ddollar/shoebox/commit/a142b6e98cb2f83351debdff241fb62916db8154</url>
  <id>a142b6e98cb2f83351debdff241fb62916db8154</id>
  <committed-date>2009-07-30T12:51:49-07:00</committed-date>
  <authored-date>2009-07-30T12:51:49-07:00</authored-date>
  <message>break out to single files in development</message>
  <tree>0d1271014a2cda0655e1984e537e901dbc327567</tree>
  <committer>
    <name>David Dollar</name>
    <email>ddollar@gmail.com</email>
  </committer>
</commit>
