class CatHerder::Assets::Asset

Attributes

logical_path[R]
partial[R]
partial?[R]
source_path[R]

Public Class Methods

new(logical_path, source_path) click to toggle source
# File lib/cat_herder/assets/asset.rb, line 9
def initialize(logical_path, source_path)
  @logical_path = logical_path
  @source_path = source_path
  @partial = File.basename(source_path).start_with?("_")
  @metadata = Assets.cache.read([self, "metadata"]) || {}
end

Public Instance Methods

asset_path() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 74
def asset_path
  raise AssetNotPublic, self if partial?
  compile
  File.join("/", public_subpath)
end
cache_key() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 16
def cache_key
  source_path.delete_prefix(Rails.root.to_s)
end
compile() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 60
def compile
  write if !written? || stale?
end
dependencies() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 28
def dependencies
  @metadata[:dependencies]&.map { |logical_path| Assets[logical_path] } || EMPTY_ARRAY
end
dependency_digests() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 32
def dependency_digests
  @metadata[:dependency_digests] || EMPTY_ARRAY
end
digest() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 24
def digest
  @metadata[:digest]
end
digest_class() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 20
def digest_class
  ActiveSupport::Digest.hash_digest_class
end
mtime() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 36
def mtime
  @metadata[:mtime] || Float::NAN
end
public_file() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 52
def public_file
  Rails.public_path.join(public_subpath)
end
public_subpath() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 48
def public_subpath
  File.join(Assets.public_subpath, logical_path, "#{digest}#{File.extname(logical_path)}")
end
read() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 86
def read; raise NotImplementedError; end
render() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 80
def render
  compile
  read
end
source_mtime() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 40
def source_mtime
  Current.mtime(source_path)
end
stale?() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 44
def stale?
  mtime != source_mtime || dependency_digests != dependencies.map(&:digest) || dependencies.any?(&:stale?)
end
write() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 85
def write; raise NotImplementedError; end
write_metadata(digest:, dependencies: nil) click to toggle source
# File lib/cat_herder/assets/asset.rb, line 64
def write_metadata(digest:, dependencies: nil)
  @metadata = {
    mtime: source_mtime,
    digest: digest,
    dependencies: dependencies&.map(&:logical_path),
    dependency_digests: dependencies&.map(&:digest),
  }
  Assets.cache.write([self, "metadata"], @metadata)
end
written?() click to toggle source
# File lib/cat_herder/assets/asset.rb, line 56
def written?
  Current.mtime(public_file.to_s) > 0
end