This repository is private.
All pages are served over SSL and all pushing and pulling is done over SSH.
No one may fork, clone, or view it unless they are added as a member.
Every repository with this icon (
) is private.
Every repository with this icon (
This repository is public.
Anyone may fork, clone, or view it.
Every repository with this icon (
) is public.
Every repository with this icon (
smoke /
| name | age | message | |
|---|---|---|---|
| |
.gitignore | Sat Apr 25 03:12:18 -0700 2009 | |
| |
LICENSE | Mon Mar 23 01:35:10 -0700 2009 | |
| |
README.markdown | Sat Nov 14 16:45:35 -0800 2009 | |
| |
Rakefile | Sun Oct 25 01:15:38 -0700 2009 | |
| |
VERSION.yml | Wed Oct 28 07:30:28 -0700 2009 | |
| |
examples/ | Thu Aug 13 06:31:59 -0700 2009 | |
| |
lib/ | Wed Oct 28 07:30:11 -0700 2009 | |
| |
rdoc/ | Sun Jun 14 07:03:33 -0700 2009 | |
| |
smoke.gemspec | Wed Oct 28 07:35:05 -0700 2009 | |
| |
spec/ | Wed Oct 28 07:30:11 -0700 2009 |
README.markdown
smoke
smoke is a Ruby based DSL that allows you to query web services such as YQL, RSS / Atom and JSON or XML in an elegant manner.
These "services" can then be re-represented, sorted and filtered. Data can be collected from multiple sources, sorted via a common property, chopped up and refried.
Then you can output as a plain ruby object or one of your other favourites (JSON, YAML, XML)
Examples of use
- The
examplesdirectory has something to get you running straight away - I powered my entire site using smoke, until further documentation exists, this is probably a good place to start.
- Read further details in the rdoc documentation or the wiki
Media
- Presentation from Webjam11 in Perth
- Presentation from Melbourne #roro
- Early screencast to get developer / peer feedback
Install
gem install smoke -s http://gemcutter.org
The concept
The concept comes from using Yahoo Pipes to make web based mash ups: Get a list of tv shows for my torrent client, compile a recipe book or make tools to give me a list of albums that artists in my music library are about to be released.
How or what to contribute
- Test everything you do
- Add a way to output (XML, anyone?)
- Examples of queries you'd like to be able to do (email / github message them to me)
API Examples
YQL
# This will use yahoo search to get an array of search results about Ruby
Smoke.yql(:ruby) do
select :all
from "search.web"
where :query, "ruby"
discard :title, /tuesday/i
end
Smoke.yql(:python) do
select :all
from "search.web"
where :query, "python"
end
Join sources and use them together
Smoke.join(:ruby, :python)
or even
Smoke.join(:python, :ruby) do
emit do
sort :title
rename :shit_name => :title
end
end
Define a source allowing for variables to be injected later
Source definition:
Smoke.feed :delicious do
prepare do
url "http://feeds.delicious.com/v2/rss/#{username}?count=15"
end
end
Execution:
Smoke.delicious.username("bschwarz").output
TODO (working on, just mental notes)
- "Plugin" / "registration" architecture for input parsers
- Output as a web feed (atom, rss)
- How to push through values like "author"?
- Passing modified time headers through to the atom formatter
Later / maybe
- YQL w/oAuth
- YQL Subqueries?
- Implement basic auth for sources
For wiki pages (docs, later)
- Document all sources with their irrespective differential methods
- How to use
path - YQL Definitions
- Tranformations
- Insert
- Joining
- Variable injection
- Sort, Reverse
- Keep, Discard
- Truncate
- Manually setting the content type for a url
Copyright
Copyright (c) 2009 Ben Schwarz. See LICENSE for details.







