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