Skip to content

Commit

Permalink
Review (#9)
Browse files Browse the repository at this point in the history
* Migrations now have to be manually published

* Documented registerLoader

* Register before boot

* Snake case config keys

* TranslationLoaderManager refactors

* Removed unnecessary table property on LanguageLine

* Renamed createTranslation to createLanguageLine in tetst

* Removed spatie/laravel-translatable dependency

* Composer CS

* CS

* Documented TranslationLoader

* InvalidConfiguration CS

* Applied fixes from StyleCI
  • Loading branch information
sebastiandedeyne authored and freekmurze committed Oct 7, 2016
1 parent 1bd65cf commit b83d3ed
Show file tree
Hide file tree
Showing 13 changed files with 113 additions and 49 deletions.
5 changes: 2 additions & 3 deletions composer.json
Expand Up @@ -25,8 +25,7 @@
"php": "^7.0",
"illuminate/contracts": "~5.3.0",
"illuminate/database": "~5.3.0",
"illuminate/support": "~5.3.0",
"spatie/laravel-translatable": "^1.1"
"illuminate/support": "~5.3.0"
},
"require-dev": {
"phpunit/phpunit": "5.*",
Expand All @@ -47,5 +46,5 @@
},
"config": {
"sort-packages": true
}
}
}
2 changes: 1 addition & 1 deletion config/laravel-translation-loader.php
Expand Up @@ -6,7 +6,7 @@
* Language lines will be fetched by these loaders. You can put any class here that implements
* the Spatie\TranslationLoader\TranslationLoaders\TranslationLoader-interface.
*/
'translationLoaders' => [
'translation_loaders' => [
Spatie\TranslationLoader\TranslationLoaders\Db::class,
],

Expand Down
5 changes: 3 additions & 2 deletions src/Exceptions/InvalidConfiguration.php
Expand Up @@ -7,8 +7,9 @@

class InvalidConfiguration extends Exception
{
public static function invalidModel(string $className)
public static function invalidModel(string $className): self
{
return new static("You have configured an invalid class `{$className}`. A valid class extends ".LanguageLine::class.'.');
return new static("You have configured an invalid class `{$className}`.".
'A valid class extends '.LanguageLine::class.'.');
}
}
44 changes: 29 additions & 15 deletions src/LanguageLine.php
Expand Up @@ -4,21 +4,16 @@

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Cache;
use Spatie\Translatable\HasTranslations;

class LanguageLine extends Model
{
use HasTranslations {
setTranslation as traitSetTranslation;
}

/** @var array */
public $translatable = ['text'];

/** @var array */
public $guarded = ['id'];

public $table = 'language_lines';
protected $casts = ['text' => 'array'];

public static function boot()
{
Expand All @@ -37,31 +32,50 @@ public static function getTranslationsForGroup(string $locale, string $group): a
return static::query()
->where('group', $group)
->get()
->map(function (LanguageLine $languageLine) use ($locale) {
return [
'key' => $languageLine->key,
'text' => $languageLine->getTranslation($locale),
];
})
->pluck('text', 'key')
->toArray();
});
}

protected function flushGroupCache()
public static function getCacheKey(string $group, string $locale): string
{
foreach ($this->getTranslatedLocales('text') as $locale) {
Cache::forget(static::getCacheKey($this->group, $locale));
}
return "spatie.laravel-translation-loader.{$group}.{$locale}";
}

public static function getCacheKey(string $group, string $locale): string
/**
* @param string $locale
*
* @return string
*/
public function getTranslation(string $locale): string
{
return "spatie.laravel-translation-loader.{$group}.{$locale}";
return $this->text[$locale] ?? '';
}

/**
* @param string $locale
* @param string $value
*
* @return $this
*/
public function setTranslation(string $locale, string $value)
{
return $this->traitSetTranslation('text', $locale, $value);
$this->text = array_merge($this->text, [$locale => $value]);
}

