summaryrefslogtreecommitdiff
path: root/lib/Travel/Routing/DE/EFA/Route/Message.pm
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2015-06-25 11:44:08 +0200
committerDaniel Friesel <derf@finalrewind.org>2015-06-25 11:44:08 +0200
commitb32bf2d4beda9925f7ffec3d4fbe7cf0352ab997 (patch)
treefe10d054e4ca64b287eb739297afb9426b871257 /lib/Travel/Routing/DE/EFA/Route/Message.pm
parent5fc7f99bf99c5a90cc201abf0b91671c89b7d4d3 (diff)
Move messages to Travel::Routing::DE::EFA::Route::Message objects
Diffstat (limited to 'lib/Travel/Routing/DE/EFA/Route/Message.pm')
-rw-r--r--lib/Travel/Routing/DE/EFA/Route/Message.pm136
1 files changed, 136 insertions, 0 deletions
diff --git a/lib/Travel/Routing/DE/EFA/Route/Message.pm b/lib/Travel/Routing/DE/EFA/Route/Message.pm
new file mode 100644
index 0000000..60bda28
--- /dev/null
+++ b/lib/Travel/Routing/DE/EFA/Route/Message.pm
@@ -0,0 +1,136 @@
+package Travel::Routing::DE::EFA::Route::Message;
+
+use strict;
+use warnings;
+use 5.010;
+
+use parent 'Class::Accessor';
+
+our $VERSION = '2.11';
+
+Travel::Routing::DE::EFA::Route::Message->mk_ro_accessors(
+ qw(is_detailed summary subject subtitle raw_content));
+
+sub new {
+ my ( $obj, %conf ) = @_;
+
+ my $ref = \%conf;
+
+ if ( not defined $ref->{subject} ) {
+ $ref->{subject} = $ref->{summary};
+ }
+
+ if ( defined $ref->{raw_content} ) {
+ $ref->{is_detailed} = 1;
+ }
+ else {
+ $ref->{is_detailed} = 0;
+ }
+
+ return bless( $ref, $obj );
+}
+
+sub TO_JSON {
+ my ($self) = @_;
+
+ return { %{$self} };
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Travel::Routing::DE::EFA::Route::Message - contains a message related to a
+route or route part.
+
+=head1 SYNOPSIS
+
+ for my $m ($routepart->regular_notes, $routepart->current_notes) {
+ if ($m->is_detailed) {
+ printf("%s: %s\n", $m->subtitle, $m->subject);
+ }
+ else {
+ say $m->summary;
+ }
+ }
+
+=head1 VERSION
+
+version 2.11
+
+=head1 DESCRIPTION
+
+B<Travel::Routing::DE::EFA::Route::Message> contains information about a
+specific route or route part, such as wheelchair accessibility, unscheduled
+route diversions and cancelled stops. Often, this information is not used in
+the backend's route calculation, so a message may invalidate a certain route or
+route part.
+
+There are two types of messages provided by the backend: oneliners and detailed
+messages. There is no known distinction regarding their type or content.
+Also, there are some other backend-provided fields not yet covered by this
+module, so expect changes in future releases.
+
+A oneline message consists of a single string which can be accesed using
+B<subject> or B<summary> and its B<is_detailed> accessor returns false.
+
+A detailed message has a subject, subtitle, summary and detailed HTML
+content.
+
+=head1 METHODS
+
+=head2 ACCESSORS
+
+=over
+
+=item $message->is_detailed
+
+True if all accessors (fields) are set, false otherwise. When this field
+is false, only B<summary> and B<subject> are set (and they will return the
+same string).
+
+=item $message->summary
+
+Message summary.
+
+=item $message->subject
+
+Message subject. May be the same string as the subtitle.
+
+=item $message->subtitle
+
+Message subtitle. May be the same string as the summary.
+
+=item $message->raw_content
+
+Raw HTML content. May contain information not available via any other
+accessor.
+
+=back
+
+=head1 DIAGNOSTICS
+
+None.
+
+=head1 DEPENDENCIES
+
+None.
+
+=head1 BUGS AND LIMITATIONS
+
+This module does not yet provide access to all data provided by the backend.
+Most notably, B<raw_content> is not properly parsed yet.
+
+=head1 SEE ALSO
+
+Travel::Routing::DE::EFA(3pm), Travel::Routing::DE::EFA::Route::Part(3pm).
+
+=head1 AUTHOR
+
+Copyright (C) 2015 by Daniel Friesel E<lt>derf@finalrewind.orgE<gt>
+
+=head1 LICENSE
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.