[Bps-public-commit] rt-extension-rest2 branch, master, updated. 1.01-12-g8062b56

Jim Brandt jbrandt at bestpractical.com
Fri Mar 16 11:41:25 EDT 2018


The branch, master has been updated
       via  8062b56059407f49694aea54de20257e79de6b9f (commit)
       via  40e22e4ec9efcdfca473cba7be83a83412055c5d (commit)
       via  d17e787bff76646cadeb46ab1f0bac5c538cb298 (commit)
       via  9c6902e478f7709e6f3726bec184e98befbcce47 (commit)
       via  29a8ab868bcd21124fca2615abecce9842a0eed2 (commit)
       via  a5e832fca39271040533db348ac71cf12a1a481e (commit)
       via  8859c4ea2ed83f49ff3f52a369ffb0669c8e29be (commit)
       via  d550f87d3237ddaf168a79f80a454fab4bb159f3 (commit)
      from  8e34b33fe3e1c6ad45f6ad4ef4442f82df09d787 (commit)

Summary of changes:
 Changes                                            |   4 +
 MANIFEST                                           |   4 +-
 META.yml                                           |   6 +-
 README                                             |  26 +++
 inc/Module/Install.pm                              |   2 +-
 inc/Module/Install/Base.pm                         |   2 +-
 inc/Module/Install/Can.pm                          |   2 +-
 inc/Module/Install/Fetch.pm                        |   2 +-
 inc/Module/Install/Include.pm                      |   2 +-
 inc/Module/Install/Makefile.pm                     |   2 +-
 inc/Module/Install/Metadata.pm                     |   2 +-
 inc/Module/Install/RTx.pm                          |   2 +-
 inc/Module/Install/RTx/Runtime.pm                  |   1 +
 inc/Module/Install/Win32.pm                        |   2 +-
 inc/Module/Install/WriteAll.pm                     |   2 +-
 lib/RT/Extension/REST2.pm                          |  29 +++-
 lib/RT/Extension/REST2/Resource/Record/Writable.pm |   7 +-
 lib/RT/Extension/REST2/Resource/TicketsBulk.pm     |  76 +++++++++
 t/tickets-bulk.t                                   | 190 +++++++++++++++++++++
 19 files changed, 345 insertions(+), 18 deletions(-)
 create mode 100644 lib/RT/Extension/REST2/Resource/TicketsBulk.pm
 create mode 100644 t/tickets-bulk.t

- Log -----------------------------------------------------------------
commit d550f87d3237ddaf168a79f80a454fab4bb159f3
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Wed Feb 28 03:46:39 2018 +0800

    don't touch http response in update_record
    
    It's more consistent to handle http response in update_resource just
    like create_resource. And it's also easier to reuse update_record.

diff --git a/lib/RT/Extension/REST2/Resource/Record/Writable.pm b/lib/RT/Extension/REST2/Resource/Record/Writable.pm
index e0d1128..490e2be 100644
--- a/lib/RT/Extension/REST2/Resource/Record/Writable.pm
+++ b/lib/RT/Extension/REST2/Resource/Record/Writable.pm
@@ -57,8 +57,7 @@ sub update_record {
 
     # XXX TODO: Figure out how to return success/failure?  Core RT::Record's
     # ->Update will need to be replaced or improved.
-    $self->response->body( JSON::encode_json(\@results) );
-    return;
+    return @results;
 }
 
 sub _update_custom_fields {
@@ -259,7 +258,9 @@ sub update_resource {
             \404, "Resource does not exist; use POST to create");
     }
 
