class Really::Script
Public Class Methods
new(path, options = {})
click to toggle source
# File lib/really/script.rb, line 9 def initialize(path, options = {}) path = File.expand_path path raise "Script at '#{path}' is not readable. :( (Does it exist?)" unless File.readable?(path) @options = options @tasks = {} @roles = {} @drivers = [] instance_eval File.read(path) end
Public Instance Methods
configure(&block)
click to toggle source
# File lib/really/script.rb, line 41 def configure(&block) instance_eval &block end
execute(role_names = [])
click to toggle source
Internal public API
# File lib/really/script.rb, line 57 def execute(role_names = []) @drivers.each do |driver| driver.open role_graph = DependencyGraph.new @roles # All drivers implicitly get the magic :default role. role_graph.add @roles[:default] if @roles.has_key?(:default) driver.role_names.each do |role_name| raise "Role '#{role_name}' does not exist." unless @roles.has_key?(role_name) role_graph.add @roles[role_name] end all_tasks = Hash[@tasks.collect { |key, value| [key, value.dup] }] task_graph = DependencyGraph.new all_tasks roles = role_graph.ordered_nodes roles.each do |role| role.task_descriptors.each do |descriptor| task_name = descriptor[:task_name] raise "Task '#{task_name}' does not exist." unless all_tasks.has_key?(task_name) task = all_tasks[task_name] task.options.merge! descriptor[:options] task_graph.add task end end logger.status "[#{roles.length > 1 ? 'roles' : 'role'}: #{roles.collect(&:name).join ', '}]" task_graph.ordered_nodes.each do |task| logger.status "task:#{task.name}", header: '***', header_color: :green driver.execute_task task, @options end driver.close end end
role(name, options = {}, &block)
click to toggle source
# File lib/really/script.rb, line 32 def role(name, options = {}, &block) name = name.to_sym raise "Duplicate definition of role name '#{name}'." if @roles.has_key?(name) role = Role.new(name, options, &block) @roles[name] = role role end
task(name, options = {}, &block)
click to toggle source
Public API for use in really.rb scripts
# File lib/really/script.rb, line 23 def task(name, options = {}, &block) name = name.to_sym raise "Duplicate definition of group name '#{name}'." if @tasks.has_key?(name) task = Task.new(name, options, &block) @tasks[name] = task task end
via(name, &block)
click to toggle source
# File lib/really/script.rb, line 45 def via(name, &block) name = name.to_s.capitalize name = "SSH" if name == "Ssh" klass = eval "Really::Drivers::#{name}" driver = klass.new &block @drivers << driver driver end