Module: Jolt::Native::Loader

Defined in:
lib/jolt/native.rb

Class Method Summary collapse

Class Method Details

.candidate_directoriesObject



50
51
52
53
54
55
56
57
58
59
# File 'lib/jolt/native.rb', line 50

def candidate_directories
  [
    ENV["JOLT_RUBY_NATIVE_DIR"],
    File.join(__dir__, "native", platform),
    installed_extension_directory,
    File.join(project_root, "tmp", "native", platform, "lib"),
    File.join(project_root, "tmp", "native", platform, "lib", "Release"),
    File.join(project_root, "tmp", "native", platform, "Release")
  ].compact
end

.installed_extension_directoryObject



61
62
63
64
65
66
67
68
# File 'lib/jolt/native.rb', line 61

def installed_extension_directory
  return unless defined?(Gem)

  specification = Gem.loaded_specs["jolt-ruby"]
  return unless specification

  File.join(specification.extension_dir, "jolt", "native", platform)
end

.libraries_exist?(directory) ⇒ Boolean

Returns:

  • (Boolean)


89
90
91
# File 'lib/jolt/native.rb', line 89

def libraries_exist?(directory)
  library_names.all? { |name| File.file?(File.join(directory, name)) }
end

.library_namesObject



78
79
80
81
82
83
84
85
86
87
# File 'lib/jolt/native.rb', line 78

def library_names
  case RbConfig::CONFIG.fetch("host_os")
  when /darwin/
    %w[libjoltc.dylib libjolt_ruby_helper.dylib]
  when /mswin|mingw/
    %w[joltc.dll jolt_ruby_helper.dll]
  else
    %w[libjoltc.so libjolt_ruby_helper.so]
  end
end

.library_pathsObject



43
44
45
46
47
48
# File 'lib/jolt/native.rb', line 43

def library_paths
  directory = candidate_directories.find { |path| libraries_exist?(path) }
  return library_names unless directory

  library_names.map { |name| File.join(directory, name) }
end

.platformObject



70
71
72
# File 'lib/jolt/native.rb', line 70

def platform
  Platform.tag
end

.project_rootObject



74
75
76
# File 'lib/jolt/native.rb', line 74

def project_root
  File.expand_path("../..", __dir__)
end