maximus 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8843e2de02ffdfdbe667056bbb99a3a346a6c2aa
4
- data.tar.gz: 4d60b2e41051e130c5d6749c584430f6d3d49681
3
+ metadata.gz: b23428dccc821b0c760a0e9e700dae8a98590824
4
+ data.tar.gz: 584a217684704ba5e28be0362805de0dff016d4a
5
5
  SHA512:
6
- metadata.gz: 6bfa472047e078d6d46220e88a5e0fe2f350ddc321c39c4967d89c5e0015b1da40af853448501966bc197abe1238e3d0e2791ecaface6bc08c8755b24049c3bc
7
- data.tar.gz: 4d41a262ca94d0dc8444b8ce2a4d43978ae4945010ecc2ac670519dcddb375a0af61f4baa903042d77bdf54c3bb53271cb24d15efd46528791ab72ba6b699c73
6
+ metadata.gz: 8d6782b673a666075f0e8fef4dbbe885a25f5eba717522a6adf3eeb0e89089abaac67a1bea31c6b07a25e6bb8fa188f02ca1b23ad97f301be7e5b3242bdbeaed
7
+ data.tar.gz: 7b8fe7dfbf4401ba3c12ce4249d790e1b9c6e59c18688c1c75fda55cc998ad3ad1964f6e2ea6e4aa9bb2c9f3a1c431cb9f4f05ead59c5a50884c5258cbf66f8e
@@ -1,6 +1,8 @@
1
1
  sudo: false
2
2
  cache: bundler
3
3
  language: ruby
4
+ git:
5
+ depth: 800
4
6
  rvm:
5
7
  - 2.0.0
6
8
  - 2.1
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Tim Shedor
1
+ Copyright (c) 2015 Tim Shedor
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -77,18 +77,18 @@ lints: true # all lints including brakeman will run
77
77
 
78
78
  Flag | Accepts | Description
79
79
  --------------------|----------------------------------|--------------------
80
- `-fp`/`--filepaths` | String/Array | Space-separated path(s) to files
81
- `-u`/`--urls` | String/Array | Statistics only - Space-separated path(s) to relative URLs
82
- `-d`/`--domain` | String | Statistics only - Web address (prepended to paths)
83
- `-po`/`--port` | String/Numeric | Statistics only - Port to use if required (appended to domain)
80
+ `-g`/`--sha` | String | Run maximus based on a git commit. See [below](#git-examples)
84
81
  `-f`/`--frontend` | Boolean/Blank | Run all front-end lints
85
82
  `-b`/`--backend` | Boolean/Blank | Run all back-end lints
86
83
  `-s`/`--statistics` | Boolean/Blank | Run all statistics
87
84
  `-a`/`--all` | Boolean/Blank | Run everything
88
85
  `-i`/`--include` | String/Array | Include specific lints or statistics
89
86
  `-i`/`--exclude` | String/Array | Exclude specific lints or statistics
90
- `-git`/`--sha` | String | Run maximus based on a git commit. See [below](#git-examples)
91
87
  `-c`/`--config` | String | Path to config file
88
+ `-fp`/`--filepaths` | String/Array | Space-separated path(s) to files
89
+ `-u`/`--urls` | String/Array | Statistics only - Space-separated path(s) to relative URLs
90
+ `-d`/`--domain` | String | Statistics only - Web address (prepended to paths)
91
+ `-po`/`--port` | String/Numeric | Statistics only - Port to use if required (appended to domain)
92
92
 
93
93
 
94
94
  * Lint tasks can accept glob notation, i.e. `**/*.scss`
@@ -135,8 +135,26 @@ When adding new lints, the JSON output should obey the following format:
135
135
  } ]
