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 (
| name | age | message | |
|---|---|---|---|
| |
CHANGELOG.txt | ||
| |
CREDITS.txt | ||
| |
LICENSE.txt | Sun Apr 06 19:09:13 -0700 2008 | |
| |
README.txt | Sun Apr 26 16:39:13 -0700 2009 | |
| |
Rakefile | ||
| |
TODO.txt | ||
| |
bin/ | Fri Apr 24 19:24:58 -0700 2009 | |
| |
demo/ | Sun Apr 26 16:39:13 -0700 2009 | |
| |
examples/ | ||
| |
lib/ | ||
| |
test/ |
README.txt
= rufus-decision == getting it sudo gem install -y rufus-decision or at http://rubyforge.org/frs/?group_id=4812 == intro blog post http://jmettraux.wordpress.com/2009/04/25/rufus-decision-11-ruby-decision-tables/ == usage More info at http://rufus.rubyforge.org/rufus-decision/classes/Rufus/Decision/Table.html but here is a recap. An example where a few rules determine which salesperson should interact with a customer with given characteristics. require 'rubygems' require 'rufus/decision' TABLE = Rufus::Decision::Table.new(%{ in:age,in:trait,out:salesperson 18..35,,adeslky 25..35,,bronco 36..50,,espadas 51..78,,thorsten 44..120,,ojiisan 25..35,rich,kerfelden ,cheerful,swanson ,maniac,korolev }) # Given a customer (a Hash instance directly, for # convenience), returns the name of the first # corresponding salesman. # def determine_salesperson (customer) TABLE.transform(customer)["salesperson"] end puts determine_salesperson( "age" => 72) # => thorsten puts determine_salesperson( "age" => 25, "trait" => "rich") # => adeslky puts determine_salesperson( "age" => 23, "trait" => "cheerful") # => adeslky puts determine_salesperson( "age" => 25, "trait" => "maniac") # => adeslky puts determine_salesperson( "age" => 44, "trait" => "maniac") # => espadas More at Rufus::Decision::Table Note that you can use a CSV table served over HTTP like in : require 'rubygems' require 'rufus/decision' TABLE = Rufus::DecisionTable.new( 'http://spreadsheets.google.com/pub?key=pCkopoeZwCNsMWOVeDjR1TQ&output=csv') # the CSV is : # # in:weather,in:month,out:take_umbrella? # # raining,,yes # sunny,,no # cloudy,june,yes # cloudy,may,yes # cloudy,,no def take_umbrella? (weather, month=nil) h = TABLE.transform('weather' => weather, 'month' => month) h['take_umbrella?'] == 'yes' end puts take_umbrella?('cloudy', 'june') # => true puts take_umbrella?('sunny', 'june') # => false In this example, the CSV table is the direction CSV representation of the Google spreadsheet at : http://spreadsheets.google.com/pub?key=pCkopoeZwCNsMWOVeDjR1TQ WARNING though : use at your own risk. CSV loaded from untrusted locations may contain harmful code. The rufus-decision gem has an abstract tree checker integrated, it will check all the CSVs that contain calls in Ruby and raise a security error when possibly harmful code is spotted. Bullet vs Armor. Be warned. == uninstalling it sudo gem uninstall -y rufus-decision == dependencies The gem 'rufus-dollar' (http://rufus.rubyforge.org/rufus-dollar) and the 'rufus-treechecker' gem (http://rufus.rubyforge.org/rufus-treechecker). == mailing list On the rufus-ruby list : http://groups.google.com/group/rufus-ruby == irc irc.freenode.net #ruote == issue tracker http://rubyforge.org/tracker/?atid=18584&group_id=4812&func=browse == source http://github.com/jmettraux/rufus-decision git clone git://github.com/jmettraux/rufus-decision.git == author John Mettraux, jmettraux@gmail.com http://jmettraux.wordpress.com == the rest of Rufus http://rufus.rubyforge.org == license MIT








