Sha256: b3e0188203f1b1076d06173a75372b948edf75c4ec6ae802f819c87a4e5b6aff

Contents?: true

Size: 1.25 KB

Versions: 10

Compression:

Stored size: 1.25 KB

Contents

module Roadie
  # Asset provider that looks for files on your local filesystem.
  #
  # It will be locked to a specific path and it will not access files above
  # that directory.
  class FilesystemProvider
    # Raised when FilesystemProvider is asked to access a file that lies above
    # the base path.
    class InsecurePathError < Error; end

    attr_reader :path

    def initialize(path = Dir.pwd)
      @path = path
    end

    # @return [Stylesheet, nil]
    def find_stylesheet(name)
      file_path = build_file_path(name)
      if File.exist? file_path
        Stylesheet.new file_path, File.read(file_path)
      end
    end

    # @raise InsecurePathError
    # @return [Stylesheet]
    def find_stylesheet!(name)
      file_path = build_file_path(name)
      if File.exist? file_path
        Stylesheet.new file_path, File.read(file_path)
      else
        basename = File.basename file_path
        raise CssNotFound.new(basename, %{#{file_path} does not exist. (Original name was "#{name}")}, self)
      end
    end

    def to_s() inspect end
    def inspect() "#<#{self.class} #@path>" end

    private
    def build_file_path(name)
      raise InsecurePathError, name if name.include?("..")
      File.join(@path, name[/^([^?]+)/])
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
roadie-3.5.1 lib/roadie/filesystem_provider.rb
roadie-3.5.0 lib/roadie/filesystem_provider.rb
roadie-3.4.0 lib/roadie/filesystem_provider.rb
roadie-3.3.0 lib/roadie/filesystem_provider.rb
roadie-3.2.2 lib/roadie/filesystem_provider.rb
roadie-3.2.1 lib/roadie/filesystem_provider.rb
roadie-3.2.0 lib/roadie/filesystem_provider.rb
roadie-3.1.1 lib/roadie/filesystem_provider.rb
roadie-3.1.0 lib/roadie/filesystem_provider.rb
roadie-3.1.0.rc1 lib/roadie/filesystem_provider.rb