jmettraux / rufus-decision
- Source
- Commits
- Network (0)
- Issues (0)
- Downloads (3)
- Wiki (1)
- Graphs
-
Branch:
master
| name | age | message | |
|---|---|---|---|
| |
CHANGELOG.txt | Sun Sep 06 22:03:15 -0700 2009 | |
| |
CREDITS.txt | Sun Sep 06 22:03:15 -0700 2009 | |
| |
LICENSE.txt | Sun Apr 06 19:09:13 -0700 2008 | |
| |
README.txt | Sun Apr 26 16:39:13 -0700 2009 | |
| |
Rakefile | Sun Sep 06 21:32:41 -0700 2009 | |
| |
TODO.txt | Sun Sep 06 21:24:31 -0700 2009 | |
| |
bin/ | Fri Apr 24 19:24:58 -0700 2009 | |
| |
demo/ | Sun Apr 26 16:39:13 -0700 2009 | |
| |
examples/ | Sat Jun 14 06:13:15 -0700 2008 | |
| |
lib/ | Sun Sep 06 21:54:57 -0700 2009 | |
| |
test/ | Sun Sep 06 21:54:57 -0700 2009 |
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
