Class: Bootscale::Entry

Inherits:
Object
  • Object
show all
Defined in:
lib/bootscale/entry.rb

Constant Summary collapse

DL_EXTENSIONS =
[
  RbConfig::CONFIG['DLEXT'],
  RbConfig::CONFIG['DLEXT2'],
].reject { |ext| !ext || ext.empty? }.map { |ext| ".#{ext}"}
REQUIREABLE_FILES =
"**/*{#{DOT_RB},#{DL_EXTENSIONS.join(',')}}"
NORMALIZE_NATIVE_EXTENSIONS =
!DL_EXTENSIONS.include?(DOT_SO)
ALTERNATIVE_NATIVE_EXTENSIONS_PATTERN =
/\.(o|bundle|dylib)\z/
SLASH =
'/'.freeze
BUNDLE_PATH =
Bundler.bundle_path.cleanpath.to_s << SLASH

Instance Method Summary collapse

Constructor Details

#initialize(path) ⇒ Entry

Returns a new instance of Entry.



13
14
15
16
17
18
19
# File 'lib/bootscale/entry.rb', line 13

def initialize(path)
  @path = Pathname.new(path).cleanpath
  @absolute = @path.absolute?
  warn "Bootscale: Cannot speedup load for relative path #{@path}" unless @absolute
  @relative_slice = (@path.to_s.size + 1)..-1
  @contains_bundle_path = BUNDLE_PATH.start_with?(@path.to_s)
end

Instance Method Details

#requireablesObject



21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/bootscale/entry.rb', line 21

def requireables
  Dir[File.join(@path, REQUIREABLE_FILES)].each_with_object([]) do |absolute_path, all|
    next if @contains_bundle_path && absolute_path.start_with?(BUNDLE_PATH)
    relative_path = absolute_path.slice(@relative_slice)

    if NORMALIZE_NATIVE_EXTENSIONS
      relative_path.sub!(ALTERNATIVE_NATIVE_EXTENSIONS_PATTERN, DOT_SO)
    end

    all << [relative_path, @absolute && absolute_path]
  end
end