Sha256: e3a4c4ee29ef56d6260ff3155e0aebeb3758b3c09204d044c07631bf118f0a0a

Contents?: true

Size: 1016 Bytes

Versions: 2

Compression:

Stored size: 1016 Bytes

Contents

require "faster_path/version"
require 'pathname'
require "ffi"

module FasterPath
  # Spec to Pathname#absolute?
  def self.absolute?(pth)
    Rust.is_absolute(pth)
  end

  # Spec to Pathname#chop_basename
  # WARNING! Pathname#chop_basename in STDLIB doesn't handle blank strings correctly!
  # This implementation correctly handles blank strings just as Pathname had intended
  # to handle non-path strings.
  def self.chop_basename(pth)
    d,b = [Rust.dirname(pth), Rust.basename(pth)]
    if blank?(d) && blank?(b)
      nil
    else
      [d,b]
    end
  end

  def self.blank?(str)
    Rust.is_blank(str)
  end

  private
  module Rust
    extend FFI::Library
    ffi_lib 'target/release/libfaster_path.so'
    attach_function :is_absolute, [ :string ], :bool
    attach_function :is_blank, [ :string ], :bool
    attach_function :basename, [ :string ], :string
    attach_function :dirname, [ :string ], :string
    #attach_function :chop_basename, [ :string ], [:string]
  end
  private_constant :Rust
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
faster_path-0.0.3 lib/faster_path.rb
faster_path-0.0.2 lib/faster_path.rb