On Wed, Oct 13, 2010 at 8:53 PM, Intransition <transfire / gmail.com> wrote:
>
>
> On Oct 13, 10:32=A0am, Robert Klemme <shortcut... / googlemail.com> wrote:
>> On Wed, Oct 13, 2010 at 3:54 PM, Intransition <transf... / gmail.com> wrot=
e:
>> > 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. =A0What is the string, what is the mask and what does
>> the mask do? =A0Apparently there are operations available on masks but
>> how do I apply a mask - and what to? =A0And what's the result of
>> applying a mask to something? =A0What 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.
>
> =A0"4111-1234-1234-1234".mask('_') + "____-XXXX-XXXX-XXXX".mask('_')
>
> =A0#=3D> "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 =3D StringMask.new("____-XXXX-XXXX-XXXX")
cc_mask.apply("4111-1234-1234-1234") # =3D> "4111-XXXX-XXXX-XXXX"
cc_mask["4111-1234-1234-1234"] # =3D> "4111-XXXX-XXXX-XXXX"

That also seems more efficient: you only create one mask instance and
apply it to multiple Strings.

Kind regards

robert

--=20
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/