protected function flushGroupCache()
{
foreach ($this->getTranslatedLocales() as $locale) {
Cache::forget(static::getCacheKey($this->group, $locale));
}
}

protected function getTranslatedLocales(): array
{
return array_keys($this->text);
}
}
18 changes: 9 additions & 9 deletions src/TranslationLoaderManager.php
Expand Up @@ -7,6 +7,7 @@

class TranslationLoaderManager extends FileLoader
{
/** @var \Illuminate\Translation\FileLoader */
protected $fileLoader;

public function __construct(FileLoader $fileLoader)
Expand Down Expand Up @@ -36,19 +37,18 @@ public function load($locale, $group, $namespace = null): array
return array_merge($fileTranslations, $loaderTranslations);
}

protected function getTranslationsForTranslationLoaders(string $locale, string $group, string $namespace = null): array
{
$loaderTranslations = collect(config('laravel-translation-loader.translationLoaders'))
protected function getTranslationsForTranslationLoaders(
string $locale,
string $group,
string $namespace = null
): array {
return collect(config('laravel-translation-loader.translation_loaders'))
->map(function (string $className) {
return app($className);
})
->map(function (TranslationLoader $translationLoader) use ($locale, $group, $namespace) {
->flatMap(function (TranslationLoader $translationLoader) use ($locale, $group, $namespace) {
return $translationLoader->loadTranslations($locale, $group, $namespace);
})
->reduce(function ($allTranslations, $translations) {
return array_merge($allTranslations, $translations);
}, []);

return $loaderTranslations;
->toArray();
}
}
7 changes: 6 additions & 1 deletion src/TranslationLoaders/TranslationLoader.php
Expand Up @@ -4,8 +4,13 @@

interface TranslationLoader
{
/*
/**
* Returns all translations for the given locale and group.
*
* @param string $locale
* @param string $group
*
* @return array
*/
public function loadTranslations(string $locale, string $group): array;
}
35 changes: 25 additions & 10 deletions src/TranslationServiceProvider.php
Expand Up @@ -7,6 +7,16 @@

class TranslationServiceProvider extends IlluminateTranslationServiceProvider
{
/**
* Register the application services.
*/
public function register()
{
parent::register();

$this->mergeConfigFrom(__DIR__.'/../config/laravel-translation-loader.php', 'laravel-translation-loader');
}

/**
* Bootstrap the application services.
*/
Expand All @@ -16,21 +26,26 @@ public function boot()
$this->loadMigrationsFrom(__DIR__.'/../database/migrations');

$this->publishes([
__DIR__.'/../config/laravel-translation-loader.php' => config_path('laravel-translation-loader.php'),
], 'config');
__DIR__.'/../config/laravel-translation-loader.php' => config_path('laravel-translation-loader.php'),
], 'config');

if (! class_exists('CreateLanguageLinesTable')) {
$timestamp = date('Y_m_d_His', time());

$this->publishes([
__DIR__.'/../database/migrations/create_language_lines_table.php.stub' => database_path('migrations/'.$timestamp.'_create_language_lines_table.php'),
], 'migrations');
}
}
}

/**
* Register the application services.
* Register the translation line loader. This method registers a
* `TranslationLoaderManager` instead of a simple `FileLoader` as the
* applications `translation.loader` instance.
*
* @return void
*/
public function register()
{
parent::register();

$this->mergeConfigFrom(__DIR__.'/../config/laravel-translation-loader.php', 'laravel-translation-loader');
}

