class Jekyll::Assets::Env

Attributes

asset_config[R]
assets_to_write[RW]
jekyll[R]
manifest[R]

Public Class Methods

new(jekyll = nil) click to toggle source

Calls superclass method
# File lib/jekyll/assets/env.rb, line 39
def initialize(jekyll = nil)
  @asset_config = Config.new(jekyll.config["assets"] ||= {})
  Hook.trigger :env, :before_init do |h|
    instance_eval(&h)
  end

  super()
  @jekyll = jekyll
  @assets_to_write = []
  @manifest = Manifest.new(self, in_dest_dir)
  @jekyll.sprockets = self
  @total_time = 0.000000
  @logger = Logger
  @cache = nil

  setup_sources!
  setup_resolver!
  ignore_caches!
  setup_drops!
  precompile!
  copy_raw!

  Hook.trigger :env, :after_init do |h|
    instance_eval(&h)
  end
end

Public Instance Methods

cache() click to toggle source

– @note this is configurable with :caching -> :type Create a cache, or a null cache (if no caching) for caching. @note this is configurable with :caching -> :enabled @return [Sprockets::Cache] –

# File lib/jekyll/assets/env.rb, line 101
def cache
  @cache ||= begin
    type = asset_config[:caching][:type]
    enbl = asset_config[:caching][:enabled]
    path = in_cache_dir

    out = Sprockets::Cache::MemoryStore.new if enbl && type == "memory"
    out = Sprockets::Cache::FileStore.new(path) if enbl && type == "file"
    out = Sprockets::Cache::NullStore.new unless enbl
    out = Sprockets::Cache.new(out, Logger)
    clear_cache(out)
    out
  end
end
find_asset(v, *a) click to toggle source

Calls superclass method
# File lib/jekyll/assets/env.rb, line 72
def find_asset(v, *a)
  msg = "Searched for, and rendered #{v} in %<time>s"
  out = Logger.with_timed_logging msg do
    super(v, *a)
  end

  # We keep track.
  @total_time += out[:time]
  out[:result]
end
find_asset!(v, *a) click to toggle source

Calls superclass method Sprockets::Environment#find_asset!
# File lib/jekyll/assets/env.rb, line 84
def find_asset!(v, *a)
  msg = "Searched for, and rendered #{v} in %<time>s"
  out = Logger.with_timed_logging msg do
    super(v, *a)
  end

  # We keep track.
  @total_time += out[:time]
  out[:result]
end
remove_old_assets() click to toggle source

# File lib/jekyll/assets/env.rb, line 150
def remove_old_assets
  assets_to_write.each do |v|
    in_dest_dir(find_asset!(v).logical_path).rm_f
  end
end
skip_gzip?() click to toggle source

# File lib/jekyll/assets/env.rb, line 67
def skip_gzip?
  !asset_config[:gzip]
end
to_liquid_payload() click to toggle source

– @note this does not find the asset. Takes all user assets and turns them into a drop. @return [Hash] –

# File lib/jekyll/assets/env.rb, line 121
def to_liquid_payload
  each_file.each_with_object({}) do |k, h|
    skip, path = false, Pathutil.new(strip_paths(k))
    path.descend do |p|
      skip = p.start_with?("_")
      if skip
        break
      end
    end

    next if skip
    h.update({
      path.to_s => Drop.new(path, {
        jekyll: jekyll,
      }),
    })
  end
end
write_all() click to toggle source

# File lib/jekyll/assets/env.rb, line 141
def write_all
  remove_old_assets unless asset_config[:digest]
  manifest.compile(*assets_to_write); @asset_to_write = []
  Hook.trigger(:env, :after_write) { |h| instance_eval(&h) }
  Logger.debug "took #{format(@total_time.round(2).to_s,
    '%.2f')}s"
end

Private Instance Methods

clear_cache(cache) click to toggle source

# File lib/jekyll/assets/env.rb, line 158
def clear_cache(cache)
  if @manifest.new_manifest? && cache && cache.respond_to?(:clear)
    cache.clear
  end
rescue Errno::ENOENT
  nil
end
copy_raw!() click to toggle source

# File lib/jekyll/assets/env.rb, line 175
def copy_raw!
  raw_precompiles.each do |v|
    v[:dst].mkdir_p if v[:dst].extname.empty?
    v[:dst].parent.mkdir_p unless v[:dst].extname.empty?
    v[:src].cp(v[:dst])
  end
end
create_resolver!() click to toggle source

# File lib/jekyll/assets/env.rb, line 205
def create_resolver!
  register_dependency_resolver "jekyll-env" do
    ENV["JEKYLL_ENV"]
  end
end
ignore_caches!() click to toggle source

# File lib/jekyll/assets/env.rb, line 168
def ignore_caches!
  jekyll.config["exclude"] ||= []
  jekyll.config["exclude"].push(asset_config[:caching][:path])
  jekyll.config["exclude"].uniq!
end
precompile!() click to toggle source

# File lib/jekyll/assets/env.rb, line 185
def precompile!
  assets = asset_config[:precompile]
  assets.map do |v|
    v !~ %r!\*! ? @assets_to_write |= [v] : glob_paths(v).each do |sv|
      @assets_to_write |= [sv]
    end
  end

  nil
end
setup_drops!() click to toggle source

# File lib/jekyll/assets/env.rb, line 228
def setup_drops!
  Jekyll::Hooks.register :site, :pre_render do |_, h|
    h["assets"] = to_liquid_payload
  end
end
setup_resolver!() click to toggle source

# File lib/jekyll/assets/env.rb, line 198
def setup_resolver!
  create_resolver!
  depend_on "jekyll-env"
end
setup_sources!() click to toggle source

# File lib/jekyll/assets/env.rb, line 213
def setup_sources!
  source_dir, cwd = Pathutil.new(jekyll.in_source_dir), Pathutil.cwd
  asset_config["sources"].each do |v|
    path = source_dir.join(v).expand_path
    next unless path.in_path?(cwd)
    unless paths.include?(path)
      append_path path
    end
  end

  paths
end