Module: BFS
  
  
  
  
  
  
  
  
  
  
  
  
    - Defined in:
- lib/bfs.rb,
 lib/bfs/blob.rb,
 lib/bfs/bucket.rb,
 lib/bfs/errors.rb,
 lib/bfs/helpers.rb,
 lib/bfs/bucket/fs.rb,
 lib/bfs/bucket/in_mem.rb,
 lib/bfs/bucket/abstract.rb
 
Defined Under Namespace
  
    
      Modules: Bucket
    
  
    
      Classes: Blob, FileInfo, FileNotFound, Writer
    
  
  
    
      Class Method Summary
      collapse
    
    
  
  
    Class Method Details
    
      
  
  
    .defer(obj, method)  ⇒ Object 
  
  
  
  
    | 
83
84
85
86 | # 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)  ⇒ Object 
  
  
  
  
    | 
78
79
80
81 | # 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)  ⇒ Object 
  
  
  
  
    | 
70
71
72
73
74
75
76 | # 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)  ⇒ Object 
  
  
  
  
    | 
38
39
40
41
42
43
44
45
46 | # 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)  ⇒ Object 
  
  
  
  
    | 
58
59
60
61
62
63
64
65
66
67
68 | # 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)  ⇒ Object 
  
  
  
  
    | 
48
49
50
51
52
53
54
55
56 | # 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 |