Don't include certain terms as hashtags in tweets

References #24
This commit is contained in:
Oliver Davies 2020-09-04 12:24:05 +01:00
parent c5c774290d
commit 10e4616e01
2 changed files with 35 additions and 0 deletions

View file

@ -61,10 +61,19 @@ class Post extends Node implements ContentEntityBundleInterface {
private function convertTermsToHashtags(): string { private function convertTermsToHashtags(): string {
return $this->getTags() return $this->getTags()
->filter(fn(Term $term) => !$this->tagsToRemove()
->contains($term->label()))
->map(fn(Term $term) => $this->convertTermToHashtag($term)) ->map(fn(Term $term) => $this->convertTermToHashtag($term))
->implode(' '); ->implode(' ');
} }
private function tagsToRemove(): Collection {
// TODO: Move these values into configuration/settings.php.
return new Collection([
'Drupal Planet',
]);
}
private function convertTermToHashtag(Term $tag): string { private function convertTermToHashtag(Term $tag): string {
$tagName = strtolower($tag->label()); $tagName = strtolower($tag->label());
$tagName = "#{$tagName}"; $tagName = "#{$tagName}";

View file

@ -67,6 +67,32 @@ final class PostTest extends EntityKernelTestBase {
$this->assertSame($expected, $post->toTweet()); $this->assertSame($expected, $post->toTweet());
} }
/** @test */
public function certain_terms_are_not_added_as_hashtags(): void {
/** @var Post $post */
$post = Node::create([
'field_tags' => [
Term::create(['vid' => 'tags', 'name' => 'Drupal']),
Term::create(['vid' => 'tags', 'name' => 'Drupal Planet']),
Term::create(['vid' => 'tags', 'name' => 'PHP']),
],
'status' => NodeInterface::PUBLISHED,
'title' => 'Drupal Planet should not be added as a hashtag',
'type' => 'post',
]);
$post->save();
$expected = <<<EOF
Drupal Planet should not be added as a hashtag
http://localhost/node/1
#drupal #php
EOF;
$this->assertSame($expected, $post->toTweet());
}
protected function setUp() { protected function setUp() {
parent::setUp(); parent::setUp();