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