The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Mirror::JSON::URI;

use 5.005;
use strict;
use URI          ();
use Params::Util qw{ _STRING _INSTANCE };
use LWP::Simple  ();

use vars qw{$VERSION};
BEGIN {
	$VERSION = '0.01';
}





#####################################################################
# Constructor

sub new {
	my $class = shift;
	my $self  = bless { @_ }, $class;
	unless ( _INSTANCE($self->uri, 'URI') ) {
		return undef;
	}
	return $self;
}

sub uri {
	$_[0]->{uri};
}

sub json {
	$_[0]->{json};
}

sub live {
	!! $_[0]->{live};
}

sub lag {
	$_[0]->{lag};
}





#####################################################################
# Main Methods

sub get {
	my $self   = shift;
	my $uri    = URI->new('mirror.json')->abs( $self->uri );
	my $before = Time::HiRes::time();
	my $json   = LWP::Simple::get($uri);
	unless ( $json and $json =~ /^---/ ) {
		# Site does not exist, or is broken
		return $self->{live} = 0;
	}
	$self->{lag}  = Time::HiRes::time() - $before;
	$self->{json} = Mirror::JSON->read_string( $json );
	return $self->{live} = 1;
}

1;