class BranchableCDNAssets::Config

Attributes

branch[R]
cdn_dir[R]
dir_permissions[R]
file_filter[R]
file_permissions[R]
production_branch[R]
raw_data[R]
rsync_flags[R]

Public Class Methods

new(data, branch=Asgit.current_branch) click to toggle source
# File lib/branchable_cdn_assets/config.rb, line 13
def initialize data, branch=Asgit.current_branch
  @raw_data = normalize_data data
  @branch   = branch

  @production_branch = raw_data.fetch :production_branch, 'master'
  @cdn_dir           = raw_data.fetch :dir,               'cdn'
  @file_filter       = raw_data.fetch :file_filter,       nil
  @dir_permissions   = env_attr(:dir_permissions)      || 755
  @file_permissions  = env_attr(:file_permissions)     || 644
  @rsync_flags       = env_attr(:rsync_flags)          || '-aviz'
  @allow_local       = env_attr(:allow_local)          || false

  if @file_filter && ( !@file_filter.respond_to?(:arity) || @file_filter.arity != 1 )
    raise ArgumentError, "file_filter must be a lambda accepting one argument"
  end
end

Public Instance Methods

env() click to toggle source
# File lib/branchable_cdn_assets/config.rb, line 30
def env
  @env ||= env_for_branch
end
environments() click to toggle source
# File lib/branchable_cdn_assets/config.rb, line 34
def environments
  @environments ||= add_env_path_modifications_to_env_data raw_data.fetch(:environments, {})
end
invalidator() click to toggle source
# File lib/branchable_cdn_assets/config.rb, line 50
def invalidator
  return @_invalidator if @_invalidator

  invalidator_data = env_attr(:invalidator)
  return false unless invalidator_data

  invalidator_class = Invalidator.find(invalidator_data.keys.first)
  if invalidator_class
    @_invalidator = invalidator_class.new invalidator_data.values.first
    return @_invalidator
  else
    raise ArgumentError, "no invalidators registered for key :#{invalidator_data.keys.first}"
  end
end
remotes() click to toggle source
# File lib/branchable_cdn_assets/config.rb, line 38
def remotes
  return @_remotes if @_remotes

  @_remotes = environments[env.to_sym].fetch(:remotes, [default_remote]).map do |r|
    remote = Remote.new
    default_remote.merge( normalize_data(r) ).each do |k, v|
      remote.public_send "#{k}=", v
    end
    remote
  end
end

Private Instance Methods

add_env_path_modifications_to_env_data(environments) click to toggle source
# File lib/branchable_cdn_assets/config.rb, line 82
def add_env_path_modifications_to_env_data environments
  Hash[*environments.map do |env,data|
    data = data.dup
    unless env == :production
      data[:root] = File.join( data[:root], branch, '/' )
      data[:url]  = File.join( data[:url],  branch )
    end

    [env, data]
  end.flatten]
end
default_remote() click to toggle source
# File lib/branchable_cdn_assets/config.rb, line 71
def default_remote
  {
    host: host,
    root: root,
    url:  url,
    dir_permissions:  dir_permissions,
    file_permissions: file_permissions,
    rsync_flags:      rsync_flags
  }
end
env_for_branch() click to toggle source
# File lib/branchable_cdn_assets/config.rb, line 94
def env_for_branch
  if branch == production_branch
    return :production
  elsif raw_data.fetch(:environments, {}).has_key?( branch.to_sym )
    return branch.to_sym
  else
    return raw_data.fetch(:default_env, 'staging').to_sym
  end
end
normalize_data(data) click to toggle source
# File lib/branchable_cdn_assets/config.rb, line 104
def normalize_data data
  if data.respond_to?(:to_hash)
    symbolize_keys data.to_hash
  else
    symbolize_keys read_config_file(data)
  end
end
read_config_file(path) click to toggle source
# File lib/branchable_cdn_assets/config.rb, line 112
def read_config_file path
  if File.exists?(path)
    YAML.load ERB.new(IO.read(path)).result
  else
    raise "config file not found at #{path}"
  end
end
symbolize_keys(hash) click to toggle source
# File lib/branchable_cdn_assets/config.rb, line 120
def symbolize_keys(hash)
  hash.inject({}) do |out, (key, value)|
    k = case key
        when String then key.to_sym
        else key
        end
    v = case value
        when Hash then symbolize_keys(value)
        else value
        end
    out[k] = v
    out
  end
end