Project

tool

0.07
No commit activity in last 3 years
No release in over 3 years
general purpose Ruby library used by Sinatra 2.0, Mustermann and related projects
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
~> 3.0.0.beta
 Project Readme

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.

Tool::Decoration

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

Tool::EqualityMap

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.

Tool::ThreadLocal

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]

Tool::WarningFilter

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