Sha256: cd559d25f59d266b55b8a39c49494eccd679a6252f1a2634c717799c19ce3e95

Contents?: true

Size: 1.31 KB

Versions: 3

Compression:

Stored size: 1.31 KB

Contents

# -*- encoding: utf-8 -*-

require 'pathname'
require 'set'
require 'webgen/source'
require 'webgen/path'

module Webgen
  class Source

    # This class is used to read source paths from a directory in the file system.
    class FileSystem

      # The root path from which paths are read.
      attr_reader :root

      # The glob (see Dir.glob for details) that is used to specify which paths under the root path
      # should be returned by #paths.
      attr_reader :glob

      # Create a new file system source for the root path +root+ using the provided +glob+. If
      # +root+ is not an absolute path, the website directory will be prepended.
      def initialize(website, root, glob = '**/*')
        @root = File.absolute_path(root, website.directory)
        @glob = glob
      end

      # Return all paths under the root path which match the glob.
      def paths
        @paths ||= Dir.glob(File.join(@root, @glob), File::FNM_DOTMATCH|File::FNM_CASEFOLD).collect do |f|
          next unless File.exists?(f) # handle invalid links
          temp = Pathname.new(f.sub(/^#{Regexp.escape(@root)}\/?/, '/')).cleanpath.to_s
          temp += '/' if File.directory?(f) && temp[-1] != ?/
          Path.new(temp, 'modified_at' => File.mtime(f)) {|mode| File.open(f, mode)}
        end.compact.to_set
      end

    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
webgen-1.0.0.beta3 lib/webgen/source/file_system.rb
webgen-1.0.0.beta2 lib/webgen/source/file_system.rb
webgen-1.0.0.beta1 lib/webgen/source/file_system.rb