From: Daniel Amelang Date: 2005-05-28T14:30:30+09:00 Subject: Re: Methods with lots of arguments ------=_Part_4836_16777033.1117258223156 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Jamis gave me permission to send out a small mixin he wrote a couple years back that takes care of all this for you. He never made a public release of it; we were just playing with the idea at work one time and he put it all together in a module to use later. I'd almost forgotten about it. Come Ruby 1.9/2.0, we'll have much of this built-in to the language. I don't remember how well ruby-talk handles attachments, so forgive me if this doesn't come through right the first time. Dan Amelang ------=_Part_4836_16777033.1117258223156 Content-Type: application/octet-stream; name="parmvalid.rb" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="parmvalid.rb" IyBQYXJhbWV0ZXJWYWxpZGF0b3IsIGEga2V5d29yZCBhcmd1bWVudCBtb2R1bGUgZm9yIFJ1YnkN CiMgQ29weXJpZ2h0IChDKSAyMDA1ICBKYW1pcyBCdWNrIChqYW1pc0AzN3NpZ25hbHMuY29tKQ0K Iw0KIyBQYXJhbWV0ZXJWYWxpZGF0b3IgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBCU0QgbGljZW5zZS4gDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KIyBQYXJhbWV0ZXJWYWxp ZGF0b3IgaXMgYSBtaXhpbiBtb2R1bGUgcHJvdmlkaW5nIHBhcmFtZXRlciB2YWxpZGF0aW9uIGZv cg0KIyBmdW5jdGlvbnMgYW5kIG1ldGhvZHMgdGhhdCBlbXBsb3kgUnVieSdzICJrZXl3b3JkIGFy Z3VtZW50cyIgaW1wbGVtZW50aW9uLg0KIw0KIyBUbyB1c2UgaXQgaW4gYSBjbGFzczoNCiMNCiMg KiA8dHQ+cmVxdWlyZSAncGFybXZhbGlkJzwvdHQ+DQojICogPHR0PmluY2x1ZGUgUGFyYW1ldGVy VmFsaWRhdG9yPC90dD4NCiMgKiBpbiB5b3VyIG1ldGhvZCBkZWZpbml0aW9uLCBpbnZva2UgUGFy YW1ldGVyVmFsaWRhdG9yI3ZhbGlkYXRlX3BhcmFtZXRlcnMsDQojICAgcGFzc2luZyBpbiB0aGUg aGFzaCBvZiB0aGUgYWN0dWFsIHBhcmFtZXRlcnMsIGFuZCBhIGhhc2ggb2YgdmFsaWQgcGFyYW1l dGVycw0KIyAgICggbmFtZT0+ZGVmYXVsdF92YWx1ZSBwYWlycywgd2l0aCA8dHQ+ZGVmYXVsdF92 YWx1ZT09UkVRVUlSRUQ8L3R0PiBpZiB0aGUgcGFyYW1ldGVyIGlzDQojICAgbm90IG9wdGlvbmFs KS4gIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB2YWxpZGF0ZV9wYXJhbWV0ZXJzIHdpbGwgYmUgYSBo YXNoIG9mDQojICAgdGhlIHBhcmFtZXRlcnMsIGJvdGggdGhlIG9wdGlvbmFsIG9uZXMgdGhhdCB3 ZXJlbid0IHBhc3NlZCBpbiwgYW5kIHRoZSBvbmVzDQojICAgdGhhdCB3ZXJlLg0KIyAqIGlmIHlv dSB3YW50IGVhY2ggcGFyYW1ldGVyIHZhbGlkYXRlZCBhbmQgdGhlbiBzZXQgYXMgYW4gaW5zdGFu Y2UgdmFyaWFibGUgb2YNCiMgICB0aGUgY2xhc3MsIHVzZSB2YWxpZGF0ZV9hbmRfaW5zdGFudGlh dGVfcGFyYW1ldGVycy4NCiMgKiBpZiB5b3Ugd2FudCBlYWNoIHBhcmFtZXRlciB2YWxpZGF0ZWQg YW5kIHRoZW4gc2V0IHVzaW5nIHNpbWlsYXJseS1uYW1lZA0KIyAgIHNldHRlcnMgaW4gdGhlIGNs YXNzLCB1c2UgdmFsaWRhdGVfYW5kX3NldF9wYXJhbWV0ZXJzLg0KIw0KIyBFeGFtcGxlOg0KIw0K IyAgIHJlcXVpcmUgJ3Bhcm12YWxpZCcNCiMNCiMgICBjbGFzcyBEZW1vDQojICAgICBpbmNsdWRl IFBhcmFtZXRlclZhbGlkYXRvcg0KIw0KIyAgICAgZGVmIGluaXRpYWxpemUoIGFyZ3MgKQ0KIyAg ICAgICB2YWxpZGF0ZV9hbmRfaW5zdGFudGlhdGVfcGFyYW1ldGVycyggYXJncywNCiMgICAgICAg ICB7IDpuYW1lPT5SRVFVSVJFRCwgOmRhdGU9PlRpbWUubm93LCA6bG9jYXRpb249bmlsLCA6bWVt bz0+UkVRVUlSRUQgfSApDQojDQojICAgICAgIHAgQG5hbWUNCiMgICAgICAgcCBAZGF0ZQ0KIyAg ICAgICBwIEBsb2NhdGlvbg0KIyAgICAgICBwIEBtZW1vDQojICAgICBlbmQNCiMgICBlbmQNCiMN CiMgICBkID0gRGVtby5uZXcoIDpuYW1lPT4iSmFtaXMiLCA6bWVtbz0+IlNvbWUgbWVtbyIgKQ0K Iw0KIyBBdXRob3I6IEphbWlzIEJ1Y2sgKGpnYjNAZW1haWwuYnl1LmVkdSkNCm1vZHVsZSBQYXJh bWV0ZXJWYWxpZGF0b3INCg0KICAjIEEgdW5pcXVlIGNvbnN0YW50LCB1c2VkIGFzIHRoZSBkZWZh dWx0IHZhbHVlIGZvciBhIHBhcmFtZXRlciB0byBpbmRpY2F0ZSB0aGF0DQogICMgaXQgaXMgcmVx dWlyZWQuDQogIFJFUVVJUkVEID0gT2JqZWN0Lm5ldw0KDQogICMgVGhlIGV4Y2VwdGlvbiB0aGF0 IGdldHMgdGhyb3duIHdoZW4gYW4gaW52YWxpZCBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLg0KICBj bGFzcyBJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uIDwgUnVudGltZUVycm9yOyBlbmQNCg0KICAj IFRoZSBleGNlcHRpb24gdGhhdCBnZXRzIHRocm93biB3aGVuIGEgcmVxdWlyZWQgcGFyYW1ldGVy IGlzIG5vdCBzcGVjaWZpZWQuDQogIGNsYXNzIE1pc3NpbmdQYXJhbWV0ZXJFeGNlcHRpb24gPCBS dW50aW1lRXJyb3I7IGVuZA0KDQogICMgVmFsaWRhdGVzIGEgaGFzaCBvZiBhY3R1YWwgcGFyYW1l dGVycyAoYXMgY3JlYXRlZCBieSBSdWJ5J3MgcHNldWRvLSJrZXl3b3JkDQogICMgYXJndW1lbnRz IiBmZWF0dXJlKSBhZ2FpbnN0IGEgbGlzdCBvZiB2YWxpZCBwYXJhbWV0ZXJzLg0KICAjDQogICMg UGFyYW1ldGVyczoNCiAgIyAqIGFjdHVhbF9wYXJtczogdGhlIGhhc2ggb2YgYWN0dWFsIHBhcmFt ZXRlcnMgdGhhdCB3ZXJlIGdpdmVuIGJ5IFJ1Ynkncw0KICAjICAgcHNldWRvLSJrZXl3b3JkIGFy Z3VtZW50cyIgZmVhdHVyZS4NCiAgIyAqIHZhbGlkX3BhcmFtZXRlcnM6IHRoZSBoYXNoIG9mIHZh bGlkIHBhcmFtZXRlcnMsIHdoZXJlIHRoZSBrZXkgZm9yIGVhY2ggZW50cnkNCiAgIyAgIGluIHRo ZSBoYXNoIGlzIGEgc3ltYm9sIG5hbWluZyB0aGUgYWNjZXB0YWJsZSBwYXJhbWV0ZXIsIGFuZCB0 aGUgdmFsdWUgaXMgdGhlDQogICMgICBkZWZhdWx0IHZhbHVlIGZvciB0aGF0IHBhcmFtZXRlci4g IElmIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhbnkgZW50cnkgaXMgdGhlDQogICMgICBjb25zdGFu dCBSRVFVSVJFRCwgdGhlbiB0aGUgcGFyYW1ldGVyIG11c3Qgbm90IGJlIGFic2VudCBmcm9tIHRo ZSBhY3R1YWxfcGFybXMNCiAgIyAgIGhhc2guDQogICMNCiAgIyBSZXR1cm5zOiBhIGhhc2ggb2Yg YWxsIHBhcmFtZXRlcnMsIHRvZ2V0aGVyIHdpdGggZWl0aGVyIHRoZSBhY3R1YWwgdmFsdWUgdGhh dA0KICAjIHdhcyBwYXNzZWQgaW4sIG9yIChpbiB0aGUgY2FzZSBvZiBvcHRpb25hbCBwYXJhbWV0 ZXJzIHRoYXQgd2VyZSBub3QgcGFzc2VkIGluKQ0KICAjIHRoZSBkZWZhdWx0IHZhbHVlLg0KICBk ZWYgdmFsaWRhdGVfcGFyYW1ldGVycyggYWN0dWFsX3Bhcm1zLCB2YWxpZF9wYXJtcyApDQogICAg cGFybXMgPSBIYXNoLm5ldw0KDQogICAgIyBzZXQgdGhlIGRlZmF1bHQgdmFsdWVzDQogICAgdmFs aWRfcGFybXMuZWFjaF9wYWlyIGRvIHxrZXksdmFsdWV8DQogICAgICBuZXh0IGlmIHZhbHVlID09 IFJFUVVJUkVEDQogICAgICBwYXJtc1sga2V5IF0gPSB2YWx1ZQ0KICAgIGVuZA0KDQogICAgIyBz ZXQgdGhlIGFjdHVhbCB2YWx1ZXMNCiAgICBhY3R1YWxfcGFybXMuZWFjaF9wYWlyIGRvIHxrZXks dmFsdWV8DQogICAgICBpZiBub3QgdmFsaWRfcGFybXMuaW5jbHVkZT8ga2V5DQogICAgICAgIHJh aXNlIEludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb24sICInI3trZXl9JyBpcyBpbnZhbGlkIg0KICAg ICAgZW5kDQogICAgICBwYXJtc1sga2V5IF0gPSB2YWx1ZQ0KICAgIGVuZA0KDQogICAgIyBjaGVj ayByZXF1aXJlZCBwYXJhbWV0ZXJzDQogICAgdmFsaWRfcGFybXMuZWFjaF9wYWlyIGRvIHxrZXks dmFsdWV8DQogICAgICBpZiB2YWx1ZT09UkVRVUlSRUQgYW5kIG5vdCBwYXJtcy5pbmNsdWRlPyBr ZXkNCiAgICAgICAgcmFpc2UgTWlzc2luZ1BhcmFtZXRlckV4Y2VwdGlvbiwgIicje2tleX0nIGlz IHJlcXVpcmVkIg0KICAgICAgZW5kDQogICAgZW5kDQoNCiAgICBwYXJtcw0KICBlbmQNCg0KICAj IEZvciBlYWNoIGtleSBpbiB0aGUgZ2l2ZW4gaGFzaCwgY3JlYXRlIGFuIGlkZW50aWNhbGx5LW5h bWVkIGluc3RhbmNlIHZhcmlhYmxlDQogICMgYW5kIHNldCBpdHMgdmFsdWUgdG8gdGhlIHZhbHVl IG9mIHRoZSBnaXZlbiBrZXkuDQogIGRlZiBpbnN0YW50aWF0ZV9wYXJhbWV0ZXJzKCBwYXJtcyAp DQogICAgcGFybXMuZWFjaF9wYWlyIGRvIHxrZXksIHZhbHVlfA0KICAgICAgZXZhbCAiQCN7a2V5 fSA9IHZhbHVlIg0KICAgIGVuZA0KICBlbmQNCg0KICAjIEZvciBlYWNoIGtleSBpbiB0aGUgZ2l2 ZW4gaGFzaCwgYXNzaWduIGl0cyB2YWx1ZSB0byBhbiBpZGVudGljYWxseS1uYW1lZCBzZXR0ZXIN CiAgIyBpbiB0aGUgY3VycmVudCBjbGFzcy4NCiAgZGVmIHNldF9wYXJhbWV0ZXJzKCBwYXJtcyAp DQogICAgcGFybXMuZWFjaF9wYWlyIGRvIHxrZXksIHZhbHVlfA0KICAgICAgZXZhbCAic2VsZi4j e2tleX0gPSB2YWx1ZSINCiAgICBlbmQNCiAgZW5kDQoNCiAgIyBWYWxpZGF0ZSBhbmQgaW5zdGFu dGlhdGUgdGhlIGdpdmVuIHBhcmFtZXRlcnMgYnkgY2FsbGluZyBib3RoIHZhbGlkYXRlX3BhcmFt ZXRlcnMNCiAgIyBhbmQgaW5zdGFudGlhdGVfcGFyYW1ldGVycy4gIFJldHVybiB0aGUgaGFzaCBv ZiBhbGwgcGFyYW1ldGVycy4NCiAgZGVmIHZhbGlkYXRlX2FuZF9pbnN0YW50aWF0ZV9wYXJhbWV0 ZXJzKCBhY3R1YWxfcGFybXMsIHZhbGlkX3Bhcm1zICkNCiAgICBwYXJtcyA9IHZhbGlkYXRlX3Bh cmFtZXRlcnMoIGFjdHVhbF9wYXJtcywgdmFsaWRfcGFybXMgKQ0KICAgIGluc3RhbnRpYXRlX3Bh cmFtZXRlcnMoIHBhcm1zICkNCiAgICBwYXJtcw0KICBlbmQNCg0KICAjIFZhbGlkYXRlIGFuZCBz ZXQgdGhlIGdpdmVuIHBhcmFtZXRlcnMgYnkgY2FsbGluZyBib3RoIHZhbGlkYXRlX3BhcmFtZXRl cnMNCiAgIyBhbmQgc2V0X3BhcmFtZXRlcnMuICBSZXR1cm4gdGhlIGhhc2ggb2YgYWxsIHBhcmFt ZXRlcnMuDQogIGRlZiB2YWxpZGF0ZV9hbmRfc2V0X3BhcmFtZXRlcnMoIGFjdHVhbF9wYXJtcywg dmFsaWRfcGFybXMgKQ0KICAgIHBhcm1zID0gdmFsaWRhdGVfcGFyYW1ldGVycyggYWN0dWFsX3Bh cm1zLCB2YWxpZF9wYXJtcyApDQogICAgc2V0X3BhcmFtZXRlcnMoIHBhcm1zICkNCiAgICBwYXJt cw0KICBlbmQNCmVuZA0K ------=_Part_4836_16777033.1117258223156--