module BFS
Public Class Methods
defer(obj, method)
click to toggle source
# File lib/bfs.rb, line 83 def self.defer(obj, method) owner = Process.pid ObjectSpace.define_finalizer(obj, ->(*) { obj.send(method) if Process.pid == owner }) end
norm_mode(mode)
click to toggle source
# File lib/bfs.rb, line 78 def self.norm_mode(mode) mode = mode.to_i(8) if mode.is_a?(String) mode & 0o000777 end
norm_path(path)
click to toggle source
# File lib/bfs.rb, line 70 def self.norm_path(path) path = path.to_s.dup path.gsub!(File::SEPARATOR, '/') path.sub!(%r{^/+}, '') path.sub!(%r{/+$}, '') path end
register(*schemes, &resolver)
click to toggle source
# File lib/bfs.rb, line 38 def self.register(*schemes, &resolver) @registry ||= {} schemes.each do |scheme| scheme = scheme.to_s raise(ArgumentError, "scheme #{scheme} is already registered") if @registry.key?(scheme) @registry[scheme] = resolver end end
resolve(url, &block)
click to toggle source
# File lib/bfs.rb, line 58 def self.resolve(url, &block) url = url.is_a?(::URI) ? url.dup : URI.parse(url) rsl = @registry[url.scheme] raise ArgumentError, "Unable to resolve #{url}, scheme #{url.scheme} is not registered" unless rsl opts = {} CGI.parse(url.query.to_s).each do |key, values| opts[key.to_sym] = values.first end rsl.call(url, opts, block) end
unregister(*schemes)
click to toggle source
# File lib/bfs.rb, line 48 def self.unregister(*schemes) @registry ||= {} schemes.each do |scheme| scheme = scheme.to_s raise(ArgumentError, "scheme #{scheme} is not registered") unless @registry.key?(scheme) @registry.delete(scheme) end end