Sha256: a9d94e408dba4d9288a8d0968699b7df972fc24de6bdfc1f6ed633ba36ac739c

Contents?: true

Size: 1.37 KB

Versions: 3

Compression:

Stored size: 1.37 KB

Contents

require "action_controller/metal"

module ThemesForRails
  class AssetsController < ActionController::Base
    
    include ThemesForRails::CommonMethods
    include ThemesForRails::UrlHelpers
    
    def stylesheets
      render_asset asset_path_for(params[:asset], 'stylesheets'), mime_type_from(params[:asset])
    end
    
    def javascripts
      render_asset asset_path_for(params[:asset], 'javascripts'), mime_type_from(params[:asset])  
    end
    
    def images
      render_asset asset_path_for(params[:asset], 'images'), mime_type_from(params[:asset])  
    end
    
  private
  
    def asset_path_for(asset_url, asset_prefix)
      File.join(theme_path_for(params[:theme]), asset_prefix, params[:asset])
    end
    
    def extract_filename_and_extension_from(asset)
      extension = File.extname(asset)
      filename = params[:asset].gsub(extension, '')
      return filename, extension[1..-1]
    end
    
    def render_asset(asset, mime_type)
      unless File.exists?(asset)
        render :text => 'not found', :status => 404
      else
        send_file asset, :type => mime_type
      end
    end
  
    def mime_type_from(asset_path)
      extension = extract_filename_and_extension_from(asset_path).last
      if extension == 'css'
        "text/css"
      elsif extension == 'js'
        'text/javascript'
      else
        "image/#{extension}"
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
themes_for_rails-0.4.2 lib/themes_for_rails/assets_controller.rb
themes_for_rails-0.4.1 lib/themes_for_rails/assets_controller.rb
themes_for_rails-0.4.0 lib/themes_for_rails/assets_controller.rb