Class: Bunto::StaticFile

Inherits:
Object
  • Object
show all
Defined in:
lib/bunto/static_file.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(site, base, dir, name, collection = nil) ⇒ StaticFile

Initialize a new StaticFile.

site - The Site. base - The String path to the <source>. dir - The String path between <source> and the file. name - The String filename of the file. rubocop: disable ParameterLists



23
24
25
26
27
28
29
30
31
# File 'lib/bunto/static_file.rb', line 23

def initialize(site, base, dir, name, collection = nil)
  @site = site
  @base = base
  @dir  = dir
  @name = name
  @collection = collection
  @relative_path = File.join(*[@dir, @name].compact)
  @extname = File.extname(@name)
end

Instance Attribute Details

#extnameObject (readonly)

Returns the value of attribute extname.



3
4
5
# File 'lib/bunto/static_file.rb', line 3

def extname
  @extname
end

#relative_pathObject (readonly)

Returns the value of attribute relative_path.



3
4
5
# File 'lib/bunto/static_file.rb', line 3

def relative_path
  @relative_path
end

Class Method Details

.mtimesObject

The cache of last modification times [path] -> mtime.



7
8
9
# File 'lib/bunto/static_file.rb', line 7

def mtimes
  @mtimes ||= {}
end

.reset_cacheObject



11
12
13
# File 'lib/bunto/static_file.rb', line 11

def reset_cache
  @mtimes = nil
end

Instance Method Details

#defaultsObject

Returns the front matter defaults defined for the file’s URL and/or type as defined in _config.yml.



138
139
140
# File 'lib/bunto/static_file.rb', line 138

def defaults
  @defaults ||= @site.frontmatter_defaults.all url, type
end

#destination(dest) ⇒ Object

Obtain destination path.

dest - The String path to the destination dir.

Returns destination file path.



44
45
46
# File 'lib/bunto/static_file.rb', line 44

def destination(dest)
  @site.in_dest_dir(*[dest, destination_rel_dir, @name].compact)
end

#destination_rel_dirObject



48
49
50
51
52
53
54
# File 'lib/bunto/static_file.rb', line 48

def destination_rel_dir
  if @collection
    File.dirname(url)
  else
    @dir
  end
end

#modified?Boolean

Is source path modified?

Returns true if modified since last write.

Returns:

  • (Boolean)


68
69
70
# File 'lib/bunto/static_file.rb', line 68

def modified?
  self.class.mtimes[path] != mtime
end

#modified_timeObject



56
57
58
# File 'lib/bunto/static_file.rb', line 56

def modified_time
  @modified_time ||= File.stat(path).mtime
end

#mtimeObject

Returns last modification time for this file.



61
62
63
# File 'lib/bunto/static_file.rb', line 61

def mtime
  modified_time.to_i
end

#pathObject

Returns source file path.



35
36
37
# File 'lib/bunto/static_file.rb', line 35

def path
  File.join(*[@base, @dir, @name].compact)
end

#placeholdersObject



106
107
108
109
110
111
112
113
114
115
# File 'lib/bunto/static_file.rb', line 106

def placeholders
  {
    :collection => @collection.label,
    :path       => relative_path[
      @collection.relative_directory.size..relative_path.size],
    :output_ext => "",
    :name       => "",
    :title      => ""
  }
end

#to_liquidObject



98
99
100
101
102
103
104
# File 'lib/bunto/static_file.rb', line 98

def to_liquid
  {
    "extname"       => extname,
    "modified_time" => modified_time,
    "path"          => File.join("", relative_path)
  }
end

#typeObject

Returns the type of the collection if present, nil otherwise.



132
133
134
# File 'lib/bunto/static_file.rb', line 132

def type
  @type ||= @collection.nil? ? nil : @collection.label.to_sym
end

#urlObject

Applies a similar URL-building technique as Bunto::Document that takes the collection’s URL template into account. The default URL template can be overriden in the collection’s configuration in _config.yml.



120
121
122
123
124
125
126
127
128
129
# File 'lib/bunto/static_file.rb', line 120

def url
  @url ||= if @collection.nil?
             relative_path
           else
             ::Bunto::URL.new({
               :template     => @collection.url_template,
               :placeholders => placeholders
             })
           end.to_s.gsub(%r!/$!, "")
end

#write(dest) ⇒ Object

Write the static file to the destination directory (if modified).

dest - The String path to the destination dir.

Returns false if the file was not modified since last time (no-op).



85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/bunto/static_file.rb', line 85

def write(dest)
  dest_path = destination(dest)

  return false if File.exist?(dest_path) && !modified?
  self.class.mtimes[path] = mtime

  FileUtils.mkdir_p(File.dirname(dest_path))
  FileUtils.rm(dest_path) if File.exist?(dest_path)
  copy_file(dest_path)

  true
end

#write?Boolean

Whether to write the file to the filesystem

Returns true unless the defaults for the destination path from _config.yml contain ‘published: false`.

Returns:

  • (Boolean)


76
77
78
# File 'lib/bunto/static_file.rb', line 76

def write?
  defaults.fetch("published", true)
end