-    return $self->update_record($data);
+    my @results = $self->update_record($data);
+    $self->response->body( JSON::encode_json(\@results) );
+    return;
 }
 
 sub create_record {

commit 8859c4ea2ed83f49ff3f52a369ffb0669c8e29be
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Wed Feb 28 03:55:03 2018 +0800

    implement /tickets/bulk for bulk create/update

diff --git a/lib/RT/Extension/REST2/Resource/TicketsBulk.pm b/lib/RT/Extension/REST2/Resource/TicketsBulk.pm
new file mode 100644
index 0000000..c9f1f2a
--- /dev/null
+++ b/lib/RT/Extension/REST2/Resource/TicketsBulk.pm
@@ -0,0 +1,76 @@
+package RT::Extension::REST2::Resource::TicketsBulk;
+use strict;
+use warnings;
+
+use Moose;
+use namespace::autoclean;
+
+extends 'RT::Extension::REST2::Resource';
+with 'RT::Extension::REST2::Resource::Role::RequestBodyIsJSON' =>
+  { type => 'ARRAY' };
+
+use RT::Extension::REST2::Util qw(expand_uid);
+use RT::Extension::REST2::Resource::Ticket;
+use JSON ();
+
+sub dispatch_rules {
+    Path::Dispatcher::Rule::Regex->new( regex => qr{^/tickets/bulk/?$} );
+}
+
+sub post_is_create    { 1 }
+sub create_path       { '/tickets/bulk' }
+sub charsets_provided { [ 'utf-8' ] }
+sub default_charset   { 'utf-8' }
+sub allowed_methods   { [ 'PUT', 'POST' ] }
+
+sub content_types_provided { [ { 'application/json' => sub {} } ] }
+sub content_types_accepted { [ { 'application/json' => 'from_json' } ] }
+
+sub from_json {
+    my $self   = shift;
+    my $params = JSON::decode_json( $self->request->content );
+
+    my $method = $self->request->method;
+    my @results;
+    if ( $method eq 'PUT' ) {
+        for my $param ( @$params ) {
+            my $id = delete $param->{id};
+            if ( $id && $id =~ /^\d+$/ ) {
+                my $resource = RT::Extension::REST2::Resource::Ticket->new(
+                    request      => $self->request,
+                    response     => $self->response,
+                    record_class => 'RT::Ticket',
+                    record_id    => $id,
+                );
+                if ( $resource->resource_exists ) {
+                    push @results, [ $id, $resource->update_record( $param ) ];
+                    next;
+                }
+            }
+            push @results, [ $id, 'Resource does not exist' ];
+        }
+    }
+    else {
+        for my $param ( @$params ) {
+            my $resource = RT::Extension::REST2::Resource::Ticket->new(
+                request      => $self->request,
+                response     => $self->response,
+                record_class => 'RT::Ticket',
+            );
+            my ( $ok, $msg ) = $resource->create_record( $param );
+            if ( ref( $ok ) || !$ok ) {
+                push @results, { message => $msg || "Create failed for unknown reason" };
+            }
+            else {
+                push @results, expand_uid( $resource->record->UID );
+            }
+        }
+    }
+
+    $self->response->body( JSON::encode_json( \@results ) );
+    return;
+}
+
+__PACKAGE__->meta->make_immutable;
+
+1;

commit a5e832fca39271040533db348ac71cf12a1a481e
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Wed Feb 28 05:17:47 2018 +0800

    tests for /tickets/bulk

diff --git a/t/tickets-bulk.t b/t/tickets-bulk.t
new file mode 100644
index 0000000..a3ecbed
--- /dev/null
+++ b/t/tickets-bulk.t
@@ -0,0 +1,190 @@
+use strict;
+use warnings;
+use lib 't/lib';
+use RT::Extension::REST2::Test tests => undef;
+use Test::Deep;
+
+my $mech = RT::Extension::REST2::Test->mech;
+
+my $auth           = RT::Extension::REST2::Test->authorization_header;
+my $rest_base_path = '/REST/2.0';
+my $user           = RT::Extension::REST2::Test->user;
+my $base_url       = RT::Extension::REST2->base_uri;
+
+my $queue = RT::Test->load_or_create_queue( Name => "General" );
+
+my @ticket_ids;
+
+{
+    my $res = $mech->post_json(
+        "$rest_base_path/tickets/bulk",
+        { Queue => "General", Subject => "test" },
+        'Authorization' => $auth,
+    );
+    is( $res->code, 400 );
+    is( $mech->json_response->{message}, "JSON object must be a ARRAY", 'hash is not allowed' );
+
+    diag "no CreateTicket right";
+
+    $res = $mech->post_json(
+        "$rest_base_path/tickets/bulk",
+        [ { Queue => "General", Subject => "test" } ],
+        'Authorization' => $auth,
+    );
+    is( $res->code, 201, "bulk returns 201 for POST even no tickets created" );
+    is_deeply(
+        $mech->json_response,
+        [
+            {
+                message => "No permission to create tickets in the queue 'General'"
+            }
+        ],
+        'permission denied'
+    );
+
+    diag "grant CreateTicket right";
+    $user->PrincipalObj->GrantRight( Right => 'CreateTicket' );
+
+    $res = $mech->post_json(
+        "$rest_base_path/tickets/bulk",
+        [ { Queue => "General", Subject => "test" } ],
+        'Authorization' => $auth,
+    );
+    is( $res->code, 201, 'status code' );
+    my $content = $mech->json_response;
+    is( scalar @$content, 1, 'array with 1 item' );
+    ok( $content->[ 0 ]{id}, 'found id' );
+    push @ticket_ids, $content->[ 0 ]{id};
+    is_deeply(
+        $content,
+        [
+            {
+                type   => 'ticket',
+                id     => $ticket_ids[ -1 ],
+                "_url" => "$base_url/ticket/$ticket_ids[-1]",
+            }
+        ],
+        'json response content',
+    );
+
+    $res = $mech->post_json(
+        "$rest_base_path/tickets/bulk",
+        [ { Queue => 'General', Subject => 'foo' }, { Queue => 'General', Subject => 'bar' } ],
+        'Authorization' => $auth,
+    );
+    is( $res->code, 201, 'status code' );
+    $content = $mech->json_response;
+    is( scalar @$content, 2, 'array with 2 items' );
+    push @ticket_ids, $_->{id} for @$content;
+    is_deeply(
+        $content,
+        [
+            {
+                type   => 'ticket',
+                id     => $ticket_ids[ -2 ],
+                "_url" => "$base_url/ticket/$ticket_ids[-2]",
+            },
+            {
+                type   => 'ticket',
+                id     => $ticket_ids[ -1 ],
+                "_url" => "$base_url/ticket/$ticket_ids[-1]",
+            },
+        ],
+        'json response content',
+    );
+
+    $res = $mech->post_json(
+        "$rest_base_path/tickets/bulk",
+        [ { Subject => 'foo' }, { Queue => 'General', Subject => 'baz' } ],
+        'Authorization' => $auth,
+    );
+    is( $res->code, 201, 'status code' );
+    $content = $mech->json_response;
+    is( scalar @$content, 2, 'array with 2 items' );
+
+    push @ticket_ids, $content->[ 1 ]{id};
+    is_deeply(
+        $content,
+        [
+            {
+                message => "Could not create ticket. Queue not set"
+            },
+            {
+                type   => 'ticket',
+                id     => $ticket_ids[ -1 ],
+                "_url" => "$base_url/ticket/$ticket_ids[-1]",
+            },
+        ],
+        'json response content',
+    );
+}
+
+{
+    diag "no ModifyTicket right";
+    my $res = $mech->put_json(
+        "$rest_base_path/tickets/bulk",
+        [ { id => $ticket_ids[ 0 ], Subject => 'foo' } ],
+        'Authorization' => $auth,
+    );
+    is( $res->code, 200, "bulk returns 200 for PUT" );
+    is_deeply( $mech->json_response, [ [ $ticket_ids[ 0 ], "Ticket 1: Permission Denied", ] ], 'permission denied' );
+
+    diag "grant ModifyTicket right";
+    $user->PrincipalObj->GrantRight( Right => 'ModifyTicket' );
+
+    $res = $mech->put_json(
+        "$rest_base_path/tickets/bulk",
+        [ { id => $ticket_ids[ 0 ], Subject => 'foo' } ],
+        'Authorization' => $auth,
+    );
+    is( $res->code, 200, 'status code' );
+    is_deeply(
+        $mech->json_response,
+        [ [ $ticket_ids[ 0 ], qq{Ticket 1: Subject changed from 'test' to 'foo'} ] ],
+        'json response content'
+    );
+
+    $res = $mech->put_json(
+        "$rest_base_path/tickets/bulk",
+        [ { id => $ticket_ids[ 0 ] }, { id => $ticket_ids[ 1 ], Subject => 'bar' }, ],
+        'Authorization' => $auth,
+    );
+    is( $res->code, 200, 'status code' );
+    is_deeply(
+        $mech->json_response,
+        [
+            [ $ticket_ids[ 0 ] ], [ $ticket_ids[ 1 ], qq{Ticket $ticket_ids[ 1 ]: Subject changed from 'foo' to 'bar'} ]
+        ],
+        'json response content'
+    );
+
+    $res = $mech->put_json(
+        "$rest_base_path/tickets/bulk",
+        [
+            { id => $ticket_ids[ 0 ], Subject => 'baz' },
+            { id => 'foo',            Subject => 'baz' },
+            { id => 999,              Subject => 'baz' },
+        ],
+        'Authorization' => $auth,
+    );
+    is( $res->code, 200, 'status code' );
+    is_deeply(
+        $mech->json_response,
+        [
+            [ $ticket_ids[ 0 ], qq{Ticket $ticket_ids[ 0 ]: Subject changed from 'foo' to 'baz'} ],
+            [ 'foo',            "Resource does not exist" ],
+            [ 999,              "Resource does not exist" ],
+        ],
+        'json response content'
+    );
+}
+
+{
+    for my $method ( qw/get head delete/ ) {
+        my $res = $mech->get( "$rest_base_path/tickets/bulk", 'Authorization' => $auth );
+        is( $res->code, 405, "tickets/bulk doesn't support " . uc $method );
+    }
+}
+
+done_testing;
+

commit 29a8ab868bcd21124fca2615abecce9842a0eed2
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Thu Mar 1 19:14:51 2018 +0800

    document /tickets/bulk

diff --git a/README b/README
index aa3466a..9dfeefe 100644
--- a/README
+++ b/README
@@ -245,6 +245,12 @@ USAGE
         GET /ticket/:id/history
             retrieve list of transactions for ticket
 
+        POST /tickets/bulk
+            create multiple tickets; provide JSON content(array of hashes)
+
+        PUT /tickets/bulk
+            update multiple tickets' metadata; provide JSON content(array of hashes)
+
    Transactions
         GET /transactions?query=<JSON>
         POST /transactions
diff --git a/lib/RT/Extension/REST2.pm b/lib/RT/Extension/REST2.pm
index b7e2a7b..0a36aef 100644
--- a/lib/RT/Extension/REST2.pm
+++ b/lib/RT/Extension/REST2.pm
@@ -280,6 +280,12 @@ controls available in response bodies rather than hardcoding URLs.
     GET /ticket/:id/history
         retrieve list of transactions for ticket
 
+    POST /tickets/bulk
+        create multiple tickets; provide JSON content(array of hashes)
+
+    PUT /tickets/bulk
+        update multiple tickets' metadata; provide JSON content(array of hashes)
+
 =head3 Transactions
 
     GET /transactions?query=<JSON>

commit 9c6902e478f7709e6f3726bec184e98befbcce47
Merge: 8e34b33 29a8ab8
Author: Jim Brandt <jbrandt at bestpractical.com>
Date:   Fri Mar 16 10:06:40 2018 -0400

    Merge branch 'tickets-bulk'


commit d17e787bff76646cadeb46ab1f0bac5c538cb298
Author: Jim Brandt <jbrandt at bestpractical.com>
Date:   Fri Mar 16 11:33:22 2018 -0400

    Add some curl examples for tickets

diff --git a/README b/README
index 9dfeefe..042cb5c 100644
--- a/README
+++ b/README
@@ -216,6 +216,9 @@ USAGE
     Wherever possible please consider using _hyperlinks hypermedia controls
     available in response bodies rather than hardcoding URLs.
 
+    For simplicity, the examples below omit the extra options to curl for
+    SSL like --cacert.
+
    Tickets
         GET /tickets?query=<TicketSQL>
             search for tickets using TicketSQL
@@ -251,6 +254,23 @@ USAGE
         PUT /tickets/bulk
             update multiple tickets' metadata; provide JSON content(array of hashes)
 
+   Ticket Examples
+    Below are some examples using the endpoints above.
+
+        # Create a ticket, setting some custom fields
+        curl -X POST -H "Content-Type: application/json" -u 'root:password'
+            -d '{ "Queue": "General", "Subject": "Create ticket test",
+                "From": "user1 at example.com", "To": "rt at example.com",
+                "Content": "Testing a create",
+                "CustomFields": {"Severity": "Low"}}'
+            'https://myrt.com/REST/2.0/ticket'
+
+        # Update a ticket, with a custom field update
+        curl -X PUT -H "Content-Type: application/json" -u 'root:password'
+            -d '{ "Subject": "Update test", "Content": "Testing an update",
+                "CustomFields": {"Severity": "High"}}'
+            'https://myrt.com/REST/2.0/ticket/6'
+
    Transactions
         GET /transactions?query=<JSON>
         POST /transactions
