add bse.number(), similar to the number tag
authorTony Cook <tony@develop-help.com>
Tue, 11 Jun 2013 00:39:34 +0000 (10:39 +1000)
committerTony Cook <tony@develop-help.com>
Tue, 11 Jun 2013 00:42:29 +0000 (10:42 +1000)
site/cgi-bin/modules/BSE/Util/Format.pm
site/cgi-bin/modules/BSE/Variables.pm

index f1293ed..7e5c3ad 100644 (file)
@@ -1,7 +1,70 @@
 package BSE::Util::Format;
 use strict;
 
-our $VERSION = "1.000";
+our $VERSION = "1.001";
+
+=head1 NAME
+
+BSE::Util::Format - formatting tools
+
+=head1 SYNOPSIS
+
+  # from perl
+  use BSE::Util::Format;
+  my $formatted = BSE::Util::Format::bse_numner($format, $value)
+
+  # from templates
+  <:number "money" [some value ] :>
+  <:= bse.number("money", value) :>
+
+=head1 FUNCTIONS
+
+=over
+
+=item bse_number(format, value, cfg)
+
+Format a number per rules defined in the config file.
+
+This uses configuration from section C<< [ number I<format>] >>, so
+formatting for format C<money> is defined by section
+C<<[number money]>>.
+
+Configuration parameters:
+
+=over
+
+=item *
+
+C<comma> - the string to use in adding comma separators to numbers.
+Default: C<,>.
+
+=item *
+
+C<comma_limit> - numbers smaller than this are not commified.
+Default: C<1000>.
+
+=item *
+
+C<commify> - set to 0 to disable commification.  Default: 1.
+
+=item *
+
+C<decimal> - decimal point.  Default: C<.>
+
+=item *
+
+C<divisor> - value to divide the value by before formatting.
+eg. C<100> to express a number in cents in dollars.  Must be non-zero.
+Default: 1.
+
+=item *
+
+C<places> - the number of decimal places to force after the decimal
+point.  If negative the natural number of places are used.  Default: -1.
+
+=back
+
+=cut
 
 sub bse_number {
   my ($format, $value, $cfg) = @_;
@@ -35,3 +98,11 @@ sub bse_number {
 }
 
 1;
+
+=back
+
+=head1 AUTHOR
+
+Tony Cook <tony@develop-help.com>
+
+=cut
index cd1327f..78f6a2d 100644 (file)
@@ -4,7 +4,7 @@ use Scalar::Util qw(blessed);
 use BSE::TB::Site;
 use BSE::Util::HTML;
 
-our $VERSION = "1.013";
+our $VERSION = "1.014";
 
 sub _base_variables {
   my ($self, %opts) = @_;
@@ -40,6 +40,7 @@ sub _base_variables {
        require JSON;
        return JSON->new->allow_nonref->encode($_[0]);
      },
+     number => \&_number,
     );
 }
 
@@ -245,6 +246,13 @@ sub _date_now {
   return DevHelp::Date::dh_strftime($fmt, localtime);
 }
 
+sub _number {
+  my ($format, $value) = @_;
+
+  require BSE::Util::Format;
+  return BSE::Util::Format::bse_number($format, $value);
+}
+
 1;
 
 =head1 NAME
@@ -321,6 +329,11 @@ Format an SQL date/time.
 
 Format the current date/time.
 
+=item number(format, value)
+
+Format I<value> according to the rules defied by I<format> in the
+config file.  See L<BSE::Util::Format/bse_number> for details.
+
 =back
 
 =head1 DYNAMIC ONLY VARIABLES