Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rkh/tool
Last synced: 19 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/rkh/tool
- Owner: rkh
- License: mit
- Created: 2011-10-27T01:50:56.000Z (about 13 years ago)
- Default Branch: master
- Last Pushed: 2018-10-30T18:09:26.000Z (about 6 years ago)
- Last Synced: 2024-10-14T19:42:48.336Z (about 1 month ago)
- Language: Ruby
- Size: 232 KB
- Stars: 14
- Watchers: 4
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
*Make sure you view the correct docs: [latest release](http://rubydoc.info/gems/tool/frames), [master](http://rubydoc.info/github/rkh/tool/master/frames).*
Welcome to [Tool](http://www.youtube.com/watch?v=mYKLvYGqaC0), the general purpose Ruby library used by Sinatra 2.0, Mustermann and related projects.
## Tool::Decoration
Mixin for easy method decorations.
``` ruby
class Frank
extend Tool::Decoration
def self.get(path, &block)
decorate(block) do |method|
puts "mapping GET #{path} to #{method}"
end
end
endclass MyApp < Frank
get '/hi' do
"Hello World"
endget '/'; get '/index.php'
def index
"This is the index page."
end
end
```## Tool::EqualityMap
Weak reference caching based on key equality.
Used for caching.``` ruby
class ExpensiveComputation
@map = Tool::EqualityMap.newdef 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.``` ruby
local = Tool::ThreadLocal.new
local[:key] = "value"Thread.new do
local[:key] = "other value"
puts local[:key] # other value
end.joinputs local[:key] # value
```Usage with a pre-filled array:
``` ruby
local = Tool::ThreadLocal.new([:foo])
local << :barThread.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.``` ruby
require 'tool/warning_filter'Foo = 10
Foo = 20
```