Class: ServerspecLauncherRakeTasks

Inherits:
Object
  • Object
show all
Includes:
ExampleHelper, Rake::DSL
Defined in:
lib/serverspec_launcher/rake_tasks.rb

Overview

loads up the rake tasks

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ExampleHelper

#load_bundled_examples, #load_examples_from_gem, #load_shared_examples, #shared_examples

Constructor Details

#initialize(properties = nil) ⇒ ServerspecLauncherRakeTasks

Returns a new instance of ServerspecLauncherRakeTasks.



20
21
22
23
24
25
26
# File 'lib/serverspec_launcher/rake_tasks.rb', line 20

def initialize(properties = nil)
  @properties = properties ? properties.deep_symbolize_keys : YAML.load_file('properties.yml').deep_symbolize_keys
  options = @properties[:options] || {}
  @fail_on_err = options[:fail_on_err]
  @formatters = options[:formatters] || ['tick']
  @colorize = options[:color].nil? ? true : options[:color]
end

Class Method Details

.load(properties = nil) ⇒ Object



141
142
143
144
# File 'lib/serverspec_launcher/rake_tasks.rb', line 141

def self.load(properties = nil)
  tasks = ServerspecLauncherRakeTasks.new properties
  tasks.load_tasks
end

Instance Method Details

#debug_tasksObject



128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/serverspec_launcher/rake_tasks.rb', line 128

def debug_tasks
  namespace :debug do
    desc 'View loaded Shared examples'
    task :shared_examples do
      puts 'Loaded Shared Examples:\n======================='
      load_shared_examples @properties[:shared_example_gems] || []
      shared_examples.each do |ex|
        puts "\t#{ex}"
      end
    end
  end
end

#load_tasksObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/serverspec_launcher/rake_tasks.rb', line 28

def load_tasks
  task serverspec: 'serverspec:all'

  namespace :serverspec do
    targets = @properties[:targets] || {}
    task all: targets.keys.map { |key| 'serverspec:' + key.to_s.split('.')[0] }
    targets.keys.each do |key|
      target = targets[key]
      process_target(key, target)
    end

    environments = @properties[:environments] || {}
    environments.keys.each do |key|
      task key.to_sym => "serverspec:#{key}:all"
      namespace key.to_sym do
        environment = environments[key]
        task all: environment[:targets].map { |target, _hash| "serverspec:#{key}:#{target.to_s.split(':')[0].to_sym}" }
        environment[:targets].each do |target, hash|
          process_target("#{target}", hash, 'environment', key.to_s)
        end
      end
    end

  end
end

#serverspec_rake_task(host, key, task_name, spec_type, options = {}, target = {}) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/serverspec_launcher/rake_tasks.rb', line 72

def serverspec_rake_task(host, key, task_name, spec_type, options = {}, target = {})
  desc "Run serverspec to #{key}"
  RSpec::Core::RakeTask.new(task_name.to_s.to_sym) do |t|
    ENV['TARGET_HOST'] = host.to_s
    ENV['TARGET'] = key.to_s
    ENV['TASK_NAME'] = task_name.to_s
    ENV['TASK_SOURCE'] = options[:source]
    ENV['TASK_ENV'] = options[:environment]
    t.pattern = "spec/#{spec_type}_spec.rb"
    t.fail_on_error = options[:fail_on_err]
    report_name = options[:environment] ? "reports/#{options[:environment]}/#{key.to_s}/#{host.to_s}" : "reports/#{key.to_s}/#{host.to_s}"
    set_formatters(report_name, options, t)
  end
end

#serverspec_task_array(key, spec_type, target, options) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/serverspec_launcher/rake_tasks.rb', line 54

def serverspec_task_array(key, spec_type, target, options)
  env = options[:source] == 'environment' ? ":"+ options[:environment] : ""
  desc "Run serverspec to #{key}"
  task key.to_sym => "serverspec#{env}:#{key}:all"
    namespace key.to_sym do
      desc "Run #{key} against all hosts"
      task :all do
        target[:hosts].each do |host|
          Rake::Task["serverspec#{env}:#{key}:#{host.split(':')[0].to_sym}"].execute
        end
      end
      target[:hosts].each do |host|
        task_name = "#{host || target[:name]}"
        serverspec_rake_task(host, key, task_name, spec_type, options)
      end
    end
end

#set_formatters(report_path, options, t) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/serverspec_launcher/rake_tasks.rb', line 87

def set_formatters(report_path, options, t)
  opts = t.rspec_opts
  if options[:formatters].include?('junit') || options[:formatters].include?('xml')
    opts = "#{opts}  --format RspecJunitFormatter --out #{report_path}.xml"
  end
  if options[:formatters].include?('docs') || options[:formatters].include?('documentation') || options[:formatters].include?('docs_file')
    opts = "#{opts}  --format documentation --out #{report_path}.docs"
  end
  if options[:formatters].include?('docs_screen')
    opts = "#{opts}  --format documentation"
  end
  if options[:formatters].include?('tick')
    opts = "#{opts}  --format RspecTickFormatter"
  end
  if options[:formatters].include?('tick_file')
    opts = "#{opts}  --format RspecTickFormatter --out #{report_path}.tick"
  end
  if options[:formatters].include?('progress')
    opts = "#{opts}  --format progress"
  end
  if options[:formatters].include?('html')
    opts = "#{opts}  --format html --out #{report_path}.html"
  end
  if options[:formatters].include?('html_report') || options[:formatters].include?('html_pretty')
    opts = "#{opts}  --format RspecHtmlReporter"
  end
  if options[:formatters].include?('json')
    opts = "#{opts}  --format j --out #{report_path}.json"
  end
  if options[:formatters].include?('launcher')
    opts = "#{opts}  --format LauncherJsonFormatter --out #{report_path}_extended.json"
  end
  unless options[:color]
    opts = "#{opts} --no-color"
  end
  if File.exist?('.rspec')
    opts = "#{opts}  --options .rspec"
  end
  t.rspec_opts = opts
end