From cef5feaae1d2472e2d2b5090d680dd3d7289d76d Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 8 Jun 2013 13:56:03 -0500 Subject: split out config handling --- bin/reply | 19 +++++++------------ lib/Reply.pm | 12 +++++++----- lib/Reply/Config.pm | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 lib/Reply/Config.pm diff --git a/bin/reply b/bin/reply index c4f284c..5572193 100644 --- a/bin/reply +++ b/bin/reply @@ -4,11 +4,10 @@ use warnings; # PODNAME: reply # ABSTRACT: read, eval, print, loop, yay! -use File::HomeDir; -use File::Spec; use Getopt::Long; use Reply; +use Reply::Config; =head1 SYNOPSIS @@ -32,17 +31,13 @@ GetOptions( 'help' => sub { usage(0) }, ) or usage(1); -my $cfg = File::Spec->catfile( - (File::Spec->file_name_is_absolute($cfgfile) - ? () - : (File::HomeDir->my_home)), - $cfgfile -); +my $cfg = Reply::Config->new(file => $cfgfile); my %args = (config => $cfg); -if (!-e $cfg) { - print("$cfg not found. Generating a default...\n"); - if (open my $fh, '>', $cfg) { +my $file = $cfg->file; +if (!-e $file) { + print("$file not found. Generating a default...\n"); + if (open my $fh, '>', $file) { my $contents = do { local $/; @@ -52,7 +47,7 @@ if (!-e $cfg) { close $fh; } else { - warn "Couldn't write to $cfg"; + warn "Couldn't write to $file"; %args = (); } } diff --git a/lib/Reply.pm b/lib/Reply.pm index 1534bfe..c3fa297 100644 --- a/lib/Reply.pm +++ b/lib/Reply.pm @@ -3,11 +3,12 @@ use strict; use warnings; # ABSTRACT: read, eval, print, loop, yay! -use Config::INI::Reader::Ordered; use Module::Runtime qw(compose_module_name use_package_optimistically); use Scalar::Util qw(blessed); use Try::Tiny; +use Reply::Config; + =head1 SYNOPSIS use Reply; @@ -87,9 +88,10 @@ sub new { }, $class; if (defined $opts{config}) { - print "Loading configuration from $opts{config}... "; + if (!ref($opts{config})) { + $opts{config} = Reply::Config->new(file => $opts{config}); + } $self->_load_config($opts{config}); - print "done\n"; } $self->_load_plugin($_) for @{ $opts{plugins} || [] }; @@ -136,9 +138,9 @@ sub run_one { sub _load_config { my $self = shift; - my ($file) = @_; + my ($config) = @_; - my $data = Config::INI::Reader::Ordered->new->read_file($file); + my $data = $config->data; my $root_config; for my $section (@$data) { diff --git a/lib/Reply/Config.pm b/lib/Reply/Config.pm new file mode 100644 index 0000000..ed1f53d --- /dev/null +++ b/lib/Reply/Config.pm @@ -0,0 +1,39 @@ +package Reply::Config; +use strict; +use warnings; + +use Config::INI::Reader::Ordered; +use File::HomeDir; +use File::Spec; + +sub new { + my $class = shift; + my %opts = @_; + + $opts{file} = '.replyrc' + unless defined $opts{file}; + + my $file = File::Spec->catfile( + (File::Spec->file_name_is_absolute($opts{file}) + ? () + : (File::HomeDir->my_home)), + $opts{file} + ); + + my $self = bless {}, $class; + + $self->{file} = $file; + $self->{config} = Config::INI::Reader::Ordered->new; + + return $self; +} + +sub file { shift->{file} } + +sub data { + my $self = shift; + + return $self->{config}->read_file($self->{file}); +} + +1; -- cgit v1.2.3-54-g00ecf