136
136
  ```
137
137
 
138
+ ## Notes
139
+
140
+ If calling Maximus::Wraith from a script, please see the note in lib/statistics/wraith.rb#result
141
+
138
142
  ## Changelog
139
143
 
144
+ ### 0.1.5 (February 1, 2015)
145
+
146
+ Bugfixes:
147
+
148
+ * Wraith outputs percentages properly
149
+ * Diff data for initial commits
150
+ * More intuitive config path discovery
151
+ * Flip GitControl#diff around for old to new comparison
152
+ * More stability/defensive programming in Config, Wraith, and GitControl
153
+
154
+ Features:
155
+
156
+ * Wraith includes images in output
157
+
140
158
  ### 0.1.4 (January 3, 2015)
141
159
 
142
160
  Bugfixes:
@@ -14,14 +14,14 @@ class Maximus::CLI < Thor
14
14
  class_option :filepath, aliases: ['-fp'], type: :array, default: [], desc: "Space-separated path(s) to files"
15
15
  class_option :urls, aliases: ['-u'], type: :array, default: ['/'], desc: "Statistics only - Space-separated path(s) to relative URL paths"
16
16
  class_option :domain, aliases: ['-d'], type: :string, default: 'http://localhost', desc: "Statistics only - Web address (prepended to paths)"
17
- class_option :port, aliases: ['-po'], type: :numeric, default: nil, desc: 'Statistics only - Port to use if required (appended to domain)'
17
+ class_option :port, aliases: ['-po'], type: :numeric, default: 3000, desc: 'Statistics only - Port to use if required (appended to domain)'
18
18
 
19
19
  class_option :include, aliases: ['-i'], type: :array, default: [], desc: "Include only specific lints or statistics"
20
20
  class_option :exclude, aliases: ['-e'], type: :array, default: [], desc: "Exlude specific lints or statistics"
21
21
 
22
- class_option :config, aliases: ['-c'], type: :string, default: 'maximus.yml', desc: 'Path to config file'
22
+ class_option :config, aliases: ['-c'], type: :string, default: nil, desc: 'Path to config file'
23
23
 
24
- class_option :git, aliases: ['-g', '--sha'], type: :string, default: 'working', banner: "working, last, master, or sha", desc: "Lint by commit or working copy"
24
+ class_option :git, aliases: ['-g', '--git', '--sha'], type: :string, default: 'working', banner: "working, last, master, or sha", desc: "Lint by commit or working copy"
25
25
 
26
26
  def initialize(*args)
27
27
  super
@@ -31,16 +31,19 @@ class Maximus::CLI < Thor
31
31
  desc "frontend", "Execute all front-end tasks"
32
32
  def frontend
33
33
  ['scsslint', 'jshint'].each { |e| check_exclude(e) }
34
+ @config.destroy_temp
34
35
  end
35
36
 
36
37
  desc "backend", "Lint with all backend lints"
37
38
  def backend
38
39
  ['rubocop', 'railsbp', 'brakeman'].each { |e| check_exclude(e) }
40
+ @config.destroy_temp
39
41
  end
40
42
 
41
43
  desc "statistics", "Run all statistics"
42
44
  def statistics
43
45
  ['stylestats', 'phantomas', 'wraith'].each { |e| check_exclude(e) }
46
+ @config.destroy_temp
44
47
  end
45
48
 
46
49
  # Alias ruby to backend
@@ -61,7 +64,8 @@ class Maximus::CLI < Thor
61
64
  return options[:include].each { |i| send(i) } unless options[:include].blank?
62
65
  # If all flag is not enabled, lint working copy as it's supposed to be
63
66
  @config.settings[:commit] = options[:git]
64
- return Maximus::GitControl.new({config: @config}).lints_and_stats(true)
67
+ Maximus::GitControl.new({config: @config}).lints_and_stats(true)
68
+ @config.destroy_temp
65
69
  end
66
70
 
67
71
  # @todo something better than just installing in the global npm file
@@ -1,3 +1,6 @@
1
+ require 'active_support'
2
+ require 'active_support/core_ext/hash/keys'
3
+
1
4
  module Maximus
2
5
 
3
6
  # Global options and configuration
@@ -27,127 +30,99 @@ module Maximus
27
30
  # @option opts [Hash] :paths ({home: '/'}) labeled relative path to URLs. Statistics only
28
31
  # @option opts [String] :commit accepts sha, "working", "last", or "master".
29
32
  # @option opts [String] :config_file ('maximus.yml') path to config file
30
- # @return [#load_config_file #group_families #evaluate_yaml] this method is used to set up instance variables
33
+ # @option opts [Boolean] :compile_assets (true) compile and destroy assets automagically
34
+ # @return [#load_config_file #group_families #evaluate_settings] this method is used to set up instance variables
31
35
  def initialize(opts = {})
32
- opts[:is_dev] ||= false
36
+
37
+ default_options = {
38
+ root_dir: root_dir,
39
+ domain: 'http://localhost',
40
+ port: is_rails? ? 3000 : '',
41
+ paths: { 'home' => '/' },
42
+ is_dev: false,
43
+ phantomas: false,
44
+ stylestats: false,
45
+ wraith: false
46
+ }
47
+
48
+ yaml = default_options.merge load_config_file(opts[:config_file])
49
+ @settings = yaml.merge opts
33
50
 
34
51
  # Only set log file if it's set to true.
35
52
  # Otherwise, allow it to be nil or a path
36
- opts[:log] = 'log/maximus.log' if opts[:log].is_a?(TrueClass)
53
+ @settings[:log] = false if @settings[:log].nil?
54
+ @settings[:log] ||= 'log/maximus.log' if @settings[:log].is_a?(TrueClass)
37
55
 
38
- opts[:git_log] = false if opts[:git_log].nil?
39
- opts[:git_log] = 'log/maximus_git.log' if opts[:git_log].is_a?(TrueClass)
56
+ @settings[:git_log] = false if @settings[:git_log].nil?
57
+ @settings[:git_log] ||= 'log/maximus_git.log' if @settings[:git_log].is_a?(TrueClass)
40
58
 
41
- # @see Helper#root_dir
42
- opts[:root_dir] ||= root_dir
43
- opts[:domain] ||= 'http://localhost'
44
- opts[:port] ||= is_rails? ? 3000 : ''
45
- opts[:paths] ||= { 'home' => '/' }
59
+ @settings[:compile_assets] = true if @settings[:compile_assets].nil?
46
60
 
47
- opts[:paths] = parse_cli_config(opts[:paths]) if opts[:paths].is_a?(Array)
61
+ @settings[:paths] = split_paths(@settings[:paths]) if @settings[:paths].is_a?(Array)
48
62
 
49
- # What we're really interested in
50
- @settings = opts
63
+ group_families
51
64
 
52
65
  # Instance variables for Config class only
53
66
  @temp_files = {}
54
-
55
- load_config_file(opts[:config_file])
56
-
57
- group_families
58
-
59
67
  # Override options with any defined in a discovered config file
60
- evaluate_yaml
68
+ evaluate_settings
61
69
  end
62
70
 
63
71
  # Set global options or generate appropriate config files for lints or statistics
64
- #
65
- # @param yaml_data [Hash] (@yaml) loaded data from the discovered maximus config file
72
+ # @param settings_data [Hash] (@settings) loaded data from the discovered maximus config file
66
73
  # @return [Hash] paths to temp config files and static options
67
74
  # These should be deleted with destroy_temp after read and loaded
68
- def evaluate_yaml(yaml_data = @yaml)
69
- yaml_data.each do |key, value|
70
- unless value.is_a?(FalseClass)
71
- value = {} if value.is_a?(TrueClass)
72
-
73
- case key
74
-
75
- when 'jshint', 'JSHint', 'JShint'
76
-
77
- # @todo DRY this up, but can't call it at the start because of the
78
- # global config variables (last when statement in this switch)
79
- value = load_config(value)
80
-
81
- if yaml_data[key].is_a?(Hash) && yaml_data[key].has_key?['ignore']
82
- jshintignore_file = []
83
- yaml_data[key]['ignore'].each { |i| jshintignore_file << "#{i}\n" }
84
- @settings[:jshintignore] = temp_it('jshintignore.json', jshintignore_file)
85
- end
86
- @settings[:jshint] = temp_it('jshint.json', value.to_json)
87
-
88
- when 'scsslint', 'scss-lint', 'SCSSlint'
89
- value = load_config(value)
90
-
91
- @settings[:scsslint] = temp_it('scsslint.yml', value.to_yaml)
92
-
93
- when 'rubocop', 'Rubocop', 'RuboCop'
94
- value = load_config(value)
95
-
96
- @settings[:rubocop] = temp_it('rubocop.yml', value.to_yaml)
97
-
98
- when 'brakeman'
99
- @settings[:brakeman] = yaml_data[key]
100
-
101
- when 'rails_best_practice', 'railsbp'
102
- @settings[:railsbp] = yaml_data[key]
103
-
104
- when 'stylestats', 'Stylestats'
105
- value = load_config(value)
106
- @settings[:stylestats] = temp_it('stylestats.json', value.to_json)
107
-
108
- when 'phantomas', 'Phantomas'
109
- value = load_config(value)
110
- @settings[:phantomas] = temp_it('phantomas.json', value.to_json)
111
-
112
- when 'wraith', 'Wraith'
113
- value = load_config(value)
114
-
115
- @settings[:wraith] = {}
116
- if value.include?('browser')
117
- value['browser'].each do |browser, browser_value|
118
- unless browser_value.is_a?(FalseClass)
119
- new_data = {}
120
- new_data['browser'] = []
121
- new_data['browser'] << { browser.to_s => browser.to_s }
122
-
123
- # Regardless of what's in the config, override with maximus,
124
- # predictable namespacing
125
- new_data['directory'] = "maximus_wraith_#{browser}"
126
- new_data['history_dir'] = "maximus_wraith_history_#{browser}"
127
-
128
- # @todo a snap file cannot be set in the config
129
- snap_file = case browser
130
- when 'casperjs' then 'casper'
131
- when 'nojs' then 'nojs'
132
- else 'snap'
133
- end
134
- new_data['snap_file'] = File.join(File.dirname(__FILE__), "config/wraith/#{snap_file}.js")
135
-
136
- @settings[:wraith][browser.to_sym] = wraith_setup(new_data, "wraith_#{browser}")
137
- end
138
- end
139
- else
140
- value['browser'] = { 'phantomjs' => 'phantomjs' }
141
- value['directory'] = 'maximus_wraith_phantomjs'
142
- value['history_dir'] = 'maximus_wraith_history_phantomjs'
143
- value['snap_file'] = File.join(File.dirname(__FILE__), "config/wraith/snap.js")
144
- @settings[:wraith][:phantomjs] = wraith_setup(value)
145
- end
146
-
147
- # Configuration important to all of maximus
148
- when 'is_dev', 'log', 'root_dir', 'domain', 'port', 'paths', 'commit'
149
- @settings[key.to_sym] = yaml_data[key]
150
- end
75
+ def evaluate_settings(settings_data = @settings)
76
+ settings_data.each do |key, value|
77
+ next if value.is_a?(FalseClass)
78
+ value = {} if value.is_a?(TrueClass)
79
+
80
+ case key
81
+
82
+ when :jshint, :JSHint, :JShint
83
+
84
+ # @todo DRY this load_config up, but can't call it at the start because of the
85
+ # global config variables (last when statement in this switch)
86
+ value = load_config(value)
87
+
88
+ if settings_data[key].is_a?(Hash) && settings_data[key].has_key?('jshintignore')
89
+ jshintignore_file = []
90
+ settings_data[key]['jshintignore'].each { |i| jshintignore_file << "#{i}\n" }
91
+ @settings[:jshintignore] = temp_it('jshintignore.json', jshintignore_file)
92
+ end
93
+ @settings[:jshint] = temp_it('jshint.json', value.to_json)
94
+
95
+ when :scsslint, :SCSSlint
96
+ value = load_config(value)
97
+
98
+ @settings[:scsslint] = temp_it('scsslint.yml', value.to_yaml)
99
+
100
+ when :rubocop, :Rubocop, :RuboCop
101
+ value = load_config(value)
102
+
103
+ @settings[:rubocop] = temp_it('rubocop.yml', value.to_yaml)
104
+
105
+ when :brakeman
106
+ @settings[:brakeman] = settings_data[key]
107
+
108
+ when :rails_best_practice, :railsbp
109
+ @settings[:railsbp] = settings_data[key]
110
+
111
+ when :stylestats, :Stylestats
112
+ value = load_config(value)
113
+ @settings[:stylestats] = temp_it('stylestats.json', value.to_json)
114
+
115
+ when :phantomas, :Phantomas
116
+ value = load_config(value)
117
+ @settings[:phantomas] = temp_it('phantomas.json', value.to_json)
118
+
119
+ when :wraith, :Wraith
120
+ value = load_config(value)
121
+ evaluate_for_wraith(value)
122
+
123
+ # Configuration important to all of maximus
124
+ when :is_dev, :log, :root_dir, :domain, :port, :paths, :commit
125
+ @settings[key] = settings_data[key]
151
126
  end
152
127
  end
153
128
 
@@ -175,17 +150,23 @@ module Maximus
175
150
 
176
151
  # Remove all or one created temporary config file
177
152
  # @see temp_it
178
- # @param filename [String] file to destroy
179
- def destroy_temp(filename)
180
- return if @temp_files[filename.to_sym].blank?
181
- @temp_files[filename.to_sym].unlink
182
- @temp_files.delete(filename.to_sym)
153
+ # @param filename [String] (nil) file to destroy
154
+ # If nil, destroy all temp files
155
+ def destroy_temp(filename = nil)
156
+ if filename.nil?
157
+ @temp_files.each { |filename, file| file.unlink }
158
+ @temp_files = {}
159
+ else
160
+ return if @temp_files[filename.to_sym].blank?
161
+ @temp_files[filename.to_sym].unlink
162
+ @temp_files.delete(filename.to_sym)
163
+ end
183
164
  end
184
165
 
185
166
  # Combine domain with port if necessary
186
167
  # @return [String] complete domain/host address
187
168
  def domain
188
- (!@settings[:port].blank? || @settings[:domain].include?(':')) ? "#{@settings[:domain]}:#{@settings[:port]}" : @settings[:domain]
169
+ (!@settings[:port].blank?) ? "#{@settings[:domain]}:#{@settings[:port]}" : @settings[:domain]
189
170
  end
190
171
 
191
172
 
@@ -193,44 +174,41 @@ module Maximus
193
174
 
194
175
  # Look for a maximus config file
195
176
  #
196
- # Checks ./maximus.yml, ./maximus.yaml, ./config/maximus.yaml in order.
177
+ # Checks ./maximus.yml, ./.maximus.yml, ./config/maximus.yml in order.
197
178
  # If there hasn't been a file discovered yet, checks ./config/maximus.yml
198
179
  # and if there still isn't a file, load the default one included with the
199
180
  # maximus gem.
200
181
  #
201
182
  # @since 0.1.4
202
183
  # @param file_path [String]
203
- # @return @yaml [Hash]
184
+ # @return @settings [Hash]
204
185
  def load_config_file(file_path)
205
186
 
206
187
  conf_location = if !file_path.nil? && File.exist?(file_path)
207
188
  file_path
208
189
  else
209
- config_exists('maximus.yml') || config_exists('maximus.yaml') || config_exists('config/maximus.yaml') || check_default_config_path('maximus.yml')
190
+ config_exists('.maximus.yml') || config_exists('maximus.yml') || check_default_config_path('config/maximus.yml')
210
191
  end
211
192
 
212
- @yaml = YAML.load_file(conf_location)
193
+ yaml = YAML.load_file(conf_location)
213
194
 
214
- # Match defaults
215
- @yaml['domain'] ||= @settings[:domain]
216
- @yaml['paths'] ||= @settings[:paths]
217
- @yaml['port'] ||= @settings[:port]
195
+ yaml.symbolize_keys
218
196
 
219
197
  end
220
198
 
221
199
  # Allow shorthand to be declared for groups Maximus executions
222
200
  #
223
201
  # @example disable statistics
224
- # @yaml['statistics'] = false
202
+ # @settings[:statistics] = false
225
203
  # set_families('statistics', ['phantomas', 'stylestats', 'wraith'])
226
204
  #
227
205
  # Sets as Boolean based on whether or not the queried label is `true`
228
- # @param head_of_house [String] @yaml key and group label
229
- # @param family [Array] group of other @yaml keys to be disabled
230
- # @return [void] modified @yaml
206
+ # @param head_of_house [String] @settings key and group label
207
+ # @param family [Array] group of other @settings keys to be disabled
208
+ # @return [void] modified @settings
231
209
  def set_families(head_of_house, family)
232
- if @yaml.has_key?(head_of_house)
233
- family.each { |f| @yaml[f] = @yaml[head_of_house].is_a?(TrueClass) }
210
+ if @settings.has_key?(head_of_house)
211
+ family.each { |f| @settings[f] ||= @settings[head_of_house].is_a?(TrueClass) }
234
212
  end
235
213
  end
236
214
 
@@ -259,9 +237,11 @@ module Maximus
259
237
  # @return [String] absolute path to new config file
260
238
  def temp_it(filename, data)
261
239
  ext = filename.split('.')
262
- file = Tempfile.new([filename, ".#{ext[1]}"])
263
- file.write(data)
264
- file.close
240
+ file = Tempfile.new([filename, ".#{ext[1]}"]).tap do |f|
241
+ f.rewind
242
+ f.write(data)
243
+ f.close
244
+ end
265
245
  @temp_files[ext[0].to_sym] = file
266
246
  file.path
267
247
  end
@@ -282,7 +262,7 @@ module Maximus
282
262
  # @since 0.1.4
283
263
  # @param paths [Array]
284
264
  # @return [Hash]
285
- def parse_cli_config(paths)
265
+ def split_paths(paths)
286
266
  new_paths = {}
287
267
  paths.each do |p|
288
268
  if p.split('/').length > 1
@@ -298,44 +278,76 @@ module Maximus
298
278
  # @since 0.1.4
299
279
  # @todo the command line options are overriden here and it should be the other way around
300
280
  def group_families
301
- set_families('lints', ['jshint', 'scsslint', 'rubocop', 'brakeman', 'railsbp'])
302
- set_families('frontend', ['jshint', 'scsslint', 'phantomas', 'stylestats', 'wraith'])
303
- set_families('backend', ['rubocop', 'brakeman', 'railsbp'])
304
- set_families('ruby', ['rubocop', 'brakeman', 'railsbp'])
305
- set_families('statistics', ['phantomas', 'stylestats', 'wraith'])
306
- set_families('all', ['lints', 'statistics'])
281
+ set_families(:lints, [:jshint, :scsslint, :rubocop, :brakeman, :railsbp])
282
+ set_families(:frontend, [:jshint, :scsslint, :phantomas, :stylestats, :wraith])
283
+ set_families(:backend, [:rubocop, :brakeman, :railsbp])
284
+ set_families(:ruby, [:rubocop, :brakeman, :railsbp])
285
+ set_families(:statistics, [:phantomas, :stylestats, :wraith])
286
+ set_families(:all, [:lints, :statistics])
307
287
  end
308
288
 
309
289
  # Wraith is a complicated gem with significant configuration
310
- #
311
- # @see yaml_evaluate
312
- # @see temp_it
313
- #
290
+ # @see yaml_evaluate, temp_it
314
291
  # @param value [Hash] modified data from a wraith config or injected data
315
292
  # @param name [String] ('wraith') config file name to write and eventually load
316
293
  # @return [String] temp file path
317
294
  def wraith_setup(value, name = 'phantomjs')
318
295
 
319
- if @yaml.include?('urls')
320
- value['domains'] = yaml_data['urls']
296
+ if @settings.has_key?(:urls)
297
+ value['domains'] = @settings[:urls]
321
298
  else
322
299
  value['domains'] = {}
323
300
  # @see #domain
324
301
  value['domains']['main'] = domain
325
302
  end
326
303
 
304
+ # Set wraith defaults unless they're already defined
327
305
  # Wraith requires this screen_width config to be present
328
- value['screen_widths'] ||= [767, 1024, 1280]
329
-
330
- value['paths'] = @yaml['paths']
306
+ value['screen_widths'] ||= [1280, 1024, 767]
307
+ value['fuzz'] ||= '20%'
331
308
  value['threshold'] ||= 0
332
309
 
333
- # Wraith requires config files have .yaml extensions
334
- # https://github.com/BBC-News/wraith/blob/2aff771eba01b76e61600cccb2113869bfe16479/lib/wraith/wraith.rb
335
- file = Tempfile.new([name, '.yaml'])
336
- file.write(value.to_yaml)
337
- file.close
338
- file.path
310
+ value['paths'] = @settings[:paths]
311
+ temp_it("#{name}.yaml", value.to_yaml)
312
+ end
313
+
314
+ # Apply wraith defaults/merge existing config
315
+ # @since 0.1.5
316
+ # @see yaml_evaluate
317
+ # @param value [Hash]
318
+ def evaluate_for_wraith(value)
319
+ @settings[:wraith] = {}
320
+
321
+ if value.include?('browser')
322
+ value['browser'].each do |browser, browser_value|
323
+ next if browser_value.is_a?(FalseClass)
324
+
325
+ # @todo a snap file cannot be set in the config
326
+ snap_file = case browser
327
+ when 'casperjs' then 'casper'
328
+ when 'nojs' then 'nojs'
329
+ else 'snap'
330
+ end
331
+
332
+ new_data = {
333
+ 'browser' => [{ browser.to_s => browser.to_s }],
334
+ 'directory' => "maximus_wraith_#{browser}",
335
+ 'history_dir' => "maximus_wraith_history_#{browser}",
336
+ 'snap_file' => File.join(File.dirname(__FILE__), "config/wraith/#{snap_file}.js")
337
+ }
338
+
339
+ @settings[:wraith][browser.to_sym] = wraith_setup(new_data, "maximus_wraith_#{browser}")
340
+ end
341
+ else
342
+ append_value = {
343
+ 'browser' => { 'phantomjs' => 'phantomjs' },
344
+ 'directory' => 'maximus_wraith_phantomjs',
345
+ 'history_dir' => 'maximus_wraith_history_phantomjs',
346
+ 'snap_file' => File.join(File.dirname(__FILE__), "config/wraith/snap.js")
347
+ }
348
+ @settings[:wraith][:phantomjs] = wraith_setup value.merge(append_value)
349
+ end
350
+
339
351
  end
340
352
 
341
353
  end