aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/Open311/Endpoint/Schema.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/Open311/Endpoint/Schema.pm')
-rw-r--r--perllib/Open311/Endpoint/Schema.pm177
1 files changed, 0 insertions, 177 deletions
diff --git a/perllib/Open311/Endpoint/Schema.pm b/perllib/Open311/Endpoint/Schema.pm
deleted file mode 100644
index 9a2ad81e5..000000000
--- a/perllib/Open311/Endpoint/Schema.pm
+++ /dev/null
@@ -1,177 +0,0 @@
-package Open311::Endpoint::Schema;
-use Moo;
-use Data::Rx;
-
-use Open311::Endpoint::Schema::Comma;
-use Open311::Endpoint::Schema::Regex;
-
-use Carp 'confess';
-has endpoint => (
- is => 'ro',
- handles => [qw/
- get_jurisdiction_id_required_clause
- get_jurisdiction_id_optional_clause
- get_identifier_type
- learn_additional_types
- /],
-);
-
-sub enum {
- my ($self, $type, @values) = @_;
- return {
- type => '//any',
- of => [ map {
- {
- type => $type,
- value => $_,
- }
- } @values ],
- };
-}
-
-sub format_boolean {
- my ($self, $value) = @_;
- return $value ? 'true' : 'false';
-}
-
-has schema => (
- is => 'lazy',
- default => sub {
- my $self = shift;
-
- my $schema = Data::Rx->new({
- sort_keys => 1,
- prefix => {
- open311 => 'tag:wiki.open311.org,GeoReport_v2:rx/',
- },
- type_plugins => [qw(
- Open311::Endpoint::Schema::Comma
- Open311::Endpoint::Schema::Regex
- )],
- });
-
- $schema->learn_type( 'tag:wiki.open311.org,GeoReport_v2:rx/bool',
- $self->enum( '//str', qw[ true false ] ));
-
- $schema->learn_type( 'tag:wiki.open311.org,GeoReport_v2:rx/datetime',
- {
- type => '/open311/regex',
- pattern => qr{
- ^
- \d{4} - \d{2} - \d{2} # yyyy-mm-dd
- T
- \d{2} : \d{2} : \d{2} # hh:mm:ss
- (?:
- Z # "Zulu" time, e.g. UTC
- | [+-] \d{2} : \d{2} # +/- hh:mm offset
- )
- $
- }ax, # use ascii semantics so /d means [0-9], and allow formatting
- message => "found value isn't a datetime",
- });
-
- $schema->learn_type( 'tag:wiki.open311.org,GeoReport_v2:rx/example/identifier',
- {
- type => '/open311/regex',
- pattern => qr{^ \w+ $}ax,
- message => "found value isn't a valid identifier",
- });
-
- $schema->learn_type( 'tag:wiki.open311.org,GeoReport_v2:rx/status',
- $self->enum( '//str', qw[ open closed ] ));
-
- $schema->learn_type( 'tag:wiki.open311.org,GeoReport_v2:rx/post_type',
- $self->enum( '//str', qw[ realtime batch blackbox ] ));
-
- $schema->learn_type( 'tag:wiki.open311.org,GeoReport_v2:rx/service',
- {
- type => '//rec',
- required => {
- service_name => '//str',
- type => '/open311/post_type',
- metadata => '/open311/bool',
- description => '//str',
- service_code => '//str',
- },
- optional => {
- keywords => '//str',
- group => '//str',
- }
- }
- );
- $schema->learn_type( 'tag:wiki.open311.org,GeoReport_v2:rx/value',
- {
- type => '//rec',
- required => {
- key => '//str',
- name => '//str',
- }
- }
- );
-
- $schema->learn_type( 'tag:wiki.open311.org,GeoReport_v2:rx/attribute',
- {
- type => '//rec',
- required => {
- code => '//str',
- datatype => $self->enum( '//str', qw[ string number datetime text singlevaluelist multivaluelist ] ),
- datatype_description => '//str',
- description => '//str',
- order => '//int',
- required => '/open311/bool',
- variable => '/open311/bool',
- },
- optional => {
- values => {
- type => '//arr',
- contents => '/open311/value',
- },
- },
- }
- );
-
- $schema->learn_type( 'tag:wiki.open311.org,GeoReport_v2:rx/service_definition',
- {
- type => '//rec',
- required => {
- service_code => '//str',
- attributes => {
- type => '//arr',
- contents => '/open311/attribute',
- }
- },
- }
- );
- $schema->learn_type( 'tag:wiki.open311.org,GeoReport_v2:rx/service_request',
- {
- type => '//rec',
- required => {
- service_request_id => $self->get_identifier_type('service_request_id'),
- status => '/open311/status',
- service_name => '//str',
- service_code => $self->get_identifier_type('service_code'),
- requested_datetime => '/open311/datetime',
- updated_datetime => '/open311/datetime',
- address => '//str',
- address_id => '//str',
- zipcode => '//str',
- lat => '//num',
- long => '//num',
- media_url => '//str',
- },
- optional => {
- request => '//str',
- description => '//str',
- agency_responsible => '//str',
- service_notice => '//str',
- },
- }
- );
-
- $self->learn_additional_types($schema);
-
- return $schema;
- },
-);
-
-1;