Commit 1e20052b authored by Taylor Otwell's avatar Taylor Otwell

Merge branch 'staging'

parents 722de55e 4d140526
language: php
php:
- 5.3
script: "php artisan test:core"
notifications:
irc:
- "irc.freenode.org#laravel"
\ No newline at end of file
......@@ -24,6 +24,7 @@ return array(
"alpha" => "القيمة :attribute يمكنها أن تحتوي على أحرف فقط.",
"alpha_dash" => "القيمة :attribute يمكنها أن تحتوي على أحرف و أرقام و إشارة الناقص فقط.",
"alpha_num" => "القيمة :attribute يمكنها أن تحتوي على أحرف و أرقام فقط.",
"array" => "The :attribute must have selected elements.",
"before" => "القيمة :attribute يجب أن تكون قبل تاريخ :date.",
"between" => array(
"numeric" => "القيمة :attribute يجب أن تكون بين :min و :max.",
......@@ -31,6 +32,10 @@ return array(
"string" => "النص :attribute يجب أن يكون بطول من :min إلى :max حرف.",
),
"confirmed" => "القيمة :attribute التأكيدية غير مطابقة.",
"count" => "The :attribute must have exactly :count selected elements.",
"countbetween" => "The :attribute must have between :min and :max selected elements.",
"countmax" => "The :attribute must have less than :max selected elements.",
"countmin" => "The :attribute must have at least :min selected elements.",
"different" => "القيمتان :attribute و :other يجب أن تختلفان.",
"email" => "القيمة :attribute تمثل بريد إلكتروني غير صحيح.",
"exists" => "القيمة المختارة :attribute غير موجودة.",
......
......@@ -24,6 +24,7 @@ return array(
"alpha" => "Полето :attribute трябва да съдържа само букви.",
"alpha_dash" => "Полето :attribute трябва да съдържа само букви, цифри, долна черта и тире.",
"alpha_num" => "Полето :attribute трябва да съдържа само букви и цифри.",
"array" => "The :attribute must have selected elements.",
"before" => "Полето :attribute трябва да бъде дата преди :date.",
"between" => array(
"numeric" => "Полето :attribute трябва да бъде между :min и :max.",
......@@ -31,6 +32,10 @@ return array(
"string" => "Полето :attribute трябва да бъде между :min и :max знака.",
),
"confirmed" => "Полето :attribute не е потвърдено.",
"count" => "The :attribute must have exactly :count selected elements.",
"countbetween" => "The :attribute must have between :min and :max selected elements.",
"countmax" => "The :attribute must have less than :max selected elements.",
"countmin" => "The :attribute must have at least :min selected elements.",
"different" => "Полетата :attribute и :other трябва да са различни.",
"email" => "Полето :attribute е с невалиден формат.",
"exists" => "Избраната стойност на :attribute вече съществува.",
......
......@@ -24,6 +24,7 @@ return array(
"alpha" => ":attribute darf nur Buchstaben beinhalten.",
"alpha_dash" => ":attribute sollte nur aus Buchstaben, Nummern und Bindestrichen bestehen.",
"alpha_num" => ":attribute sollte nur aus Buchstaben und Nummern bestehen.",
"array" => "The :attribute must have selected elements.",
"before" => ":attribute muss ein Datum vor dem :date sein.",
"between" => array(
"numeric" => ":attribute muss zwischen :min und :max liegen.",
......@@ -31,6 +32,10 @@ return array(
"string" => ":attribute muss zwischen :min und :max Zeichen lang sein.",
),
"confirmed" => ":attribute stimmt nicht mit der Bestätigung überein.",
"count" => "The :attribute must have exactly :count selected elements.",
"countbetween" => "The :attribute must have between :min and :max selected elements.",
"countmax" => "The :attribute must have less than :max selected elements.",
"countmin" => "The :attribute must have at least :min selected elements.",
"different" => ":attribute und :other müssen verschieden sein.",
"email" => ":attribute ist keine gültige Email-Adresse.",
"exists" => "Der gewählte Wert für :attribute ist ungültig.",
......
......@@ -24,6 +24,7 @@ return array(
"alpha" => "The :attribute may only contain letters.",
"alpha_dash" => "The :attribute may only contain letters, numbers, and dashes.",
"alpha_num" => "The :attribute may only contain letters and numbers.",
"array" => "The :attribute must have selected elements.",
"before" => "The :attribute must be a date before :date.",
"between" => array(
"numeric" => "The :attribute must be between :min - :max.",
......@@ -31,6 +32,10 @@ return array(
"string" => "The :attribute must be between :min - :max characters.",
),
"confirmed" => "The :attribute confirmation does not match.",
"count" => "The :attribute must have exactly :count selected elements.",
"countbetween" => "The :attribute must have between :min and :max selected elements.",
"countmax" => "The :attribute must have less than :max selected elements.",
"countmin" => "The :attribute must have at least :min selected elements.",
"different" => "The :attribute and :other must be different.",
"email" => "The :attribute format is invalid.",
"exists" => "The selected :attribute is invalid.",
......
......@@ -24,6 +24,7 @@ return array(
"alpha" => "Le champ :attribute ne doit contenir que des lettres.",
"alpha_dash" => "Le champ :attribute ne doit contenir que des lettres, nombres et des tirets.",
"alpha_num" => "Le champ :attribute ne doit contenir que des lettres et nombres.",
"array" => "The :attribute must have selected elements.",
"before" => "Le champ :attribute doit être une date avant :date.",
"between" => array(
"numeric" => "Le champ :attribute doit être entre :min - :max.",
......@@ -31,6 +32,10 @@ return array(
"string" => "Le champ :attribute doit être entre :min - :max caractères.",
),
"confirmed" => "Le champ :attribute confirmation est différent.",
"count" => "The :attribute must have exactly :count selected elements.",
"countbetween" => "The :attribute must have between :min and :max selected elements.",
"countmax" => "The :attribute must have less than :max selected elements.",
"countmin" => "The :attribute must have at least :min selected elements.",
"different" => "Les champ :attribute et :other doivent être différents.",
"email" => "Le format du champ :attribute est invalide.",
"exists" => "Le champ sélectionné :attribute est invalide.",
......
......@@ -27,6 +27,7 @@ return array(
"alpha" => "הערך :attribute יכול להכיל רק אותיות.",
"alpha_dash" => "הערך :attribute יכול להכיל רק אותיות, מספרים ומקפים.",
"alpha_num" => "הערך :attribute יכול להכיל רק אותיות ומספרים.",
"array" => "The :attribute must have selected elements.",
"before" => "הערך :attribute חייב להכיל תאריך לפני :date.",
"between" => array(
"numeric" => "הערך :attribute חייב להיות בין :min ל-:max.",
......@@ -34,6 +35,10 @@ return array(
"string" => "הערך :attribute חייב להכיל בין :min ל-:max תווים.",
),
"confirmed" => "הערכים של :attribute חייבים להיות זהים.",
"count" => "The :attribute must have exactly :count selected elements.",
"countbetween" => "The :attribute must have between :min and :max selected elements.",
"countmax" => "The :attribute must have less than :max selected elements.",
"countmin" => "The :attribute must have at least :min selected elements.",
"different" => "הערכים של :attribute ו-:other חייבים להיות שונים.",
"email" => "הערך :attribute חייב להכיל כתובת אימייל תקינה.",
"exists" => "הערך :attribute לא קיים.",
......
......@@ -24,6 +24,7 @@ return array(
"alpha" => "A(z) :attribute csak betűket tartalmazhat.",
"alpha_dash" => "A(z) :attribute betűket, számokat és kötőjeleket tartalmazhat.",
"alpha_num" => "A(z) :attribute csak betűket és számokat tartalmazhat.",
"array" => "The :attribute must have selected elements.",
"before" => "A :attribute :date előtti dátum kell legyen.",
"between" => array(
"numeric" => "A(z) :attribute :min - :max közötti érték kell legyen.",
......@@ -31,6 +32,10 @@ return array(
"string" => "A(z) :attribute :min - :max karakterhossz között kell legyen",
),
"confirmed" => "A(z) :attribute megerősítése nem egyezett meg.",
"count" => "The :attribute must have exactly :count selected elements.",
"countbetween" => "The :attribute must have between :min and :max selected elements.",
"countmax" => "The :attribute must have less than :max selected elements.",
"countmin" => "The :attribute must have at least :min selected elements.",
"different" => "A(z) :attribute és :other különböző kell legyen.",
"email" => "A(z) :attribute formátuma nem megfelelő.",
"exists" => "A(z) választott :attribute nem megfelelő.",
......
......@@ -24,6 +24,7 @@ return array(
"alpha" => "Isian :attribute hanya boleh berisi huruf.",
"alpha_dash" => "Isian :attribute hanya boleh berisi huruf, angka, dan strip.",
"alpha_num" => "Isian :attribute hanya boleh berisi huruf dan angka.",
"array" => "The :attribute must have selected elements.",
"before" => "Isian :attribute harus tanggal sebelum :date.",
"between" => array(
"numeric" => "Isian :attribute harus antara :min - :max.",
......@@ -31,6 +32,10 @@ return array(
"string" => "Isian :attribute harus antara :min - :max karakter.",
),
"confirmed" => "Konfirmasi :attribute tidak cocok.",
"count" => "The :attribute must have exactly :count selected elements.",
"countbetween" => "The :attribute must have between :min and :max selected elements.",
"countmax" => "The :attribute must have less than :max selected elements.",
"countmin" => "The :attribute must have at least :min selected elements.",
"different" => "Isian :attribute dan :other harus berbeda.",
"email" => "Format isian :attribute tidak valid.",
"exists" => "Isian :attribute yang dipilih tidak valid.",
......
......@@ -40,6 +40,7 @@ return array(
"alpha" => ":attributeはアルファベッドのみがご利用できます。",
"alpha_dash" => ":attributeは英数字とダッシュ(-)及び下線(_)がご利用できます。",
"alpha_num" => ":attributeは英数字がご利用できます。",
"array" => "The :attribute must have selected elements.",
"before" => ":attributeには、:date以前の日付をご利用ください。",
"between" => array(
"numeric" => ":attributeは、:minから、:maxまでの数字をご指定ください。",
......@@ -47,6 +48,10 @@ return array(
"string" => ":attributeは、:min文字から:max文字の間でご指定ください。",
),
"confirmed" => ":attributeと、確認フィールドとが、一致していません。",
"count" => "The :attribute must have exactly :count selected elements.",
"countbetween" => "The :attribute must have between :min and :max selected elements.",
"countmax" => "The :attribute must have less than :max selected elements.",
"countmin" => "The :attribute must have at least :min selected elements.",
"different" => ":attributeと:otherには、異なった内容を指定してください。",
"email" => ":attributeには正しいメールアドレスの形式をご指定ください。",
"exists" => "選択された:attributeは正しくありません。",
......
......@@ -15,6 +15,7 @@ return array(
"alpha" => "Het :attribute mag alleen letters bevatten.",
"alpha_dash" => "Het :attribute mag alleen letters, nummers, onderstreep(_) en strepen(-) bevatten.",
"alpha_num" => "Het :attribute mag alleen letters en nummers",
"array" => "The :attribute must have selected elements.",
"before" => "Het :attribute moet een datum voor :date zijn.",
"between" => array(
"numeric" => "Het :attribute moet tussen :min en :max zijn.",
......@@ -22,6 +23,10 @@ return array(
"string" => "Het :attribute moet tussen :min en :max tekens zijn.",
),
"confirmed" => "Het :attribute bevestiging komt niet overeen.",
"count" => "The :attribute must have exactly :count selected elements.",
"countbetween" => "The :attribute must have between :min and :max selected elements.",
"countmax" => "The :attribute must have less than :max selected elements.",
"countmin" => "The :attribute must have at least :min selected elements.",
"different" => "Het :attribute en :other moeten verschillend zijn.",
"email" => "Het :attribute formaat is ongeldig.",
"exists" => "Het gekozen :attribute is al ingebruik.",
......
......@@ -24,13 +24,18 @@ return array(
"alpha" => ":attribute może zawierać jedynie litery.",
"alpha_dash" => ":attribute może zawierać jedynie litery, cyfry i myślniki.",
"alpha_num" => ":attribute może zawierać jedynie litery i cyfry.",
"array" => "The :attribute must have selected elements.",
"before" => ":attribute musi zawierać datę, która jest przed :date.",
"between" => array(
"numeric" => ":ttribute musi mieścić się w granicach :min - :max.",
"numeric" => ":attribute musi mieścić się w granicach :min - :max.",
"file" => ":attribute musi mieć :min - :max kilobajtów.",
"string" => ":attribute musi mieć :min - :max znaków.",
),
"confirmed" => "Potwierdzenie :attribute się nie zgadza.",
"count" => "The :attribute must have exactly :count selected elements.",
"countbetween" => "The :attribute must have between :min and :max selected elements.",
"countmax" => "The :attribute must have less than :max selected elements.",
"countmin" => "The :attribute must have at least :min selected elements.",
"different" => ":attribute i :other muszą się od siebie różnić.",
"email" => "The :attribute format is invalid.",
"exists" => "Zaznaczona opcja :attribute jest nieprawidłowa.",
......
......@@ -24,6 +24,7 @@ return array(
"alpha" => "Поле :attribute может содержать только буквы.",
"alpha_dash" => "Поле :attribute может содержать только буквы, цифры и тире.",
"alpha_num" => "Поле :attribute может содержать только буквы и цифры.",
"array" => "The :attribute must have selected elements.",
"before" => "Поле :attribute должно быть датой перед :date.",
"between" => array(
"numeric" => "Поле :attribute должно быть между :min и :max.",
......@@ -31,6 +32,10 @@ return array(
"string" => "Поле :attribute должно быть от :min до :max символов.",
),
"confirmed" => "Поле :attribute не совпадает с подтверждением.",
"count" => "The :attribute must have exactly :count selected elements.",
"countbetween" => "The :attribute must have between :min and :max selected elements.",
"countmax" => "The :attribute must have less than :max selected elements.",
"countmin" => "The :attribute must have at least :min selected elements.",
"different" => "Поля :attribute и :other должны различаться.",
"email" => "Поле :attribute имеет неверный формат.",
"exists" => "Выбранное значение для :attribute уже существует.",
......
<?php
/**
* Laravel - A PHP Framework For Web Artisans
*
* @package Language
* @version 3.2.3
* @author Sinan Eldem <sinan@sinaneldem.com.tr>
* @link http://sinaneldem.com.tr
*/
return array(
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the pagination links. You're free to change them to anything you want.
| If you come up with something more exciting, let us know.
|
*/
'previous' => '&laquo; Önceki',
'next' => 'Sonraki &raquo;',
);
\ No newline at end of file
<?php
/**
* Laravel - A PHP Framework For Web Artisans
*
* @package Language
* @version 3.2.3
* @author Sinan Eldem <sinan@sinaneldem.com.tr>
* @link http://sinaneldem.com.tr
*/
return array(
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used
| by the validator class. Some of the rules contain multiple versions,
| such as the size (max, min, between) rules. These versions are used
| for different input types such as strings and files.
|
| These language lines may be easily changed to provide custom error
| messages in your application. Error messages for custom validation
| rules may also be added to this file.
|
*/
"accepted" => ":attribute kabul edilmelidir.",
"active_url" => ":attribute geçerli bir URL olmalıdır.",
"after" => ":attribute şundan daha eski bir tarih olmalıdır :date.",
"alpha" => ":attribute sadece harflerden oluşmalıdır.",
"alpha_dash" => ":attribute sadece harfler, rakamlar ve tirelerden oluşmalıdır.",
"alpha_num" => ":attribute sadece harfler ve rakamlar içermelidir.",
"before" => ":attribute şundan daha önceki bir tarih olmalıdır :date.",
"between" => array(
"numeric" => ":attribute :min - :max arasında olmalıdır.",
"file" => ":attribute :min - :max arasındaki kilobyte değeri olmalıdır.",
"string" => ":attribute :min - :max arasında karakterden oluşmalıdır.",
),
"confirmed" => ":attribute onayı eşleşmiyor.",
"different" => ":attribute ile :other birbirinden farklı olmalıdır.",
"email" => ":attribute biçimi geçersiz.",
"exists" => "Seçili :attribute geçersiz.",
"image" => ":attribute resim dosyası olmalıdır.",
"in" => "selected :attribute geçersiz.",
"integer" => ":attribute rakam olmalıdır.",
"ip" => ":attribute geçerli bir IP adresi olmalıdır.",
"match" => ":attribute biçimi geçersiz.",
"max" => array(
"numeric" => ":attribute şundan küçük olmalıdır :max.",
"file" => ":attribute şundan küçük olmalıdır :max kilobyte.",
"string" => ":attribute şundan küçük olmalıdır :max karakter.",
),
"mimes" => ":attribute dosya biçimi :values olmalıdır.",
"min" => array(
"numeric" => ":attribute en az :min olmalıdır.",
"file" => ":attribute en az :min kilobyte olmalıdır.",
"string" => ":attribute en az :min karakter olmalıdır.",
),
"not_in" => "Seçili :attribute geçersiz.",
"numeric" => ":attribute rakam olmalıdır.",
"required" => ":attribute alanı gereklidir.",
"same" => ":attribute ile :other eşleşmelidir.",
"size" => array(
"numeric" => ":attribute :size olmalıdır.",
"file" => ":attribute :size kilobyte olmalıdır.",
"string" => ":attribute :size karakter olmalıdır.",
),
"unique" => ":attribute daha önceden kayıt edilmiş.",
"url" => ":attribute biçimi geçersiz.",
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute_rule" to name the lines. This helps keep your
| custom validation clean and tidy.
|
| So, say you want to use a custom validation message when validating that
| the "email" attribute is unique. Just add "email_unique" to this array
| with your custom message. The Validator will handle the rest!
|
*/
'custom' => array(),
/*
|--------------------------------------------------------------------------
| Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as "E-Mail Address" instead
| of "email". Your users will thank you.
|
| The Validator class will automatically search this array of lines it
| is attempting to replace the :attribute place-holder in messages.
| It's pretty slick. We think you'll like it.
|
*/
'attributes' => array(),
);
\ No newline at end of file
......@@ -461,4 +461,16 @@ class Bundle {
return array_keys(static::$bundles);
}
/**
* Expand given bundle path of form "[bundle::]path/...".
*
* @param string $path
* @return string
*/
public static function expand($path)
{
list($bundle, $element) = static::parse($path);
return static::path($bundle).$element;
}
}
\ No newline at end of file
<?php
/**
* Laravel - A PHP Framework For Web Artisans
*
* @package Laravel
* @version 3.0.0
* @author Taylor Otwell <taylorotwell@gmail.com>
* @link http://laravel.com
*/
// --------------------------------------------------------------
// Define the directory separator for the environment.
......@@ -18,22 +10,6 @@ define('DS', DIRECTORY_SEPARATOR);
// --------------------------------------------------------------
require 'paths.php';
// --------------------------------------------------------------
// Override the application paths when testing the core.
// --------------------------------------------------------------
$config = file_get_contents('phpunit.xml');
if (strpos($config, 'laravel-tests') !== false)
{
$path = path('bundle').'laravel-tests'.DS;
set_path('app', $path.'application'.DS);
set_path('bundle', $path.'bundles'.DS);
set_path('storage', $path.'storage'.DS);
}
// --------------------------------------------------------------
// Bootstrap the Laravel core.
// --------------------------------------------------------------
......
......@@ -7,6 +7,15 @@ use Laravel\CLI\Tasks\Task;
class Runner extends Task {
/**
* The base directory where the tests will be executed.
*
* A phpunit.xml should also be stored in that directory.
*
* @var string
*/
protected $base_path;
/**
* Run all of the unit tests for the application.
*
......@@ -27,17 +36,8 @@ class Runner extends Task {
*/
public function core()
{
if ( ! is_dir(path('bundle').'laravel-tests'))
{
throw new \Exception("The bundle [laravel-tests] has not been installed!");
}
// When testing the Laravel core, we will just stub the path directly
// so the test bundle is not required to be registered in the bundle
// configuration, as it is kind of a unique bundle.
$this->stub(path('bundle').'laravel-tests/cases');
$path = path('bundle').'laravel-tests/';
$this->base_path = path('sys').'tests'.DS;
$this->stub(path('sys').'tests'.DS.'cases');
$this->test();
}
......@@ -55,6 +55,8 @@ class Runner extends Task {
$bundles = Bundle::names();
}
$this->base_path = path('sys').'cli'.DS.'tasks'.DS.'test'.DS;
foreach ($bundles as $bundle)
{
// To run PHPUnit for the application, bundles, and the framework
......@@ -78,17 +80,20 @@ class Runner extends Task {
protected function test()
{
// We'll simply fire off PHPUnit with the configuration switch
// pointing to our temporary configuration file. This allows
// pointing to our requested configuration file. This allows
// us to flexibly run tests for any setup.
$path = path('base').'phpunit.xml';
$path = 'phpunit.xml';
// fix the spaced directories problem when using the command line
// strings with spaces inside should be wrapped in quotes.
$path = escapeshellarg($path);
passthru('phpunit --configuration '.$path);
passthru('phpunit --configuration '.$path, $status);
@unlink($path);
// Pass through the exit status
exit($status);
}
/**
......@@ -108,7 +113,7 @@ class Runner extends Task {
// locations depending on what the developer wants to test.
foreach (array('bootstrap', 'directory') as $item)
{
$stub = $this->{"swap_{$item}"}($stub, $path, $directory);
$stub = $this->{"swap_{$item}"}($stub, $directory);
}
File::put(path('base').'phpunit.xml', $stub);
......@@ -118,24 +123,22 @@ class Runner extends Task {
* Swap the bootstrap file in the stub.
*
* @param string $stub
* @param string $path
* @param string $directory
* @return string
*/
protected function swap_bootstrap($stub, $path, $directory)
protected function swap_bootstrap($stub, $directory)
{
return str_replace('{{bootstrap}}', $path.'phpunit.php', $stub);
return str_replace('{{bootstrap}}', $this->base_path.'phpunit.php', $stub);
}
/**
* Swap the directory in the stub.
*
* @param string $stub
* @param string $path
* @param string $directory
* @return string
*/
protected function swap_directory($stub, $path, $directory)
protected function swap_directory($stub, $directory)
{
return str_replace('{{directory}}', $directory, $stub);
}
......
......@@ -17,6 +17,20 @@ define('BLADE_EXT', '.blade.php');
define('DEFAULT_BUNDLE', 'application');
define('MB_STRING', (int) function_exists('mb_get_info'));
/*
|--------------------------------------------------------------------------
| Start Output Buffering
|--------------------------------------------------------------------------
|
| Output buffering allows us to capture all output at any time, so that we
| can discard it or treat it accordingly. An example of this is if you have
| echoed a string, but want to return a Redirect object. Because Symfony
| only checks if headers have been sent, your redirect just silently fails.
|
*/
ob_start('mb_output_handler');
/*
|--------------------------------------------------------------------------
| Require Core Classes
......
......@@ -38,7 +38,7 @@ class Query {
);
/**
* Create a new query instance for a model.
* Creat a new query instance for a model.
*
* @param Model $model
* @return void
......@@ -118,7 +118,7 @@ class Query {
$new = new $class(array(), true);
// We need to set the attributes manually in case the accessible property is
// set on the array which will prevent the mass assignment of attributes if
// set on the array which will prevent the mass assignemnt of attributes if
// we were to pass them in using the constructor or fill methods.
$new->fill_raw($result);
......@@ -141,7 +141,7 @@ class Query {
}
}
// The many to many relationships may have pivot table columns on them
// The many to many relationships may have pivot table column on them
// so we will call the "clean" method on the relationship to remove
// any pivot columns that are on the model.
if ($this instanceof Relationships\Has_Many_And_Belongs_To)
......@@ -199,7 +199,7 @@ class Query {
foreach ($this->model_includes() as $include => $constraints)
{
// To get the nested includes, we want to find any includes that begin
// the relationship with a dot, then we will strip off the leading
// the relationship and a dot, then we will strip off the leading
// nesting indicator and set the include in the array.
if (starts_with($include, $relationship.'.'))
{
......@@ -217,23 +217,22 @@ class Query {
*/
protected function model_includes()
{
$relationships = array_keys($this->model->includes);
$implicits = array();
$includes = array();
foreach ($relationships as $relationship)
foreach ($this->model->includes as $relationship => $constraints)
{
$parts = explode('.', $relationship);
$prefix = '';
foreach ($parts as $part)
// When eager loading relationships, constraints may be set on the eager
// load definition; however, is none are set, we need to swap the key
// and the value of the array since there are no constraints.
if (is_numeric($relationship))
{
$implicits[$prefix.$part] = NULL;
$prefix .= $part.'.';
list($relationship, $constraints) = array($constraints, null);
}
$includes[$relationship] = $constraints;
}
// Add all implicit includes to the explicit ones
return $this->model->includes + $implicits;
return $includes;
}
/**
......
......@@ -2,7 +2,7 @@
use Closure;
use Laravel\Database;
use Paginator;
use Laravel\Paginator;
use Laravel\Database\Query\Grammars\Postgres;
use Laravel\Database\Query\Grammars\SQLServer;
......@@ -140,7 +140,7 @@ class Query {
*/
public function select($columns = array('*'))
{
$this->selects = is_array($columns) ? $columns : array($columns);
$this->selects = (array) $columns;
return $this;
}
......@@ -158,7 +158,7 @@ class Query {
{
// If the "column" is really an instance of a Closure, the developer is
// trying to create a join with a complex "ON" clause. So, we will add
// the join, and then call the Closure with the join.
// the join, and then call the Closure with the join/
if ($column1 instanceof Closure)
{
$this->joins[] = new Query\Join($type, $table);
......@@ -168,7 +168,7 @@ class Query {
// If the column is just a string, we can assume that the join just
// has a simple on clause, and we'll create the join instance and
// add the clause automatically for the developer.
// add the clause automatically for the develoepr.
else
{
$join = new Query\Join($type, $table);
......@@ -395,7 +395,7 @@ class Query {
}
/**
* Add nested constraints to the query.
* Add a nested where condition to the query.
*
* @param Closure $callback
* @param string $connector
......@@ -403,7 +403,24 @@ class Query {
*/
public function where_nested($callback, $connector = 'AND')
{
call_user_func($callback, $this);
$type = 'where_nested';
// To handle a nested where statement, we will actually instantiate a new
// Query instance and run the callback over that instance, which will
// allow the developer to have a fresh query instance
$query = new Query($this->connection, $this->grammar, $this->from);
call_user_func($callback, $query);
// Once the callback has been run on the query, we will store the nested
// query instance on the where clause array so that it's passed to the
// query's query grammar instance when building.
if ($query->wheres !== null)
{
$this->wheres[] = compact('type', 'query', 'connector');
}
$this->bindings = array_merge($this->bindings, $query->bindings);
return $this;
}
......@@ -436,7 +453,7 @@ class Query {
foreach ($segments as $segment)
{
// If the segment is not a boolean connector, we can assume it is
// If the segment is not a boolean connector, we can assume it it is
// a column name, and we'll add it to the query as a new constraint
// of the query's where clause and keep iterating the segments.
if ($segment != '_and_' and $segment != '_or_')
......@@ -475,7 +492,6 @@ class Query {
* @param string $column
* @param string $operator
* @param mixed $value
* @return Query
*/
public function having($column, $operator, $value)
{
......@@ -660,7 +676,7 @@ class Query {
public function aggregate($aggregator, $columns)
{
// We'll set the aggregate value so the grammar does not try to compile
// a SELECT clause on the query. If an aggregator is present, its own
// a SELECT clause on the query. If an aggregator is present, it's own
// grammar function will be used to build the SQL syntax.
$this->aggregate = compact('aggregator', 'columns');
......@@ -687,7 +703,7 @@ class Query {
{
// Because some database engines may throw errors if we leave orderings
// on the query when retrieving the total number of records, we'll drop
// all of the orderings and put them back on the query.
// all of the ordreings and put them back on the query.
list($orderings, $this->orderings) = array($this->orderings, null);
$total = $this->count(reset($columns));
......@@ -714,12 +730,12 @@ class Query {
{
// Force every insert to be treated like a batch insert to make creating
// the binding array simpler since we can just spin through the inserted
// rows as if there was more than one every time.
// rows as if there/ was more than one every time.
if ( ! is_array(reset($values))) $values = array($values);
$bindings = array();
// We need to merge the insert values into the array of the query
// We need to merge the the insert values into the array of the query
// bindings so that they will be bound to the PDO statement when it
// is executed by the database connection.
foreach ($values as $value)
......@@ -820,7 +836,7 @@ class Query {
/**
* Execute the query as a DELETE statement.
*
* Optionally, an ID may be passed to the method to delete a specific row.
* Optionally, an ID may be passed to the method do delete a specific row.
*
* @param int $id
* @return int
......@@ -853,7 +869,7 @@ class Query {
}
// All of the aggregate methods are handled by a single method, so we'll
// catch them all here and then pass them off to the aggregate method
// catch them all here and then pass them off to the agregate method
// instead of creating methods for each one of them.
if (in_array($method, array('count', 'min', 'max', 'avg', 'sum')))
{
......
......@@ -383,7 +383,7 @@ class MySQL extends Grammar {
*/
protected function type_boolean(Fluent $column)
{
return 'TINYINT';
return 'TINYINT(1)';
}
/**
......
......@@ -2,6 +2,8 @@
## Contents
- [Laravel 3.2.5](#3.2.5)
- [Upgrading From 3.2.4](#upgrade-3.2.5)
- [Laravel 3.2.4](#3.2.4)
- [Upgrading From 3.2.3](#upgrade-3.2.4)
- [Laravel 3.2.3](#3.2.3)
......@@ -33,6 +35,15 @@
- [Laravel 3.1](#3.1)
- [Upgrading From 3.0](#upgrade-3.1)
<a name="3.2.5"></a>
- Revert nested where code back to 3.2.3 tag.
<a name="upgrade-3.2.5"></a>
## Upgrading From 3.2.4
- Replace the **laravel** folder.
<a name="3.2.4"></a>
## Laravel 3.2.4
......
......@@ -6,20 +6,20 @@ var anbu = {
// the DOM every time they are used.
el: {
main: $('.anbu'),
close: $('#anbu-close'),
zoom: $('#anbu-zoom'),
hide: $('#anbu-hide'),
show: $('#anbu-show'),
tab_pane: $('.anbu-tab-pane'),
hidden_tab_pane: $('.anbu-tab-pane:visible'),
tab: $('.anbu-tab'),
tabs: $('.anbu-tabs'),
tab_links: $('.anbu-tabs a'),
window: $('.anbu-window'),
closed_tabs: $('#anbu-closed-tabs'),
open_tabs: $('#anbu-open-tabs'),
content_area: $('.anbu-content-area')
main: jQuery('.anbu'),
close: jQuery('#anbu-close'),
zoom: jQuery('#anbu-zoom'),
hide: jQuery('#anbu-hide'),
show: jQuery('#anbu-show'),
tab_pane: jQuery('.anbu-tab-pane'),
hidden_tab_pane: jQuery('.anbu-tab-pane:visible'),
tab: jQuery('.anbu-tab'),
tabs: jQuery('.anbu-tabs'),
tab_links: jQuery('.anbu-tabs a'),
window: jQuery('.anbu-window'),
closed_tabs: jQuery('#anbu-closed-tabs'),
open_tabs: jQuery('#anbu-open-tabs'),
content_area: jQuery('.anbu-content-area')
},
// CLASS ATTRIBUTES
......@@ -30,7 +30,7 @@ var anbu = {
is_zoomed: false,
// initial height of content area
small_height: $('.anbu-content-area').height(),
small_height: jQuery('.anbu-content-area').height(),
// the name of the active tab css
active_tab: 'anbu-active-tab',
......@@ -76,7 +76,7 @@ var anbu = {
event.preventDefault();
});
anbu.el.tab.click(function(event) {
anbu.clicked_tab($(this));
anbu.clicked_tab(jQuery(this));
event.preventDefault();
});
......@@ -104,8 +104,8 @@ var anbu = {
open_window: function(tab) {
// can't directly assign this line, but it works
$('.anbu-tab-pane:visible').fadeOut(200);
$('.' + tab.attr(anbu.tab_data)).delay(220).fadeIn(300);
jQuery('.anbu-tab-pane:visible').fadeOut(200);
jQuery('.' + tab.attr(anbu.tab_data)).delay(220).fadeIn(300);
anbu.el.tab_links.removeClass(anbu.active_tab);
tab.addClass(anbu.active_tab);
anbu.el.window.slideDown(300);
......@@ -178,7 +178,7 @@ var anbu = {
anbu.is_zoomed = false;
} else {
// the 6px is padding on the top of the window
height = ($(window).height() - anbu.el.tabs.height() - 6) + 'px';
height = (jQuery(window).height() - anbu.el.tabs.height() - 6) + 'px';
anbu.is_zoomed = true;
}
......
......@@ -165,4 +165,23 @@ class Redirect extends Response {
return $this->with('errors', $errors);
}
/**
* Send the headers and content of the response to the browser.
*
* @return void
*/
public function send()
{
// Dump all output buffering, this ensures
// that symphony will send our redirect headers
// properly if we've outputted any content from
// within Laravel.
while (ob_get_level() > 0)
{
ob_end_clean();
}
return parent::send();
}
}
\ No newline at end of file
......@@ -179,6 +179,8 @@ abstract class Controller {
// controllers with much less code than would be usual.
foreach ($parameters as $key => $value)
{
if ( ! is_string($value)) continue;
$search = '(:'.($key + 1).')';
$destination = str_replace($search, $value, $destination, $count);
......
<?php
/*
|--------------------------------------------------------------------------
| Bundle Configuration
|--------------------------------------------------------------------------
|
| Bundles allow you to conveniently extend and organize your application.
| Think of bundles as self-contained applications. They can have routes,
| controllers, models, views, configuration, etc. You can even create
| your own bundles to share with the Laravel community.
|
| This is a list of the bundles installed for your application and tells
| Laravel the location of the bundle's root directory, as well as the
| root URI the bundle responds to.
|
| For example, if you have an "admin" bundle located in "bundles/admin"
| that you want to handle requests with URIs that begin with "admin",
| simply add it to the array like this:
|
| 'admin' => array(
| 'location' => 'admin',
| 'handles' => 'admin',
| ),
|
| Note that the "location" is relative to the "bundles" directory.
| Now the bundle will be recognized by Laravel and will be able
| to respond to requests beginning with "admin"!
|
| Have a bundle that lives in the root of the bundle directory
| and doesn't respond to any requests? Just add the bundle
| name to the array and we'll take care of the rest.
|
*/
return array('dashboard' => array('handles' => 'dashboard'), 'dummy');
\ No newline at end of file
<?php
return array(
/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| The URL used to access your application without a trailing slash. The URL
| does nto have to be set. If it isn't we'll try our best to guess the URL
| of your application.
|
*/
'url' => '',
/*
|--------------------------------------------------------------------------
| Application Index
|--------------------------------------------------------------------------
|
| If you are including the "index.php" in your URLs, you can ignore this.
|
| However, if you are using mod_rewrite to get cleaner URLs, just set
| this option to an empty string and we'll take care of the rest.
|
*/
'index' => 'index.php',
/*
|--------------------------------------------------------------------------
| Application Key
|--------------------------------------------------------------------------
|
| This key is used by the encryption and cookie classes to generate secure
| encrypted strings and hashes. It is extremely important that this key
| remain secret and should not be shared with anyone. Make it about 32
| characters of random gibberish.
|
*/
'key' => '',
/*
|--------------------------------------------------------------------------
| Application Character Encoding
|--------------------------------------------------------------------------
|
| The default character encoding used by your application. This encoding
| will be used by the Str, Text, Form, and any other classes that need
| to know what type of encoding to use for your awesome application.
|
*/
'encoding' => 'UTF-8',
/*
|--------------------------------------------------------------------------
| Application Language
|--------------------------------------------------------------------------
|
| The default language of your application. This language will be used by
| Lang library as the default language when doing string localization.
|
*/
'language' => 'en',
/*
|--------------------------------------------------------------------------
| SSL Link Generation
|--------------------------------------------------------------------------
|
| Many sites use SSL to protect their users data. However, you may not
| always be able to use SSL on your development machine, meaning all HTTPS
| will be broken during development.
|
| For this reason, you may wish to disable the generation of HTTPS links
| throughout your application. This option does just that. All attempts to
| generate HTTPS links will generate regular HTTP links instead.
|
*/
'ssl' => true,
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| The default timezone of your application. This timezone will be used when
| Laravel needs a date, such as when writing to a log file or travelling
| to a distant star at warp speed.
|
*/
'timezone' => 'UTC',
/*
|--------------------------------------------------------------------------
| Class Aliases
|--------------------------------------------------------------------------
|
| Here, you can specify any class aliases that you would like registered
| when Laravel loads. Aliases are lazy-loaded, so add as many as you want.
|
| Aliases make it more convenient to use namespaced classes. Instead of
| referring to the class using its full namespace, you may simply use
| the alias defined here.
|
| We have already aliased common Laravel classes to make your life easier.
|
*/
'aliases' => array(
'Auth' => 'Laravel\\Auth',
'Asset' => 'Laravel\\Asset',
'Autoloader' => 'Laravel\\Autoloader',
'Blade' => 'Laravel\\Blade',
'Bundle' => 'Laravel\\Bundle',
'Cache' => 'Laravel\\Cache',
'Config' => 'Laravel\\Config',
'Controller' => 'Laravel\\Routing\\Controller',
'Cookie' => 'Laravel\\Cookie',
'Crypter' => 'Laravel\\Crypter',
'DB' => 'Laravel\\Database',
'Event' => 'Laravel\\Event',
'File' => 'Laravel\\File',
'Filter' => 'Laravel\\Routing\\Filter',
'Form' => 'Laravel\\Form',
'Hash' => 'Laravel\\Hash',
'HTML' => 'Laravel\\HTML',
'Input' => 'Laravel\\Input',
'IoC' => 'Laravel\\IoC',
'Lang' => 'Laravel\\Lang',
'Log' => 'Laravel\\Log',
'Memcached' => 'Laravel\\Memcached',
'Paginator' => 'Laravel\\Paginator',
'URL' => 'Laravel\\URL',
'Redirect' => 'Laravel\\Redirect',
'Redis' => 'Laravel\\Redis',
'Request' => 'Laravel\\Request',
'Response' => 'Laravel\\Response',
'Route' => 'Laravel\\Routing\\Route',
'Router' => 'Laravel\\Routing\\Router',
'Schema' => 'Laravel\\Database\\Schema',
'Section' => 'Laravel\\Section',
'Session' => 'Laravel\\Session',
'Str' => 'Laravel\\Str',
'Task' => 'Laravel\\CLI\\Tasks\\Task',
'URI' => 'Laravel\\URI',
'Validator' => 'Laravel\\Validator',
'View' => 'Laravel\\View',
),
);
<?php
return array(
/*
|--------------------------------------------------------------------------
| Default Authentication Driver
|--------------------------------------------------------------------------
|
| Laravel uses a flexible driver-based system to handle authentication.
| You are free to register your own drivers using the Auth::extend
| method. Of course, a few great drivers are provided out of
| box to handle basic authentication simply and easily.
|
| Drivers: 'fluent', 'eloquent'.
|
*/
'driver' => 'fluent',
/*
|--------------------------------------------------------------------------
| Authentication Username
|--------------------------------------------------------------------------
|
| Here you may specify the database column that should be considered the
| "username" for your users. Typically, this will either be "username"
| or "email". Of course, you're free to change the value to anything.
|
*/
'username' => 'username',
/*
|--------------------------------------------------------------------------
| Authentication Password
|--------------------------------------------------------------------------
|
| Here you may specify the database column that should be considered the
| "password" for your users. Typically, this will be "password" but,
| again, you're free to change the value to anything you see fit.
|
*/
'password' => 'password',
/*
|--------------------------------------------------------------------------
| Authentication Model
|--------------------------------------------------------------------------
|
| When using the "eloquent" authentication driver, you may specify the
| model that should be considered the "User" model. This model will
| be used to authenticate and load the users of your application.
|
*/
'model' => 'User',
/*
|--------------------------------------------------------------------------
| Authentication Table
|--------------------------------------------------------------------------
|
| When using the "fluent" authentication driver, the database table used
| to load users may be specified here. This table will be used in by
| the fluent query builder to authenticate and load your users.
|
*/
'table' => 'users',
);
<?php
return array(
/*
|--------------------------------------------------------------------------
| Cache Driver
|--------------------------------------------------------------------------
|
| The name of the default cache driver for your application. Caching can
| be used to increase the performance of your application by storing any
| commonly accessed data in memory, a file, or some other storage.
|
| A variety of awesome drivers are available for you to use with Laravel.
| Some, like APC, are extremely fast. However, if that isn't an option
| in your environment, try file or database caching.
|
| Drivers: 'file', 'memcached', 'apc', 'redis', 'database'.
|
*/
'driver' => 'file',
/*
|--------------------------------------------------------------------------
| Cache Key
|--------------------------------------------------------------------------
|
| This key will be prepended to item keys stored using Memcached and APC
| to prevent collisions with other applications on the server. Since the
| memory based stores could be shared by other applications, we need to
| be polite and use a prefix to uniquely identifier our items.
|
*/
'key' => 'laravel',
/*
|--------------------------------------------------------------------------
| Cache Database
|--------------------------------------------------------------------------
|
| When using the database cache driver, this database table will be used
| to store the cached item. You may also add a "connection" option to
| the array to specify which database connection should be used.
|
*/
'database' => array('table' => 'laravel_cache'),
/*
|--------------------------------------------------------------------------
| Memcached Servers
|--------------------------------------------------------------------------
|
| The Memcached servers used by your application. Memcached is a free and
| open source, high-performance, distributed memory caching system. It is
| generic in nature but intended for use in speeding up web applications
| by alleviating database load.
|
| For more information, check out: http://memcached.org
|
*/
'memcached' => array(
array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),
),
);
\ No newline at end of file
<?php
return array(
/*
|--------------------------------------------------------------------------
| Default Database Connection
|--------------------------------------------------------------------------
|
| The name of your default database connection. This connection will used
| as the default for all database operations unless a different name is
| given when performing said operation. This connection name should be
| listed in the array of connections below.
|
*/
'default' => 'sqlite',
/*
|--------------------------------------------------------------------------
| PDO Fetch Style
|--------------------------------------------------------------------------
|
| By default, database results will be returned as instances of the PHP
| stdClass object; however, you may wish to retrieve records as arrays
| instead of objects. Here you can control the PDO fetch style of the
| database queries run by your application.
|
*/
'fetch' => PDO::FETCH_CLASS,
/*
|--------------------------------------------------------------------------
| Database Connections
|--------------------------------------------------------------------------
|
| All of the database connections used by your application. Many of your
| applications will no doubt only use one connection; however, you have
| the freedom to specify as many connections as you can handle.
|
| All database work in Laravel is done through the PHP's PDO facilities,
| so make sure you have the PDO drivers for your particlar database of
| choice installed on your machine.
|
| Drivers: 'mysql', 'pgsql', 'sqlsrv', 'sqlite'.
|
*/
'connections' => array(
'sqlite' => array(
'driver' => 'sqlite',
'database' => 'application',
'prefix' => '',
),
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'database',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'prefix' => '',
),
'pgsql' => array(
'driver' => 'pgsql',
'host' => 'localhost',
'database' => 'database',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'prefix' => '',
),
'sqlsrv' => array(
'driver' => 'sqlsrv',
'host' => 'localhost',
'database' => 'database',
'username' => 'root',
'password' => 'password',
'prefix' => '',
),
),
/*
|--------------------------------------------------------------------------
| Redis Databases
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store. However, it
| provides a richer set of commands than a typical key-value store such as
| APC or memcached. All the cool kids are using it.
|
| To get the scoop on Redis, check out: http://redis.io
|
*/
'redis' => array(
'default' => array('host' => '127.0.0.1', 'port' => 6379),
),
);
\ No newline at end of file
<?php
return array(
/*
|--------------------------------------------------------------------------
| Ignored Error Levels
|--------------------------------------------------------------------------
|
| Here you simply specify the error levels that should be ignored by the
| Laravel error handler. These levels will still be logged; however, no
| information about about them will be displayed.
|
*/
'ignore' => array(E_NOTICE, E_USER_NOTICE, E_DEPRECATED, E_USER_DEPRECATED),
/*
|--------------------------------------------------------------------------
| Error Detail
|--------------------------------------------------------------------------
|
| Detailed error messages contain information about the file in which an
| error occurs, as well as a PHP stack trace containing the call stack.
| You'll want them when you're trying to debug your application.
|
| If your application is in production, you'll want to turn off the error
| details for enhanced security and user experience since the exception
| stack trace could contain sensitive information.
|
*/
'detail' => true,
/*
|--------------------------------------------------------------------------
| Error Logging
|--------------------------------------------------------------------------
|
| When error logging is enabled, the "logger" Closure defined below will
| be called for every error in your application. You are free to log the
| errors however you want. Enjoy the flexibility.
|
*/
'log' => false,
/*
|--------------------------------------------------------------------------
| Error Logger
|--------------------------------------------------------------------------
|
| Because of the various ways of managing error logging, you get complete
| flexibility to manage error logging as you see fit. This function will
| be called anytime an error occurs within your application and error
| logging is enabled.
|
| You may log the error message however you like; however, a simple log
| solution has been setup for you which will log all error messages to
| text files within the application storage directory.
|
*/
'logger' => function($exception)
{
Log::exception($exception);
},
);
\ No newline at end of file
<?php
return array(
'default' => 'sqlite',
);
\ No newline at end of file
<?php
return array(
'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream'),
'bin' => 'application/macbinary',
'dms' => 'application/octet-stream',
'lha' => 'application/octet-stream',
'lzh' => 'application/octet-stream',
'exe' => array('application/octet-stream', 'application/x-msdownload'),
'class' => 'application/octet-stream',
'psd' => 'application/x-photoshop',
'so' => 'application/octet-stream',
'sea' => 'application/octet-stream',
'dll' => 'application/octet-stream',
'oda' => 'application/oda',
'pdf' => array('application/pdf', 'application/x-download'),
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'smi' => 'application/smil',
'smil' => 'application/smil',
'mif' => 'application/vnd.mif',
'xls' => array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'),
'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint'),
'wbxml' => 'application/wbxml',
'wmlc' => 'application/wmlc',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'dvi' => 'application/x-dvi',
'gtar' => 'application/x-gtar',
'gz' => 'application/x-gzip',
'php' => array('application/x-httpd-php', 'text/x-php'),
'php4' => 'application/x-httpd-php',
'php3' => 'application/x-httpd-php',
'phtml' => 'application/x-httpd-php',
'phps' => 'application/x-httpd-php-source',
'js' => 'application/x-javascript',
'swf' => 'application/x-shockwave-flash',
'sit' => 'application/x-stuffit',
'tar' => 'application/x-tar',
'tgz' => array('application/x-tar', 'application/x-gzip-compressed'),
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'mpga' => 'audio/mpeg',
'mp2' => 'audio/mpeg',
'mp3' => array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'),
'aif' => 'audio/x-aiff',
'aiff' => 'audio/x-aiff',
'aifc' => 'audio/x-aiff',
'ram' => 'audio/x-pn-realaudio',
'rm' => 'audio/x-pn-realaudio',
'rpm' => 'audio/x-pn-realaudio-plugin',
'ra' => 'audio/x-realaudio',
'rv' => 'video/vnd.rn-realvideo',
'wav' => 'audio/x-wav',
'bmp' => 'image/bmp',
'gif' => 'image/gif',
'jpeg' => array('image/jpeg', 'image/pjpeg'),
'jpg' => array('image/jpeg', 'image/pjpeg'),
'jpe' => array('image/jpeg', 'image/pjpeg'),
'png' => 'image/png',
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'css' => 'text/css',
'html' => 'text/html',
'htm' => 'text/html',
'shtml' => 'text/html',
'txt' => 'text/plain',
'text' => 'text/plain',
'log' => array('text/plain', 'text/x-log'),
'rtx' => 'text/richtext',
'rtf' => 'text/rtf',
'xml' => 'text/xml',
'xsl' => 'text/xml',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie',
'doc' => 'application/msword',
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'word' => array('application/msword', 'application/octet-stream'),
'xl' => 'application/excel',
'eml' => 'message/rfc822',
'json' => array('application/json', 'text/json'),
);
\ No newline at end of file
<?php
return array(
/*
|--------------------------------------------------------------------------
| Session Driver
|--------------------------------------------------------------------------
|
| The name of the session driver used by your application. Since HTTP is
| stateless, sessions are used to simulate "state" across requests made
| by the same user of your application. In other words, it's how an
| application knows who the heck you are.
|
| Drivers: 'cookie', 'file', 'database', 'memcached', 'apc', 'redis'.
|
*/
'driver' => '',
/*
|--------------------------------------------------------------------------
| Session Database
|--------------------------------------------------------------------------
|
| The database table on which the session should be stored. It probably
| goes without saying that this option only matters if you are using
| the super slick database session driver.
|
*/
'table' => 'sessions',
/*
|--------------------------------------------------------------------------
| Session Garbage Collection Probability
|--------------------------------------------------------------------------
|
| Some session drivers require the manual clean-up of expired sessions.
| This option specifies the probability of session garbage collection
| occuring for any given request.
|
| For example, the default value states that garbage collection has a
| 2% chance of occuring for any given request to the application.
| Feel free to tune this to your application's size and speed.
|
*/
'sweepage' => array(2, 100),
/*
|--------------------------------------------------------------------------
| Session Lifetime
|--------------------------------------------------------------------------
|
| The number of minutes a session can be idle before expiring.
|
*/
'lifetime' => 60,
/*
|--------------------------------------------------------------------------
| Session Expiration On Close
|--------------------------------------------------------------------------
|
| Determines if the session should expire when the user's web browser closes.
|
*/
'expire_on_close' => false,
/*
|--------------------------------------------------------------------------
| Session Cookie Name
|--------------------------------------------------------------------------
|
| The name that should be given to the session cookie.
|
*/
'cookie' => 'laravel_session',
/*
|--------------------------------------------------------------------------
| Session Cookie Path
|--------------------------------------------------------------------------
|
| The path for which the session cookie is available.
|
*/
'path' => '/',
/*
|--------------------------------------------------------------------------
| Session Cookie Domain
|--------------------------------------------------------------------------
|
| The domain for which the session cookie is available.
|
*/
'domain' => null,
/*
|--------------------------------------------------------------------------
| HTTPS Only Session Cookie
|--------------------------------------------------------------------------
|
| Determines if the cookie should only be sent over HTTPS.
|
*/
'secure' => false,
);
\ No newline at end of file
<?php
return array(
/*
|--------------------------------------------------------------------------
| String Inflection
|--------------------------------------------------------------------------
|
| This array contains the singular and plural forms of words. It's used by
| the "singular" and "plural" methods on the Str class to convert a given
| word from singular to plural and vice versa.
|
| Note that the regular expressions are only for inflecting English words.
| To inflect a non-English string, simply add its singular and plural
| form to the array of "irregular" word forms.
|
*/
'plural' => array(
'/(quiz)$/i' => "$1zes",
'/^(ox)$/i' => "$1en",
'/([m|l])ouse$/i' => "$1ice",
'/(matr|vert|ind)ix|ex$/i' => "$1ices",
'/(x|ch|ss|sh)$/i' => "$1es",
'/([^aeiouy]|qu)y$/i' => "$1ies",
'/(hive)$/i' => "$1s",
'/(?:([^f])fe|([lr])f)$/i' => "$1$2ves",
'/(shea|lea|loa|thie)f$/i' => "$1ves",
'/sis$/i' => "ses",
'/([ti])um$/i' => "$1a",
'/(tomat|potat|ech|her|vet)o$/i' => "$1oes",
'/(bu)s$/i' => "$1ses",
'/(alias)$/i' => "$1es",
'/(octop)us$/i' => "$1i",
'/(ax|test)is$/i' => "$1es",
'/(us)$/i' => "$1es",
'/s$/i' => "s",
'/$/' => "s"
),
'singular' => array(
'/(quiz)zes$/i' => "$1",
'/(matr)ices$/i' => "$1ix",
'/(vert|ind)ices$/i' => "$1ex",
'/^(ox)en$/i' => "$1",
'/(alias)es$/i' => "$1",
'/(octop|vir)i$/i' => "$1us",
'/(cris|ax|test)es$/i' => "$1is",
'/(shoe)s$/i' => "$1",
'/(o)es$/i' => "$1",
'/(bus)es$/i' => "$1",
'/([m|l])ice$/i' => "$1ouse",
'/(x|ch|ss|sh)es$/i' => "$1",
'/(m)ovies$/i' => "$1ovie",
'/(s)eries$/i' => "$1eries",
'/([^aeiouy]|qu)ies$/i' => "$1y",
'/([lr])ves$/i' => "$1f",
'/(tive)s$/i' => "$1",
'/(hive)s$/i' => "$1",
'/(li|wi|kni)ves$/i' => "$1fe",
'/(shea|loa|lea|thie)ves$/i' => "$1f",
'/(^analy)ses$/i' => "$1sis",
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => "$1$2sis",
'/([ti])a$/i' => "$1um",
'/(n)ews$/i' => "$1ews",
'/(h|bl)ouses$/i' => "$1ouse",
'/(corpse)s$/i' => "$1",
'/(us)es$/i' => "$1",
'/(us|ss)$/i' => "$1",
'/s$/i' => "",
),
'irregular' => array(
'child' => 'children',
'foot' => 'feet',
'goose' => 'geese',
'man' => 'men',
'move' => 'moves',
'person' => 'people',
'sex' => 'sexes',
'tooth' => 'teeth',
),
'uncountable' => array(
'audio',
'equipment',
'deer',
'fish',
'gold',
'information',
'money',
'rice',
'police',
'series',
'sheep',
'species',
),
/*
|--------------------------------------------------------------------------
| ASCII Characters
|--------------------------------------------------------------------------
|
| This array contains foreign characters and their 7-bit ASCII equivalents.
| The array is used by the "ascii" method on the Str class to get strings
| ready for inclusion in a URL slug.
|
| Of course, the "ascii" method may also be used by you for whatever your
| application requires. Feel free to add any characters we missed, and be
| sure to let us know about them!
|
*/
'ascii' => array(
'/æ|ǽ/' => 'ae',
'/œ/' => 'oe',
'/À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ|А/' => 'A',
'/à|á|â|ã|ä|å|ǻ|ā|ă|ą|ǎ|ª|а/' => 'a',
'/Б/' => 'B',
'/б/' => 'b',
'/Ç|Ć|Ĉ|Ċ|Č|Ц/' => 'C',
'/ç|ć|ĉ|ċ|č|ц/' => 'c',
'/Ð|Ď|Đ|Д/' => 'Dj',
'/ð|ď|đ|д/' => 'dj',
'/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě|Е|Ё|Э/' => 'E',
'/è|é|ê|ë|ē|ĕ|ė|ę|ě|е|ё|э/' => 'e',
'/Ф/' => 'F',
'/ƒ|ф/' => 'f',
'/Ĝ|Ğ|Ġ|Ģ|Г/' => 'G',
'/ĝ|ğ|ġ|ģ|г/' => 'g',
'/Ĥ|Ħ|Х/' => 'H',
'/ĥ|ħ|х/' => 'h',
'/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ|И/' => 'I',
'/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı|и/' => 'i',
'/Ĵ|Й/' => 'J',
'/ĵ|й/' => 'j',
'/Ķ|К/' => 'K',
'/ķ|к/' => 'k',
'/Ĺ|Ļ|Ľ|Ŀ|Ł|Л/' => 'L',
'/ĺ|ļ|ľ|ŀ|ł|л/' => 'l',
'/М/' => 'M',
'/м/' => 'm',
'/Ñ|Ń|Ņ|Ň|Н/' => 'N',
'/ñ|ń|ņ|ň|ʼn|н/' => 'n',
'/Ö|Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ|О/' => 'O',
'/ö|ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º|о/' => 'o',
'/П/' => 'P',
'/п/' => 'p',
'/Ŕ|Ŗ|Ř|Р/' => 'R',
'/ŕ|ŗ|ř|р/' => 'r',
'/Ś|Ŝ|Ş|Ș|Š|С/' => 'S',
'/ś|ŝ|ş|ș|š|ſ|с/' => 's',
'/Ţ|Ț|Ť|Ŧ|Т/' => 'T',
'/ţ|ț|ť|ŧ|т/' => 't',
'/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ü|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ|У/' => 'U',
'/ù|ú|û|ũ|ū|ŭ|ů|ü|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ|у/' => 'u',
'/В/' => 'V',
'/в/' => 'v',
'/Ý|Ÿ|Ŷ|Ы/' => 'Y',
'/ý|ÿ|ŷ|ы/' => 'y',
'/Ŵ/' => 'W',
'/ŵ/' => 'w',
'/Ź|Ż|Ž|З/' => 'Z',
'/ź|ż|ž|з/' => 'z',
'/Æ|Ǽ/' => 'AE',
'/ß/'=> 'ss',
'/IJ/' => 'IJ',
'/ij/' => 'ij',
'/Œ/' => 'OE',
'/Ч/' => 'Ch',
'/ч/' => 'ch',
'/Ю/' => 'Ju',
'/ю/' => 'ju',
'/Я/' => 'Ja',
'/я/' => 'ja',
'/Ш/' => 'Sh',
'/ш/' => 'sh',
'/Щ/' => 'Shch',
'/щ/' => 'shch',
'/Ж/' => 'Zh',
'/ж/' => 'zh',
),
);
\ No newline at end of file
<?php
class Admin_Panel_Controller extends Controller {
public function action_index()
{
return 'Admin_Panel_Index';
}
}
\ No newline at end of file
<?php
class Auth_Controller extends Controller {
public function action_index()
{
return __FUNCTION__;
}
public function action_login()
{
return __FUNCTION__;
}
public function action_profile($name)
{
return $name;
}
}
\ No newline at end of file
<?php
class Filter_Controller extends Controller {
public function __construct()
{
Filter::register('test-all-before', function() { $_SERVER['test-all-before'] = true; });
Filter::register('test-all-after', function() { $_SERVER['test-all-after'] = true; });
Filter::register('test-profile-before', function() { $_SERVER['test-profile-before'] = true; });
Filter::register('test-except', function() { $_SERVER['test-except'] = true; });
Filter::register('test-on-post', function() { $_SERVER['test-on-post'] = true; });
Filter::register('test-on-get-put', function() { $_SERVER['test-on-get-put'] = true; });
Filter::register('test-before-filter', function() { return 'Filtered!'; });
Filter::register('test-param', function($var1, $var2) { return $var1.$var2; });
Filter::register('test-multi-1', function() { $_SERVER['test-multi-1'] = true; });
Filter::register('test-multi-2', function() { $_SERVER['test-multi-2'] = true; });
$this->filter('before', 'test-all-before');
$this->filter('after', 'test-all-after');
$this->filter('before', 'test-profile-before')->only(array('profile'));
$this->filter('before', 'test-except')->except(array('index', 'profile'));
$this->filter('before', 'test-on-post')->on(array('post'));
$this->filter('before', 'test-on-get-put')->on(array('get', 'put'));
$this->filter('before', 'test-before-filter')->only('login');
$this->filter('after', 'test-before-filter')->only('logout');
$this->filter('before', 'test-param:1,2')->only('edit');
$this->filter('before', 'test-multi-1|test-multi-2')->only('save');
}
public function action_index()
{
return __FUNCTION__;
}
public function action_profile()
{
return __FUNCTION__;
}
public function action_show()
{
return __FUNCTION__;
}
public function action_edit()
{
return __FUNCTION__;
}
public function action_save()
{
return __FUNCTION__;
}
public function action_login()
{
return __FUNCTION__;
}
public function action_logout()
{
return __FUNCTION__;
}
}
\ No newline at end of file
<?php
class Home_Controller extends Controller {
/*
|--------------------------------------------------------------------------
| The Default Controller
|--------------------------------------------------------------------------
|
| Instead of using RESTful routes and anonymous functions, you might wish
| to use controllers to organize your application API. You'll love them.
|
| To start using this controller simply remove the default route from the
| application "routes.php" file. Laravel is smart enough to locate this
| controller and call the default method, which is "action_index".
|
| This controller responds to URIs beginning with "home", and it also
| serves as the default controller for the application, meaning it
| handles requests to the root of the application.
|
| You can respond to GET requests to "/home/profile" like so:
|
| public function action_profile()
| {
| return "This is your profile!";
| }
|
| Any extra segments are passed to the method as parameters:
|
| public function action_profile($id)
| {
| return "This is the profile for user {$id}.";
| }
|
*/
public function action_index()
{
return View::make('home.index');
}
}
\ No newline at end of file
<?php
class Restful_Controller extends Controller {
public $restful = true;
public function get_index()
{
return __FUNCTION__;
}
public function post_index()
{
return __FUNCTION__;
}
}
\ No newline at end of file
<?php
class Template_Basic_Controller extends Controller {
public $layout = 'home.index';
public function action_index()
{
//
}
}
\ No newline at end of file
<?php
class Template_Named_Controller extends Controller {
public $layout = 'name: home';
public function action_index()
{
//
}
}
\ No newline at end of file
<?php
class TemplateStub {
public function __toString()
{
return 'TemplateStub';
}
}
class Template_Override_Controller extends Controller {
public $layout = 'home.index';
public function action_index()
{
//
}
public function layout()
{
return 'Layout';
}
}
\ No newline at end of file
<?php namespace Dashboard;
/**
* This class is used for testing the auto-loading of classes
* that are mapped by namesapce.
*/
class Repository {}
\ No newline at end of file
<?php
return array(
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the pagination links. You're free to change them to anything you want.
| If you come up with something more exciting, let us know.
|
*/
'previous' => '&laquo; Previous',
'next' => 'Next &raquo;',
);
\ No newline at end of file
<?php
return array(
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used
| by the validator class. Some of the rules contain multiple versions,
| such as the size (max, min, between) rules. These versions are used
| for different input types such as strings and files.
|
| These language lines may be easily changed to provide custom error
| messages in your application. Error messages for custom validation
| rules may also be added to this file.
|
*/
"accepted" => "The :attribute must be accepted.",
"active_url" => "The :attribute is not a valid URL.",
"alpha" => "The :attribute may only contain letters.",
"alpha_dash" => "The :attribute may only contain letters, numbers, and dashes.",
"alpha_num" => "The :attribute may only contain letters and numbers.",
"between" => array(
"numeric" => "The :attribute must be between :min - :max.",
"file" => "The :attribute must be between :min - :max kilobytes.",
"string" => "The :attribute must be between :min - :max characters.",
),
"confirmed" => "The :attribute confirmation does not match.",
"different" => "The :attribute and :other must be different.",
"email" => "The :attribute format is invalid.",
"exists" => "The selected :attribute is invalid.",
"image" => "The :attribute must be an image.",
"in" => "The selected :attribute is invalid.",
"integer" => "The :attribute must be an integer.",
"ip" => "The :attribute must be a valid IP address.",
"max" => array(
"numeric" => "The :attribute must be less than :max.",
"file" => "The :attribute must be less than :max kilobytes.",
"string" => "The :attribute must be less than :max characters.",
),
"mimes" => "The :attribute must be a file of type: :values.",
"min" => array(
"numeric" => "The :attribute must be at least :min.",
"file" => "The :attribute must be at least :min kilobytes.",
"string" => "The :attribute must be at least :min characters.",
),
"not_in" => "The selected :attribute is invalid.",
"numeric" => "The :attribute must be a number.",
"required" => "The :attribute field is required.",
"same" => "The :attribute and :other must match.",
"size" => array(
"numeric" => "The :attribute must be :size.",
"file" => "The :attribute must be :size kilobyte.",
"string" => "The :attribute must be :size characters.",
),
"unique" => "The :attribute has already been taken.",
"url" => "The :attribute format is invalid.",
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute_rule" to name the lines. This helps keep your
| custom validation clean and tidy.
|
| So, say you want to use a custom validation message when validating that
| the "email" attribute is unique. Just add "email_unique" to this array
| with your custom message. The Validator will handle the rest!
|
*/
'custom' => array('custom_required' => 'This field is required!'),
/*
|--------------------------------------------------------------------------
| Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as "E-Mail Address" instead
| of "email". Your users will thank you.
|
| The Validator class will automatically search this array of lines it
| is attempting to replace the :attribute place-holder in messages.
| It's pretty slick. We think you'll like it.
|
*/
'attributes' => array('test_attribute' => 'attribute'),
);
\ No newline at end of file
<?php
return array(
'required' => 'El campo de atributo es necesario.',
);
\ No newline at end of file
<?php
class Autoloader_HardCoded {}
\ No newline at end of file
<?php namespace Repositories;
class User {}
\ No newline at end of file
<?php
class User {}
\ No newline at end of file
<?php
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Simply tell Laravel the HTTP verbs and URIs it should respond to. It is a
| breeze to setup your applications using Laravel's RESTful routing, and it
| is perfectly suited for building both large applications and simple APIs.
| Enjoy the fresh air and simplicity of the framework.
|
| Let's respond to a simple GET request to http://example.com/hello:
|
| Router::register('GET /hello', function()
| {
| return 'Hello World!';
| });
|
| You can even respond to more than one URI:
|
| Router::register('GET /hello, GET /world', function()
| {
| return 'Hello World!';
| });
|
| It's easy to allow URI wildcards using (:num) or (:any):
|
| Router::register('GET /hello/(:any)', function($name)
| {
| return "Welcome, $name.";
| });
|
*/
Route::get('/, home', array('as' => 'home', function()
{
return View::make('home.index');
}));
Route::controller(array(
'auth', 'filter', 'home', 'restful',
'template.basic', 'template.name', 'template.override',
'admin.panel',
));
/*
|--------------------------------------------------------------------------
| Route Filters
|--------------------------------------------------------------------------
|
| Filters provide a convenient method for attaching functionality to your
| routes. The built-in "before" and "after" filters are called before and
| after every request to your application, and you may even create other
| filters that can be attached to individual routes.
|
| Let's walk through an example...
|
| First, define a filter:
|
| Filter::register('filter', function()
| {
| return 'Filtered!';
| });
|
| Next, attach the filter to a route:
|
| Router::register('GET /', array('before' => 'filter', function()
| {
| return 'Hello World!';
| }));
|
*/
Filter::register('before', function()
{
$_SERVER['before'] = true;
});
Filter::register('after', function()
{
$_SERVER['after'] = true;
});
Filter::register('csrf', function()
{
if (Request::forged()) return Response::error('500');
});
Filter::register('auth', function()
{
if (Auth::guest()) return Redirect::to('login');
});
\ No newline at end of file
<?php
/*
|--------------------------------------------------------------------------
| PHP Display Errors Configuration
|--------------------------------------------------------------------------
|
| Since Laravel intercepts and displays all errors with a detailed stack
| trace, we can turn off the display_errors ini directive. However, you
| may want to enable this option if you ever run into a dreaded white
| screen of death, as it can provide some clues.
|
*/
ini_set('display_errors', 'On');
/*
|--------------------------------------------------------------------------
| Laravel Configuration Loader
|--------------------------------------------------------------------------
|
| The Laravel configuration loader is responsible for returning an array
| of configuration options for a given bundle and file. By default, we
| use the files provided with Laravel; however, you are free to use
| your own storage mechanism for configuration arrays.
|
*/
Laravel\Event::listen(Laravel\Config::loader, function($bundle, $file)
{
return Laravel\Config::file($bundle, $file);
});
/*
|--------------------------------------------------------------------------
| Register Class Aliases
|--------------------------------------------------------------------------
|
| Aliases allow you to use classes without always specifying their fully
| namespaced path. This is convenient for working with any library that
| makes a heavy use of namespace for class organization. Here we will
| simply register the configured class aliases.
|
*/
$aliases = Laravel\Config::get('application.aliases');
Laravel\Autoloader::$aliases = $aliases;
/*
|--------------------------------------------------------------------------
| Auto-Loader Mappings
|--------------------------------------------------------------------------
|
| Registering a mapping couldn't be easier. Just pass an array of class
| to path maps into the "map" function of Autoloader. Then, when you
| want to use that class, just use it. It's simple!
|
*/
Autoloader::map(array(
'Base_Controller' => path('app').'controllers/base.php',
));
/*
|--------------------------------------------------------------------------
| Auto-Loader Directories
|--------------------------------------------------------------------------
|
| The Laravel auto-loader can search directories for files using the PSR-0
| naming convention. This convention basically organizes classes by using
| the class namespace to indicate the directory structure.
|
*/
Autoloader::directories(array(
path('app').'models',
path('app').'libraries',
));
/*
|--------------------------------------------------------------------------
| Laravel View Loader
|--------------------------------------------------------------------------
|
| The Laravel view loader is responsible for returning the full file path
| for the given bundle and view. Of course, a default implementation is
| provided to load views according to typical Laravel conventions but
| you may change this to customize how your views are organized.
|
*/
Event::listen(View::loader, function($bundle, $view)
{
return View::file($bundle, $view, Bundle::path($bundle).'views');
});
/*
|--------------------------------------------------------------------------
| Laravel Language Loader
|--------------------------------------------------------------------------
|
| The Laravel language loader is responsible for returning the array of
| language lines for a given bundle, language, and "file". A default
| implementation has been provided which uses the default language
| directories included with Laravel.
|
*/
Event::listen(Lang::loader, function($bundle, $language, $file)
{
return Lang::file($bundle, $language, $file);
});
/*
|--------------------------------------------------------------------------
| Enable The Blade View Engine
|--------------------------------------------------------------------------
|
| The Blade view engine provides a clean, beautiful templating language
| for your application, including syntax for echoing data and all of
| the typical PHP control structures. We'll simply enable it here.
|
*/
Blade::sharpen();
/*
|--------------------------------------------------------------------------
| Set The Default Timezone
|--------------------------------------------------------------------------
|
| We need to set the default timezone for the application. This controls
| the timezone that will be used by any of the date methods and classes
| utilized by Laravel or your application. The timezone may be set in
| your application configuration file.
|
*/
date_default_timezone_set(Config::get('application.timezone'));
/*
|--------------------------------------------------------------------------
| Start / Load The User Session
|--------------------------------------------------------------------------
|
| Sessions allow the web, which is stateless, to simulate state. In other
| words, sessions allow you to store information about the current user
| and state of your application. Here we'll just fire up the session
| if a session driver has been configured.
|
*/
if ( ! Request::cli() and Config::get('session.driver') !== '')
{
Session::load();
}
\ No newline at end of file
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Error 404 - Not Found</title>
<style>
@import url(http://fonts.googleapis.com/css?family=Ubuntu);
body {
background: #eee;
color: #6d6d6d;
font: normal normal normal 14px/1.253 Ubuntu, sans-serif;
margin: 0 0 25px 0;
min-width: 800px;
padding: 0;
}
#main {
background-clip: padding-box;
background-color: #fff;
border:1px solid #ccc;
border-radius: 5px;
box-shadow: 0 0 10px #cdcdcd;
margin: 25px auto 0;
padding: 30px;
width: 700px;
position: relative;
}
#main h1 {
font-family: 'Ubuntu';
font-size: 38px;
letter-spacing: 2px;
margin: 0 0 10px 0;
padding: 0;
}
#main h2 {
color: #999;
font-size: 18px;
letter-spacing: 3px;
margin: 0 0 25px 0;
padding: 0 0 0 0;
}
#main h3 {
color: #999;
margin-top: 24px;
padding: 0 0 0 0;
}
#main h3 {
font-size: 18px;
}
#main p {
line-height: 25px;
margin: 10px 0;
}
#main pre {
background-color: #333;
border-left: 1px solid #d8d8d8;
border-top: 1px solid #d8d8d8;
border-radius: 5px;
color: #eee;
padding: 10px;
}
#main ul {
margin: 10px 0;
padding: 0 30px;
}
#main li {
margin: 5px 0;
}
</style>
</head>
<body>
<div id="main">
<?php $messages = array('We need a map.', 'I think we\'re lost.', 'We took a wrong turn.'); ?>
<h1><?php echo $messages[mt_rand(0, 2)]; ?></h1>
<h2>Server Error: 404 (Not Found)</h2>
<h3>What does this mean?</h3>
<p>
We couldn't find the page you requested on our servers. We're really sorry
about that. It's our fault, not yours. We'll work hard to get this page
back online as soon as possible.
</p>
<p>
Perhaps you would like to go to our <?php echo HTML::link('/', 'home page'); ?>?
</p>
</div>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Error 500 - Internal Server Error</title>
<style>
@import url(http://fonts.googleapis.com/css?family=Ubuntu);
body {
background: #eee;
color: #6d6d6d;
font: normal normal normal 14px/1.253 Ubuntu, sans-serif;
margin: 0 0 25px 0;
min-width: 800px;
padding: 0;
}
#main {
background-clip: padding-box;
background-color: #fff;
border:1px solid #ccc;
border-radius: 5px;
box-shadow: 0 0 10px #cdcdcd;
margin: 25px auto 0;
padding: 30px;
width: 700px;
position: relative;
}
#main h1 {
font-family: 'Ubuntu';
font-size: 38px;
letter-spacing: 2px;
margin: 0 0 10px 0;
padding: 0;
}
#main h2 {
color: #999;
font-size: 18px;
letter-spacing: 3px;
margin: 0 0 25px 0;
padding: 0 0 0 0;
}
#main h3 {
color: #999;
margin-top: 24px;
padding: 0 0 0 0;
}
#main h3 {
font-size: 18px;
}
#main p {
line-height: 25px;
margin: 10px 0;
}
#main pre {
background-color: #333;
border-left: 1px solid #d8d8d8;
border-top: 1px solid #d8d8d8;
border-radius: 5px;
color: #eee;
padding: 10px;
}
#main ul {
margin: 10px 0;
padding: 0 30px;
}
#main li {
margin: 5px 0;
}
</style>
</head>
<body>
<div id="main">
<?php $messages = array('Ouch.', 'Oh no!', 'Whoops!'); ?>
<h1><?php echo $messages[mt_rand(0, 2)]; ?></h1>
<h2>Server Error: 500 (Internal Server Error)</h2>
<h3>What does this mean?</h3>
<p>
Something went wrong on our servers while we were processing your request.
We're really sorry about this, and will work hard to get this resolved as
soon as possible.
</p>
<p>
Perhaps you would like to go to our <?php echo HTML::link('/', 'home page'); ?>?
</p>
</div>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Laravel - A Framework For Web Artisans</title>
<style>
@import url(http://fonts.googleapis.com/css?family=Ubuntu);
body {
background: #eee;
color: #6d6d6d;
font: normal normal normal 14px/1.253 Ubuntu, sans-serif;
margin: 0 0 25px 0;
min-width: 800px;
padding: 0;
}
#main {
background-clip: padding-box;
background-color: #fff;
border:1px solid #ccc;
border-radius: 5px;
box-shadow: 0 0 10px #cdcdcd;
margin: 25px auto 0;
padding: 30px;
width: 700px;
position: relative;
}
#main h1 {
font-family: 'Ubuntu';
font-size: 38px;
letter-spacing: 2px;
margin: 0 0 10px 0;
padding: 0;
}
#main h2 {
color: #999;
font-size: 18px;
letter-spacing: 3px;
margin: 0 0 25px 0;
padding: 0 0 0 0;
}
#main h3 {
color: #999;
margin-top: 24px;
padding: 0 0 0 0;
}
#main h3 {
font-size: 18px;
}
#main p {
line-height: 25px;
margin: 10px 0;
}
#main pre {
background-color: #333;
border-left: 1px solid #d8d8d8;
border-top: 1px solid #d8d8d8;
border-radius: 5px;
color: #eee;
padding: 10px;
}
#main ul {
margin: 10px 0;
padding: 0 30px;
}
#main li {
margin: 5px 0;
}
</style>
</head>
<body>
<div id="main">
<h1>Welcome To Laravel</h1>
<h2>A Framework For Web Artisans</h2>
<p>
You have successfully installed the Laravel framework. Laravel is a simple framework
that helps web artisans create beautiful, creative applications using elegant, expressive
syntax. You'll love using it.
</p>
<h3>Learn the terrain.</h3>
<p>
You've landed yourself on our default home page. The route that
is generating this page lives at:
</p>
<pre><code>APP_PATH/routes.php</code></pre>
<p>And the view sitting before you can be found at:</p>
<pre><code>APP_PATH/views/home/index.php</code></pre>
<h3>Create something beautiful.</h3>
<p>
Now that you're up and running, it's time to start creating!
Here are some links to help you get started:
</p>
<ul>
<li><a href="http://laravel.com">Official Website</a></li>
<li><a href="http://forums.laravel.com">Laravel Forums</a></li>
<li><a href="http://github.com/laravel/laravel">GitHub Repository</a></li>
</ul>
</div>
</body>
</html>
\ No newline at end of file
<?php echo $name; ?> is <?php echo $age; ?>
\ No newline at end of file
Taylor
\ No newline at end of file
<?php
return array(
'bundle' => 'dashboard',
);
\ No newline at end of file
<?php
class Dashboard_Panel_Controller extends Controller {
public function action_index()
{
return 'Dashboard_Panel_Index';
}
}
\ No newline at end of file
<?php namespace Dashboard;
/**
* This class is used for testing the auto-loading of classes
* that are mapped by namesapce.
*/
class Repository {}
\ No newline at end of file
<?php
Route::get('dashboard', array('as' => 'dashboard', function()
{
//
}));
Route::controller('dashboard::panel');
\ No newline at end of file
<?php
if (isset($_SERVER['bundle.dummy.routes']))
{
$_SERVER['bundle.dummy.routes']++;
}
\ No newline at end of file
<?php
$_SERVER['bundle.dummy.start']++;
\ No newline at end of file
<?php
class AssetTest extends PHPUnit_Framework_TestCase {
/**
* Initialize the test environment.
*/
public function setUp()
{
Config::$items = array();
Config::$cache = array();
Asset::$containers = array();
}
/**
* Test the Asset::container method.
*
* @group laravel
*/
public function testContainersCanBeCreated()
{
$container = Asset::container('foo');
$this->assertTrue($container === Asset::container('foo'));
$this->assertInstanceOf('\\Laravel\\Asset_Container', $container);
}
/**
* Test the Asset::container method for default container creation.
*
* @group laravel
*/
public function testDefaultContainerCreatedByDefault()
{
$this->assertEquals('default', Asset::container()->name);
}
/**
* Test the Asset::__callStatic method.
*
* @group laravel
*/
public function testContainerMethodsCanBeDynamicallyCalled()
{
Asset::style('common', 'common.css');
$this->assertEquals('common.css', Asset::container()->assets['style']['common']['source']);
}
/**
* Test the Asset_Container constructor.
*
* @group laravel
*/
public function testNameIsSetOnAssetContainerConstruction()
{
$container = $this->getContainer();
$this->assertEquals('foo', $container->name);
}
/**
* Test the Asset_Container::add method.
*
* @group laravel
*/
public function testAddMethodProperlySniffsAssetType()
{
$container = $this->getContainer();
$container->add('jquery', 'jquery.js');
$container->add('common', 'common.css');
$this->assertEquals('jquery.js', $container->assets['script']['jquery']['source']);
$this->assertEquals('common.css', $container->assets['style']['common']['source']);
}
/**
* Test the Asset_Container::style method.
*
* @group laravel
*/
public function testStyleMethodProperlyRegistersAnAsset()
{
$container = $this->getContainer();
$container->style('common', 'common.css');
$this->assertEquals('common.css', $container->assets['style']['common']['source']);
}
/**
* Test the Asset_Container::style method sets media attribute.
*
* @group laravel
*/
public function testStyleMethodProperlySetsMediaAttributeIfNotSet()
{
$container = $this->getContainer();
$container->style('common', 'common.css');
$this->assertEquals('all', $container->assets['style']['common']['attributes']['media']);
}
/**
* Test the Asset_Container::style method sets media attribute.
*
* @group laravel
*/
public function testStyleMethodProperlyIgnoresMediaAttributeIfSet()
{
$container = $this->getContainer();
$container->style('common', 'common.css', array(), array('media' => 'print'));
$this->assertEquals('print', $container->assets['style']['common']['attributes']['media']);
}
/**
* Test the Asset_Container::script method.
*
* @group laravel
*/
public function testScriptMethodProperlyRegistersAnAsset()
{
$container = $this->getContainer();
$container->script('jquery', 'jquery.js');
$this->assertEquals('jquery.js', $container->assets['script']['jquery']['source']);
}
/**
* Test the Asset_Container::add method properly sets dependencies.
*
* @group laravel
*/
public function testAddMethodProperlySetsDependencies()
{
$container = $this->getContainer();
$container->add('common', 'common.css', 'jquery');
$container->add('jquery', 'jquery.js', array('jquery-ui'));
$this->assertEquals(array('jquery'), $container->assets['style']['common']['dependencies']);
$this->assertEquals(array('jquery-ui'), $container->assets['script']['jquery']['dependencies']);
}
/**
* Test the Asset_Container::add method properly sets attributes.
*
* @group laravel
*/
public function testAddMethodProperlySetsAttributes()
{
$container = $this->getContainer();
$container->add('common', 'common.css', array(), array('media' => 'print'));
$container->add('jquery', 'jquery.js', array(), array('defer'));
$this->assertEquals(array('media' => 'print'), $container->assets['style']['common']['attributes']);
$this->assertEquals(array('defer'), $container->assets['script']['jquery']['attributes']);
}
/**
* Test the Asset_Container::bundle method.
*
* @group laravel
*/
public function testBundleMethodCorrectlySetsTheAssetBundle()
{
$container = $this->getContainer();
$container->bundle('eloquent');
$this->assertEquals('eloquent', $container->bundle);
}
/**
* Test the Asset_Container::path method.
*
* @group laravel
*/
public function testPathMethodReturnsCorrectPathForABundleAsset()
{
$container = $this->getContainer();
$container->bundle('eloquent');
$this->assertEquals('/bundles/eloquent/foo.jpg', $container->path('foo.jpg'));
}
/**
* Test the Asset_Container::path method.
*
* @group laravel
*/
public function testPathMethodReturnsCorrectPathForAnApplicationAsset()
{
$container = $this->getContainer();
$this->assertEquals('/foo.jpg', $container->path('foo.jpg'));
}
/**
* Test the Asset_Container::scripts method.
*
* @group laravel
*/
public function testScriptsCanBeRetrieved()
{
$container = $this->getContainer();
$container->script('dojo', 'dojo.js', array('jquery-ui'));
$container->script('jquery', 'jquery.js', array('jquery-ui', 'dojo'));
$container->script('jquery-ui', 'jquery-ui.js');
$scripts = $container->scripts();
$this->assertTrue(strpos($scripts, 'jquery.js') > 0);
$this->assertTrue(strpos($scripts, 'jquery.js') > strpos($scripts, 'jquery-ui.js'));
$this->assertTrue(strpos($scripts, 'dojo.js') > strpos($scripts, 'jquery-ui.js'));
}
/**
* Test the Asset_Container::styles method.
*
* @group laravel
*/
public function testStylesCanBeRetrieved()
{
$container = $this->getContainer();
$container->style('dojo', 'dojo.css', array('jquery-ui'), array('media' => 'print'));
$container->style('jquery', 'jquery.css', array('jquery-ui', 'dojo'));
$container->style('jquery-ui', 'jquery-ui.css');
$styles = $container->styles();
$this->assertTrue(strpos($styles, 'jquery.css') > 0);
$this->assertTrue(strpos($styles, 'media="print"') > 0);
$this->assertTrue(strpos($styles, 'jquery.css') > strpos($styles, 'jquery-ui.css'));
$this->assertTrue(strpos($styles, 'dojo.css') > strpos($styles, 'jquery-ui.css'));
}
/**
* Get an asset container instance.
*
* @param string $name
* @return Asset_Container
*/
private function getContainer($name = 'foo')
{
return new Laravel\Asset_Container($name);
}
}
\ No newline at end of file
<?php
use Symfony\Component\HttpFoundation\LaravelRequest as RequestFoundation;
use Laravel\Str;
use Laravel\Auth;
use Laravel\Cookie;
use Laravel\Session;
use Laravel\Crypter;
use Laravel\Session\Payload;
class AuthTest extends PHPUnit_Framework_TestCase {
/**
* Setup teh test environment.
*/
public function setUp()
{
$_SERVER['auth.login.stub'] = null;
Cookie::$jar = array();
Config::$items = array();
Auth::driver()->user = null;
Session::$instance = null;
Config::set('database.default', 'sqlite');
}
/**
* Tear down the test environment.
*/
public function tearDown()
{
$_SERVER['auth.login.stub'] = null;
Cookie::$jar = array();
Config::$items = array();
Auth::driver()->user = null;
Session::$instance = null;
Config::set('database.default', 'mysql');
}
/**
* Set one of the $_SERVER variables.
*
* @param string $key
* @param string $value
*/
protected function setServerVar($key, $value)
{
$_SERVER[$key] = $value;
$this->restartRequest();
}
/**
* Reinitialize the global request.
*
* @return void
*/
protected function restartRequest()
{
// FIXME: Ugly hack, but old contents from previous requests seem to
// trip up the Foundation class.
$_FILES = array();
Request::$foundation = RequestFoundation::createFromGlobals();
}
/**
* Test the Auth::user method.
*
* @group laravel
*/
public function testUserMethodReturnsCurrentUser()
{
Auth::driver()->user = 'Taylor';
$this->assertEquals('Taylor', Auth::user());
}
/**
* Test the Auth::check method.
*
* @group laravel
*/
public function testCheckMethodReturnsTrueWhenUserIsSet()
{
$auth = new AuthUserReturnsDummy;
$this->assertTrue($auth->check());
}
/**
* Test the Auth::check method.
*
* @group laravel
*/
public function testCheckMethodReturnsFalseWhenNoUserIsSet()
{
$auth = new AuthUserReturnsNull;
$this->assertFalse($auth->check());
}
/**
* Test the Auth::guest method.
*
* @group laravel
*/
public function testGuestReturnsTrueWhenNoUserIsSet()
{
$auth = new AuthUserReturnsNull;
$this->assertTrue($auth->guest());
}
/**
* Test the Auth::guest method.
*
* @group laravel
*/
public function testGuestReturnsFalseWhenUserIsSet()
{
$auth = new AuthUserReturnsDummy;
$this->assertFalse($auth->guest());
}
/**
* Test the Auth::user method.
*
* @group laravel
*/
public function testUserMethodReturnsNullWhenNoUserExistsAndNoRecallerExists()
{
Session::$instance = new Payload($this->getMock('Laravel\\Session\\Drivers\\Driver'));
$this->assertNull(Auth::user());
}
/**
* Test the Auth::user method.
*
* @group laravel
*/
public function testUserReturnsUserByID()
{
Session::$instance = new Payload($this->getMock('Laravel\\Session\\Drivers\\Driver'));
Auth::login(1);
$this->assertEquals('Taylor Otwell', Auth::user()->name);
Auth::logout();
}
/**
* Test the Auth::user method.
*
* @group laravel
*/
public function testNullReturnedWhenUserIDNotValidInteger()
{
Session::$instance = new Payload($this->getMock('Laravel\\Session\\Drivers\\Driver'));
Auth::login('asdlkasd');
$this->assertNull(Auth::user());
}
/**
* Test the Auth::recall method.
*
* @group laravel
*/
public function testUserCanBeRecalledViaCookie()
{
Session::$instance = new Payload($this->getMock('Laravel\\Session\\Drivers\\Driver'));
$cookie = Crypter::encrypt('1|'.Str::random(40));
Cookie::forever('authloginstub_remember', $cookie);
$auth = new AuthLoginStub;
$this->assertEquals('Taylor Otwell', $auth->user()->name);
$this->assertTrue($auth->user()->id === $_SERVER['auth.login.stub']['user']);
}
/**
* Test the Auth::attempt method.
*
* @group laravel
*/
public function testAttemptMethodReturnsFalseWhenCredentialsAreInvalid()
{
$this->assertFalse(Auth::attempt(array('username' => 'foo', 'password' => 'foo')));
$this->assertFalse(Auth::attempt(array('username' => 'foo', 'password' => null)));
$this->assertFalse(Auth::attempt(array('username' => null, 'password' => null)));
$this->assertFalse(Auth::attempt(array('username' => 'taylor', 'password' => 'password')));
$this->assertFalse(Auth::attempt(array('username' => 'taylor', 'password' => 232)));
}
/**
* Test the Auth::attempt method.
*
* @group laravel
*/
public function testAttemptReturnsTrueWhenCredentialsAreCorrect()
{
Session::$instance = new Payload($this->getMock('Laravel\\Session\\Drivers\\Driver'));
$auth = new AuthLoginStub;
$this->assertTrue($auth->attempt(array('username' => 'taylor', 'password' => 'password1')));
$this->assertEquals('1', $_SERVER['auth.login.stub']['user']);
$this->assertFalse($_SERVER['auth.login.stub']['remember']);
$auth_secure = new AuthLoginStub;
$this->assertTrue($auth_secure->attempt(array('username' => 'taylor', 'password' => 'password1', 'remember' => true)));
$this->assertEquals('1', $_SERVER['auth.login.stub']['user']);
$this->assertTrue($_SERVER['auth.login.stub']['remember']);
$auth_secure->logout();
$auth->logout();
}
/**
* Test Auth::login method.
*
* @group laravel
*/
public function testLoginMethodStoresUserKeyInSession()
{
Session::$instance = new Payload($this->getMock('Laravel\\Session\\Drivers\\Driver'));
$user = new StdClass;
$user->id = 10;
Auth::login($user);
// FIXME: Not sure whether hard-coding the key is a good idea.
$user = Session::$instance->session['data']['laravel_auth_drivers_fluent_login'];
$this->assertEquals(10, $user->id);
Auth::logout();
Auth::login(5);
$user = Session::$instance->session['data']['laravel_auth_drivers_fluent_login'];
$this->assertEquals(5, $user);
Auth::logout(5);
}
/**
* Test the Auth::login method.
*
* @group laravel
*/
public function testLoginStoresRememberCookieWhenNeeded()
{
Session::$instance = new Payload($this->getMock('Laravel\\Session\\Drivers\\Driver'));
$this->setServerVar('HTTPS', 'on');
// Set the session vars to make sure remember cookie uses them
Config::set('session.path', 'foo');
Config::set('session.domain', 'bar');
Config::set('session.secure', true);
Auth::login(1, true);
$this->assertTrue(isset(Cookie::$jar['laravel_auth_drivers_fluent_remember']));
$cookie = Cookie::$jar['laravel_auth_drivers_fluent_remember']['value'];
$cookie = explode('|', Crypter::decrypt($cookie));
$this->assertEquals(1, $cookie[0]);
$this->assertEquals('foo', Cookie::$jar['laravel_auth_drivers_fluent_remember']['path']);
$this->assertEquals('bar', Cookie::$jar['laravel_auth_drivers_fluent_remember']['domain']);
$this->assertTrue(Cookie::$jar['laravel_auth_drivers_fluent_remember']['secure']);
Auth::logout();
$this->setServerVar('HTTPS', 'off');
}
/**
* Test the Auth::logout method.
*
* @group laravel
*/
public function testLogoutMethodLogsOutUser()
{
Session::$instance = new Payload($this->getMock('Laravel\\Session\\Drivers\\Driver'));
$data = Session::$instance->session['data']['laravel_auth_drivers_fluent_login'] = 1;
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']));
$this->assertTrue(Cookie::$jar['laravel_auth_drivers_fluent_remember']['expiration'] < time());
}
}
class AuthUserReturnsNull extends Laravel\Auth\Drivers\Driver {
public function user() { return null; }
public function retrieve($id) { return null; }
public function attempt($arguments = array()) { return null; }
}
class AuthUserReturnsDummy extends Laravel\Auth\Drivers\Driver {
public function user() { return 'Taylor'; }
public function retrieve($id) { return null; }
public function attempt($arguments = array())
{
return $this->login($arguments['username']);
}
}
class AuthLoginStub extends Laravel\Auth\Drivers\Fluent {
public function login($user, $remember = false)
{
if (is_null($remember)) $remember = false;
$_SERVER['auth.login.stub'] = compact('user', 'remember');
return parent::login($user, $remember);
}
public function logout()
{
parent::logout();
}
public function retrieve($id)
{
$user = parent::retrieve($id);
$_SERVER['auth.login.stub'] = array(
'user' => $user->id,
'remember' => false,
);
return $user;
}
}
\ No newline at end of file
<?php
class AutoloaderTest extends PHPUnit_Framework_TestCase {
/**
* Test the Autoloader::map method.
*
* @group laravel
*/
public function testMapsCanBeRegistered()
{
Autoloader::map(array(
'Foo' => path('app').'models/foo.php',
));
$this->assertEquals(path('app').'models/foo.php', Autoloader::$mappings['Foo']);
}
/**
* Test the Autoloader::alias method.
*
* @group laravel
*/
public function testAliasesCanBeRegistered()
{
Autoloader::alias('Foo\\Bar', 'Foo');
$this->assertEquals('Foo\\Bar', Autoloader::$aliases['Foo']);
}
/**
* Test the Autoloader::directories method.
*
* @group laravel
*/
public function testPsrDirectoriesCanBeRegistered()
{
Autoloader::directories(array(
path('app').'foo'.DS.'bar',
path('app').'foo'.DS.'baz'.DS.DS,
));
$this->assertTrue(in_array(path('app').'foo'.DS.'bar'.DS, Autoloader::$directories));
$this->assertTrue(in_array(path('app').'foo'.DS.'baz'.DS, Autoloader::$directories));
}
/**
* Test the Autoloader::namespaces method.
*
* @group laravel
*/
public function testNamespacesCanBeRegistered()
{
Autoloader::namespaces(array(
'Autoloader_1' => path('bundle').'autoload'.DS.'models',
'Autoloader_2' => path('bundle').'autoload'.DS.'libraries'.DS.DS,
));
$this->assertEquals(path('bundle').'autoload'.DS.'models'.DS, Autoloader::$namespaces['Autoloader_1\\']);
$this->assertEquals(path('bundle').'autoload'.DS.'libraries'.DS, Autoloader::$namespaces['Autoloader_2\\']);
}
/**
* Test the loading of PSR-0 models and libraries.
*
* @group laravel
*/
public function testPsrLibrariesAndModelsCanBeLoaded()
{
$this->assertInstanceOf('User', new User);
$this->assertInstanceOf('Repositories\\User', new Repositories\User);
}
/**
* Test the loading of hard-coded classes.
*
* @group laravel
*/
public function testHardcodedClassesCanBeLoaded()
{
Autoloader::map(array(
'Autoloader_HardCoded' => path('app').'models'.DS.'autoloader.php',
));
$this->assertInstanceOf('Autoloader_HardCoded', new Autoloader_HardCoded);
}
/**
* Test the loading of classes mapped by namespaces.
*
* @group laravel
*/
public function testClassesMappedByNamespaceCanBeLoaded()
{
Autoloader::namespaces(array(
'Dashboard' => path('bundle').'dashboard'.DS.'models',
));
$this->assertInstanceOf('Dashboard\\Repository', new Dashboard\Repository);
}
}
\ No newline at end of file
<?php
use Laravel\Blade;
class BladeTest extends PHPUnit_Framework_TestCase {
/**
* Test the compilation of echo statements.
*
* @group laravel
*/
public function testEchosAreConvertedProperly()
{
$blade1 = '{{$a}}';
$blade2 = '{{e($a)}}';
$this->assertEquals('<?php echo $a; ?>', Blade::compile_string($blade1));
$this->assertEquals('<?php echo e($a); ?>', Blade::compile_string($blade2));
}
/**
* Test the compilation of control structures.
*
* @group laravel
*/
public function testControlStructuresAreCreatedCorrectly()
{
$blade1 = "@if (true)\nfoo\n@endif";
$blade2 = "@if (count(".'$something'.") > 0)\nfoo\n@endif";
$blade3 = "@if (true)\nfoo\n@elseif (false)\nbar\n@endif";
$blade4 = "@if (true)\nfoo\n@else\nbar\n@endif";
$this->assertEquals("<?php if(true): ?>\nfoo\n<?php endif; ?>", Blade::compile_string($blade1));
$this->assertEquals("<?php if(count(".'$something'.") > 0): ?>\nfoo\n<?php endif; ?>", Blade::compile_string($blade2));
$this->assertEquals("<?php if(true): ?>\nfoo\n<?php elseif(false): ?>\nbar\n<?php endif; ?>", Blade::compile_string($blade3));
$this->assertEquals("<?php if(true): ?>\nfoo\n<?php else: ?>\nbar\n<?php endif; ?>", Blade::compile_string($blade4));
}
/**
* Test the compilation of yield statements.
*
* @group laravel
*/
public function testYieldsAreCompiledCorrectly()
{
$blade = "@yield('something')";
$this->assertEquals("<?php echo \\Laravel\\Section::yield('something'); ?>", Blade::compile_string($blade));
}
/**
* Test the compilation of section statements.
*
* @group laravel
*/
public function testSectionsAreCompiledCorrectly()
{
$blade = "@section('something')\nfoo\n@endsection";
$this->assertEquals("<?php \\Laravel\\Section::start('something'); ?>\nfoo\n<?php \\Laravel\\Section::stop(); ?>", Blade::compile_string($blade));
}
}
\ No newline at end of file
<?php
class BundleTest extends PHPUnit_Framework_TestCase {
/**
* Setup the test environment.
*/
public function setUp()
{
Bundle::$started = array();
Bundle::$elements = array();
unset(Bundle::$bundles['foo']);
}
/**
* Tear down the test environment.
*/
public function tearDown()
{
Bundle::$started = array();
Bundle::$elements = array();
unset(Bundle::$bundles['foo']);
}
/**
* Test Bundle::register method.
*
* @group laravel
*/
public function testRegisterMethodCorrectlyRegistersBundle()
{
Bundle::register('foo-baz', array('handles' => 'foo-baz'));
$this->assertEquals('foo-baz', Bundle::$bundles['foo-baz']['handles']);
$this->assertFalse(Bundle::$bundles['foo-baz']['auto']);
Bundle::register('foo-bar', array());
$this->assertFalse(Bundle::$bundles['foo-baz']['auto']);
$this->assertNull(Bundle::$bundles['foo-bar']['handles']);
unset(Bundle::$bundles['foo-baz']);
unset(Bundle::$bundles['foo-bar']);
}
/**
* Test the Bundle::start method.
*
* @group laravel
*/
public function testStartMethodStartsBundle()
{
$_SERVER['bundle.dummy.start'] = 0;
$_SERVER['bundle.dummy.routes'] = 0;
$_SERVER['started.dummy'] = false;
Event::listen('laravel.started: dummy', function()
{
$_SERVER['started.dummy'] = true;
});
Bundle::register('dummy');
Bundle::start('dummy');
$this->assertTrue($_SERVER['started.dummy']);
$this->assertEquals(1, $_SERVER['bundle.dummy.start']);
$this->assertEquals(1, $_SERVER['bundle.dummy.routes']);
Bundle::start('dummy');
$this->assertEquals(1, $_SERVER['bundle.dummy.start']);
$this->assertEquals(1, $_SERVER['bundle.dummy.routes']);
}
/**
* Test Bundle::handles method.
*
* @group laravel
*/
public function testHandlesMethodReturnsBundleThatHandlesURI()
{
Bundle::register('foo', array('handles' => 'foo-bar'));
$this->assertEquals('foo', Bundle::handles('foo-bar/admin'));
unset(Bundle::$bundles['foo']);
}
/**
* Test the Bundle::exist method.
*
* @group laravel
*/
public function testExistMethodIndicatesIfBundleExist()
{
$this->assertTrue(Bundle::exists('dashboard'));
$this->assertFalse(Bundle::exists('foo'));
}
/**
* Test the Bundle::started method.
*
* @group laravel
*/
public function testStartedMethodIndicatesIfBundleIsStarted()
{
Bundle::register('dummy');
Bundle::start('dummy');
$this->assertTrue(Bundle::started('dummy'));
}
/**
* Test the Bundle::prefix method.
*
* @group laravel
*/
public function testPrefixMethodReturnsCorrectPrefix()
{
$this->assertEquals('dummy::', Bundle::prefix('dummy'));
$this->assertEquals('', Bundle::prefix(DEFAULT_BUNDLE));
}
/**
* Test the Bundle::class_prefix method.
*
* @group laravel
*/
public function testClassPrefixMethodReturnsProperClassPrefixForBundle()
{
$this->assertEquals('Dummy_', Bundle::class_prefix('dummy'));
$this->assertEquals('', Bundle::class_prefix(DEFAULT_BUNDLE));
}
/**
* Test the Bundle::path method.
*
* @group laravel
*/
public function testPathMethodReturnsCorrectPath()
{
$this->assertEquals(path('app'), Bundle::path(null));
$this->assertEquals(path('app'), Bundle::path(DEFAULT_BUNDLE));
$this->assertEquals(path('bundle').'dashboard'.DS, Bundle::path('dashboard'));
}
/**
* Test the Bundle::asset method.
*
* @group laravel
*/
public function testAssetPathReturnsPathToBundlesAssets()
{
$this->assertEquals('/bundles/dashboard/', Bundle::assets('dashboard'));
$this->assertEquals('/', Bundle::assets(DEFAULT_BUNDLE));
Config::set('application.url', '');
}
/**
* Test the Bundle::name method.
*
* @group laravel
*/
public function testBundleNameCanBeRetrievedFromIdentifier()
{
$this->assertEquals(DEFAULT_BUNDLE, Bundle::name('something'));
$this->assertEquals(DEFAULT_BUNDLE, Bundle::name('something.else'));
$this->assertEquals('bundle', Bundle::name('bundle::something.else'));
}
/**
* Test the Bundle::element method.
*
* @group laravel
*/
public function testElementCanBeRetrievedFromIdentifier()
{
$this->assertEquals('something', Bundle::element('something'));
$this->assertEquals('something.else', Bundle::element('something.else'));
$this->assertEquals('something.else', Bundle::element('bundle::something.else'));
}
/**
* Test the Bundle::identifier method.
*
* @group laravel
*/
public function testIdentifierCanBeConstructed()
{
$this->assertEquals('something.else', Bundle::identifier(DEFAULT_BUNDLE, 'something.else'));
$this->assertEquals('dashboard::something', Bundle::identifier('dashboard', 'something'));
$this->assertEquals('dashboard::something.else', Bundle::identifier('dashboard', 'something.else'));
}
/**
* Test the Bundle::resolve method.
*
* @group laravel
*/
public function testBundleNamesCanBeResolved()
{
$this->assertEquals(DEFAULT_BUNDLE, Bundle::resolve('foo'));
$this->assertEquals('dashboard', Bundle::resolve('dashboard'));
}
/**
* Test the Bundle::parse method.
*
* @group laravel
*/
public function testParseMethodReturnsElementAndIdentifier()
{
$this->assertEquals(array('application', 'something'), Bundle::parse('something'));
$this->assertEquals(array('application', 'something.else'), Bundle::parse('something.else'));
$this->assertEquals(array('dashboard', 'something'), Bundle::parse('dashboard::something'));
$this->assertEquals(array('dashboard', 'something.else'), Bundle::parse('dashboard::something.else'));
}
/**
* Test the Bundle::get method.
*
* @group laravel
*/
public function testOptionMethodReturnsBundleOption()
{
$this->assertFalse(Bundle::option('dashboard', 'auto'));
$this->assertEquals('dashboard', Bundle::option('dashboard', 'location'));
}
/**
* Test the Bundle::all method.
*
* @group laravel
*/
public function testAllMethodReturnsBundleArray()
{
Bundle::register('foo');
$this->assertEquals(Bundle::$bundles, Bundle::all());
unset(Bundle::$bundles['foo']);
}
/**
* Test the Bundle::names method.
*
* @group laravel
*/
public function testNamesMethodReturnsBundleNames()
{
Bundle::register('foo');
$this->assertEquals(array('dashboard', 'dummy', 'foo'), Bundle::names());
unset(Bundle::$bundles['foo']);
}
}
\ No newline at end of file
<?php
class ConfigTest extends PHPUnit_Framework_TestCase {
/**
* Tear down the testing environment.
*/
public function tearDown()
{
Config::$items = array();
Config::$cache = array();
}
/**
* Test the Config::get method.
*
* @group laravel
*/
public function testItemsCanBeRetrievedFromConfigFiles()
{
$this->assertEquals('UTF-8', Config::get('application.encoding'));
$this->assertEquals('mysql', Config::get('database.connections.mysql.driver'));
$this->assertEquals('dashboard', Config::get('dashboard::meta.bundle'));
}
/**
* Test the Config::has method.
*
* @group laravel
*/
public function testHasMethodIndicatesIfConfigItemExists()
{
$this->assertFalse(Config::has('application.foo'));
$this->assertTrue(Config::has('application.encoding'));
}
/**
* Test the Config::set method.
*
* @group laravel
*/
public function testConfigItemsCanBeSet()
{
Config::set('application.encoding', 'foo');
Config::set('dashboard::meta.bundle', 'bar');
$this->assertEquals('foo', Config::get('application.encoding'));
$this->assertEquals('bar', Config::get('dashboard::meta.bundle'));
}
/**
* Test that environment configurations are loaded correctly.
*
* @group laravel
*/
public function testEnvironmentConfigsOverrideNormalConfigurations()
{
$_SERVER['LARAVEL_ENV'] = 'local';
$this->assertEquals('sqlite', Config::get('database.default'));
unset($_SERVER['LARAVEL_ENV']);
}
/**
* Test that items can be set after the entire file has already been loaded.
*
* @group laravel
*/
public function testItemsCanBeSetAfterEntireFileIsLoaded()
{
Config::get('application');
Config::set('application.key', 'taylor');
$application = Config::get('application');
$this->assertEquals('taylor', $application['key']);
}
}
\ No newline at end of file
<?php
class ControllerTest extends PHPUnit_Framework_TestCase {
/**
* Setup the testing environment.
*/
public function setUp()
{
$_SERVER['REQUEST_METHOD'] = 'GET';
}
/**
* Tear down the testing environment.
*/
public function tearDown()
{
unset(Filter::$filters['test-all-before']);
unset(Filter::$filters['test-all-after']);
unset(Filter::$filters['test-profile-before']);
unset($_SERVER['REQUEST_METHOD']);
}
/**
* Test the Controller::call method.
*
* @group laravel
*/
public function testBasicControllerActionCanBeCalled()
{
$this->assertEquals('action_index', Controller::call('auth@index')->content);
$this->assertEquals('Admin_Panel_Index', Controller::call('admin.panel@index')->content);
$this->assertEquals('Taylor', Controller::call('auth@profile', array('Taylor'))->content);
$this->assertEquals('Dashboard_Panel_Index', Controller::call('dashboard::panel@index')->content);
}
/**
* Test basic controller filters are called.
*
* @group laravel
*/
public function testAssignedBeforeFiltersAreRun()
{
$_SERVER['test-all-after'] = false;
$_SERVER['test-all-before'] = false;
Controller::call('filter@index');
$this->assertTrue($_SERVER['test-all-after']);
$this->assertTrue($_SERVER['test-all-before']);
}
/**
* Test that "only" filters only apply to their assigned methods.
*
* @group laravel
*/
public function testOnlyFiltersOnlyApplyToTheirAssignedMethods()
{
$_SERVER['test-profile-before'] = false;
Controller::call('filter@index');
$this->assertFalse($_SERVER['test-profile-before']);
Controller::call('filter@profile');
$this->assertTrue($_SERVER['test-profile-before']);
}
/**
* Test that "except" filters only apply to the excluded methods.
*
* @group laravel
*/
public function testExceptFiltersOnlyApplyToTheExlucdedMethods()
{
$_SERVER['test-except'] = false;
Controller::call('filter@index');
Controller::call('filter@profile');
$this->assertFalse($_SERVER['test-except']);
Controller::call('filter@show');
$this->assertTrue($_SERVER['test-except']);
}
/**
* Test that filters can be constrained by the request method.
*
* @group laravel
*/
public function testFiltersCanBeConstrainedByRequestMethod()
{
$_SERVER['test-on-post'] = false;
Request::$foundation->setMethod('GET');
Controller::call('filter@index');
$this->assertFalse($_SERVER['test-on-post']);
Request::$foundation->setMethod('POST');
Controller::call('filter@index');
$this->assertTrue($_SERVER['test-on-post']);
$_SERVER['test-on-get-put'] = false;
Request::$foundation->setMethod('POST');
Controller::call('filter@index');
$this->assertFalse($_SERVER['test-on-get-put']);
Request::$foundation->setMethod('PUT');
Controller::call('filter@index');
$this->assertTrue($_SERVER['test-on-get-put']);
}
public function testGlobalBeforeFilterIsNotCalledByController()
{
$_SERVER['before'] = false;
$_SERVER['after'] = false;
Controller::call('auth@index');
$this->assertFalse($_SERVER['before']);
$this->assertFalse($_SERVER['after']);
}
/**
* Test that before filters can override the controller response.
*
* @group laravel
*/
public function testBeforeFiltersCanOverrideResponses()
{
$this->assertEquals('Filtered!', Controller::call('filter@login')->content);
}
/**
* Test that after filters do not affect the response.
*
* @group laravel
*/
public function testAfterFiltersDoNotAffectControllerResponse()
{
$this->assertEquals('action_logout', Controller::call('filter@logout')->content);
}
/**
* Test that filter parameters are passed to the filter.
*
* @group laravel
*/
public function testFilterParametersArePassedToTheFilter()
{
$this->assertEquals('12', Controller::call('filter@edit')->content);
}
/**
* Test that multiple filters can be assigned to a single method.
*
* @group laravel
*/
public function testMultipleFiltersCanBeAssignedToAnAction()
{
$_SERVER['test-multi-1'] = false;
$_SERVER['test-multi-2'] = false;
Controller::call('filter@save');
$this->assertTrue($_SERVER['test-multi-1']);
$this->assertTrue($_SERVER['test-multi-2']);
}
/**
* Test Restful controllers respond by request method.
*
* @group laravel
*/
public function testRestfulControllersRespondWithRestfulMethods()
{
Request::$foundation->setMethod('GET');
//$_SERVER['REQUEST_METHOD'] = 'GET';
$this->assertEquals('get_index', Controller::call('restful@index')->content);
//$_SERVER['REQUEST_METHOD'] = 'PUT';
Request::$foundation->setMethod('PUT');
$this->assertEquals(404, Controller::call('restful@index')->status());
//$_SERVER['REQUEST_METHOD'] = 'POST';
Request::$foundation->setMethod('POST');
$this->assertEquals('post_index', Controller::call('restful@index')->content);
}
/**
* Test that the template is returned by template controllers.
*
* @group laravel
*/
public function testTemplateControllersReturnTheTemplate()
{
$response = Controller::call('template.basic@index');
$home = file_get_contents(path('app').'views/home/index.php');
$this->assertEquals($home, $response->content);
}
/**
* Test that controller templates can be named views.
*
* @group laravel
*/
public function testControllerTemplatesCanBeNamedViews()
{
View::name('home.index', 'home');
$response = Controller::call('template.named@index');
$home = file_get_contents(path('app').'views/home/index.php');
$this->assertEquals($home, $response->content);
View::$names = array();
}
/**
* Test that the "layout" method is called on the controller.
*
* @group laravel
*/
public function testTheTemplateCanBeOverriden()
{
$this->assertEquals('Layout', Controller::call('template.override@index')->content);
}
/**
* Test the Controller::resolve method.
*
* @group laravel
*/
public function testResolveMethodChecksTheIoCContainer()
{
IoC::register('controller: home', function()
{
require_once path('app').'controllers/home.php';
$controller = new Home_Controller;
$controller->foo = 'bar';
return $controller;
});
$controller = Controller::resolve(DEFAULT_BUNDLE, 'home');
$this->assertEquals('bar', $controller->foo);
}
}
\ No newline at end of file
<?php namespace Laravel;
use Symfony\Component\HttpFoundation\LaravelRequest as RequestFoundation;
/**
* Stub the global setcookie method into the Laravel namespace.
*/
function setcookie($name, $value, $time, $path, $domain, $secure)
{
$_SERVER['cookie.stub'][$name] = compact('name', 'value', 'time', 'path', 'domain', 'secure');
}
function headers_sent()
{
return $_SERVER['function.headers_sent'];
}
class CookieTest extends \PHPUnit_Framework_TestCase {
/**
* Setup the test environment.
*/
public function setUp()
{
Cookie::$jar = array();
}
/**
* Tear down the test environment.
*/
public function tearDown()
{
Cookie::$jar = array();
}
/**
* Set one of the $_SERVER variables.
*
* @param string $key
* @param string $value
*/
protected function setServerVar($key, $value)
{
$_SERVER[$key] = $value;
$this->restartRequest();
}
/**
* Reinitialize the global request.
*
* @return void
*/
protected function restartRequest()
{
// FIXME: Ugly hack, but old contents from previous requests seem to
// trip up the Foundation class.
$_FILES = array();
Request::$foundation = RequestFoundation::createFromGlobals();
}
/**
* Test Cookie::has method.
*
* @group laravel
*/
public function testHasMethodIndicatesIfCookieInSet()
{
Cookie::$jar['foo'] = array('value' => 'bar');
$this->assertTrue(Cookie::has('foo'));
$this->assertFalse(Cookie::has('bar'));
Cookie::put('baz', 'foo');
$this->assertTrue(Cookie::has('baz'));
}
/**
* Test the Cookie::get method.
*
* @group laravel
*/
public function testGetMethodCanReturnValueOfCookies()
{
Cookie::$jar['foo'] = array('value' => 'bar');
$this->assertEquals('bar', Cookie::get('foo'));
Cookie::put('bar', 'baz');
$this->assertEquals('baz', Cookie::get('bar'));
}
/**
* Test Cookie::forever method.
*
* @group laravel
*/
public function testForeverShouldUseATonOfMinutes()
{
Cookie::forever('foo', 'bar');
$this->assertEquals('bar', Cookie::$jar['foo']['value']);
// Shouldn't be able to test this cause while we indicate -2000 seconds
// cookie expiration store timestamp.
// $this->assertEquals(525600, Cookie::$jar['foo']['expiration']);
$this->setServerVar('HTTPS', 'on');
Cookie::forever('bar', 'baz', 'path', 'domain', true);
$this->assertEquals('path', Cookie::$jar['bar']['path']);
$this->assertEquals('domain', Cookie::$jar['bar']['domain']);
$this->assertTrue(Cookie::$jar['bar']['secure']);
$this->setServerVar('HTTPS', 'off');
}
/**
* Test the Cookie::forget method.
*
* @group laravel
*/
public function testForgetSetsCookieWithExpiration()
{
Cookie::forget('bar', 'path', 'domain');
// Shouldn't be able to test this cause while we indicate -2000 seconds
// cookie expiration store timestamp.
//$this->assertEquals(-2000, Cookie::$jar['bar']['expiration']);
$this->assertEquals('path', Cookie::$jar['bar']['path']);
$this->assertEquals('domain', Cookie::$jar['bar']['domain']);
$this->assertFalse(Cookie::$jar['bar']['secure']);
}
}
\ No newline at end of file
<?php
class DatabaseTest extends PHPUnit_Framework_TestCase {
/**
* Set up the test environment.
*/
public function setUp()
{
DB::$connections = array();
}
/**
* Tear down the test environment.
*/
public function tearDown()
{
DB::$connections = array();
}
/**
* Test the DB::connection method.
*
* @group laravel
*/
public function testConnectionMethodReturnsConnection()
{
$connection = DatabaseConnectStub::connection();
$this->assertTrue(isset(DB::$connections[Config::get('database.default')]));
$connection = DatabaseConnectStub::connection('mysql');
$this->assertTrue(isset(DB::$connections['mysql']));
$this->assertEquals(DB::$connections['mysql']->pdo->laravel_config, Config::get('database.connections.mysql'));
}
/**
* Test the DB::profile method.
*
* @group laravel
*/
public function testProfileMethodReturnsQueries()
{
Laravel\Database\Connection::$queries = array('Taylor');
$this->assertEquals(array('Taylor'), DB::profile());
Laravel\Database\Connection::$queries = array();
}
/**
* Test the __callStatic method.
*
* @group laravel
*/
public function testConnectionMethodsCanBeCalledStaticly()
{
$this->assertEquals('sqlite', DB::driver());
}
}
class DatabaseConnectStub extends Laravel\Database {
protected static function connect($config) { return new PDOStub($config); }
}
class PDOStub extends PDO {
public $laravel_config;
public function __construct($config) { $this->laravel_config = $config; }
public function foo() { return 'foo'; }
}
\ No newline at end of file
<?php
class EventTest extends PHPUnit_Framework_TestCase {
/**
* Tear down the testing environment.
*/
public function tearDown()
{
unset(Event::$events['test.event']);
}
/**
* Test basic event firing.
*
* @group laravel
*/
public function testListenersAreFiredForEvents()
{
Event::listen('test.event', function() { return 1; });
Event::listen('test.event', function() { return 2; });
$responses = Event::fire('test.event');
$this->assertEquals(1, $responses[0]);
$this->assertEquals(2, $responses[1]);
}
/**
* Test parameters can be passed to event listeners.
*
* @group laravel
*/
public function testParametersCanBePassedToEvents()
{
Event::listen('test.event', function($var) { return $var; });
$responses = Event::fire('test.event', array('Taylor'));
$this->assertEquals('Taylor', $responses[0]);
}
}
\ No newline at end of file
<?php
use Laravel\Fluent;
class FluentTest extends PHPUnit_Framework_TestCase {
/**
* Test the Fluent constructor.
*
* @group laravel
*/
public function testAttributesAreSetByConstructor()
{
$array = array('name' => 'Taylor', 'age' => 25);
$fluent = new Fluent($array);
$this->assertEquals($array, $fluent->attributes);
}
/**
* Test the Fluent::get method.
*
* @group laravel
*/
public function testGetMethodReturnsAttribute()
{
$fluent = new Fluent(array('name' => 'Taylor'));
$this->assertEquals('Taylor', $fluent->get('name'));
$this->assertEquals('Default', $fluent->get('foo', 'Default'));
$this->assertEquals('Taylor', $fluent->name);
$this->assertNull($fluent->foo);
}
public function testMagicMethodsCanBeUsedToSetAttributes()
{
$fluent = new Fluent;
$fluent->name = 'Taylor';
$fluent->developer();
$fluent->age(25);
$this->assertEquals('Taylor', $fluent->name);
$this->assertTrue($fluent->developer);
$this->assertEquals(25, $fluent->age);
$this->assertInstanceOf('Laravel\\Fluent', $fluent->programmer());
}
}
\ No newline at end of file
<?php
class HashTest extends PHPUnit_Framework_TestCase {
/**
* Test the Hash::make method.
*
* @group laravel
*/
public function testHashProducesValidBcryptHash()
{
$this->assertTrue(strlen(Hash::make('taylor')) == 60);
}
/**
* Test the Hash::check method.
*
* @group laravel
*/
public function testHashCheckFailsWhenNotMatching()
{
$hash = Hash::make('taylor');
$this->assertFalse(Hash::check('foo', $hash));
}
/**
* Test the Hash::check method.
*
* @group laravel
*/
public function testHashCheckPassesWhenMatches()
{
$this->assertTrue(Hash::check('taylor', Hash::make('taylor')));
}
}
\ No newline at end of file
<?php
class InputTest extends PHPUnit_Framework_TestCase {
/**
* Setup the testing environment.
*/
public function setUp()
{
Config::set('application.key', 'foo');
}
/**
* Tear down the testing environemnt.
*/
public function tearDown()
{
// @todo clear httpfoundation request data
Config::set('application.key', '');
Session::$instance = null;
}
/**
* Test the Input::all method.
*
* @group laravel
*/
public function testAllMethodReturnsInputAndFiles()
{
Request::foundation()->request->add(array('name' => 'Taylor'));
$_FILES = array('age' => 25);
$this->assertEquals(Input::all(), array('name' => 'Taylor', 'age' => 25));
}
/**
* Test the Input::has method.
*
* @group laravel
*/
public function testHasMethodIndicatesTheExistenceOfInput()
{
$this->assertFalse(Input::has('foo'));
Request::foundation()->request->add(array('name' => 'Taylor'));
$this->assertTrue(Input::has('name'));
}
/**
* Test the Input::get method.
*
* @group laravel
*/
public function testGetMethodReturnsInputValue()
{
Request::foundation()->request->add(array('name' => 'Taylor'));
$this->assertEquals('Taylor', Input::get('name'));
$this->assertEquals('Default', Input::get('foo', 'Default'));
}
/**
* Test the Input::only method.
*
* @group laravel
*/
public function testOnlyMethodReturnsSubsetOfInput()
{
Request::foundation()->request->add(array('name' => 'Taylor', 'age' => 25));
$this->assertEquals(array('name' => 'Taylor'), Input::only(array('name')));
}
/**
* Test the Input::except method.
*
* @group laravel
*/
public function testExceptMethodReturnsSubsetOfInput()
{
Request::foundation()->request->add(array('name' => 'Taylor', 'age' => 25));
$this->assertEquals(array('age' => 25), Input::except(array('name')));
}
/**
* Test the Input::old method.
*
* @group laravel
*/
public function testOldInputCanBeRetrievedFromSession()
{
$this->setSession();
Session::$instance->session['data']['laravel_old_input'] = array('name' => 'Taylor');
$this->assertNull(Input::old('foo'));
$this->assertTrue(Input::had('name'));
$this->assertFalse(Input::had('foo'));
$this->assertEquals('Taylor', Input::old('name'));
}
/**
* Test the Input::file method.
*
* @group laravel
*/
public function testFileMethodReturnsFromFileArray()
{
$_FILES['foo'] = array('name' => 'Taylor', 'size' => 100);
$this->assertEquals('Taylor', Input::file('foo.name'));
$this->assertEquals(array('name' => 'Taylor', 'size' => 100), Input::file('foo'));
}
/**
* Test the Input::flash method.
*
* @group laravel
*/
public function testFlashMethodFlashesInputToSession()
{
$this->setSession();
$input = array('name' => 'Taylor', 'age' => 25);
Request::foundation()->request->add($input);
Input::flash();
$this->assertEquals($input, Session::$instance->session['data'][':new:']['laravel_old_input']);
Input::flash('only', array('name'));
$this->assertEquals(array('name' => 'Taylor'), Session::$instance->session['data'][':new:']['laravel_old_input']);
Input::flash('except', array('name'));
$this->assertEquals(array('age' => 25), Session::$instance->session['data'][':new:']['laravel_old_input']);
}
/**
* Test the Input::flush method.
*
* @group laravel
*/
public function testFlushMethodClearsFlashedInput()
{
$this->setSession();
$input = array('name' => 'Taylor', 'age' => 30);
Request::foundation()->request->add($input);
Input::flash();
$this->assertEquals($input, Session::$instance->session['data'][':new:']['laravel_old_input']);
Input::flush();
$this->assertEquals(array(), Session::$instance->session['data'][':new:']['laravel_old_input']);
}
/**
* Set the session payload instance.
*/
protected function setSession()
{
$driver = $this->getMock('Laravel\\Session\\Drivers\\Driver');
Session::$instance = new Laravel\Session\Payload($driver);
}
}
\ No newline at end of file
<?php
class IoCTest extends PHPUnit_Framework_TestCase {
/**
* Test IoC::register and IoC::resolve.
*
* @group laravel
*/
public function testRegisteredClassCanBeResolved()
{
IoC::register('foo', function()
{
return 'Taylor';
});
$this->assertEquals('Taylor', IoC::resolve('foo'));
}
/**
* Test that singletons are created once.
*
* @group laravel
*/
public function testSingletonsAreCreatedOnce()
{
IoC::singleton('foo', function()
{
return new StdClass;
});
$object = IoC::resolve('foo');
$this->assertTrue($object === IoC::resolve('foo'));
}
/**
* Test the IoC::instance method.
*
* @group laravel
*/
public function testInstancesAreReturnedBySingleton()
{
$object = new StdClass;
IoC::instance('bar', $object);
$this->assertTrue($object === IoC::resolve('bar'));
}
/**
* Test the IoC::registered method.
*/
public function testRegisteredMethodIndicatesIfRegistered()
{
IoC::register('foo', function() {});
$this->assertTrue(IoC::registered('foo'));
$this->assertFalse(IoC::registered('baz'));
}
/**
* Test the IoC::controller method.
*
* @group laravel
*/
public function testControllerMethodRegistersAController()
{
IoC::register('controller: ioc.test', function() {});
$this->assertTrue(IoC::registered('controller: ioc.test'));
}
}
\ No newline at end of file
<?php
class LangTest extends PHPUnit_Framework_TestCase {
/**
* Test the Lang::line method.
*
* @group laravel
*/
public function testGetMethodCanGetFromDefaultLanguage()
{
$validation = require path('app').'language/en/validation.php';
$this->assertEquals($validation['required'], Lang::line('validation.required')->get());
$this->assertEquals('Taylor', Lang::line('validation.foo')->get(null, 'Taylor'));
}
/**
* Test the Lang::line method.
*
* @group laravel
*/
public function testGetMethodCanGetLinesForAGivenLanguage()
{
$validation = require path('app').'language/sp/validation.php';
$this->assertEquals($validation['required'], Lang::line('validation.required')->get('sp'));
}
/**
* Test the __toString method.
*
* @group laravel
*/
public function testLineCanBeCastAsString()
{
$validation = require path('app').'language/en/validation.php';
$this->assertEquals($validation['required'], (string) Lang::line('validation.required'));
}
/**
* Test that string replacements are made on lines.
*
* @group laravel
*/
public function testReplacementsAreMadeOnLines()
{
$validation = require path('app').'language/en/validation.php';
$line = str_replace(':attribute', 'e-mail', $validation['required']);
$this->assertEquals($line, Lang::line('validation.required', array('attribute' => 'e-mail'))->get());
}
/**
* Test the Lang::has method.
*
* @group laravel
*/
public function testHasMethodIndicatesIfLangaugeLineExists()
{
$this->assertTrue(Lang::has('validation'));
$this->assertTrue(Lang::has('validation.required'));
$this->assertFalse(Lang::has('validation.foo'));
}
}
\ No newline at end of file
<?php
class MessagesTest extends PHPUnit_Framework_TestCase {
/**
* The Messages instance.
*
* @var Messages
*/
public $messages;
/**
* Setup the test environment.
*/
public function setUp()
{
$this->messages = new Laravel\Messages;
}
/**
* Test the Messages::add method.
*
* @group laravel
*/
public function testAddingMessagesDoesNotCreateDuplicateMessages()
{
$this->messages->add('email', 'test');
$this->messages->add('email', 'test');
$this->assertCount(1, $this->messages->messages);
}
/**
* Test the Messages::add method.
*
* @group laravel
*/
public function testAddMethodPutsMessageInMessagesArray()
{
$this->messages->add('email', 'test');
$this->assertArrayHasKey('email', $this->messages->messages);
$this->assertEquals('test', $this->messages->messages['email'][0]);
}
/**
* Test the Messages::has method.
*
* @group laravel
*/
public function testHasMethodReturnsTrue()
{
$this->messages->add('email', 'test');
$this->assertTrue($this->messages->has('email'));
}
/**
* Test the Messages::has method.
*
* @group laravel
*/
public function testHasMethodReturnsFalse()
{
$this->assertFalse($this->messages->has('something'));
}
/**
* Test the Messages::first method.
*
* @group laravel
*/
public function testFirstMethodReturnsSingleString()
{
$this->messages->add('email', 'test');
$this->assertEquals('test', $this->messages->first('email'));
$this->assertEquals('', $this->messages->first('something'));
}
/**
* Test the Messages::get method.
*
* @group laravel
*/
public function testGetMethodReturnsAllMessagesForAttribute()
{
$messages = array('email' => array('something', 'else'));
$this->messages->messages = $messages;
$this->assertEquals(array('something', 'else'), $this->messages->get('email'));
}
/**
* Test the Messages::all method.
*
* @group laravel
*/
public function testAllMethodReturnsAllErrorMessages()
{
$messages = array('email' => array('something', 'else'), 'name' => array('foo'));
$this->messages->messages = $messages;
$this->assertEquals(array('something', 'else', 'foo'), $this->messages->all());
}
/**
* Test the Messages::get method.
*
* @group laravel
*/
public function testMessagesRespectFormat()
{
$this->messages->add('email', 'test');
$this->assertEquals('<p>test</p>', $this->messages->first('email', '<p>:message</p>'));
$this->assertEquals(array('<p>test</p>'), $this->messages->get('email', '<p>:message</p>'));
$this->assertEquals(array('<p>test</p>'), $this->messages->all('<p>:message</p>'));
}
}
\ No newline at end of file
<?php
class QueryTest extends PHPUnit_Framework_TestCase {
/**
* Test the "find" method.
*
* @group laravel
*/
public function testFindMethodCanReturnByID()
{
$this->assertEquals('taylor@example.com', $this->query()->find(1)->email);
}
/**
* Test the select method.
*
* @group laravel
*/
public function testSelectMethodLimitsColumns()
{
$result = $this->query()->select(array('email'))->first();
$this->assertTrue(isset($result->email));
$this->assertFalse(isset($result->name));
}
/**
* Test the raw_where method.
*
* @group laravel
*/
public function testRawWhereCanBeUsed()
{
}
/**
* Get the query instance for the test case.
*
* @return Query
*/
protected function query()
{
return DB::table('query_test');
}
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment