# The mystery of File::append

**URL:** <https://www.ruby-forum.com/t/the-mystery-of-file-append/148899>\
**Category:** Ruby\
**Created:** [September 18, 2008, 4:58am UTC](https://www.ruby-forum.com/t/the-mystery-of-file-append/148899 "2008-09-18T04:58:50Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![sentinel](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/fbc32d/32.png) [@sentinel](https://www.ruby-forum.com/u/sentinel)\
**Post date:** [September 18, 2008, 4:58am UTC](https://www.ruby-forum.com/t/the-mystery-of-file-append/148899/1 "2008-09-18T04:58:50Z")

</div>

$ ri File::append  
gives me:

```
 File::append( file, str )

```

* * *

```
 Append to a file.

   CREDIT: George M.

```

`$ri File` also shows me append as a class method.

However, my html documentation does not give this (1.8.6). Trying to use  
`File::append` in irb or ruby fails (no such method). Even google has no  
entry for this class method.

What mistake am I making ?

---

<div class="post-metadata">

**Author:** ![sentinel](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/fbc32d/32.png) [@sentinel](https://www.ruby-forum.com/u/sentinel)\
**Post date:** [September 18, 2008, 9:10am UTC](https://www.ruby-forum.com/t/the-mystery-of-file-append/148899/2 "2008-09-18T09:10:12Z")

</div>

Alle Thursday 18 September 2008, Nit K. ha scritto:

> However, my html documentation does not give this (1.8.6). Trying to use  
> `File::append` in irb or ruby fails (no such method). Even google has no  
> entry for this class method.
> 
> What mistake am I making ?

It’s part of the facets library. Unfortunately, ri doesn’t show the name  
of  
the file where a method or class is defined or the library or gem it  
comes  
from. To use that method, since it seems you already have facets  
installed,  
you need to do this:

require ‘rubygems’ #unless it’s already defined in the RUBYOPT  
environment  
#variable  
require ‘facets/file/write’  
File.append(file, str)

I hope this helps

Stefano

---

<div class="post-metadata">

**Author:** ![sentinel](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/fbc32d/32.png) [@sentinel](https://www.ruby-forum.com/u/sentinel)\
**Post date:** [September 18, 2008, 9:35am UTC](https://www.ruby-forum.com/t/the-mystery-of-file-append/148899/3 "2008-09-18T09:35:28Z")

</div>

Stefano C. wrote:

> It’s part of the facets library. Unfortunately, ri doesn’t show the name

Aah, thanks. Yes, I used facets last year…

However, would be grateful if you could tell me how to decide what to  
use in the require statement for a facets class. Whenever i use facets,  
i struggle to figure out the require statement. What is shown in the  
examples often does not work.

Some while back I came upon ProgressBar. It took me a while of trying to  
figure out the require.

Then Console::ANSICode gives an example: “include Console::ANSICode”

irb(main):011:0\> include Console::ANSICode  
NameError: uninitialized constant Console  
from (irb):11

I tried many combinations, finally “require ‘facets/ansicode’” did not  
give an error but still the “include Console::ANSICode” gives the error  
above.  
I can’t remember if I managed to make the example run or not.

(I have started with require rubygems and facets.)

---

<div class="post-metadata">

**Author:** ![sentinel](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/fbc32d/32.png) [@sentinel](https://www.ruby-forum.com/u/sentinel)\
**Post date:** [September 18, 2008, 3:08pm UTC](https://www.ruby-forum.com/t/the-mystery-of-file-append/148899/4 "2008-09-18T15:08:52Z")

</div>

On Sep 18, 3:27 am, Nit K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Stefano C. wrote:
> 
> > It’s part of the facets library. Unfortunately, ri doesn’t show the name
> 
> Aah, thanks. Yes, I used facets last year…
> 
> However, would be grateful if you could tell me how to decide what to  
> use in the require statement for a facets class. Whenever i use facets,  
> i struggle to figure out the require statement. What is shown in the  
> examples often does not work.

It is:

require ‘facets/{class|module}/{method\_name}’

There are some exceptions where one method is in the same file as  
another (eg. write/append), but these are being worked out and should  
be almost not existent in another release or two. Even so, require  
‘facets’ hides all that.

> Some while back I came upon ProgressBar. It took me a while of trying to  
> figure out the require.
> 
> Then Console::ANSICode gives an example: “include Console::ANSICode”
> 
> irb(main):011:0\> include Console::ANSICode  
> NameError: uninitialized constant Console  
> from (irb):11

It’s just

require ‘facets/ansicode’

ANSICode

The Console:: namespace has been deprecated. The docs just need to be  
fixed.

T.

---

<div class="post-metadata">

**Author:** ![sentinel](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/fbc32d/32.png) [@sentinel](https://www.ruby-forum.com/u/sentinel)\
**Post date:** [September 18, 2008, 10:45am UTC](https://www.ruby-forum.com/t/the-mystery-of-file-append/148899/5 "2008-09-18T10:45:11Z")

</div>

Alle Thursday 18 September 2008, Nit K. ha scritto:

> Some while back I came upon ProgressBar. It took me a while of trying to  
> above.  
> I can’t remember if I managed to make the example run or not.
> 
> (I have started with require rubygems and facets.)

According to the facets documentation, a simple

require ‘facets’

will require all the Core facets library. If you want to load only the  
Core  
methods for a single class (for example, the File class), you can do

require ‘facets/file’

If you want only to load a specific method, you can find the file where  
it’s  
defined by looking up the method you’re interested to in the facets rdoc  
api  
([http://facets.rubyforge.org/doc/index.html](http://facets.rubyforge.org/doc/index.html)), then clicking on the “show  
source” link. This will display the source code for the method. At the  
top of  
the source code, there’s a comment with the name of the file where the  
method  
is defined. This is the file you need to require. Note, however, that  
that  
line starts with something like ‘lib/core/facets/…/’. You should only  
put  
the part of the string starting with facets in your call to require.

All what I said is valid for recent versions of facets, so if you have  
an old  
version, you may need to update it.

Stefano

Stefano
