= characterizable "Cognitive mechanisms, on this view, take mathematically characterizable inputs to deliver mathematically characterizable outputs, and qua computational devices, that is all." http://tinyurl.com/28tcrw2 == What is a BetterHash? It just brings some Ruby 1.9 behavior to Ruby 1.8 hashes... (from http://webonrails.com/2009/02/06/ruby-191-hash) RUBY_VERSION => 1.8.6 >> hash = {:a=> 1, :b=>2, :c=>3, :d=>4} => {:b=>2, :c=>3, :d=>4, :a=>1} >> hash.select{|k,v| k == :c } => [[:c, 3]] RUBY_VERSION => 1.9.1 >> hash = {:a=> 1, :b=>2, :c=>3, :d=>4} => {:a=>1, :b=>2, :c=>3, :d=>4} >> hash.select{|k,v| k == :c } => {:c=>3} I hope these two tests show the value of BetterHash in the context of this gem... should "not be annoying to work with characteristics on a particular instance" do a = SimpleAutomobile.new a.make = 'Nissan' assert_same_contents [:make], a.characteristics.effective.keys assert_same_contents [:make], a.characteristics.effective.select { true }.keys end should "not be annoying to work with characteristics hashes on a class level" assert_same_contents [:make, :model, :variant], SimpleAutomobile.characteristics.keys assert_same_contents [:make, :model, :variant], SimpleAutomobile.characteristics.select { true }.keys end If you didn't have BetterHash, you wouldn't be able to call #keys because in Ruby 1.8 Hash#select (and #reject) gives you back an Array. == What is a Snapshot? It's a hash of the characteristics at a particular time... should "keep snapshots separately" do my_car = Automobile.new my_car.make = 'Ford' my_car.model_year = 1999 snapshot = my_car.characteristics assert_same_contents [:make, :model_year], snapshot.effective.keys my_car.make = nil assert_same_contents [], my_car.characteristics.effective.keys # up to date! assert_same_contents [:make, :model_year], snapshot.effective.keys # frozen in time! end There are two important points here: * If you call my_car.characteristics, you will always get the most recent snapshot * If you save the output to a variable like snapshot, that snapshot won't change == Note on Patches/Pull Requests * Fork the project. * Make your feature addition or bug fix. * Add tests for it. This is important so I don't break it in a future version unintentionally. * Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull) * Send me a pull request. Bonus points for topic branches. == Copyright Copyright (c) 2010 Seamus Abshere. See LICENSE for details.