[rspec-users] [Solved] Re: Does RSpec interfere with Pathname#dirname or Pathname#realpath ?

Hedge Hog hedgehogshiatus at gmail.com
Thu Mar 3 18:37:39 EST 2011


On Fri, Mar 4, 2011 at 10:08 AM, Hedge Hog <hedgehogshiatus at gmail.com> wrote:
> Hi,
> I starting a new project, and have run into behavior I cannot
> replicate in irb, (i.e. outside of using rspec) when the directory?
> returns true, so I thought I'd ask here, in case any one has seen this
> badhavior.
> ruby-1.9.2-p136
> rspec (2.5.0)
> rspec-core (2.5.1)
> rspec-expectations (2.5.0)
> rspec-mocks (2.5.0)
>
> When I try to run this spec:
>
> require Pathname(__FILE__).ascend { |d| h=d+'spec_helper.rb'; break h
> if h.file? }
> describe B3::Bdd do
>  it "should indicate RVM is installed locally" do
>    B3::Bdd::Helpers.rvm_local_install?.should be_true
>  end
> end
>
> The spec helper is: require 'rspec' ; require_relative '../lib/b3'
>
> Which describes this code:
>
> class B3
>  module Bdd
>    module Helpers
>      def rvm_local_install?
>        puts ENV['rvm_path']
>        rvm_path = Pathname.new(ENV['rvm_path'] || '~/.rvm')
>        rvm_path.dirname.realpath.directory?
>      end
>      module_function :rvm_local_install?
>    end
>  end
> end
>
>
> I get this error:
>
> https://gist.github.com/853798
>
> irb version:
>
> $ irb
> ruby-1.9.2-p136 :001 > require 'pathname';
> ruby-1.9.2-p136 :002 >
> Dir.chdir('/home/hedge/Documents/Workspaces/b3/spec/b3/') do
> ruby-1.9.2-p136 :003 >     pn=Pathname.new(ENV['rvm_path'] || '~/.rvm')
> ruby-1.9.2-p136 :004?>   puts pn.dirname.realpath.directory?
> ruby-1.9.2-p136 :005?>   end
> true
>  => nil
> ruby-1.9.2-p136 :006 > pn2=Pathname.new(ENV['rvm_path'] || '~/.rvm')
>  => #<Pathname:/home/hedge/.rvm>
> ruby-1.9.2-p136 :007 > puts pn2.dirname.realpath.directory?
> true
>  => nil
>
> I'd appreciate any comments or insights.
>
> --
> πόλλ' οἶδ ἀλώπηξ, ἀλλ' ἐχῖνος ἓν μέγα
> [The fox knows many things, but the hedgehog knows one big thing.]
>   Archilochus, Greek poet (c. 680 BC – c. 645 BC)
> http://wiki.hedgehogshiatus.com
>

Actually the cause is that Pathname#realpath does not seem handle ~
very well.  Period. File#expand_path handles ~ fine:

pn=Pathname.new('~/.rvm')
ruby-1.9.2-p136 :020 > pn=Pathname.new('~/.rvm')
 => #<Pathname:~/.rvm>
ruby-1.9.2-p136 :021 > puts pn.realpath
Errno::ENOENT: No such file or directory - /home/hedge/~
	from /home/hedge/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/pathname.rb:446:in
`realpath'
	from /home/hedge/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/pathname.rb:446:in
`realpath'
	from (irb):21
	from /home/hedge/.rvm/rubies/ruby-1.9.2-p136/bin/irb:16:in `<main>'


-- 
πόλλ' οἶδ ἀλώπηξ, ἀλλ' ἐχῖνος ἓν μέγα
[The fox knows many things, but the hedgehog knows one big thing.]
  Archilochus, Greek poet (c. 680 BC – c. 645 BC)
http://wiki.hedgehogshiatus.com


More information about the rspec-users mailing list