From: "Florian Groß" Date: 2006-05-13T23:15:37+09:00 Subject: Re: Hash key formatter --------------010900010308010102010507 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit transfire@gmail.com wrote: > Add an attribute to Hash to store transformation of keys. For instance: > > h = Hash.new > h.key_format do |k| > k.to_s.downcase.to_sym > } > > h['BIG'] = 10 > h #=> { :big => 10 } > > Good little RCR. Hm, Hash::MixIn already supports this for hash-like classes. See attachment. -- http://flgr.0x42.net/ --------------010900010308010102010507 Content-Type: application/x-ruby; name="method-dict.rb" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="method-dict.rb" IyBQcm92aWRlIC5rZXlzLCAuZmV0Y2gsIC5zdG9yZSBhbmQgLmRlbGV0ZSBhbmQNCiMgZ2V0 IHRoZSBjb21wbGV0ZSBIYXNoIGludGVyZmFjZSBmb3IgZnJlZS4NCiMNCiMgTm90ZSB0aGF0 IC5kZWxldGUgc2hvdWxkIHJldHVybiB0aGUgZGVsZXRlZCB2YWx1ZSENCiMNCiMgWW91IGNh biBhbHNvIGltcGxlbWVudCAubm9ybWFsaXplX2tleSBpZiB5b3Ugd2FudA0KIyB0byB0cmVh dCBkaWZmZXJlbnQga2V5cyBhcyBiZWluZyBlcXVhbC4gWW91IHdpbGwNCiMgc3RpbGwgaGF2 ZSB0byBtYW51YWxseSBub3JtYWxpemUga2V5cyBpbiAuZmV0Y2gsDQojIC5kZWxldGUgYW5k IC5zdG9yZSwgaG93ZXZlci4NCiMNCiMgSWYgeW91IHdhbnQgdG8gc3VwcG9ydCBkZWZhdWx0 IHZhbHVlcyBhbmQgYmxvY2tzDQojIHlvdSBzaG91bGQgbWFrZSB5b3VyIG93biBpbml0aWFs aXplIG1ldGhvZCBwYXNzDQojIHRyYWlsaW5nIGFyZ3VtZW50cyBhbmQgdGhlIGJsb2NrIHRv IHRoZQ0KIyBoYXNoX2luaXRpYWxpemUgbWV0aG9kLg0KbW9kdWxlIEhhc2g6Ok1peEluDQog IGRlZiBzZWxmLmFwcGVuZF9mZWF0dXJlcyhtb2QpDQogICAgc3VwZXINCg0KICAgIG1vZC5t b2R1bGVfZXZhbCBkbw0KICAgICAgYWxpYXMgOltdPSA6c3RvcmUNCg0KICAgICAgaWYgbm90 IG1ldGhvZF9kZWZpbmVkPyg6bm9ybWFsaXplX2tleSkgYW5kDQogICAgICAgICBub3QgcHJp dmF0ZV9tZXRob2RfZGVmaW5lZD8oOm5vcm1hbGl6ZV9rZXkpDQogICAgICB0aGVuDQogICAg ICAgIGRlZiBub3JtYWxpemVfa2V5KGtleSkga2V5IGVuZA0KICAgICAgICBwcml2YXRlIDpu b3JtYWxpemVfa2V5DQogICAgICBlbmQNCiAgICBlbmQNCiAgZW5kDQoNCiAgZGVmIGhhc2hf aW5pdGlhbGl6ZShkZWZhdWx0ID0gKG5vX2RlZmF1bHQgPSB0cnVlKSwgJmRlZmF1bHRfcHJv YykNCiAgICBpZiBkZWZhdWx0X3Byb2MgYW5kIG5vdCBub19kZWZhdWx0IHRoZW4NCiAgICAg IHJhaXNlKEFyZ3VtZW50RXJyb3IsICJjYW4ndCBzdXBwbHkgYm90aCBkZWZhdWx0IHByb2Mg YW5kIGRlZmF1bHQgdmFsdWUiKQ0KICAgIGVuZA0KDQogICAgQGRlZmF1bHRfcHJvYyA9IGRl ZmF1bHRfcHJvYw0KICAgIEBkZWZhdWx0ID0gbm9fZGVmYXVsdCA/IG5pbCA6IGRlZmF1bHQN CiAgZW5kDQogIHByaXZhdGUgOmhhc2hfaW5pdGlhbGl6ZQ0KDQogIGF0dHJfYWNjZXNzb3Ig OmRlZmF1bHQNCiAgYXR0cl9yZWFkZXIgOmRlZmF1bHRfcHJvYw0KDQogIGRlZiBbXShrZXkp DQogICAga2V5ID0gbm9ybWFsaXplX2tleShrZXkpDQogICAgZmV0Y2goa2V5KSByZXNjdWUN CiAgICAgIGlmIEBkZWZhdWx0X3Byb2MgdGhlbg0KICAgICAgICBAZGVmYXVsdF9wcm9jLmNh bGwoc2VsZiwga2V5KQ0KICAgICAgZWxzZQ0KICAgICAgICBAZGVmYXVsdA0KICAgICAgZW5k DQogIGVuZA0KDQogIGRlZiBlYWNoX2tleSgmYmxvY2spIGtleXMuZWFjaCgmYmxvY2spIGVu ZA0KICBkZWYgZWFjaF92YWx1ZSgmYmxvY2spIHZhbHVlcy5lYWNoKCZibG9jaykgZW5kDQog IGRlZiBlYWNoX3BhaXIoJmJsb2NrKQ0KICAgIGtleXMuZWFjaCBkbyB8a2V5fA0KICAgICAg eWllbGQoa2V5LCBzZWxmLmZldGNoKGtleSkpDQogICAgZW5kDQogIGVuZA0KICBhbGlhcyA6 ZWFjaCA6ZWFjaF9wYWlyDQogIGluY2x1ZGUgRW51bWVyYWJsZQ0KICBhbGlhcyA6cGFpcnMg OnRvX2ENCg0KICBkZWYgaGFzX2tleT8oa2V5KQ0KICAgIHNlbGYua2V5cy5pbmNsdWRlPyhu b3JtYWxpemVfa2V5KGtleSkpDQogIGVuZA0KICBhbGlhcyA6aW5jbHVkZT8gOmhhc19rZXk/ DQogIGFsaWFzIDptZW1iZXI/IDpoYXNfa2V5Pw0KICBhbGlhcyBrZXk/IDpoYXNfa2V5Pw0K DQogIGRlZiB2YWx1ZXMoKQ0KICAgIHNlbGYua2V5cy5tYXAgZG8gfGtleXwNCiAgICAgIHNl bGYuZmV0Y2goa2V5KQ0KICAgIGVuZA0KICBlbmQNCg0KICBkZWYgaW5kZXgod2FudF92YWx1 ZSkNCiAgICBzZWxmLmtleXMuZmluZCBkbyB8a2V5LCB2YWx1ZXwNCiAgICAgIHNlbGYuZmV0 Y2goa2V5KSA9PSB3YW50X3ZhbHVlDQogICAgZW5kDQogIGVuZA0KDQogIGRlZiBoYXNfdmFs dWU/KHdhbnRfdmFsdWUpDQogICAgc2VsZi5rZXlzLmVhY2ggZG8gfGtleXwNCiAgICAgIHJl dHVybiB0cnVlIGlmIHNlbGYuZmV0Y2goa2V5KSA9PSB3YW50X3ZhbHVlDQogICAgZW5kDQog ICAgcmV0dXJuIGZhbHNlDQogIGVuZA0KICBhbGlhcyA6dmFsdWU/IDpoYXNfdmFsdWU/DQoN CiAgZGVmIGNsZWFyKCkNCiAgICBzZWxmLmtleXMuZWFjaCB7IHxrZXl8IHNlbGYuZGVsZXRl KGtleSkgfQ0KICBlbmQNCg0KICBkZWYgc2l6ZSgpIHNlbGYua2V5cy5zaXplIGVuZA0KICBh bGlhcyA6bGVuZ3RoIDpzaXplDQogIGRlZiBlbXB0eT8oKSBzZWxmLmtleXMuZW1wdHk/IGVu ZA0KDQogIGRlZiBkZWxldGVfaWYoKQ0KICAgIHNlbGYuZWFjaCBkbyB8a2V5LCB2YWx1ZXwN CiAgICAgIHNlbGYuZGVsZXRlKGtleSkgaWYgeWllbGQoa2V5LCB2YWx1ZSkNCiAgICBlbmQN CiAgICByZXR1cm4gc2VsZg0KICBlbmQNCiAgYWxpYXMgOnJlamVjdCEgOmRlbGV0ZV9pZg0K DQogIGRlZiByZWplY3QoJmJsb2NrKQ0KICAgIHNlbGYuZHVwLmRlbGV0ZV9pZigmYmxvY2sp DQogIGVuZA0KDQogIGRlZiByZWhhc2goKQ0KICAgIG9sZF9wYWlycyA9IHNlbGYucGFpcnMN Cg0KICAgIHNlbGYuY2xlYXINCg0KICAgIG9sZF9wYWlycy5lYWNoIGRvIHxrZXksIHZhbHVl fA0KICAgICAgc2VsZi5zdG9yZShrZXksIHZhbHVlKQ0KICAgIGVuZA0KICBlbmQNCg0KICBk ZWYgdmFsdWVzX2F0KCprZXlzKQ0KICAgIGtleXMubWFwIHsgfGtleXwgc2VsZltrZXldIH0N CiAgZW5kDQoNCiAgYWxpYXMgOmluZGljZXMgOnZhbHVlc19hdCAjIERlcHJlY2F0ZWQsIGJ1 dCBzdGlsbCBpbiBSdWJ5Lg0KICBhbGlhcyA6aW5kZXhlcyA6dmFsdWVzX2F0ICMgU2FtZSBm b3IgdGhpcyBvbmUuDQoNCiAgZGVmIGludmVydCgpDQogICAgcmVzdWx0ID0ge30NCiAgICBz ZWxmLmVhY2ggZG8gfGtleSwgdmFsdWV8DQogICAgICByZXN1bHQuc3RvcmUodmFsdWUsIGtl eSkNCiAgICBlbmQNCiAgICByZXR1cm4gcmVzdWx0DQogIGVuZA0KDQogIGRlZiBtZXJnZSEo b3RoZXIpDQogICAgb3RoZXIuZWFjaCBkbyB8a2V5LCB2YWx1ZXwNCiAgICAgIGlmIHNlbGYu aGFzX2tleT8oa2V5KSBhbmQgYmxvY2tfZ2l2ZW4/IHRoZW4NCiAgICAgICAgeWllbGQoa2V5 LCBzZWxmLmZldGNoKGtleSksIHZhbHVlKQ0KICAgICAgZWxzZQ0KICAgICAgICByZXN1bHQu c3RvcmUoa2V5LCB2YWx1ZSkNCiAgICAgIGVuZA0KICAgIGVuZA0KDQogICAgcmV0dXJuIHNl bGYNCiAgZW5kDQogIGFsaWFzIDp1cGRhdGUgOm1lcmdlIQ0KDQogIGRlZiBtZXJnZShvdGhl ciwgJmJsb2NrKQ0KICAgIHNlbGYuZHVwLm1lcmdlIShvdGhlciwgJmJsb2NrKQ0KICBlbmQN Cg0KICBkZWYgcmVwbGFjZShvdGhlcikNCiAgICBzZWxmLmNsZWFyDQogICAgb3RoZXIuZWFj aCBkbyB8a2V5LCB2YWx1ZXwNCiAgICAgIHNlbGYuc3RvcmUoa2V5LCB2YWx1ZSkNCiAgICBl bmQNCiAgZW5kDQogIGFsaWFzIDppbml0aWFsaXplX2NvcHkgOnJlcGxhY2UNCg0KICBkZWYg c2hpZnQoKQ0KICAgIHJldHVybiBAZGVmYXVsdF92YWx1ZSBpZiBlbXB0eT8NCiAgICBrZXkg PSBzZWxmLmtleXMuZmlyc3QNCiAgICB2YWx1ZSA9IHNlbGYuZGVsZXRlKGtleSkNCiAgICBb a2V5LCB2YWx1ZV0NCiAgZW5kDQoNCiAgZGVmIHRvX2hhc2goKSBzZWxmIGVuZA0KDQogIGRl ZiA9PShvdGhlcikNCiAgICBzZWxmLnNpemUgPT0gb3RoZXIuc2l6ZSBhbmQNCiAgICBvdGhl ci5hbGw/IGRvIHxrZXksIHZhbHVlfA0KICAgICAgc2VsZi5oYXNfa2V5PyhrZXkpIGFuZA0K ICAgICAgc2VsZi5mZXRjaChrZXkpID09IHZhbHVlDQogICAgZW5kDQogIGVuZA0KDQogIGRl ZiBoYXNoKCkNCiAgICBbc2VsZi5zaXplLCBzZWxmLnBhaXJzLnNvcnQsIHNlbGYuY2xhc3Nd Lmhhc2gNCiAgZW5kDQoNCiAgZGVmIGVxbD8ob3RoZXIpDQogICAgc2VsZiA9PSBvdGhlciBh bmQNCiAgICBub3QgQGRlZmF1bHRfcHJvYyBhbmQgbm90IG90aGVyLmRlZmF1bHRfcHJvYyBh bmQNCiAgICBAZGVmYXVsdCA9PSBvdGhlci5kZWZhdWx0DQogIGVuZA0KDQogIGRlZiBpbnNw ZWN0KCkNCiAgICBjb250ZW50X3JlcHIgPSBzZWxmLm1hcCB7IHxrZXksIHZhbHVlfCAiI3tr ZXkuaW5zcGVjdH09PiN7dmFsdWUuaW5zcGVjdH0iIH0uam9pbigiLCAiKQ0KICAgICIjPCN7 c2VsZi5jbGFzc306IHsje2NvbnRlbnRfcmVwcn19PiINCiAgZW5kDQoNCiAgZGVmIHByZXR0 eV9wcmludChxKQ0KICAgIHEuZ3JvdXAoMSwgIiM8I3tzZWxmLmNsYXNzfTogIiwgIj4iKSBk bw0KICAgICAgcS5wcF9oYXNoKHNlbGYpDQogICAgZW5kDQogIGVuZA0KZW5kDQoNCmNsYXNz IE9iamVjdA0KICBjbGFzcyBNZXRob2REaWN0DQogICAgZGVmIGluaXRpYWxpemUob2JqZWN0 LCAqbW9yZSwgJmJsb2NrKSAjIDpub2RvYzoNCiAgICAgIEBvYmplY3QgPSBvYmplY3QNCiAg ICAgIEBtZXRhID0gY2xhc3MgPDwgQG9iamVjdDsgc2VsZjsgZW5kIHJlc2N1ZSBuaWwNCg0K ICAgICAgaGFzaF9pbml0aWFsaXplKCptb3JlLCAmYmxvY2spDQogICAgZW5kDQoNCiAgICBk ZWYgbm9ybWFsaXplX2tleShrZXkpIGtleS50b19zeW0gZW5kDQogICAgcHJpdmF0ZSA6bm9y bWFsaXplX2tleQ0KDQogICAgZGVmIGtleXMoKQ0KICAgICAgQG9iamVjdC5tZXRob2RzLm1h cCB7IHxtZXRob2R8IG1ldGhvZC50b19zeW0gfQ0KICAgIGVuZA0KDQogICAgZGVmIGZldGNo KGtleSkNCiAgICAgIEBvYmplY3QubWV0aG9kKGtleSkNCiAgICBlbmQNCg0KICAgIGRlZiBz dG9yZShrZXksIHZhbHVlKQ0KICAgICAgdW5sZXNzIEBtZXRhDQogICAgICAgIHJhaXNlKFR5 cGVFcnJvciwgImNhbiBub3QgYWRkIG5ldyBtZXRob2RzIHRvIHRoaXMgZGljdCIpDQogICAg ICBlbmQNCiAgICAgIEBtZXRhLnNlbmQoOmRlZmluZV9tZXRob2QsIGtleSwgJnZhbHVlKQ0K ICAgIGVuZA0KDQogICAgZGVmIGRlbGV0ZShrZXkpDQogICAgICB1bmxlc3MgQG1ldGENCiAg ICAgICAgcmFpc2UoVHlwZUVycm9yLCAiY2FuIG5vdCBkZWxldGUgbWV0aG9kcyBmcm9tIHRo aXMgZGljdCIpDQogICAgICBlbmQNCiAgICAgIEBtZXRhLnNlbmQoOnVuZGVmX21ldGhvZCwg a2V5KQ0KICAgIGVuZA0KDQogICAgdW5kZWZfbWV0aG9kIDpkdXAsIDpjbG9uZQ0KDQogICAg aW5jbHVkZSBIYXNoOjpNaXhJbg0KICBlbmQNCg0KICBkZWYgZGljdCgpIE1ldGhvZERpY3Qu bmV3KHNlbGYpIGVuZA0KZW5kDQo= --------------010900010308010102010507--