Method: Pathname#sub_ext

Defined in:
pathname.c

#sub_ext(repl) ⇒ Object

Return a pathname with repl added as a suffix to the basename.

If self has no extension part, repl is appended.

Pathname.new(‘/usr/bin/shutdown’).sub_ext(‘.rb’)

#=> #<Pathname:/usr/bin/shutdown.rb>


283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
# File 'pathname.c', line 283

static VALUE
path_sub_ext(VALUE self, VALUE repl)
{
    VALUE str = get_strpath(self);
    VALUE str2;
    long extlen;
    const char *ext;
    const char *p;

    StringValue(repl);
    p = RSTRING_PTR(str);
    extlen = RSTRING_LEN(str);
    ext = ruby_enc_find_extname(p, &extlen, rb_enc_get(str));
    if (ext == NULL) {
        ext = p + RSTRING_LEN(str);
    }
    else if (extlen <= 1) {
        ext += extlen;
    }
    str2 = rb_str_subseq(str, 0, ext-p);
    rb_str_append(str2, repl);
    return rb_class_new_instance(1, &str2, rb_obj_class(self));
}