aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Reaction/UI/ViewPort/Field/TimeRange.pm
diff options
context:
space:
mode:
authormatthewt <matthewt@03d0b0b2-0e1a-0410-a411-fdb2f4bd65d7>2008-07-24 01:42:34 +0000
committermatthewt <matthewt@03d0b0b2-0e1a-0410-a411-fdb2f4bd65d7>2008-07-24 01:42:34 +0000
commit8139388160b0a38002b22ff95c3fee3d8380f156 (patch)
treed7610c5db84c2c996107adb36bca1fe8a2b0b7cb /lib/Reaction/UI/ViewPort/Field/TimeRange.pm
parent2a4c89335368295f0fc55f79d2c8fd5e33afd212 (diff)
downloadreaction-8139388160b0a38002b22ff95c3fee3d8380f156.tar.gz
reaction-8139388160b0a38002b22ff95c3fee3d8380f156.zip
rclass stuff ripped out of everything but widget classes
Diffstat (limited to 'lib/Reaction/UI/ViewPort/Field/TimeRange.pm')
-rw-r--r--lib/Reaction/UI/ViewPort/Field/TimeRange.pm155
1 files changed, 77 insertions, 78 deletions
diff --git a/lib/Reaction/UI/ViewPort/Field/TimeRange.pm b/lib/Reaction/UI/ViewPort/Field/TimeRange.pm
index ccf6e65..f227203 100644
--- a/lib/Reaction/UI/ViewPort/Field/TimeRange.pm
+++ b/lib/Reaction/UI/ViewPort/Field/TimeRange.pm
@@ -6,89 +6,88 @@ use DateTime;
use DateTime::SpanSet;
use Time::ParseDate ();
-class TimeRange is 'Reaction::UI::ViewPort::Field', which {
-
- has '+value' => (isa => SpanSet);
-
- #has '+layout' => (default => 'timerange');
-
- has value_string =>
- (isa => 'Str', is => 'rw', lazy_fail => 1, trigger_adopt('value_string'));
-
- has delete_label => (
- isa => 'Str', is => 'rw', required => 1, default => sub { 'Delete' },
- );
-
- has parent => (
- isa => 'Reaction::UI::ViewPort::TimeRangeCollection',
- is => 'ro',
- required => 1,
- is_weak_ref => 1
- );
-
- implements _build_value_string => as {
- my $self = shift;
- #return '' unless $self->has_value;
- #return $self->value_string;
- };
-
- implements value_array => as {
- my $self = shift;
- return split(',', $self->value_string);
- };
-
- implements adopt_value_string => as {
- my ($self) = @_;
- my @values = $self->value_array;
- for my $idx (0 .. 3) { # last value is repeat
- if (length $values[$idx]) {
- my ($epoch) = Time::ParseDate::parsedate($values[$idx], UK => 1);
- $values[$idx] = DateTime->from_epoch( epoch => $epoch );
- }
+use namespace::clean -except => [ qw(meta) ];
+extends 'Reaction::UI::ViewPort::Field';
+
+
+
+has '+value' => (isa => SpanSet);
+
+#has '+layout' => (default => 'timerange');
+
+has value_string =>
+ (isa => 'Str', is => 'rw', lazy_fail => 1, trigger_adopt('value_string'));
+
+has delete_label => (
+ isa => 'Str', is => 'rw', required => 1, default => sub { 'Delete' },
+);
+
+has parent => (
+ isa => 'Reaction::UI::ViewPort::TimeRangeCollection',
+ is => 'ro',
+ required => 1,
+ is_weak_ref => 1
+);
+sub _build_value_string {
+ my $self = shift;
+ #return '' unless $self->has_value;
+ #return $self->value_string;
+};
+sub value_array {
+ my $self = shift;
+ return split(',', $self->value_string);
+};
+sub adopt_value_string {
+ my ($self) = @_;
+ my @values = $self->value_array;
+ for my $idx (0 .. 3) { # last value is repeat
+ if (length $values[$idx]) {
+ my ($epoch) = Time::ParseDate::parsedate($values[$idx], UK => 1);
+ $values[$idx] = DateTime->from_epoch( epoch => $epoch );
}
- $self->value($self->range_to_spanset(@values));
- };
-
- implements range_to_spanset => as {
- my ($self, $time_from, $time_to, $repeat_from, $repeat_to, $pattern) = @_;
- my $spanset = DateTime::SpanSet->empty_set;
- if (!$pattern || $pattern eq 'none') {
- my $span = DateTime::Span->from_datetimes(
- start => $time_from, end => $time_to
- );
- $spanset = $spanset->union( $span );
- } else {
- my $duration = $time_to - $time_from;
- my %args = ( days => $time_from->day + 2,
- hours => $time_from->hour,
- minutes => $time_from->minute,
- seconds => $time_from->second );
-
- delete $args{'days'} if ($pattern eq 'daily');
- delete @args{qw/hours days/} if ($pattern eq 'hourly');
- $args{'days'} = $time_from->day if ($pattern eq 'monthly');
- my $start_set = DateTime::Event::Recurrence->$pattern( %args );
- my $iter = $start_set->iterator( start => $repeat_from, end => $repeat_to );
- while ( my $dt = $iter->next ) {
- my $endtime = $dt + $duration;
- my $new_span = DateTime::Span->from_datetimes(
- start => $dt,
- end => $endtime
- );
- $spanset = $spanset->union( $new_span );
- }
+ }
+ $self->value($self->range_to_spanset(@values));
+};
+sub range_to_spanset {
+ my ($self, $time_from, $time_to, $repeat_from, $repeat_to, $pattern) = @_;
+ my $spanset = DateTime::SpanSet->empty_set;
+ if (!$pattern || $pattern eq 'none') {
+ my $span = DateTime::Span->from_datetimes(
+ start => $time_from, end => $time_to
+ );
+ $spanset = $spanset->union( $span );
+ } else {
+ my $duration = $time_to - $time_from;
+ my %args = ( days => $time_from->day + 2,
+ hours => $time_from->hour,
+ minutes => $time_from->minute,
+ seconds => $time_from->second );
+
+ delete $args{'days'} if ($pattern eq 'daily');
+ delete @args{qw/hours days/} if ($pattern eq 'hourly');
+ $args{'days'} = $time_from->day if ($pattern eq 'monthly');
+ my $start_set = DateTime::Event::Recurrence->$pattern( %args );
+ my $iter = $start_set->iterator( start => $repeat_from, end => $repeat_to );
+ while ( my $dt = $iter->next ) {
+ my $endtime = $dt + $duration;
+ my $new_span = DateTime::Span->from_datetimes(
+ start => $dt,
+ end => $endtime
+ );
+ $spanset = $spanset->union( $new_span );
}
- return $spanset;
- };
+ }
+ return $spanset;
+};
+sub delete {
+ my ($self) = @_;
+ $self->parent->remove_range_vp($self);
+};
- implements delete => as {
- my ($self) = @_;
- $self->parent->remove_range_vp($self);
- };
+override accept_events => sub { ('value_string', 'delete', super()) };
- override accept_events => sub { ('value_string', 'delete', super()) };
+__PACKAGE__->meta->make_immutable;
-};
1;