use warnings;
use strict;

=head1 NAME

Jifty::Model::Metadata - Tracks Jifty-related metadata


  my $app = Jifty->new(config_file => "$ProjectRoot/etc/config.yml");
  my $application_version = Jifty::Model::Metadata->load("application_db_version");


Every Jifty application automatically inherits this table, which
describes information about the Jifty database.  It uses this
information to smartly upgrade between application schema versions, as well
as versions of Jifty itself, for instance.


package Jifty::Model::Metadata;

use Jifty::DBI::Schema;
use Jifty::Record schema {

column data_key => type is 'text';
column value    => type is 'text';

use version;

use base qw( Jifty::Record );

=head2 table

Each schema is stored in the table C<_jifty_metadata>.


sub table {'_jifty_metadata'}

=head2 since

The metadata table first appeared in Jifty version 0.60427


sub since {'0.60427'}

=head2 load KEY

Fetches the given C<KEY> from the metadata store.  Returns undef if
such a key cannot be found.


sub load {
    my $self = shift;
    $self = $self->new( current_user => Jifty->app_class('CurrentUser')->superuser )
        unless ref $self;
    return undef unless $self->_handle and $self->_handle->dbh->ping;

    my ($key) = @_;

    # This may barf all over the place.  That's almost expected in
    # some circumstances, so we eat all warnings and errors right
    # here, right now.
    eval {
        local $SIG{__WARN__} = sub { };
        $self->load_by_cols( data_key => $key );
    return undef unless $self->id;
    return $self->value;

=head2 store KEY => VALUE

Stores the given C<KEY> in the database, overwriting the previous
value if it existed.


sub store {
    my $self = shift;
    $self = $self->new( current_user => Jifty->app_class('CurrentUser')->superuser )
        unless ref $self;

    my ( $key, $value ) = @_;
    $self->load_by_cols( data_key => $key );
    if ( $self->id ) {
    } else {
        $self->create( data_key => $key, value => $value );