Re: Data::ShortNameProvider proposal

Tim Bunce <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.sybase.devel
Message-ID <[email protected]>
On Thu, May 15, 2014 at 01:34:21AM +0200, Philippe Bruhat (BooK) wrote:
> On Tue, May 13, 2014 at 11:11:10PM +0100, Tim Bunce wrote:
> > 
> > Sorry for the delay BooK. Here's a more concrete proposal for a
> > Data::ShortNameProvider module.
> > 
> 
> Many thanks for the documentation and synopsis. I'll start working on it
> this week. https://github.com/book/Data-ShortNameProvider is already set up.

Great!

> > Create a name provider:
> > 
> >     $np = Data::ShortNameProvider->new(
> >         style => 'Basic', # eg a subclass to allow alternative providers
> >         prefix => 'dbit',
> >         timestamp_format => 'YYMMDD',
> >         max_name_length => 32, # croak if a longer name is generated
> >     );
> > 
> 
> So styles would be subclasses/plugin/etc.

I think either subclass or delegation (has-a) would be the best fit.
And between the two I think I'd prefer delegation as that makes it
easier to evolve the external API and internal API separately.

We should provide a base class for the delegated style class
which would also aid evolution and provide a range of services.
That way the actual style modules should be very small.

> 'prefix' and 'timestamp_format' are attributes of the style.

Yes. max_name_length can be enforced by Data::ShortNameProvider
by checking what the delegated generate_new_name has returned.

> Speaking of attributes and classes, is there
> a preferred OO framework for DBIT? Moo?

Yes, we decided Moo was ok as a dependency.

> I like the max_name_length restriction. I suppose the default would be
> 0, i.e. "no limit".

I'm inclined to make it mandatory parameter so people have to at least
think about it. We're calling it a _short_ name after all :)


> >         timestamp_format => 'YYMMDD',
> 
> For time formats, I am partial to strftime, but your example looks
> like CLDR. Is there a preference for the DBI project?

I'd like to keep the dependency count very low, so for the Basic style
we'd only support a few hard-coded formats, so zero dependencies.

Perhaps a good trick would be to support a few hard-coded CLDR formats
or even just one initially, and then, if given an unrecognized format,
require a CLDR module let that handle the formatting.


> > Generate a shortname:
> > 
> >     $name = $np->generate_new_name('foo'); # eg returns "dbit1_140513__foo"
> > 
> > The 'Basic' format would be: $prefix $version _ $timestamp __ $name.
> 
> Why the double underscore before $name?

It's part of the strategy to reduce the risk of clashes with existing names.


> > Parse a generated shortname:
> > 
> >     $hash = $np->parse_generated_name($name); # eg to get date etc
> > 
> > %$hash would contain something like
> > 
> >     {
> >         version => 1, # version of the Basic format
> >         timestamp_string => '140513',
> >         timestamp_epoch => 1400017536,
> >         name => 'foo'
> >     }
> 
> It should also return 'prefix', and actually all attributes needed to
> re-create the DSNP instance. So doing something like:
> 
>     $np2 = Data::ShortNameProvider->new( %$hash );
> 
> would ignore unexpected parameters (timestamp_* and name), and return
> a Data::ShortNameProvider object equivalent to the original one.

Interesting. Actually timestamp_epoch could be used to provide the
time value that should be formatted into the short name.

> Regarding timestamps, a timestamp generated with 'YYMMDD' (day
> granularity) does not contain enough information to produce an epoch
> timestamp (second granularity).

> The obvious default would be to pick 00:00:00 (assuming UTC, but who in
> their right minds would use anything else than UTC for timestamps?), but
> that might cause issues if the timestamp is used to weed out old stuff
> (as stuff would get old somewhat faster). Resolving this can be left as
> an exercise to the library user for the moment.

That's by design. Just needs to be documented.

Thanks BooK!

Tim.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.