class Vx::Builder::ScriptBuilderV2::Cache

Public Instance Methods

call(env) click to toggle source
# File lib/vx/builder/script_builder_v2/cache.rb, line 9
def call(env)
  rs = app.call env

  if env.task.cache_read_url && env.task.cache_write_url && enabled?(env)
    env.stage("init").add_task     "cache_fetch", "url" => cache_fetch_urls(env)
    env.stage("init").add_task     "cache_add",   "dir" => cache_directories(env)
    env.stage("teardown").add_task "cache_push",  "url" => cache_push_url(env)
  end

  rs
end

Private Instance Methods

cache_directories(env) click to toggle source
# File lib/vx/builder/script_builder_v2/cache.rb, line 27
def cache_directories(env)
  env.source.cache.directories.compact
end
cache_fetch_urls(env) click to toggle source
# File lib/vx/builder/script_builder_v2/cache.rb, line 35
def cache_fetch_urls(env)
  urls   = []
  branch = env.task.branch
  if branch != 'master'
    urls << url_for(env, branch, 'r')
  end
  urls << url_for(env, 'master', 'r')

  urls
end
cache_push_url(env) click to toggle source
# File lib/vx/builder/script_builder_v2/cache.rb, line 31
def cache_push_url(env)
  url_for(env, env.task.branch, 'w')
end
enabled?(env) click to toggle source
# File lib/vx/builder/script_builder_v2/cache.rb, line 23
def enabled?(env)
  env.source.cache.enabled? && cache_directories(env).any?
end
url_for(env, branch, mode) click to toggle source
# File lib/vx/builder/script_builder_v2/cache.rb, line 46
def url_for(env, branch, mode)
  name = branch

  key =
    if env.cache_key.empty?
      "cache"
    else
      env.cache_key.join("-").downcase.gsub(/[^a-z0-9_\-.]/, '-')
    end

  prefix =
    case mode
    when 'r'
      env.task.cache_read_url
    when 'w'
      env.task.cache_write_url
    end

  "#{prefix}?file_name=#{name}/#{key}.tgz"
end