protected function registerLoader()
{
$this->app->singleton('translation.loader', function ($app) {
Expand Down
26 changes: 26 additions & 0 deletions tests/LanguageLineTest.php
@@ -0,0 +1,26 @@
<?php

namespace Spatie\TranslationLoader\Test;

class LanguageLineTest extends TestCase
{
/** @test */
public function it_can_get_a_translation()
{
$languageLine = $this->createLanguageLine('group', 'new', ['en' => 'english', 'nl' => 'nederlands']);

$this->assertEquals('english', $languageLine->getTranslation('en'));
$this->assertEquals('nederlands', $languageLine->getTranslation('nl'));
}

/** @test */
public function it_can_set_a_translation()
{
$languageLine = $this->createLanguageLine('group', 'new', ['en' => 'english']);

$languageLine->setTranslation('nl', 'nederlands');

$this->assertEquals('english', $languageLine->getTranslation('en'));
$this->assertEquals('nederlands', $languageLine->getTranslation('nl'));
}
}
8 changes: 6 additions & 2 deletions tests/TestCase.php
Expand Up @@ -18,7 +18,11 @@ public function setUp()

Artisan::call('migrate');

$this->languageLine = $this->createTranslation('group', 'key', ['en' => 'english', 'nl' => 'nederlands']);
include_once __DIR__.'/../database/migrations/create_language_lines_table.php.stub';

(new \CreateLanguageLinesTable())->up();

$this->languageLine = $this->createLanguageLine('group', 'key', ['en' => 'english', 'nl' => 'nederlands']);
}

/**
Expand Down Expand Up @@ -73,7 +77,7 @@ public function getTempDirectory(string $path): string
return __DIR__."/{$path}";
}

protected function createTranslation(string $group, string $key, array $text): LanguageLine
protected function createLanguageLine(string $group, string $key, array $text): LanguageLine
{
return LanguageLine::create(compact('group', 'key', 'text'));
}
Expand Down
2 changes: 1 addition & 1 deletion tests/TransTest.php
Expand Up @@ -26,7 +26,7 @@ public function it_can_get_translations_for_language_files_for_the_current_local
/** @test */
public function by_default_it_will_prefer_a_db_translation_over_a_file_translation()
{
$this->createTranslation('file', 'key', ['en' => 'en value from db']);
$this->createLanguageLine('file', 'key', ['en' => 'en value from db']);

$this->assertEquals('en value from db', trans('file.key'));
}
Expand Down
4 changes: 2 additions & 2 deletions tests/TranslationLoaders/DbTest.php
Expand Up @@ -43,7 +43,7 @@ public function it_can_return_the_group_and_the_key_when_getting_a_non_existing_
/** @test */
public function it_supports_placeholders()
{
$this->createTranslation('group', 'placeholder', ['en' => 'text with :placeholder']);
$this->createLanguageLine('group', 'placeholder', ['en' => 'text with :placeholder']);

$this->assertEquals(
'text with filled in placeholder',
Expand All @@ -69,7 +69,7 @@ public function it_flushes_the_cache_when_a_translation_has_been_created()
{
$this->assertEquals('group.new', trans('group.new'));

$this->createTranslation('group', 'new', ['en' => 'created']);
$this->createLanguageLine('group', 'new', ['en' => 'created']);
$this->flushIlluminateTranslatorCache();

$this->assertEquals('created', trans('group.new'));
Expand Down
6 changes: 3 additions & 3 deletions tests/TranslationManagerTest.php
Expand Up @@ -14,20 +14,20 @@ public function setUp()
/** @test */
public function it_will_not_use_database_translations_if_the_provider_is_not_configured()
{
$this->app['config']->set('laravel-translation-loader.translationLoaders', []);
$this->app['config']->set('laravel-translation-loader.translation_loaders', []);

$this->assertEquals('group.key', trans('group.key'));
}

/** @test */
public function it_will_merge_translation_from_all_providers()
{
$this->app['config']->set('laravel-translation-loader.translationLoaders', [
$this->app['config']->set('laravel-translation-loader.translation_loaders', [
Db::class,
DummyLoader::class,
]);

$this->createTranslation('db', 'key', ['en' => 'db']);
$this->createLanguageLine('db', 'key', ['en' => 'db']);

$this->assertEquals('db', trans('db.key'));
$this->assertEquals('this is dummy', trans('dummy.dummy'));
Expand Down

0 comments on commit b83d3ed

Please sign in to comment.