diff --git a/lib/RT/Extension/REST2.pm b/lib/RT/Extension/REST2.pm
index f59ef74..0998c08 100644
--- a/lib/RT/Extension/REST2.pm
+++ b/lib/RT/Extension/REST2.pm
@@ -250,6 +250,9 @@ Currently provided endpoints under C</REST/2.0/> are described below.
 Wherever possible please consider using C<_hyperlinks> hypermedia
 controls available in response bodies rather than hardcoding URLs.
 
+For simplicity, the examples below omit the extra options to
+curl for SSL like --cacert.
+
 =head3 Tickets
 
     GET /tickets?query=<TicketSQL>
@@ -286,6 +289,24 @@ controls available in response bodies rather than hardcoding URLs.
     PUT /tickets/bulk
         update multiple tickets' metadata; provide JSON content(array of hashes)
 
+=head3 Ticket Examples
+
+Below are some examples using the endpoints above.
+
+    # Create a ticket, setting some custom fields
+    curl -X POST -H "Content-Type: application/json" -u 'root:password'
+        -d '{ "Queue": "General", "Subject": "Create ticket test",
+            "From": "user1 at example.com", "To": "rt at example.com",
+            "Content": "Testing a create",
+            "CustomFields": {"Severity": "Low"}}'
+        'https://myrt.com/REST/2.0/ticket'
+
+    # Update a ticket, with a custom field update
+    curl -X PUT -H "Content-Type: application/json" -u 'root:password'
+        -d '{ "Subject": "Update test", "Content": "Testing an update",
+            "CustomFields": {"Severity": "High"}}'
+        'https://myrt.com/REST/2.0/ticket/6'
+
 =head3 Transactions
 
     GET /transactions?query=<JSON>

