laravel 0.5.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -16,6 +16,3 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  .rvmrc
19
- repositories/*
20
- !.gitkeep
21
- __tests
data/README.md CHANGED
@@ -29,11 +29,11 @@ Or install it yourself as:
29
29
  ### Create a new Laravel application
30
30
 
31
31
  Laravel gem has a caching mechanism in-built, which allows to keep a local
32
- copy when you use the remote repositories for the first time. After this,
33
- whenever you use the remote repository again, it will only update the local
32
+ copy when you use a repository for the first time. After this, whenever you
33
+ use that repository again, it will only update the local copy of the
34
34
  repository (as opposed to a fresh git clone, which is considerably slow for
35
- certain connections). This will, further, allow you to install Laravel
36
- applications even when you are not connected to the Internet.
35
+ certain connections). This will, allow you to install Laravel applications
36
+ even when you are not connected to the Internet.
37
37
 
38
38
  Since, you can specify which git repository to use to fetch the Laravel
39
39
  source, you can create new Laravel application based on your own or someone
@@ -42,61 +42,55 @@ cached!
42
42
 
43
43
  # use default settings (fetches source from http://github.com/laravel/laravel.git)
44
44
  laravel new my_app
45
+ laravel new my_app --[no-]force # force overwrite
46
+ laravel new my_app --[no-]perms # (default) make "storage" directory world-writable
45
47
 
46
- # force a clean install on existing directory
47
- laravel new my_app --force
48
+ # use a specified repository
49
+ laravel new my_app --sourec=./src/laravel # relative directory
50
+ laravel new my_app --source=/usr/src/local # absolute directory
51
+ laravel new my_app --source="http://github.com/user/my_laravel_fork # a git repository
48
52
 
49
- # use an existing (already downloaded) source
50
- laravel new my_app --local=/usr/src/laravel
53
+ ### Create a customized Laravel application
51
54
 
52
- # use a remote repository
53
- laravel new my_app --remote="http://github.com/user/my_laravel_fork"
55
+ When creating a new Laravel application, we can define configuration settings
56
+ using the '--config' flag. We can pass a comma-separated list of
57
+ `setting:value` pairs, like the following. Note that, you can generate a new
58
+ application key by, simply, passing `key` instead of `key:some_fixed_key`.
54
59
 
55
- # use default settings and update Application Index
56
- laravel new my_app --index='home.php'
57
-
58
- # use default settings and generate a new key
59
- laravel new my_app --key
60
-
61
- # use default settings but do not update permissions on storage/ directory
62
- laravel new my_app --no-perms
63
-
64
- # use default settings and download Laravel Generator by Jeffrey Way
65
- laravel new my_app --generator
60
+ # generate a new key, set index to empty and turn on the profiler
61
+ laravel new my_app --config=key,index:'',profiler:on
62
+
63
+ # use a key, set index to "home.php", and update application's language to 'hi'
64
+ laravel new my_app --config=key:fixed_string,index:home.php,language:hi
66
65
 
67
66
  # the settings I use:
68
- laravel new my_app --key --generator --index=''
67
+ laravel new my_app --config=key,index:''
69
68
  ## this creates a Laravel application from the official repository,
70
69
  ## sets the Application Index to blank, makes the storage directory
71
- ## world-writable, generates a new key for the application and finally
72
- ## sets up the :generate tasks by downloading Laravel Generator.
70
+ ## world-writable, generates a new key for the application.
73
71
  ## Furthermore, this creates the local cache for the official repository
74
72
  ## which makes the future installs quite faster :)
75
73
 
76
74
  ### In an existing Laravel application
77
75
 
78
76
  # update Application Index for the application
79
- laravel config index '' # removes application index for app in current directory
80
- laravel config index 'home.php' --app=./new_app # update for app in specified directory
77
+ laravel config update index '' # removes application index for app in current directory
78
+ laravel config update index 'home.php' --app=./new_app # update for app in specified directory
81
79
 
82
80
  # generate a new key for the application
83
- laravel config key # generates key for app in current directory
84
- laravel config key --app=./new_app # generate key for app in specified directory
81
+ laravel config update key # generates key for app in current directory
82
+ laravel config update key 'fixed_string' --app=./new_app # set a key for app in specified directory
85
83
 
86
- # download the Laravel generator by Jeffrey Way
87
- laravel install generator --app=./new_app
88
-
89
84
  ### Help
90
85
 
91
86
  laravel help
92
87
 
93
88
  ## Coming Soon..
94
89
  # create and customize a new Laravel application
95
- <del>laravel new my_app --index='' # set application index to blank</del>
96
- <del>laravel new my_app --key # generate a new key</del>
97
- <del>laravel new my_app --[no-]generator # download the Laravel Generator by Jeffrey Way</del>
90
+ <del>laravel new my_app --config:index='' # set application index to blank</del>
91
+ <del>laravel new my_app --config:key # generate a new key</del>
92
+ laravel new my_app --[no-]generator # download the Laravel Generator by Jeffrey Way
98
93
  laravel new my_app --database=db_my_app # create a database, defaults to app name
99
- laravel new my_app --bundles=sentry,bob # install the provided bundles
100
94
 
101
95
  ## Contributing
102
96
 
data/Rakefile CHANGED
@@ -2,8 +2,9 @@ require "bundler/gem_tasks"
2
2
  require 'cucumber'
3
3
  require 'cucumber/rake/task'
4
4
 
5
+ # setup some default rake tasks using cucumber
5
6
  Cucumber::Rake::Task.new(:features) do |t|
6
- t.cucumber_opts = "features --format pretty"
7
+ t.cucumber_opts = "features --format progress --tags=~@php"
7
8
  end
8
9
 
9
10
  task :default => :features
@@ -5,32 +5,57 @@ module Laravel
5
5
  # This class inherits from thor and can be used to configure
6
6
  # various options in the application/config/application.php file.
7
7
  class Config < Thor
8
- class_option :debug, :type => :boolean
9
-
10
8
  # This class-wide option specifies the application directory to use.
11
9
  # By default, this is the path to the current directory.
12
10
  class_option :app, :type => :string, :aliases => "-a",
13
11
  :desc => "use the specified Laravel application instead of current directory"
14
12
 
15
- # This task updates the Application Index for an application.
13
+ # Enable debugger by passing this switch
14
+ class_option :debug, :type => :boolean
15
+
16
+ # This task update a configuration setting for an existing application.
17
+ # By default, it updates configuration for the application in the current
18
+ # directory, but this can be overridden by passing +app+ option. It takes
19
+ # a KEY and a VALUE pair and updates the configuration specified by KEY
20
+ # to VALUE.
16
21
  #
17
- desc "index [NEW_INDEX]", "modify the Application Index for Laravel application"
18
- def index(new_index)
19
- @config = Laravel::Configuration.new(options[:app])
22
+ # ==== Parameters
23
+ # +key+ :: [STRING] name of a configuration setting found in the
24
+ # application/config/application.php file. It can be one of the
25
+ # following values: url, asset_url, index, key, profiler,
26
+ # encoding, language, or ssl.
27
+ # Settings: languages and aliases are not supported.
28
+ # +value+ :: [STRING] updated value for this configuration setting.
29
+ # Configurations that take a boolean value (currently, profiler
30
+ # and ssl) can take one of the following values to specify truth:
31
+ # active, on, activated, enable, enabled, true or 1 - everything
32
+ # else specifies a falsy value.
33
+ desc "update [KEY] [VALUE]", "update the configuration [KEY] to [VALUE]"
34
+ def update(key, value="")
20
35
  begin
21
- @config.update_index new_index
36
+ config = Laravel::Configuration.new(options[:app])
37
+ config.update key, value
22
38
  rescue StandardError => e
23
39
  Laravel::handle_error e, options[:debug]
24
40
  end
25
41
  end
26
42
 
27
- # This task generates a new key for our application.
43
+ # This task reads the current value of a configuration setting for an
44
+ # existing application. By default, it reads configuration for the
45
+ # application in the current directory, but this can be overridden by
46
+ # passing +app+ option.
28
47
  #
29
- desc "key", "generate a new key for Laravel application"
30
- def key(value=nil)
31
- @config = Laravel::Configuration.new(options[:app])
48
+ # ==== Parameters
49
+ # +key+ :: [STRING] name of a configuration setting found in the
50
+ # application/config/application.php file. It can be one of the
51
+ # following values: url, asset_url, index, key, profiler,
52
+ # encoding, language, or ssl.
53
+ # Settings: languages and aliases are not supported.
54
+ desc "get [KEY]", "retrieve the configuration [KEY]"
55
+ def get(key)
32
56
  begin
33
- @config.update_key
57
+ config = Laravel::Configuration.new(options[:app])
58
+ config.read key
34
59
  rescue StandardError => e
35
60
  Laravel::handle_error e, options[:debug]
36
61
  end
@@ -1,7 +1,5 @@
1
1
  module Laravel
2
2
  class CLI < Thor
3
- class_option :debug, :type => :boolean
4
-
5
3
  # This task creates a new application based on Laravel framework. By
6
4
  # default, it simply copies a Laravel source to the path specified as the
7
5
  # argument. However, this method is heavily customizable and allows us to
@@ -23,8 +21,7 @@ module Laravel
23
21
  # +force+ :: [BOOLEAN] If we can not create an application at the specified path since it
24
22
  # already exists or is not empty, passing this parameter will force us to create
25
23
  # a new application, by first removing all the files inside the specified path.
26
- # +index+ :: [STRING] If provided, updates the Application Index to this string.
27
- # +key+ :: [BOOLEAN] If provided, generates a new key for our application.
24
+ # +config+ :: [STRING] A comma-separated list of `key-value` pairs - read docs for more information
28
25
  # +generator+:: [BOOLEAN] If provided, this downloads the Laravel Generator by Jeffrey Way.
29
26
  #
30
27
  desc "new [MY_APP]", "create a new Laravel application"
@@ -33,20 +30,17 @@ module Laravel
33
30
  :desc => "use this git repository - can be a directory or a URL"
34
31
  method_option :perms, :type => :boolean, :default => true,
35
32
  :desc => "default | update permissions on storage/ directory"
36
- method_option :index, :type => :string, :aliases => "-i",
37
- :desc => "change the Application Index"
38
- method_option :key, :type => :boolean, :aliases => "-k",
39
- :desc => "generate a new key for this application"
33
+ method_option :config, :type => :string, :aliases => "-c",
34
+ :desc => "configure the application using semi-colon separated list (read docs)"
40
35
  method_option :generator, :type => :boolean, :aliases => "-g",
41
36
  :desc => "get the Laravel generator by Jeffrey Way"
37
+ method_option :debug, :type => :boolean
38
+
42
39
  def new(app_name)
43
- app = Laravel::App.new(app_name, options)
44
40
  begin
45
- app.create
41
+ Laravel::App.new(app_name, options).create
46
42
  rescue StandardError => e
47
43
  Laravel::handle_error e, options[:debug]
48
- rescue Exception => e
49
- Laravel::handle_error e, options[:debug]
50
44
  end
51
45
  end
52
46
 
@@ -14,7 +14,6 @@ require "laravel" # which indirectly requires 'thor'
14
14
  # require our commands
15
15
  require "commands/new"
16
16
  require "commands/config"
17
- require "commands/install"
18
17
 
19
18
  module Laravel
20
19
  # A means to create and manage applications based on the Laravel
@@ -26,7 +25,7 @@ module Laravel
26
25
  default_task :version
27
26
 
28
27
  # map some inputs to tasks
29
- map "-T" => "help", "-C" => "config", "-I" => "install", "-N" => "new"
28
+ map "-T" => "help", "-C" => "config"
30
29
 
31
30
  # config subcommand that manipulates app configuration
32
31
  #
@@ -35,13 +34,6 @@ module Laravel
35
34
  desc "config [COMMAND]", "configure an existing application"
36
35
  subcommand "config", Laravel::Commands::Config
37
36
 
38
- # install subcommand that gets us some bundles and goodies
39
- #
40
- # +command+ :: subcommand to run.
41
- #
42
- desc "install [COMMAND]", "install bundles and other goodies"
43
- subcommand "install", Laravel::Commands::Install
44
-
45
37
  # display version information for this gem but is a hidden task,
46
38
  # which means that it will not be shown in the 'help' overview.
47
39
  #
@@ -54,6 +46,24 @@ module Laravel
54
46
  # puts "Made possible by efforts of Laravel Community"
55
47
  end
56
48
 
49
+ # run an artisan command using this gem
50
+ #
51
+ # +command+ :: command to run using artisan
52
+ #
53
+ method_option :app, :type => :string, :aliases => "-a",
54
+ :desc => "use the specified Laravel application instead of curernt directory"
55
+ method_option :debug, :type => :boolean
56
+ desc "do [COMMAND]", "run an 'artisan' command"
57
+ def do(*args)
58
+ begin
59
+ command = args.join ' '
60
+ app = Laravel::App.new options[:app]
61
+ app.artisan command
62
+ rescue StandardError => e
63
+ Laravel::handle_error e, options[:debug]
64
+ end
65
+ end
66
+
57
67
  end
58
68
  end
59
69
 
@@ -0,0 +1,13 @@
1
+ Feature: Basic configurations and testing
2
+ In order to release the gem
3
+ As an author of this gem
4
+ I want to test basic configuration for this gem
5
+
6
+ @release
7
+ Scenario: Release the gem
8
+ Given I want to make sure everything runs before releasing the gem
9
+ Then the working directory should not be dirty
10
+ And the version should be updated
11
+ And the readme should be updated with new information
12
+ And the directory with laravel data should not exist
13
+ And snapshotted git commits should not exist
@@ -4,11 +4,33 @@ Feature: Create a new application with maximum customizations
4
4
  I want to use Laravel gem to setup a new application with maximum customizations
5
5
 
6
6
  Scenario: create Laravel application with maximum customizations
7
- Given I want to create an application forcefully
8
- And I want to use "http://github.com/laravel/pastes" as source
7
+ Given no application has been created using "http://github.com/laravel/laravel" as source
8
+ And I want to create an application forcefully
9
+ And I want to use "http://github.com/laravel/laravel" as source
9
10
  And I want to generate a new key
10
- And I want to use "home.php" as application index
11
+ And I want to use "home.php" as application "index"
12
+ And I want to "enable" the "profiler"
13
+ And I want to "disable" the "ssl"
14
+ And I want to use "hi" as the "language"
15
+ And I want to use "http://pastes.laravel.com" as the application "url"
11
16
  When I create an application with above requirements
12
17
  Then application should be ready for development
13
18
  And a new application key should be generated
14
- And the application index should be updated to "home.php"
19
+ And the application "index" should be updated to "home.php"
20
+ And the application "url" should be updated to "http://pastes.laravel.com"
21
+ And the "ssl" should be turned off
22
+ And the "profiler" should be turned on
23
+ And the "language" should be updated to "hi"
24
+
25
+ Scenario: CLI UI
26
+ Given applications have been created using "http://github.com/laravel/laravel" as source
27
+ When I run `laravel new my_app --force --config=index:'',key --source=http://github.com/laravel/laravel`
28
+ Then I should not fail while doing so
29
+ And I should see "forcefully"
30
+ And I should see "exists in local cache"
31
+ And I should see "Updating local cache"
32
+ And I should see "Cloned"
33
+ And I should see "Updated permissions"
34
+ And I should see "Updated configuration: index => __empty_string"
35
+ And I should see "Updated configuration: key"
36
+ And I should see "Hurray!"
@@ -8,10 +8,76 @@ Feature: Configure an existing Laravel application
8
8
  When I create this application
9
9
  Then the application should be ready for development
10
10
 
11
+ Scenario: update Application's URL
12
+ When I run `laravel config update url "http://laravel.com"` inside this application
13
+ Then the application "url" should be updated to "http://laravel.com"
14
+
15
+ Scenario: update Application's asset URL
16
+ When I run `laravel config update asset_url "http://laravel.com"` inside this application
17
+ Then "asset_url" should be updated to "http://laravel.com"
18
+
19
+ Scenario: update Application Index
20
+ When I run `laravel config update index "home.php"` inside this application
21
+ Then the application "index" should be updated to "home.php"
22
+
11
23
  Scenario: generate a new key for a Laravel application
12
- When I generate a new key for this application
13
- Then a new application key should be generated
24
+ When I run `laravel config update key` inside this application
25
+ Then an application key should be generated
26
+
27
+ Scenario: set a fixed key for a Laravel application
28
+ When I run `laravel config update key my_special_key` inside this application
29
+ Then the application "key" should be updated to "my_special_key"
30
+
31
+ Scenario: turn on/off the profiler for the application
32
+ When I run `laravel config update profiler active` inside this application
33
+ Then the "profiler" should be turned on
34
+
35
+ Scenario: turn on/off the ssl
36
+ When I run `laravel config update ssl enabled` inside this application
37
+ Then the "ssl" should be turned on
38
+
39
+ Scenario: update Application's language
40
+ When I run `laravel config update language hi` inside this application
41
+ Then the "language" should be updated to "hi"
42
+
43
+ Scenario: update Application's encoding
44
+ When I run `laravel config update encoding "US-ASCII"` inside this application
45
+ Then the "encoding" should be updated to "US-ASCII"
46
+
47
+ Scenario: update Application's timezone
48
+ When I run `laravel config update timezone "UTC+5:30"` inside this application
49
+ Then the "timezone" should be updated to "UTC+5:30"
50
+
51
+ Scenario: update supported languages
52
+ When I run `laravel config update languages "array('hi', 'en')"` inside this application
53
+ Then I should fail while doing so
54
+
55
+ Scenario: configuration that are boolean can take multiple arguments
56
+ # on/off
57
+ When I run `laravel config update profiler on` inside this application
58
+ Then the "profiler" should be turned on
59
+ When I run `laravel config update ssl off` inside this application
60
+ Then the "ssl" should be turned off
61
+ # yes/no
62
+ When I run `laravel config update ssl yes` inside this application
63
+ Then the "ssl" should be turned on
64
+ When I run `laravel config update profiler no` inside this application
65
+ Then the "profiler" should be turned off
66
+ # active/inactive
67
+ When I run `laravel config update ssl active` inside this application
68
+ Then the "ssl" should be turned on
69
+ When I run `laravel config update profiler inactive` inside this application
70
+ Then the "profiler" should be turned off
71
+ # enabled/disabled
72
+ When I run `laravel config update profiler enabled` inside this application
73
+ Then the "profiler" should be turned on
74
+ When I run `laravel config update ssl disabled` inside this application
75
+ Then the "ssl" should be turned off
14
76
 
15
- Scenario: update Application Index in a Laravel application
16
- When I udpate application index to "home.php"
17
- Then the application index should be updated to "home.php"
77
+ Scenario: can read configuration settings
78
+ When I run `laravel config update url "http://laravel.com"` inside this application
79
+ And I run `laravel config get url` inside this application
80
+ Then I should see "Configuration: url => 'http://laravel.com'"
81
+ When I run `laravel config update profiler false` inside this application
82
+ And I run `laravel config get profiler` inside this application
83
+ Then I should see "Configuration: profiler => false"
@@ -0,0 +1,14 @@
1
+ Feature: Run artisan commands via gem
2
+ In order to use the artisan command-line tool
3
+ As a PHP developer acquinted with ruby
4
+ I want to use the Laravel gem to call artisan commands
5
+
6
+ Background: An application based on Laravel framework exists
7
+ Given I want to create a new application
8
+ When I create this application
9
+ Then the application should be ready for development
10
+
11
+ @php
12
+ Scenario: run application tests using artisan
13
+ When I run `laravel do test` inside this application
14
+ Then I should see "PHPUnit"
@@ -0,0 +1,72 @@
1
+ # failure?
2
+ Then /^I should( not)? fail (?:in|when|while|for) doing so$/ do |negate|
3
+ step "the stdout should#{negate} contain \"Failed\""
4
+ step "the stdout should not contain \"ERROR\"" if negate
5
+ end
6
+
7
+ # error?
8
+ Then /^I should( not)? (?:get|see) an error$/ do |negate|
9
+ step "the stdout should#{negate} contain \"ERROR\""
10
+ end
11
+
12
+ # CLI output
13
+ Then /^I should see "(.*?)"$/ do |string|
14
+ step "the stdout should contain \"#{string}\""
15
+ end
16
+
17
+ # S_0__release
18
+ # These tests are only run when we plan for releasing the gem, and hence,
19
+ # we are running the full test suite.
20
+ Given /^I want to make sure everything runs before releasing (?:|the |this )gem$/ do
21
+ data_dir = File.expand_path(File.join(ENV['HOME'], ".laravel"))
22
+ FileUtils.rm_rf data_dir
23
+ end
24
+
25
+ # remind me if I have not updated the README.md before a release
26
+ # I create 'feature' branches, which I then merge with 'develop' branch.
27
+ # Hence, README.md should be updated with details of the new feature.
28
+ Then /^the readme should( not)? be updated with new information$/ do |negate|
29
+ last_tag = `git tag | tail -1`.strip
30
+ actual = `git diff #{last_tag}..HEAD -- README.md`.strip
31
+ expected = !negate
32
+ message = "README.md to be updated with new information"
33
+ unexpected? actual, expected, message
34
+ end
35
+
36
+ # remind me if I have not updated the version string before a release
37
+ Then /^the version should be updated$/ do
38
+ current = "v#{Laravel::VERSION}"
39
+ all_tags = `git tag`.split("\n").map {|t| t.strip}
40
+ exists = all_tags.include? current
41
+ message = "laravel version to be #{current} for this release"
42
+ unexpected_if exists, message
43
+ end
44
+
45
+ # make sure no local cache exists before we run the full test suite
46
+ Then /^the directory with laravel data should( not)? exist$/ do |negate|
47
+ data_dir = File.expand_path(File.join(ENV['HOME'], ".laravel"))
48
+ actual = File.directory?(data_dir)
49
+ expected = !negate
50
+ message = "#{data_dir} to exist"
51
+ unexpected? actual, expected, message
52
+ end
53
+
54
+ # remind me if the working directory is not clean
55
+ Then /^the working directory should( not)? be dirty$/ do |negate|
56
+ actual = `git status --porcelain`.strip
57
+ expected = !negate
58
+ message = "working directory to be dirty"
59
+ unexpected? actual, expected, message
60
+ end
61
+
62
+ # I have a habit of making quick commits marked by 'snapped' or 'snapshot(|s|ing)'
63
+ # whenever I leave my desk for some personal work.
64
+ # This quickly reminds me if such commits are present in the commit history.
65
+ Then /^snapshotted git commits should( not)? exist$/ do |negate|
66
+ snapped = `git log develop.. | grep 'snapped'`.strip
67
+ snapshot = `git log develop.. | grep 'snapshot'`.strip
68
+ actual = snapped || snapshot
69
+ expected = !negate
70
+ message = "commit history to contain snapshots"
71
+ unexpected? actual, expected, message
72
+ end