class Pushapp::Config

Attributes

file[R]
remotes[R]

Public Class Methods

new(configuration_file = nil) click to toggle source
# File lib/pushapp/config.rb, line 26
def initialize(configuration_file = nil)
  @file = configuration_file || Pushapp::DEFAULT_CONFIG_LOCATION
  @remotes = []
  @group_options = {}
  @group_name = nil
end
parse(configuration_file = nil) click to toggle source
# File lib/pushapp/config.rb, line 10
def self.parse(configuration_file = nil)
  require 'pushapp/tasks/base'
  require 'pushapp/tasks/script'
  require 'pushapp/tasks/rake'
  require 'pushapp/tasks/upstart'
  require 'pushapp/tasks/nginx_export'
  require 'pushapp/tasks/foreman_export'
  require 'pushapp/tasks/unicorn_signal'
  require 'pushapp/tasks/whenever_update'

  config = self.new(configuration_file)
  config.instance_eval(File.read(config.file))

  config
end
register_task(name, klass) click to toggle source
# File lib/pushapp/config.rb, line 90
def self.register_task name, klass
  @@known_tasks[name.to_s] = klass
end

Public Instance Methods

group(group_name, options = {}, &block) click to toggle source
# File lib/pushapp/config.rb, line 49
def group(group_name, options = {}, &block)
  @group_name    = group_name.to_s
  @group_options = options
  instance_eval &block if block_given?
  @group_name = nil
  @group_options = {}
end
known_task(name) click to toggle source
# File lib/pushapp/config.rb, line 61
def known_task name
  task = @@known_tasks[name.to_s]
  raise "Unkown task with name '#{name}'. Forget to register task?" unless task
  task
end
on(event, &block) click to toggle source
# File lib/pushapp/config.rb, line 57
def on event, &block
  remotes.each {|r| r.on(event, &block) if block_given? }
end
remote(name, location, options = {}) click to toggle source
# File lib/pushapp/config.rb, line 33
def remote(name, location, options = {})
  name = name.to_s

  if remotes.any? {|r| r.location == location}
    raise "Can't have multiple remotes with same location"
  end

  full_name = [name, @group_name].compact.join('-')
  if remotes.any? {|r| r.full_name == full_name}
    raise "Can't have multiple remotes with same full_name. Remote '#{full_name}' already exists"
  end

  options = Pushapp.rmerge(@group_options, options)
  remotes << Pushapp::Remote.new(name, @group_name, location, self, options)
end
remotes_grouped_by(group) click to toggle source
# File lib/pushapp/config.rb, line 72
def remotes_grouped_by(group)
  group = group.to_s
  remotes.select {|r| r.group == group }
end
remotes_matched(group_or_name) click to toggle source
# File lib/pushapp/config.rb, line 77
def remotes_matched(group_or_name)
  case group_or_name
  when 'all'
    remotes
  when String
    remotes.select {|r| r.full_name == group_or_name || r.group == group_or_name}
  when Array
    group_or_name.map {|n| remotes_matched(n)}.flatten.compact.uniq
  else
    []
  end
end
remotes_named_by(name) click to toggle source
# File lib/pushapp/config.rb, line 67
def remotes_named_by(name)
  name = name.to_s
  remotes.select {|r| r.full_name == name }
end