diff --git a/lib/thor/actions/directory.rb b/lib/thor/actions/directory.rb index 3e98f6248..2b4d68716 100644 --- a/lib/thor/actions/directory.rb +++ b/lib/thor/actions/directory.rb @@ -56,7 +56,7 @@ class Directory < EmptyDirectory #:nodoc: attr_reader :source def initialize(base, source, destination = nil, config = {}, &block) - @source = File.expand_path(base.find_in_source_paths(source.to_s)) + @source = File.expand_path(Dir[Util.escape_globs(base.find_in_source_paths(source.to_s))].first) @block = block super(base, destination, {:recursive => true}.merge(config)) end diff --git a/spec/actions/create_link_spec.rb b/spec/actions/create_link_spec.rb index 7eaab7ece..361159b6f 100644 --- a/spec/actions/create_link_spec.rb +++ b/spec/actions/create_link_spec.rb @@ -2,7 +2,7 @@ require "thor/actions" require "tempfile" -describe Thor::Actions::CreateLink do +describe Thor::Actions::CreateLink, :unless => windows? do before do @silence = false @hardlink_to = File.join(Dir.tmpdir, "linkdest.rb") diff --git a/spec/actions/directory_spec.rb b/spec/actions/directory_spec.rb index 2864cf4c3..a1c5860cc 100644 --- a/spec/actions/directory_spec.rb +++ b/spec/actions/directory_spec.rb @@ -1,3 +1,4 @@ +require "tmpdir" require "helper" require "thor/actions" @@ -25,7 +26,7 @@ def revoke!(*args, &block) def exists_and_identical?(source_path, destination_path) %w(config.rb README).each do |file| - source = File.join(source_root, source_path, file) + source = File.join(source_root, source_path, file) destination = File.join(destination_root, destination_path, file) expect(File.exist?(destination)).to be true @@ -146,6 +147,24 @@ def exists_and_identical?(source_path, destination_path) content = invoke!("app{1}") expect(content).to match(%r{create app\{1\}/README}) end + + context "windows temp directories", :if => windows? do + let(:spec_dir) { File.join(@temp_dir, "spec") } + + before(:each) do + @temp_dir = Dir.mktmpdir("thor") + Dir.mkdir(spec_dir) + File.new(File.join(spec_dir, "spec_helper.rb"), "w").close + end + + after(:each) { FileUtils.rm_rf(@temp_dir) } + it "works with windows temp dir" do + invoke! spec_dir, "specs" + file = File.join(destination_root, "specs") + expect(File.exist?(file)).to be true + expect(File.directory?(file)).to be true + end + end end describe "#revoke!" do diff --git a/spec/actions/file_manipulation_spec.rb b/spec/actions/file_manipulation_spec.rb index 1e4c177fe..b9167c433 100644 --- a/spec/actions/file_manipulation_spec.rb +++ b/spec/actions/file_manipulation_spec.rb @@ -96,7 +96,7 @@ def file end end - describe "#link_file" do + describe "#link_file", :unless => windows? do it "links file from source to default destination" do action :link_file, "command.thor" exists_and_identical?("command.thor", "command.thor") diff --git a/spec/helper.rb b/spec/helper.rb index 993448d40..2db7a5990 100644 --- a/spec/helper.rb +++ b/spec/helper.rb @@ -79,5 +79,12 @@ def silence_warnings $VERBOSE = old_verbose end + # true if running on windows, used for conditional spec skips + # + # @return [TrueClass/FalseClass] + def windows? + Gem.win_platform? + end + alias silence capture end