lib/guard/dsl_describer.rb in guard-2.6.1 vs lib/guard/dsl_describer.rb in guard-2.7.0
- old
+ new
@@ -1,130 +1,182 @@
# encoding: utf-8
-require 'formatador'
+require "formatador"
-require 'guard/guardfile/evaluator'
-require 'guard/ui'
+require "guard/guardfile/evaluator"
+require "guard/ui"
module Guard
-
# The DslDescriber evaluates the Guardfile and creates an internal structure
# of it that is used in some inspection utility methods like the CLI commands
# `show` and `list`.
#
# @see Guard::Dsl
# @see Guard::CLI
#
class DslDescriber
-
- attr_reader :options
-
# Initializes a new DslDescriber object.
#
# @option options [String] guardfile the path to a valid Guardfile
- # @option options [String] guardfile_contents a string representing the content of a valid Guardfile
#
+ # @option options [String] guardfile_contents a string representing the
+ # content of a valid Guardfile
+ #
# @see Guard::Guardfile::Evaluator#initialize
#
def initialize(options = {})
- @options = options
::Guard.reset_groups
::Guard.reset_plugins
+ ::Guard.reset_scope
+ ::Guard.reset_options(options)
end
# List the Guard plugins that are available for use in your system and marks
# those that are currently used in your `Guardfile`.
#
# @see CLI#list
#
def list
_evaluate_guardfile
- rows = ::Guard::PluginUtil.plugin_names.sort.uniq.inject([]) do |rows, name|
- rows << { Plugin: name.capitalize, Guardfile: ::Guard.plugins(name) ? '✔' : '✘' }
+ names = ::Guard::PluginUtil.plugin_names.sort.uniq
+ final_rows = names.inject([]) do |rows, name|
+ rows << {
+ Plugin: name.capitalize,
+ Guardfile: ::Guard.plugins(name) ? "✔" : "✘"
+ }
end
- Formatador.display_compact_table(rows, [:Plugin, :Guardfile])
+ Formatador.display_compact_table(final_rows, [:Plugin, :Guardfile])
end
# Shows all Guard plugins and their options that are defined in
# the `Guardfile`.
#
# @see CLI#show
#
def show
_evaluate_guardfile
+ groups = ::Guard.groups
- rows = ::Guard.groups.inject([]) do |rows, group|
- Array(::Guard.plugins(group: group.name)).each do |plugin|
- options = plugin.options.inject({}) { |o, (k, v)| o[k.to_s] = v; o }.sort
+ final_rows = groups.each_with_object([]) do |group, rows|
+ plugins = Array(::Guard.plugins(group: group.name))
+
+ plugins.each do |plugin|
+ options = plugin.options.inject({}) do |o, (k, v)|
+ o.tap { |option| option[k.to_s] = v }
+ end.sort
+
if options.empty?
rows << :split
- rows << { Group: group.title, Plugin: plugin.title, Option: '', Value: '' }
+ rows << {
+ Group: group.title,
+ Plugin: plugin.title,
+ Option: "",
+ Value: ""
+ }
else
options.each_with_index do |(option, value), index|
if index == 0
rows << :split
- rows << { Group: group.title, Plugin: plugin.title, Option: option.to_s, Value: value.inspect }
+ rows << {
+ Group: group.title,
+ Plugin: plugin.title,
+ Option: option.to_s,
+ Value: value.inspect
+ }
else
- rows << { Group: '', Plugin: '', Option: option.to_s, Value: value.inspect }
+ rows << {
+ Group: "",
+ Plugin: "",
+ Option: option.to_s,
+ Value: value.inspect
+ }
end
end
end
end
rows
end
- Formatador.display_compact_table(rows.drop(1), [:Group, :Plugin, :Option, :Value])
+ Formatador.display_compact_table(
+ final_rows.drop(1),
+ [:Group, :Plugin, :Option, :Value]
+ )
end
# Shows all notifiers and their options that are defined in
# the `Guardfile`.
#
# @see CLI#show
#
def notifiers
_evaluate_guardfile
- rows = ::Guard::Notifier::NOTIFIERS.inject(:merge).inject([]) do |rows, definition|
+ merged_notifiers = ::Guard::Notifier::NOTIFIERS.inject(:merge)
+ final_rows = merged_notifiers.each_with_object([]) do |definition, rows|
+
name = definition[0]
clazz = definition[1]
- available = clazz.available?(silent: true) ? '✔' : '✘'
- notifier = ::Guard::Notifier.notifiers.find { |n| n[:name] == name }
- used = notifier ? '✔' : '✘'
- options = notifier ? notifier[:options] : {}
- defaults = clazz.const_defined?(:DEFAULTS) ? clazz.const_get(:DEFAULTS) : {}
- options = defaults.merge(options)
+ available = clazz.available?(silent: true) ? "✔" : "✘"
+ notifier = ::Guard::Notifier.notifiers.detect { |n| n[:name] == name }
+ used = notifier ? "✔" : "✘"
+
+ options = _merge_options(clazz, notifier)
options.delete(:silent)
if options.empty?
rows << :split
- rows << { Name: name, Available: available, Used: used, Option: '', Value: '' }
+ _add_row(rows, name, available, used, "", "")
else
options.each_with_index do |(option, value), index|
if index == 0
rows << :split
- rows << { Name: name, Available: available, Used: used, Option: option.to_s, Value: value.inspect }
+ _add_row(rows, name, available, used, option.to_s, value.inspect)
else
- rows << { Name: '', Available: '', Used: '', Option: option.to_s, Value: value.inspect }
+ _add_row(rows, "", "", "", option.to_s, value.inspect)
end
end
end
rows
end
- Formatador.display_compact_table(rows.drop(1), [:Name, :Available, :Used, :Option, :Value])
+ Formatador.display_compact_table(
+ final_rows.drop(1),
+ [:Name, :Available, :Used, :Option, :Value]
+ )
end
private
# Evaluates the `Guardfile` by delegating to
# {Guard::Guardfile::Evaluator#evaluate_guardfile}.
#
def _evaluate_guardfile
- ::Guard::Guardfile::Evaluator.new(options).evaluate_guardfile
+ ::Guard.save_scope
+ ::Guard::Guardfile::Evaluator.new(::Guard.options).evaluate_guardfile
+ ::Guard.restore_scope
end
+ def _merge_options(klass, notifier)
+ notify_options = notifier ? notifier[:options] : {}
+
+ if klass.const_defined?(:DEFAULTS)
+ klass.const_get(:DEFAULTS).merge(notify_options)
+ else
+ notify_options
+ end
+ end
+
+ def _add_row(rows, name, available, used, option, value)
+ rows << {
+ Name: name,
+ Available: available,
+ Used: used,
+ Option: option,
+ Value: value
+ }
+ end
end
end