Make sure you view the correct docs: latest release, master.
Welcome to Tool, the general purpose Ruby library used by Sinatra 2.0, Mustermann and related projects.
Mixin for easy method decorations.
class Frank
extend Tool::Decoration
def self.get(path, &block)
decorate(block) do |method|
puts "mapping GET #{path} to #{method}"
end
end
end
class MyApp < Frank
get '/hi' do
"Hello World"
end
get '/'; get '/index.php'
def index
"This is the index page."
end
end
Weak reference caching based on key equality. Used for caching.
class ExpensiveComputation
@map = Tool::EqualityMap.new
def self.new(*args)
@map.fetch(*args) { super }
end
end
Note that fetch
is not guaranteed to return the object, even if it has not been
garbage collected yet, especially when used concurrently. Therefore, the block passed to fetch
has to
be idempotent.
Have thread local values without them actually being thread global.
Advantages:
- Values for all threads are garbage collected when ThreadLocal instance is.
- Values for specific thread are garbage collected when thread is.
- No hidden global state.
- Supports other data types besides hashes.
local = Tool::ThreadLocal.new
local[:key] = "value"
Thread.new do
local[:key] = "other value"
puts local[:key] # other value
end.join
puts local[:key] # value
Usage with a pre-filled array:
local = Tool::ThreadLocal.new([:foo])
local << :bar
Thread.new { p local }.join # [:foo]
p local # [:foo, :bar]
Enables Ruby's built-in warnings (-w) but filters out those caused by third-party gems. Does not invlove any manual set up.
require 'tool/warning_filter'
Foo = 10
Foo = 20