From: Robert Klemme Date: 2010-10-14T16:19:00+09:00 Subject: Re: A use case for strmask gem? On Wed, Oct 13, 2010 at 8:53 PM, Intransition wrote: > > > On Oct 13, 10:32 am, Robert Klemme wrote: >> On Wed, Oct 13, 2010 at 3:54 PM, Intransition wrote: >> > String::Mask is a library I created not for a specific use case, but >> > simply b/c it had a certain logical sense to it. However, to this day >> > I have not conceived of any need for it. I'm wondering if anyone else >> > can think of a case where it might be useful. >> >> > I created a QED file which explains it pretty well: >> >> Frankly, from the description it's not clear to me what this is >> supposed to do.  What is the string, what is the mask and what does >> the mask do?  Apparently there are operations available on masks but >> how do I apply a mask - and what to?  And what's the result of >> applying a mask to something?  What does escaping do? > > Fair point. > > The library defines logical operations for string content. You can use > it to "mask" strings is various ways. I guess the simplest example I > can think of is blacking-out a credit card number. > >  "4111-1234-1234-1234".mask('_') + "____-XXXX-XXXX-XXXX".mask('_') > >  #=> "4111-XXXX-XXXX-XXXX" > > The "escape character" is just what ever "empty slot" character you > want to use, in this case we are using '_'. The term "escape character" for me has a different connotation: it is a character that is used to strip meta characters off their metaness - or the opposite (giving ordinary characters special meaning, such as \n in double quoted strings). I would rather call the underscore in your example "wildcard character" or so. > Does that make it a little clearer? Yes, definitively. To me a different design would be more natural though cc_mask = StringMask.new("____-XXXX-XXXX-XXXX") cc_mask.apply("4111-1234-1234-1234") # => "4111-XXXX-XXXX-XXXX" cc_mask["4111-1234-1234-1234"] # => "4111-XXXX-XXXX-XXXX" That also seems more efficient: you only create one mask instance and apply it to multiple Strings. Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/