Skip to content

Commit

Permalink
Add location name getter
Browse files Browse the repository at this point in the history
  • Loading branch information
yaroslawww committed Dec 7, 2021
1 parent 986e684 commit 75c6dca
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 24 deletions.
4 changes: 2 additions & 2 deletions src/Console/Commands/HasTablesClassesMap.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@

trait HasTablesClassesMap
{

/**
* map describe command type and table class.
* Map describe command type and table class.
*
* @var array
*/
Expand Down Expand Up @@ -43,6 +42,7 @@ public function makeTableObjectNameByType(string $type, ...$attributes): GeoTabl
{
$tableClassName = $this->getTableClassNameByType($type);

/** @psalm-suppress UndefinedClass */
return new $tableClassName(...$attributes);
}
}
6 changes: 5 additions & 1 deletion src/Models/Geoname.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,15 @@

class Geoname extends Model
{
use HasTableWithSuffix, HasCoordinates;
use HasTableWithSuffix, HasCoordinates, HasLocationName;

protected $primaryKey = 'geoname_id';
public $incrementing = false;

protected $guarded = [];

protected string $locationNameColumn = 'ascii_name';

/**
* @inheritDoc
*/
Expand Down
35 changes: 15 additions & 20 deletions src/Models/HasCoordinates.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,8 @@

trait HasCoordinates
{

/**
* Table column name for latitude.
*
* @return string
*/
public function latitudeColName(): string
{
Expand All @@ -21,8 +18,6 @@ public function latitudeColName(): string

/**
* Table column name for longitude.
*
* @return string
*/
public function longitudeColName(): string
{
Expand All @@ -31,8 +26,6 @@ public function longitudeColName(): string

/**
* Filed name for distance. This field will be created only id use "nearest" scope.
*
* @return string
*/
public function distanceColName(): string
{
Expand All @@ -42,13 +35,6 @@ public function distanceColName(): string
/**
* Haversine formula (from Google solution example).
* By default use radius in kilometers.
*
* @param Builder $query
* @param float $lat
* @param float $lng
* @param float $radius
* @param int $coef
* @return Builder
*/
public function scopeNearest(Builder $query, float $lat, float $lng, float $radius, int $coef = ModelWithCoordinates::HAVERSINE_COEF_KILOMETERS)
{
Expand Down Expand Up @@ -82,10 +68,6 @@ public function scopeNearestInMiles(Builder $query, float $lat, float $lng, floa

/**
* Order query results by distance.
*
* @param Builder $query
* @param string $direction
* @return Builder
*/
public function scopeOrderByNearest(Builder $query, string $direction = 'asc')
{
Expand All @@ -94,8 +76,6 @@ public function scopeOrderByNearest(Builder $query, string $direction = 'asc')

/**
* Field has value only is use "nearest" scope.
*
* @return float
*/
public function getDistanceAttribute(): float
{
Expand All @@ -105,4 +85,19 @@ public function getDistanceAttribute(): float

return 0;
}

public function getLatitude(): ?float
{
return $this->{$this->latitudeColName()};
}

public function getLongitude(): ?float
{
return $this->{$this->longitudeColName()};
}

public function getDistance(): float
{
return $this->distance;
}
}
19 changes: 19 additions & 0 deletions src/Models/HasLocationName.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace LaraGeoData\Models;

trait HasLocationName
{
/**
* Filed name for location name.
*/
public function locationNameColumn(): string
{
return $this->locationNameColumn ?? 'location_name';
}

public function locationName(): ?string
{
return $this->{$this->locationNameColumn()};
}
}
6 changes: 5 additions & 1 deletion src/Models/PostalCode.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,15 @@

class PostalCode extends Model
{
use HasTableWithSuffix, HasCoordinates;
use HasTableWithSuffix, HasCoordinates, HasLocationName;

protected $primaryKey = 'country_code';
public $incrementing = false;

protected $guarded = [];

protected string $locationNameColumn = 'postal_code';

/**
* @inheritDoc
*/
Expand Down
13 changes: 13 additions & 0 deletions tests/Models/GeonameModelTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,22 @@ public function dynamic_table_name()
Config::set('geonames.database.default_suffix', 'bar');
$model = new Geoname();
$this->assertEquals($model->getTableNameRoot() . '_bar', $model->getTable());

Config::set('geonames.database.default_suffix', null);
$model = new Geoname();
$this->assertEquals($model->getTableNameRoot(), $model->getTable());

$model = new Geoname([
'lat' => 12,
'lng' => 13,
'distance' => 14,
'ascii_name' => 'Test name',
]);

$this->assertEquals(12, $model->getLatitude());
$this->assertEquals(13, $model->getLongitude());
$this->assertEquals(14, $model->getDistance());
$this->assertEquals('Test name', $model->locationName());
}

/** @test */
Expand Down
13 changes: 13 additions & 0 deletions tests/Models/PostalCodeModelTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,22 @@ public function dynamic_table_name()
Config::set('geonames.database.default_suffix', 'bar');
$model = new PostalCode();
$this->assertEquals($model->getTableNameRoot() . '_bar', $model->getTable());

Config::set('geonames.database.default_suffix', null);
$model = new PostalCode();
$this->assertEquals($model->getTableNameRoot(), $model->getTable());

$model = new PostalCode([
'lat' => 12,
'lng' => 13,
'distance' => 14,
'postal_code' => 'Test postal name',
]);

$this->assertEquals(12, $model->getLatitude());
$this->assertEquals(13, $model->getLongitude());
$this->assertEquals(14, $model->getDistance());
$this->assertEquals('Test postal name', $model->locationName());
}

/** @test */
Expand Down

0 comments on commit 75c6dca

Please sign in to comment.