The mystery of File::append

Discussion in 'Ruby' started by Nit Khair, Sep 18, 2008.

  1. Nit Khair

    Nit Khair Guest

    $ ri File::append
    gives me:

    File::append( file, str )
    Append to a file.

    CREDIT: George Moschovitis

    `$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 ?
    Nit Khair, Sep 18, 2008
    1. Advertisements

  2. Alle Thursday 18 September 2008, Nit Khair ha scritto:
    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
    require 'facets/file/write'
    File.append(file, str)

    I hope this helps

    Stefano Crocco, Sep 18, 2008
    1. Advertisements

  3. Nit Khair

    Nit Khair Guest

    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
    I can't remember if I managed to make the example run or not.

    (I have started with require rubygems and facets.)
    Nit Khair, Sep 18, 2008
  4. Alle Thursday 18 September 2008, Nit Khair ha scritto:
    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
    (, 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 Crocco, Sep 18, 2008
  5. Nit Khair

    Trans Guest

    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.
    It's just

    require 'facets/ansicode'


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

    Trans, Sep 18, 2008
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.