= 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.