diff --git a/README.md b/README.md index 0563b96..7533aa4 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,8 @@ If the package doesn't fit your needs, you might take a look at the alternative * [Listing jobs](#listing-jobs) * [Retrieving information about a specific job](#retrieving-information-about-a-specific-job) * [Submitting a job](#submitting-a-job) + * [Code Tables](#code-tables) + * [Getting a single code table](#getting-a-codetable) * [Automatic retries on errors](#automatic-retries-on-errors) * [Laravel integration](#laravel-integration) * [Customizing the HTTP client stack](#customizing-the-http-client-stack) @@ -530,6 +532,20 @@ $job = $alma->jobs['M43']; $instance = $alma->jobs['M43']->submit(); ``` +## Code Tables + +### Getting a Code Table + +To fetch a code table + +```php +$ct = $alma->codetables->get('systemJobStatus'); +echo "Rows for ".$ct->sub_system->value."'s ".$ct->name."\n"; +foreach ($ct->row as $row) { + echo "code: ".$row->code.", description: ".$row->description."\n"; +} +``` + ## Automatic retries on errors If the client receives a 429 (rate limiting) response from Alma, it will sleep for a short time (0.5 seconds by default) diff --git a/spec/Conf/CodeTableSpec.php b/spec/Conf/CodeTableSpec.php new file mode 100644 index 0000000..8b3b2b1 --- /dev/null +++ b/spec/Conf/CodeTableSpec.php @@ -0,0 +1,47 @@ +beConstructedWith($client, 'systemJobStatus'); + } + + protected function expectRequest($client) + { + $client->getXML('/conf/code-table/systemJobStatus') + ->shouldBeCalled() + ->willReturn(SpecHelper::getDummyData('codetable_response.json')); + } + + public function it_is_lazy(AlmaClient $client) + { + SpecHelper::expectNoRequests($client); + $this->shouldHaveType(CodeTable::class); + } + + public function it_fetches_record_data_when_needed(AlmaClient $client) + { + $this->expectRequest($client); + + $this->name->('systemJobStatus'); + $this->subSystem->value->shouldBe('INFRA'); + } + + public function it_can_exist(AlmaClient $client) + { + $this->expectRequest($client); + + $this->exists()->shouldBe(true); + } +} diff --git a/spec/Conf/CodeTablesSpec.php b/spec/Conf/CodeTablesSpec.php new file mode 100644 index 0000000..cc2c490 --- /dev/null +++ b/spec/Conf/CodeTablesSpec.php @@ -0,0 +1,40 @@ +beConstructedWith($client); + } + + public function it_provides_a_lazy_interface_to_codetable_objects(AlmaClient $client) + { + SpecHelper::expectNoRequests($client); + + $ctid = 'myCodeTable'; // str_random(); + $bib = $this->get($ctid); + + $bib->shouldHaveType(CodeTable::class); + $bib->code->shouldBe($ctid); + } + + public function it_provides_a_lazy_array_interface_to_codetable_objects(AlmaClient $client) + { + SpecHelper::expectNoRequests($client); + + $ctid = 'myCodeTable'; // str_random(); + $ct = $this[$ctid]; + + $ct->shouldHaveType(CodeTable::class); + $ct->code->shouldBe($ctid); + } + +} diff --git a/spec/data/codetable_response.json b/spec/data/codetable_response.json new file mode 100644 index 0000000..f31288d --- /dev/null +++ b/spec/data/codetable_response.json @@ -0,0 +1,109 @@ +{ + "name": "systemJobStatus", + "description": "System Job Status", + "sub_system": { + "value": "INFRA", + "desc": "Infra" + }, + "patron_facing": true, + "language": { + "value": "en", + "desc": "English" + }, + "scope": { + "institution_id": { + "value": "01MY_INST", + "desc": "My Institution" + }, + "library_id": { + "value": "", + "desc": "" + } + }, + "row": [ + { + "code": "QUEUED", + "description": "Queued", + "default": false, + "enabled": true + }, + { + "code": "PENDING", + "description": "Pending", + "default": false, + "enabled": true + }, + { + "code": "INITIALIZING", + "description": "Initializing", + "default": false, + "enabled": true + }, + { + "code": "RUNNING", + "description": "Running", + "default": false, + "enabled": true + }, + { + "code": "MANUAL_HANDLING_REQUIRED", + "description": "Manual Handling Required", + "default": false, + "enabled": true + }, + { + "code": "FINALIZING", + "description": "Finalizing", + "default": false, + "enabled": true + }, + { + "code": "COMPLETED_SUCCESS", + "description": "Completed Successfully", + "default": false, + "enabled": true + }, + { + "code": "COMPLETED_NO_BULKS", + "description": "Completed with no Bulks", + "default": false, + "enabled": true + }, + { + "code": "COMPLETED_FAILED", + "description": "Completed with Errors", + "default": false, + "enabled": true + }, + { + "code": "FAILED", + "description": "Failed", + "default": false, + "enabled": true + }, + { + "code": "COMPLETED_WARNING", + "description": "Completed with Warnings", + "default": false, + "enabled": true + }, + { + "code": "USER_ABORTED", + "description": "Aborted by User", + "default": false, + "enabled": true + }, + { + "code": "SYSTEM_ABORTED", + "description": "Aborted by System", + "default": false, + "enabled": true + }, + { + "code": "SKIPPED", + "description": "Skipped", + "default": false, + "enabled": true + } + ] +}