diff options
-rw-r--r-- | generate-sample-gig-data.php | 184 |
1 files changed, 114 insertions, 70 deletions
diff --git a/generate-sample-gig-data.php b/generate-sample-gig-data.php index 11e9a0a..19eaffc 100644 --- a/generate-sample-gig-data.php +++ b/generate-sample-gig-data.php @@ -5,156 +5,200 @@ // // SPDX-License-Identifier: AGPL-3.0-or-later -abstract class GeneratorBase -{ +/** + * Abstract base class for a generator. + */ +abstract class GeneratorBase { + + /** + * Return a generated string. + * Must be implemented by derived classes + */ abstract public function get() : string; - function pick(array $arr) : string - { - return $arr[array_rand($arr)]; + /** + * Return a random element from an array. + * + * @param array $arr an array of elements. + */ + protected function pick( array $arr ) : string { + return $arr[ array_rand( $arr ) ]; } } -class BandNameGenerator extends GeneratorBase -{ +/** + * Generator for band names + */ +class BandNameGenerator extends GeneratorBase { + /** + * Prefixes. + * * @var string[] * * @psalm-var array{0: string, 1: string, 2: string} */ private array $prefixes = array( - "", - "a", - "the", + '', + 'a', + 'the', ); /** + * Adverbs. + * * @var string[] * * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string, 5: string, 6: string, 7: string} */ private array $adverbs = array( - "bestial", - "dead", - "incongruent", - "ladylike", - "slimy", - "dandy", - "leftist", - "flamboyant", + 'bestial', + 'dead', + 'incongruent', + 'ladylike', + 'slimy', + 'dandy', + 'leftist', + 'flamboyant', ); /** + * Verbs. + * * @var string[] * * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string, 5: string, 6: string} */ private array $verbs = array( - "kill", - "regurgitat", - "destroy", - "blasphem", - "strangl", - "terroriz", - "mutilat", + 'kill', + 'regurgitat', + 'destroy', + 'blasphem', + 'strangl', + 'terroriz', + 'mutilat', ); /** + * Endings. + * * @var string[] * * @psalm-var array{0: string, 1: string, 2: string, 3: string} */ private array $endings = array( - "er", - "ers", - "ing", - "ed", + 'er', + 'ers', + 'ing', + 'ed', ); - public function get() : string - { + /** + * Return a generated band name. + */ + public function get() : string { $parts = array( - $this->pick($this->prefixes), - $this->pick($this->adverbs), - $this->pick($this->verbs)); + $this->pick( $this->prefixes ), + $this->pick( $this->adverbs ), + $this->pick( $this->verbs ), + ); - return trim(implode(" ", $parts) . $this->pick($this->endings)); + return trim( implode( ' ', $parts ) . $this->pick( $this->endings ) ); } } -class VenueGenerator extends GeneratorBase -{ +/** + * Generator for venue names + */ +class VenueGenerator extends GeneratorBase { + /** + * Prefix 1. + * * @var string[] * * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string} */ private array $prefix1 = array( - "", - "royal", - "shabby", - "happy", - "drunken", + '', + 'royal', + 'shabby', + 'happy', + 'drunken', ); /** + * Prefix 2. + * * @var string[] * * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string, 5: string} */ private array $prefix2 = array( - "", - "music", - "fiddler", - "rock", - "metal", - "mental", + '', + 'music', + 'fiddler', + 'rock', + 'metal', + 'mental', ); /** + * Type of venue. + * * @var string[] * * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string, 5: string, 6: string} */ private array $type = array( - "hall", - "museum", - "asylum", - "stage", - "cottage", - "opera", - "lighthouse" + 'hall', + 'museum', + 'asylum', + 'stage', + 'cottage', + 'opera', + 'lighthouse', ); - public function get() : string - { + /** + * Return a generated venue name. + */ + public function get() : string { $parts = array( - $this->pick($this->prefix1), - $this->pick($this->prefix2), - $this->pick($this->type)); + $this->pick( $this->prefix1 ), + $this->pick( $this->prefix2 ), + $this->pick( $this->type ), + ); - return trim(implode(" ", $parts)); + return trim( implode( ' ', $parts ) ); } } -class LinkGenerator extends GeneratorBase -{ +/** + * Generator for links (event and ticket links.) + */ +class LinkGenerator extends GeneratorBase { + /** + * Return a generated link. + * * @return string */ - public function get() : string - { - return 'https://example.com/' . bin2hex(random_bytes(8)); + public function get() : string { + return 'https://example.com/' . bin2hex( random_bytes( 8 ) ); } } $band = new BandNameGenerator(); $venue = new VenueGenerator(); -$link = new LinkGenerator(); +$links = new LinkGenerator(); $date = new DateTime(); -for ($i = 0; $i < 10; $i++) { - $date->add(new DateInterval('P' . random_int(0, 60) . 'D')); +$prog = array_shift( $argv ); +$num = intval( array_shift( $argv ) ) ?? 10; + +for ( $i = 0; $i < $num; $i++ ) { + $date->add( new DateInterval( 'P' . random_int( 0, 60 ) . 'D' ) ); - echo implode("\t", array($band->get(), $venue->get(), $date->format('Y-m-d'), $link->get(), $link->get())) . "\n"; + echo implode( "\t", array( $band->get(), $venue->get(), "Oslo", $date->format( 'Y-m-d' ), $links->get(), $links->get() ) ) . "\n"; } |