contao 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,13 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - rbx-19mode
6
+ - jruby-19mode
7
+ matrix:
8
+ allow_failures:
9
+ - rvm: rbx-19mode # We have some failing specs we need to take care of
10
+ - rvm: jruby-19mode # This is more complicated as we need the oily_ong gem but it doesn't work for Jruby
11
+ notifications:
12
+ recipients:
13
+ - wael.nasreddine@gmail.com
data/README.md CHANGED
@@ -1,24 +1,113 @@
1
1
  # Contao
2
2
 
3
- TODO: Write a gem description
3
+ Welcome to Contao!
4
+ [![Build
5
+ Status](https://secure.travis-ci.org/TechnoGate/contao.png?branch=master)](http://travis-ci.org/TechnoGate/contao)
6
+ [![Gemnasium](https://gemnasium.com/TechnoGate/contao.png)](https://gemnasium.com/TechnoGate/contao)
4
7
 
5
- ## Installation
8
+ This gem will help you to quickly generate an application using [Contao
9
+ CMS](http://www.contao.org/en/) which has pre-built support for Sass,
10
+ Compass, CoffeeScript, Jasmine and Capistrano.
11
+
12
+ It also feature hashed assets served by the [Contao Assets
13
+ extension](https://github.com/TechnoGate/contao_assets), which allows you
14
+ to have an md5 appended to each of your assets URL on the production
15
+ site.
16
+
17
+ The integration with Capistrano allows you to quickly deploy, copy
18
+ assets, import database and even upload media such as images and PDFs
19
+ all from the command line using Capistrano.
20
+
21
+ ## Pre-requisites
22
+
23
+ Before installing the gem, you need to make you are running on a Ruby
24
+ version 1.9.2 or greater as this Gem and most of it's dependencies do
25
+ not support Ruby 1.8, to check the version you are running, uee the
26
+ following command:
6
27
 
7
- Add this line to your application's Gemfile:
28
+ ```bash
29
+ ruby --version
30
+ ```
8
31
 
9
- gem 'contao'
32
+ If you're running a ruby version below 1.9, please install a 1.9 version
33
+ by following the guide at the [Rbenv
34
+ Installer](https://github.com/fesplugas/rbenv-installer) project.
10
35
 
11
- And then execute:
36
+ ## Installation
12
37
 
13
- $ bundle
38
+ Install contao with the following command
14
39
 
15
- Or install it yourself as:
40
+ ```ruby
41
+ gem install contao
42
+ ```
16
43
 
17
- $ gem install contao
44
+ Don't forget to run `rbenv rehash` if you are using
45
+ **[rbenv](https://github.com/sstephenson/rbenv)** as this gem provides
46
+ an executable.
18
47
 
19
48
  ## Usage
20
49
 
21
- TODO: Write usage instructions here
50
+ ### Generating a config file
51
+
52
+ To start using contao, you need to generate a config file, issue the
53
+ command
54
+
55
+ ```bash
56
+ contao generate config
57
+ ```
58
+
59
+ and follow the on-screen instructions.
60
+
61
+ ### Generate a new project
62
+
63
+ Generating a new project is very easy, just use the following command:
64
+
65
+ ```bash
66
+ contao new /path/to/my_project
67
+ ```
68
+
69
+ This command will generate an application called `my\_project` in the
70
+ folder `/path/to`, the application name is very important as it defaults
71
+ to the name of your database, check the [Database name](#database-name)
72
+ section below for more information.
73
+
74
+ ### Initialising the project
75
+
76
+ Once the project generator has completed, cd into the newsly created
77
+ project and bootstrap contao by running
78
+
79
+ ```bash
80
+ bundle exec rake contao:bootstrap
81
+ ```
82
+
83
+ Now visit `/contao/install.php` or just visit the website and you should
84
+ be redirected to the Installation script, from here on it is the usual
85
+ Contao installation procedure, please check [Contao's user
86
+ guide](http://www.contao.org/en/installing-contao.html#install-tool) for
87
+ detailed information
88
+
89
+ ### Work on the project
90
+
91
+ To be able to develop with this version of Contao, you first need to
92
+ understand how it actually works.
93
+
94
+ TODO: Continue this section
95
+
96
+ ## Database name
97
+
98
+ Locally, the database name is the same as the application name, so if
99
+ you named your project is named **my_project**, the database name will be
100
+ named **my_project**.
101
+
102
+ On the server, Capistrano will append the environment on which the
103
+ deployment occured (check the deployment section below for more
104
+ information) to the application name, so if your project is named
105
+ **my_project** and you are deployment to the staging environment, the
106
+ database name would default to **my_project_staging**
107
+
108
+ ## Deploying
109
+
110
+ TODO: Write this section
22
111
 
23
112
  ## Contributing
24
113
 
@@ -27,3 +116,44 @@ TODO: Write usage instructions here
27
116
  3. Commit your changes (`git commit -am 'Added some feature'`)
28
117
  4. Push to the branch (`git push origin my-new-feature`)
29
118
  5. Create new Pull Request
119
+
120
+ Or
121
+
122
+ [![Click here to lend your support to: Open Source Projects and make a donation at www.pledgie.com!](http://pledgie.com/campaigns/16123.png?skin_name=chrome)](http://www.pledgie.com/campaigns/16123)
123
+
124
+ ## Contact
125
+
126
+ For bugs and feature request, please use __Github issues__, for other
127
+ requests, you may use:
128
+
129
+ - [Google Groups](http://groups.google.com/group/janus-vimius)
130
+ - [Github private message](https://github.com/inbox/new/eMxyzptlk)
131
+ - Email: [contact@technogate.fr](mailto:contact@technogate.fr)
132
+
133
+ Don't forget to follow me on [Github](https://github.com/eMxyzptlk) and
134
+ [Twitter](https://twitter.com/eMxyzptlk) for news and updates.
135
+
136
+ ## License
137
+
138
+ ### This code is free to use under the terms of the MIT license.
139
+
140
+ Copyright (c) 2011 TechnoGate <support@technogate.fr>
141
+
142
+ Permission is hereby granted, free of charge, to any person obtaining
143
+ a copy of this software and associated documentation files (the
144
+ "Software"), to deal in the Software without restriction, including
145
+ without limitation the rights to use, copy, modify, merge, publish,
146
+ distribute, sublicense, and/or sell copies of the Software, and to
147
+ permit persons to whom the Software is furnished to do so, subject to
148
+ the following conditions:
149
+
150
+ The above copyright notice and this permission notice shall be included
151
+ in all copies or substantial portions of the Software.
152
+
153
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
154
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
155
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
156
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
157
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
158
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
159
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -2,19 +2,33 @@
2
2
  require File.expand_path('../lib/contao/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
- gem.authors = ["Wael Nasreddine"]
6
- gem.email = ["wael.nasreddine@gmail.com"]
5
+ gem.authors = ['Wael Nasreddine']
6
+ gem.email = ['wael.nasreddine@gmail.com']
7
7
  gem.description = %q{Contao Integration with Compass, Sass, Coffee-script, Rake, Guard with asset pre-compiler and asset-manifest generator}
8
- gem.summary = gem.description
8
+ gem.summary = <<-EOS
9
+ This gem will help you to quickly generate an application using Contao
10
+ CMS which has pre-built support for Sass, Compass, CoffeeScript, Jasmine
11
+ and Capistrano.
12
+
13
+ It also feature hashed assets served by the Contao Assets extension,
14
+ which allows you to have an md5 appended to each of your assets URL on
15
+ the production site.
16
+
17
+ The integration with Capistrano allows you to quickly deploy, copy
18
+ assets, import database and even upload media such as images and PDFs
19
+ all from the command line using Capistrano.
20
+ EOS
9
21
  gem.homepage = ""
22
+ gem.required_ruby_version = Gem::Requirement.new('>= 1.9.2')
10
23
 
11
24
  gem.files = `git ls-files`.split($\)
12
25
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
26
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
- gem.name = "contao"
15
- gem.require_paths = ["lib"]
27
+ gem.name = 'contao'
28
+ gem.require_paths = ['lib']
16
29
  gem.version = Contao::VERSION
17
30
 
31
+
18
32
  # Runtime dependencies
19
33
  gem.add_dependency 'rake'
20
34
  gem.add_dependency 'compass'
@@ -1,5 +1,5 @@
1
1
  require 'contao/version'
2
- require 'core_ext/object'
2
+ require 'contao/core_ext/object'
3
3
  require 'singleton'
4
4
  require 'ostruct'
5
5
 
@@ -1,4 +1,7 @@
1
1
  require 'yaml'
2
+ require 'ostruct'
3
+ require 'singleton'
4
+ require 'contao/core_ext/object'
2
5
 
3
6
  module TechnoGate
4
7
  module Contao
@@ -49,7 +52,7 @@ module TechnoGate
49
52
  {
50
53
  'install_password' => '',
51
54
  'encryption_key' => '',
52
- 'admin_email' => 'wael@technogate.fr',
55
+ 'admin_email' => 'admin@example.com',
53
56
  'time_zone' => 'Europe/Paris',
54
57
  'mysql' => {
55
58
  'host' => 'localhost',
@@ -9,6 +9,20 @@ case ARGV[0]
9
9
  when 'new'
10
10
  require 'contao/generators/application'
11
11
  TechnoGate::Contao::Generators::Application.new(path: ARGV[1]).generate
12
+ when 'generate'
13
+ case ARGV[1]
14
+ when 'config'
15
+ require 'contao/generators/config'
16
+ begin
17
+ TechnoGate::Contao::Generators::Config.new.generate
18
+ rescue TechnoGate::Contao::Generators::Config::AlreadyExists
19
+ require 'contao/notifier'
20
+ TechnoGate::Contao::Notifier.error "The configuration file exists and cannot be overwritten", title: "Config Generator"
21
+ end
22
+ else
23
+ require 'contao/commands/help'
24
+ print_help
25
+ end
12
26
  else
13
27
  require 'contao/commands/help'
14
28
  print_help
@@ -2,16 +2,21 @@ def print_help
2
2
  puts <<-EOH.gsub(/ [ ]+/, ' ')
3
3
  Welcome to Contao!
4
4
 
5
- This gem will help you to quickly generate an application using contao
6
- that has pre-built support for Sass, Compass, CoffeeScript, Jasmine and
7
- Capistrano.
5
+ This gem will help you to quickly generate an application using Contao
6
+ CMS which has pre-built support for Sass, Compass, CoffeeScript, Jasmine
7
+ and Capistrano.
8
8
 
9
- It also feature hashed assets served by the Contao Assets extension, this
10
- allows you to have an md5 appended to each of your assets file name
9
+ It also feature hashed assets served by the Contao Assets extension,
10
+ which allows you to have an md5 appended to each of your assets URL on
11
+ the production site.
12
+
13
+ The integration with Capistrano allows you to quickly deploy, copy
14
+ assets, import database and even upload media such as images and PDFs
15
+ all from the command line using Capistrano.
11
16
 
12
17
  To generate a new project, use the following command:
13
18
 
14
- $ contao new /path/to/application
19
+ $ contao new /path/to/application
15
20
 
16
21
  The generated application will be created at /path/to/application and the
17
22
  application name would be set to the last component in the path, in this
@@ -0,0 +1,33 @@
1
+ require 'contao/generators/base'
2
+ require 'contao/application'
3
+ require 'contao/notifier'
4
+ require 'fileutils'
5
+
6
+ module TechnoGate
7
+ module Contao
8
+ module Generators
9
+ class Config < Base
10
+ class AlreadyExists < RuntimeError; end
11
+
12
+ def generate
13
+ raise AlreadyExists if File.exists?(global_config_path)
14
+
15
+ FileUtils.mkdir_p File.dirname(global_config_path)
16
+ File.open global_config_path, 'w' do |config|
17
+ config.write YAML.dump(Contao::Application.default_global_config)
18
+ end
19
+
20
+ message = <<-EOS.gsub(/ [ ]+/, '').gsub("\n", ' ').chop
21
+ The configuration file has been created at ~/.contao/config.yml,
22
+ you need to edit this file before working with contao
23
+ EOS
24
+ Notifier.notify message, title: 'Config Generator'
25
+ end
26
+
27
+ def global_config_path
28
+ Contao::Application.instance.global_config_path
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,38 +1,35 @@
1
- require 'singleton'
2
1
  require 'guard'
3
2
 
4
3
  module TechnoGate
5
4
  module Contao
6
- class Notifier
7
- include Singleton
5
+ module Notifier
6
+ extend self
8
7
 
9
8
  def notify(message, options = {})
10
- if ::Guard::UI.send(:color_enabled?)
11
- message = "\e[0;34mContao>>\e[0m \e[0;32m#{message}\e[0m"
12
- else
13
- message = "Contao>> #{message}"
14
- end
9
+ say(message, options.merge(color: 32))
10
+ end
15
11
 
16
- ::Guard::UI.info(message, options)
12
+ def warn(message, options = {})
13
+ say(message, options.merge(color: 33))
17
14
  end
18
15
 
19
- def self.notify(*args, &block)
20
- instance.notify(*args, &block)
16
+ def error(message, options = {})
17
+ say(message, options.merge(color: 31))
21
18
  end
22
19
 
23
- def warn(message, options = {})
20
+ protected
21
+
22
+ def say(message, options = {})
23
+ color = options.delete(:color)
24
+
24
25
  if ::Guard::UI.send(:color_enabled?)
25
- message = "\e[0;34mContao>>\e[0m \e[0;33m#{message}\e[0m"
26
+ message = "\e[0;34mContao>>\e[0m \e[0;#{color}m#{message}\e[0m"
26
27
  else
27
28
  message = "Contao>> #{message}"
28
29
  end
29
30
 
30
31
  ::Guard::UI.info(message, options)
31
32
  end
32
-
33
- def self.warn(*args, &block)
34
- instance.warn(*args, &block)
35
- end
36
33
  end
37
34
  end
38
35
  end
@@ -27,11 +27,11 @@ namespace :contao do
27
27
  FileUtils.mkdir_p public.join('system/logs')
28
28
  File.open(public.join('sitemap.xml'), 'w') {|f| f.write ''}
29
29
 
30
- Rake::Task['contao:fix_permissions'].invoke
31
30
  Rake::Task['contao:generate_localconfig'].invoke
32
31
  Rake::Task['contao:generate_htaccess'].invoke
33
32
  Rake::Task['contao:apply_patches'].invoke
34
33
  Rake::Task['assets:precompile'].invoke
34
+ Rake::Task['contao:fix_permissions'].invoke
35
35
 
36
36
  TechnoGate::Contao::Notifier.notify("The contao folder has been bootstraped, Good Luck.", title: "Contao Bootstrap")
37
37
  end
@@ -64,10 +64,13 @@ namespace :contao do
64
64
  'system/scripts',
65
65
  'system/tmp',
66
66
  'system/cache',
67
+ 'system/config',
67
68
  ].map {|p| public.join p}.reject {|p| !File.exists? p}
68
69
 
69
70
  FileUtils.chmod 0777, paths
70
71
 
72
+ FileUtils.chmod 0666, Dir["#{public}/system/config/**/*.php"]
73
+
71
74
  Dir["#{public}/system/modules/efg/**/*"].each do |f|
72
75
  if File.directory?(f)
73
76
  FileUtils.chmod 0777, f
@@ -1,3 +1,3 @@
1
1
  module Contao
2
- VERSION = '0.4.0'
2
+ VERSION = '0.4.1'
3
3
  end
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+ require 'contao/generators/config'
3
+
4
+ module TechnoGate
5
+ module Contao
6
+ module Generators
7
+ describe Config do
8
+ let(:klass) { Config }
9
+ subject {
10
+ Config.new path: @path
11
+ }
12
+
13
+ before :each do
14
+ @path = '/root/my_awesome_project'
15
+ @config_path = "#{ENV['HOME']}/.contao/config.yml"
16
+ Notifier.stub :notify
17
+ end
18
+
19
+ it_should_behave_like "Generator"
20
+
21
+ describe '#generate', :fakefs do
22
+ before :each do
23
+ stub_filesystem!
24
+ FileUtils.rm_rf File.dirname(@config_path)
25
+ end
26
+
27
+ it "should create ~/.contao" do
28
+ subject.generate
29
+
30
+ File.exists?(File.dirname(@config_path)).should be_true
31
+ end
32
+
33
+ it "the config file should exists" do
34
+ subject.generate
35
+
36
+ File.exists?(@config_path).should be_true
37
+ end
38
+
39
+ it "should generate the config file" do
40
+ subject.generate
41
+
42
+ File.read("#{ENV['HOME']}/.contao/config.yml").should ==
43
+ YAML.dump(Contao::Application.default_global_config)
44
+ end
45
+
46
+ it "should call the Notifier" do
47
+ message = <<-EOS.gsub(/ [ ]+/, '').gsub("\n", ' ').chop
48
+ The configuration file has been created at ~/.contao/config.yml,
49
+ you need to edit this file before working with contao
50
+ EOS
51
+ Notifier.should_receive(:notify).with(message, title: 'Config Generator').once
52
+
53
+ subject.generate
54
+ end
55
+
56
+ it "should raise ConfigAlreadyExists if the config already exists" do
57
+ subject.generate
58
+
59
+ expect do
60
+ subject.generate
61
+ end.to raise_error(Config::AlreadyExists)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -3,11 +3,6 @@ require 'spec_helper'
3
3
  module TechnoGate
4
4
  module Contao
5
5
  describe Notifier do
6
- subject { Notifier.instance }
7
- let(:klass) { Notifier }
8
-
9
- it_should_behave_like "Singleton"
10
-
11
6
  describe '#notify' do
12
7
  before :each do
13
8
  @message = "Hello"
@@ -40,9 +35,9 @@ module TechnoGate
40
35
  end
41
36
 
42
37
  it "should be accessible at class level" do
43
- klass.any_instance.should_receive(:notify).with(@message, @options)
38
+ subject.should_receive(:notify).with(@message, @options)
44
39
 
45
- klass.notify(@message, @options)
40
+ subject.notify(@message, @options)
46
41
  end
47
42
  end
48
43
 
@@ -78,9 +73,47 @@ module TechnoGate
78
73
  end
79
74
 
80
75
  it "should be accessible at class level" do
81
- klass.any_instance.should_receive(:warn).with(@message, @options)
76
+ subject.should_receive(:warn).with(@message, @options)
77
+
78
+ subject.warn(@message, @options)
79
+ end
80
+ end
81
+
82
+ describe '#error' do
83
+ before :each do
84
+ @message = "Hello"
85
+ @output = "Contao>> #{@message}"
86
+ @colored_output = "\e[0;34mContao>>\e[0m \e[0;31m#{@message}\e[0m"
87
+ @options = {title: "Hello, World!"}
88
+
89
+ ::Guard::UI.stub(:color_enabled?).and_return(false)
90
+ end
91
+
92
+ it {should respond_to :error}
93
+
94
+ it "should call guard ui" do
95
+ ::Guard::UI.should_receive(:info).with(@output, {})
96
+
97
+ subject.error(@message)
98
+ end
99
+
100
+ it "should send whatever options passed to the info method" do
101
+ ::Guard::UI.should_receive(:info).with(@output, @options)
102
+
103
+ subject.error(@message, @options)
104
+ end
105
+
106
+ it "should use colors if enabled" do
107
+ ::Guard::UI.should_receive(:color_enabled?).once.and_return(true)
108
+ ::Guard::UI.should_receive(:info).with(@colored_output, @options)
109
+
110
+ subject.error(@message, @options)
111
+ end
112
+
113
+ it "should be accessible at class level" do
114
+ subject.should_receive(:error).with(@message, @options)
82
115
 
83
- klass.warn(@message, @options)
116
+ subject.error(@message, @options)
84
117
  end
85
118
  end
86
119
  end
@@ -33,10 +33,8 @@ module TechnoGate
33
33
  end
34
34
 
35
35
  it "should set the @@root" do
36
- mock("root").tap do |root|
37
- subject.root = root
38
- subject.class_variable_get(:@@root).should == Pathname.new(root).expand_path
39
- end
36
+ subject.root = '~/Desktop'
37
+ subject.class_variable_get(:@@root).should == Pathname.new('~/Desktop').expand_path
40
38
  end
41
39
  end
42
40
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contao
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -214,6 +214,7 @@ extra_rdoc_files: []
214
214
  files:
215
215
  - .gitignore
216
216
  - .rspec
217
+ - .travis.yml
217
218
  - Gemfile
218
219
  - LICENSE
219
220
  - README.md
@@ -227,8 +228,10 @@ files:
227
228
  - lib/contao/commands/application.rb
228
229
  - lib/contao/commands/help.rb
229
230
  - lib/contao/compiler.rb
231
+ - lib/contao/core_ext/object.rb
230
232
  - lib/contao/generators/application.rb
231
233
  - lib/contao/generators/base.rb
234
+ - lib/contao/generators/config.rb
232
235
  - lib/contao/javascript_compiler.rb
233
236
  - lib/contao/notifier.rb
234
237
  - lib/contao/stylesheet_compiler.rb
@@ -239,7 +242,6 @@ files:
239
242
  - lib/contao/tasks/whitespace.rake
240
243
  - lib/contao/version.rb
241
244
  - lib/contao_patches/development/development_htaccess.patch
242
- - lib/core_ext/object.rb
243
245
  - lib/guard/assets.rb
244
246
  - lib/monkey_patches.rb
245
247
  - lib/monkey_patches/compass/urls.rb
@@ -247,6 +249,7 @@ files:
247
249
  - spec/lib/contao/coffeescript_compiler_spec.rb
248
250
  - spec/lib/contao/generators/application_spec.rb
249
251
  - spec/lib/contao/generators/base_spec.rb
252
+ - spec/lib/contao/generators/config_spec.rb
250
253
  - spec/lib/contao/javascript_compiler_spec.rb
251
254
  - spec/lib/contao/notifier_spec.rb
252
255
  - spec/lib/contao/stylesheet_compiler_spec.rb
@@ -269,10 +272,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
269
272
  requirements:
270
273
  - - ! '>='
271
274
  - !ruby/object:Gem::Version
272
- version: '0'
273
- segments:
274
- - 0
275
- hash: 4578868734635956444
275
+ version: 1.9.2
276
276
  required_rubygems_version: !ruby/object:Gem::Requirement
277
277
  none: false
278
278
  requirements:
@@ -281,19 +281,24 @@ required_rubygems_version: !ruby/object:Gem::Requirement
281
281
  version: '0'
282
282
  segments:
283
283
  - 0
284
- hash: 4578868734635956444
284
+ hash: -2428308955429716338
285
285
  requirements: []
286
286
  rubyforge_project:
287
287
  rubygems_version: 1.8.24
288
288
  signing_key:
289
289
  specification_version: 3
290
- summary: Contao Integration with Compass, Sass, Coffee-script, Rake, Guard with asset
291
- pre-compiler and asset-manifest generator
290
+ summary: This gem will help you to quickly generate an application using Contao CMS
291
+ which has pre-built support for Sass, Compass, CoffeeScript, Jasmine and Capistrano. It
292
+ also feature hashed assets served by the Contao Assets extension, which allows you
293
+ to have an md5 appended to each of your assets URL on the production site. The
294
+ integration with Capistrano allows you to quickly deploy, copy assets, import database
295
+ and even upload media such as images and PDFs all from the command line using Capistrano.
292
296
  test_files:
293
297
  - spec/lib/contao/application_spec.rb
294
298
  - spec/lib/contao/coffeescript_compiler_spec.rb
295
299
  - spec/lib/contao/generators/application_spec.rb
296
300
  - spec/lib/contao/generators/base_spec.rb
301
+ - spec/lib/contao/generators/config_spec.rb
297
302
  - spec/lib/contao/javascript_compiler_spec.rb
298
303
  - spec/lib/contao/notifier_spec.rb
299
304
  - spec/lib/contao/stylesheet_compiler_spec.rb