Skip to content

Commit

Permalink
Merge branch 'develop' of github.com:laravel/laravel into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
taylorotwell committed Sep 26, 2012
2 parents d64d6c9 + 0950081 commit 3e3ee87
Show file tree
Hide file tree
Showing 7 changed files with 329 additions and 18 deletions.
2 changes: 2 additions & 0 deletions laravel/auth/drivers/driver.php
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ public function logout()
$this->cookie($this->recaller(), null, -2000);

Session::forget($this->token());

$this->token = null;
}

/**
Expand Down
6 changes: 3 additions & 3 deletions laravel/database/eloquent/model.php
Original file line number Diff line number Diff line change
Expand Up @@ -528,7 +528,7 @@ public function get_dirty()

foreach ($this->attributes as $key => $value)
{
if ( ! isset($this->original[$key]) or $value !== $this->original[$key])
if ( ! array_key_exists($key, $this->original) or $value != $this->original[$key])
{
$dirty[$key] = $value;
}
Expand All @@ -544,7 +544,7 @@ public function get_dirty()
*/
public function get_key()
{
return $this->get_attribute(static::$key);
return array_get($this->original, static::$key);
}

/**
Expand Down Expand Up @@ -721,7 +721,7 @@ public function __isset($key)
{
if (array_key_exists($key, $this->$source)) return true;
}

if (method_exists($this, $key)) return true;
}

Expand Down
2 changes: 1 addition & 1 deletion laravel/laravel.php
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@

foreach ($languages as $language)
{
if (starts_with($uri, $language))
if (preg_match("#^{$language}(?:$|/)#i", $uri))
{
Config::set('application.language', $language);

Expand Down
27 changes: 16 additions & 11 deletions laravel/str.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,22 @@ class Str {
*/
public static $pluralizer;

/**
* Get the default string encoding for the application.
*
* This method is simply a short-cut to Config::get('application.encoding').
*
* @return string
*/
public static function encoding()
{
return Config::get('application.encoding');
}
/**
* Cache application encoding locally to save expensive calls to Config::get().
*
* @var string
*/
public static $encoding = null;

/**
* Get the appliction.encoding without needing to request it from Config::get() each time.
*
* @return string
*/
protected static function encoding()
{
return static::$encoding ?: static::$encoding = Config::get('application.encoding');
}

/**
* Get the length of a string.
Expand Down
15 changes: 15 additions & 0 deletions laravel/tests/application/models/model.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

class Model extends Laravel\Database\Eloquent\Model {

public function set_setter($setter)
{
$this->set_attribute('setter', 'setter: '.$setter);
}

public function get_getter()
{
return 'getter: '.$this->get_attribute('getter');
}

}
3 changes: 0 additions & 3 deletions laravel/tests/cases/auth.test.php
Original file line number Diff line number Diff line change
Expand Up @@ -294,9 +294,6 @@ public function testLogoutMethodLogsOutUser()

Auth::logout();

// A workaround since Cookie will is only stored in memory, until Response class is called.
Auth::driver()->token = null;

$this->assertNull(Auth::user());

$this->assertFalse(isset(Session::$instance->session['data']['laravel_auth_drivers_fluent_login']));
Expand Down
292 changes: 292 additions & 0 deletions laravel/tests/cases/eloquent.test.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,292 @@
<?php

class EloquentTest extends PHPUnit_Framework_TestCase {

/**
* Test the Model constructor.
*
* @group laravel
*/
public function testAttributesAreSetByConstructor()
{
$array = array('name' => 'Taylor', 'age' => 25, 'setter' => 'foo');

$model = new Model($array);

$this->assertEquals('Taylor', $model->name);
$this->assertEquals(25, $model->age);
$this->assertEquals('setter: foo', $model->setter);
}

/**
* Test the Model::fill method.
*
* @group laravel
*/
public function testAttributesAreSetByFillMethod()
{
$array = array('name' => 'Taylor', 'age' => 25, 'setter' => 'foo');

$model = new Model();
$model->fill($array);

$this->assertEquals('Taylor', $model->name);
$this->assertEquals(25, $model->age);
$this->assertEquals('setter: foo', $model->setter);
}

/**
* Test the Model::fill_raw method.
*
* @group laravel
*/
public function testAttributesAreSetByFillRawMethod()
{
$array = array('name' => 'Taylor', 'age' => 25, 'setter' => 'foo');

$model = new Model();
$model->fill_raw($array);

$this->assertEquals($array, $model->attributes);
}

/**
* Test the Model::fill method with accessible.
*
* @group laravel
*/
public function testAttributesAreSetByFillMethodWithAccessible()
{
Model::$accessible = array('name', 'age');

$array = array('name' => 'Taylor', 'age' => 25, 'foo' => 'bar');

$model = new Model();
$model->fill($array);

$this->assertEquals('Taylor', $model->name);
$this->assertEquals(25, $model->age);
$this->assertNull($model->foo);

Model::$accessible = null;
}

/**
* Test the Model::fill method with empty accessible array.
*
* @group laravel
*/
public function testAttributesAreSetByFillMethodWithEmptyAccessible()
{
Model::$accessible = array();

$array = array('name' => 'Taylor', 'age' => 25, 'foo' => 'bar');

$model = new Model();
$model->fill($array);

$this->assertEquals(array(), $model->attributes);
$this->assertNull($model->name);
$this->assertNull($model->age);
$this->assertNull($model->foo);

Model::$accessible = null;
}