commit 40e22e4ec9efcdfca473cba7be83a83412055c5d
Author: Jim Brandt <jbrandt at bestpractical.com>
Date:   Fri Mar 16 11:33:55 2018 -0400

    Update Module::Install

diff --git a/inc/Module/Install.pm b/inc/Module/Install.pm
index 07525c5..7ba98c2 100644
--- a/inc/Module/Install.pm
+++ b/inc/Module/Install.pm
@@ -31,7 +31,7 @@ BEGIN {
 	# This is not enforced yet, but will be some time in the next few
 	# releases once we can make sure it won't clash with custom
 	# Module::Install extensions.
-	$VERSION = '1.18';
+	$VERSION = '1.19';
 
 	# Storage for the pseudo-singleton
 	$MAIN    = undef;
diff --git a/inc/Module/Install/Base.pm b/inc/Module/Install/Base.pm
index b61d424..9fa42c2 100644
--- a/inc/Module/Install/Base.pm
+++ b/inc/Module/Install/Base.pm
@@ -4,7 +4,7 @@ package Module::Install::Base;
 use strict 'vars';
 use vars qw{$VERSION};
 BEGIN {
-	$VERSION = '1.18';
+	$VERSION = '1.19';
 }
 
 # Suspend handler for "redefined" warnings
diff --git a/inc/Module/Install/Can.pm b/inc/Module/Install/Can.pm
index 1de368c..d65c753 100644
--- a/inc/Module/Install/Can.pm
+++ b/inc/Module/Install/Can.pm
@@ -8,7 +8,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.18';
+	$VERSION = '1.19';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/Fetch.pm b/inc/Module/Install/Fetch.pm
index 54b52cb..3072b08 100644
--- a/inc/Module/Install/Fetch.pm
+++ b/inc/Module/Install/Fetch.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.18';
+	$VERSION = '1.19';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/Include.pm b/inc/Module/Install/Include.pm
index 087da8d..13fdcd0 100644
--- a/inc/Module/Install/Include.pm
+++ b/inc/Module/Install/Include.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.18';
+	$VERSION = '1.19';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/Makefile.pm b/inc/Module/Install/Makefile.pm
index 8ba3d88..13a4464 100644
--- a/inc/Module/Install/Makefile.pm
+++ b/inc/Module/Install/Makefile.pm
@@ -8,7 +8,7 @@ use Fcntl qw/:flock :seek/;
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.18';
+	$VERSION = '1.19';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/Metadata.pm b/inc/Module/Install/Metadata.pm
index 692ce71..11bf971 100644
--- a/inc/Module/Install/Metadata.pm
+++ b/inc/Module/Install/Metadata.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.18';
+	$VERSION = '1.19';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/RTx.pm b/inc/Module/Install/RTx.pm
index 3268e7e..7cad529 100644
--- a/inc/Module/Install/RTx.pm
+++ b/inc/Module/Install/RTx.pm
@@ -8,7 +8,7 @@ no warnings 'once';
 
 use Module::Install::Base;
 use base 'Module::Install::Base';
-our $VERSION = '0.39';
+our $VERSION = '0.40';
 
 use FindBin;
 use File::Glob     ();
diff --git a/inc/Module/Install/RTx/Runtime.pm b/inc/Module/Install/RTx/Runtime.pm
index 937949f..ae07502 100644
--- a/inc/Module/Install/RTx/Runtime.pm
+++ b/inc/Module/Install/RTx/Runtime.pm
@@ -33,6 +33,7 @@ sub RTxDatabase {
 
     my $lib_path = File::Basename::dirname($INC{'RT.pm'});
     my @args = (
+        "-I.",
         "-Ilib",
         "-I$RT::LocalLibPath",
         "-I$lib_path",
diff --git a/inc/Module/Install/Win32.pm b/inc/Module/Install/Win32.pm
index b80c900..f7aa615 100644
--- a/inc/Module/Install/Win32.pm
+++ b/inc/Module/Install/Win32.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.18';
+	$VERSION = '1.19';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/WriteAll.pm b/inc/Module/Install/WriteAll.pm
index da279c7..2db861a 100644
--- a/inc/Module/Install/WriteAll.pm
+++ b/inc/Module/Install/WriteAll.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.18';
+	$VERSION = '1.19';
 	@ISA     = qw{Module::Install::Base};
 	$ISCORE  = 1;
 }

commit 8062b56059407f49694aea54de20257e79de6b9f
Author: Jim Brandt <jbrandt at bestpractical.com>
Date:   Fri Mar 16 11:41:13 2018 -0400

    Prep for 1.03 release

diff --git a/Changes b/Changes
index 6261e93..d3ace98 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,9 @@
 Revision history for RT-Extension-REST2
 
+1.03 2018-03-16
+ - Add new bulk option for tickets
+ - Documentation updates
+
 1.02 2017-12-22
  - Add support for external links on tickets
 
diff --git a/MANIFEST b/MANIFEST
index c85b73e..bac4498 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -52,6 +52,7 @@ lib/RT/Extension/REST2/Resource/Root.pm
 lib/RT/Extension/REST2/Resource/RT.pm
 lib/RT/Extension/REST2/Resource/Ticket.pm
 lib/RT/Extension/REST2/Resource/Tickets.pm
+lib/RT/Extension/REST2/Resource/TicketsBulk.pm
 lib/RT/Extension/REST2/Resource/Transaction.pm
 lib/RT/Extension/REST2/Resource/Transactions.pm
 lib/RT/Extension/REST2/Resource/User.pm
@@ -65,9 +66,9 @@ t/asset-customfields.t
 t/assets.t
 t/catalogs.t
 t/conflict.t
-t/lib/RT/Extension/REST2/Test.pm
 t/lib/RT/Extension/REST2/Test.pm.in
 t/not_found.t
+t/organization.t
 t/queues.t
 t/root.t
 t/search-json.t
@@ -75,6 +76,7 @@ t/ticket-customfields.t
 t/ticket-customroles.t
 t/ticket-links.t
 t/ticket-watchers.t
+t/tickets-bulk.t
 t/tickets.t
 t/transactions.t
 t/user-customfields.t
diff --git a/META.yml b/META.yml
index 08d9896..f447a3c 100644
--- a/META.yml
+++ b/META.yml
@@ -11,7 +11,7 @@ configure_requires:
   ExtUtils::MakeMaker: 6.59
 distribution_type: module
 dynamic_config: 1
-generated_by: 'Module::Install version 1.18'
+generated_by: 'Module::Install version 1.19'
 license: gpl_2
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -43,6 +43,6 @@ requires:
   perl: 5.10.1
 resources:
   license: http://opensource.org/licenses/gpl-license.php
-version: '1.02'
-x_module_install_rtx_version: '0.39'
+version: '1.03'
+x_module_install_rtx_version: '0.40'
 x_requires_rt: 4.2.4
diff --git a/lib/RT/Extension/REST2.pm b/lib/RT/Extension/REST2.pm
index 0998c08..ee73b7d 100644
--- a/lib/RT/Extension/REST2.pm
+++ b/lib/RT/Extension/REST2.pm
@@ -4,7 +4,7 @@ use 5.010001;
 
 package RT::Extension::REST2;
 
-our $VERSION = '1.02';
+our $VERSION = '1.03';
 our $REST_PATH = '/REST/2.0';
 
 use Plack::Builder;

-----------------------------------------------------------------------


More information about the Bps-public-commit mailing list