From 2a834e122821c3859c56616221d8fb48cea6c94e Mon Sep 17 00:00:00 2001 From: Scott Parrish Date: Sat, 7 May 2011 12:04:59 -0600 Subject: [PATCH] previous changes were made to Dsl that built on the options hash that was passed to it. Except the options hash is actually a Thor::CoreExt::HashWithIndifferentAccess so, i reorganized the internal access and storage to read original data from the passed hash, but stores it into a local hash. No tests changed since no external behavior changed. All tests passed. This fixes the issue when the binary is run and results in a can't modify frozen hash (RuntimeError) --- lib/guard/dsl.rb | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/guard/dsl.rb b/lib/guard/dsl.rb index 32a0edf..52ff6b7 100644 --- a/lib/guard/dsl.rb +++ b/lib/guard/dsl.rb @@ -4,7 +4,8 @@ module Guard def evaluate_guardfile(options = {}) options.is_a?(Hash) or raise ArgumentError.new("evaluate_guardfile not passed a hash") - @@options = options + @@orig_options = options + @@options = {} prep_guardfile_contents instance_eval_guardfile(guardfile_contents, actual_guardfile(), 1) end @@ -24,6 +25,7 @@ module Guard def read_guardfile(my_file) @@options[:actual_guardfile] = my_file + @@options[:guardfile] = @@orig_options[:guardfile] begin @@options[:guardfile_contents] = File.read(my_file) rescue @@ -34,10 +36,11 @@ module Guard def prep_guardfile_contents #todo do we need .rc file interaction? - if @@options.has_key?(:guardfile_contents) + if @@orig_options.has_key?(:guardfile_contents) UI.info "Using options[:guardfile_contents] for Guardfile" @@options[:actual_guardfile] = 'options[:guardfile_contents]' - elsif @@options.has_key?(:guardfile) + @@options[:guardfile_contents] = @@orig_options[:guardfile_contents] + elsif @@orig_options.has_key?(:guardfile) UI.info "Using -command Guardfile" if File.exist?(guardfile_file()) read_guardfile(guardfile_file) @@ -55,13 +58,13 @@ module Guard end end unless guardfile_contents_usable? - UI.error "The command file(#{@@options[:guardfile_file]}) seems to be empty." + UI.error "The command file(#{@@orig_options[:guardfile_file]}) seems to be empty." exit 1 end end def guardfile_contents - @@options[:guardfile_contents] + @@options[:guardfile_contents] || @@orig_options[:guardfile_contents] end def guardfile_file @@ -86,7 +89,7 @@ module Guard end def group(name, &guard_definition) - guard_definition.call if guard_definition && (@@options[:group].empty? || @@options[:group].include?(name)) + guard_definition.call if guard_definition && (@@orig_options[:group].empty? || @@orig_options[:group].include?(name)) end def guard(name, options = {}, &watch_definition)