/**
* Test the Model::fill_raw method with accessible.
*
* @group laravel
*/
public function testAttributesAreSetByFillRawMethodWithAccessible()
{
Model::$accessible = array('name', 'age');

$array = array('name' => 'taylor', 'age' => 25, 'setter' => 'foo');

$model = new Model();
$model->fill_raw($array);

$this->assertEquals($array, $model->attributes);

Model::$accessible = null;
}

/**
* Test the Model::__set method.
*
* @group laravel
*/
public function testAttributeMagicSetterMethodChangesAttribute()
{
Model::$accessible = array('setter');

$array = array('setter' => 'foo', 'getter' => 'bar');

$model = new Model($array);
$model->setter = 'bar';
$model->getter = 'foo';

$this->assertEquals('setter: bar', $model->get_attribute('setter'));
$this->assertEquals('foo', $model->get_attribute('getter'));

Model::$accessible = null;
}

/**
* Test the Model::__get method.
*
* @group laravel
*/
public function testAttributeMagicGetterMethodReturnsAttribute()
{
$array = array('setter' => 'foo', 'getter' => 'bar');

$model = new Model($array);

$this->assertEquals('setter: foo', $model->setter);
$this->assertEquals('getter: bar', $model->getter);
}

/**
* Test the Model::set_* method.
*
* @group laravel
*/
public function testAttributeSetterMethodChangesAttribute()
{
Model::$accessible = array('setter');

$array = array('setter' => 'foo', 'getter' => 'bar');

$model = new Model($array);
$model->set_setter('bar');
$model->set_getter('foo');

$this->assertEquals('setter: bar', $model->get_attribute('setter'));
$this->assertEquals('foo', $model->get_attribute('getter'));

Model::$accessible = null;
}

/**
* Test the Model::get_* method.
*
* @group laravel
*/
public function testAttributeGetterMethodReturnsAttribute()
{
$array = array('setter' => 'foo', 'getter' => 'bar');

$model = new Model($array);

$this->assertEquals('setter: foo', $model->get_setter());
$this->assertEquals('getter: bar', $model->get_getter());
}

/**
* Test determination of dirty/changed attributes.
*
* @group laravel
*/
public function testDeterminationOfChangedAttributes()
{
$array = array('name' => 'Taylor', 'age' => 25, 'foo' => null);

$model = new Model($array, true);
$model->name = 'Otwell';
$model->new = null;

$this->assertTrue($model->changed('name'));
$this->assertFalse($model->changed('age'));
$this->assertFalse($model->changed('foo'));
$this->assertFalse($model->changed('new'));
$this->assertTrue($model->dirty());
$this->assertEquals(array('name' => 'Otwell', 'new' => null), $model->get_dirty());

$model->sync();

$this->assertFalse($model->changed('name'));
$this->assertFalse($model->changed('age'));
$this->assertFalse($model->changed('foo'));
$this->assertFalse($model->changed('new'));
$this->assertFalse($model->dirty());
$this->assertEquals(array(), $model->get_dirty());
}

/**
* Test the Model::purge method.
*
* @group laravel
*/
public function testAttributePurge()
{
$array = array('name' => 'Taylor', 'age' => 25);

$model = new Model($array);
$model->name = 'Otwell';
$model->age = 26;

$model->purge('name');

$this->assertFalse($model->changed('name'));
$this->assertNull($model->name);
$this->assertTrue($model->changed('age'));
$this->assertEquals(26, $model->age);
$this->assertEquals(array('age' => 26), $model->get_dirty());
}

/**
* Test the Model::table method.
*
* @group laravel
*/
public function testTableMethodReturnsCorrectName()
{
$model = new Model();
$this->assertEquals('models', $model->table());

Model::$table = 'table';
$this->assertEquals('table', $model->table());

Model::$table = null;
$this->assertEquals('models', $model->table());
}

/**
* Test the Model::to_array method.
*
* @group laravel
*/
public function testConvertingToArray()
{
Model::$hidden = array('password', 'hidden');

$array = array('name' => 'Taylor', 'age' => 25, 'password' => 'laravel', 'null' => null);

$model = new Model($array);

$first = new Model(array('first' => 'foo', 'password' => 'hidden'));
$second = new Model(array('second' => 'bar', 'password' => 'hidden'));
$third = new Model(array('third' => 'baz', 'password' => 'hidden'));

$model->relationships['one'] = new Model(array('foo' => 'bar', 'password' => 'hidden'));
$model->relationships['many'] = array($first, $second, $third);
$model->relationships['hidden'] = new Model(array('should' => 'visible'));
$model->relationships['null'] = null;

$this->assertEquals(array(
'name' => 'Taylor', 'age' => 25, 'null' => null,
'one' => array('foo' => 'bar'),
'many' => array(
array('first' => 'foo'),
array('second' => 'bar'),
array('third' => 'baz'),
),
'hidden' => array('should' => 'visible'),
'null' => null,
), $model->to_array());

}

}

0 comments on commit 3e3ee87

Please sign in to comment.