A use case for strmask gem?

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:

  http://github.com/rubyworks/strmask/blob/master/qed/strmask.rdoc

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?

Cheers

robert

···

On Wed, Oct 13, 2010 at 3:54 PM, Intransition <transfire@gmail.com> 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:

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

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 '_'.

Does that make it a little clearer?

···

On Oct 13, 10:32 am, Robert Klemme <shortcut...@googlemail.com> wrote:

On Wed, Oct 13, 2010 at 3:54 PM, Intransition <transf...@gmail.com> 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?

> 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

···

On Wed, Oct 13, 2010 at 8:53 PM, Intransition <transfire@gmail.com> wrote:

On Oct 13, 10:32 am, Robert Klemme <shortcut...@googlemail.com> wrote:

On Wed, Oct 13, 2010 at 3:54 PM, Intransition <transf...@gmail.com> wrote:

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