contao 0.5.2 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +0 -1
- data/Gemfile +4 -0
- data/README.md +350 -22
- data/contao.gemspec +5 -3
- data/lib/contao/application.rb +59 -82
- data/lib/contao/commands/help.rb +2 -2
- data/lib/contao/generators/application.rb +0 -8
- data/lib/contao/generators/base.rb +10 -0
- data/lib/contao/generators/config.rb +6 -2
- data/lib/contao/generators/contao_initializer.rb +54 -0
- data/lib/contao/password.rb +40 -0
- data/lib/contao/railties.rb +32 -0
- data/lib/contao/templates/contao_initializer.rb.erb +41 -0
- data/lib/contao/version.rb +1 -1
- data/lib/contao.rb +3 -5
- data/lib/tasks/contao.rake +34 -38
- data/spec/lib/contao/application_spec.rb +7 -7
- data/spec/lib/contao/generators/application_spec.rb +3 -2
- data/spec/lib/contao/generators/config_spec.rb +1 -1
- data/spec/lib/contao/generators/contao_initializer_spec.rb +73 -0
- data/spec/lib/contao/password_spec.rb +90 -0
- data/spec/spec_helper.rb +5 -5
- data/spec/support/filesystem_mock.rb +6 -6
- data/spec/support/pry.rb +18 -0
- data/spec/support/stub_rails.rb +9 -1
- metadata +49 -7
- data/lib/contao/railtie.rb +0 -11
@@ -14,7 +14,7 @@ module TechnoGate
|
|
14
14
|
|
15
15
|
FileUtils.mkdir_p File.dirname(global_config_path)
|
16
16
|
File.open global_config_path, 'w' do |config|
|
17
|
-
config.write YAML.dump(
|
17
|
+
config.write YAML.dump(default_global_config)
|
18
18
|
end
|
19
19
|
|
20
20
|
message = <<-EOS.gsub(/ [ ]+/, '').gsub("\n", ' ').chop
|
@@ -25,7 +25,11 @@ module TechnoGate
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def global_config_path
|
28
|
-
Contao::Application.
|
28
|
+
Contao::Application.global_config_path
|
29
|
+
end
|
30
|
+
|
31
|
+
def default_global_config(options = {})
|
32
|
+
Contao::Application.send(:default_global_config, options)
|
29
33
|
end
|
30
34
|
end
|
31
35
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'contao/generators/base'
|
2
|
+
|
3
|
+
module TechnoGate
|
4
|
+
module Contao
|
5
|
+
module Generators
|
6
|
+
class ContaoInitializer < Base
|
7
|
+
|
8
|
+
TEMPLATE = File.expand_path '../../templates/contao_initializer.rb.erb', __FILE__
|
9
|
+
|
10
|
+
def generate
|
11
|
+
config = build_config
|
12
|
+
File.open initializer_path, 'w' do |f|
|
13
|
+
f.write ERB.new(File.read TEMPLATE).result(binding)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def initializer_path
|
20
|
+
"#{project_path}/config/initializers/contao.rb"
|
21
|
+
end
|
22
|
+
|
23
|
+
def build_config
|
24
|
+
config = ActiveSupport::OrderedOptions.new
|
25
|
+
|
26
|
+
config.install_password = install_password
|
27
|
+
config.encryption_key = encryption_key
|
28
|
+
config.admin_email = global.admin_email
|
29
|
+
config.time_zone = global.time_zone
|
30
|
+
config.smtp_enabled = global.smtp.enabled
|
31
|
+
config.smtp_host = global.smtp.host
|
32
|
+
config.smtp_user = global.smtp.user
|
33
|
+
config.smtp_pass = global.smtp.pass
|
34
|
+
config.smtp_ssl = global.smtp.ssl
|
35
|
+
config.smtp_port = global.smtp.port
|
36
|
+
|
37
|
+
config
|
38
|
+
end
|
39
|
+
|
40
|
+
def global
|
41
|
+
Contao::Application.config.contao.global
|
42
|
+
end
|
43
|
+
|
44
|
+
def install_password
|
45
|
+
Password.create(global.install_password).to_s
|
46
|
+
end
|
47
|
+
|
48
|
+
def encryption_key
|
49
|
+
SecureRandom.hex 16
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'digest/sha1'
|
2
|
+
require 'securerandom'
|
3
|
+
|
4
|
+
module TechnoGate
|
5
|
+
module Contao
|
6
|
+
class Password
|
7
|
+
SALT_SIZE = 23
|
8
|
+
|
9
|
+
def initialize(password_hash)
|
10
|
+
password_hash.split(':').tap do |p|
|
11
|
+
@password_hash = p[0]
|
12
|
+
@salt = p[1]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.create(password)
|
17
|
+
salt = generate_salt
|
18
|
+
new "#{hash_password(password, salt)}:#{salt}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
"#{@password_hash}:#{@salt}"
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def self.hash_password(password, salt)
|
28
|
+
Digest::SHA1.hexdigest "#{salt}#{password}"
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.generate_salt
|
32
|
+
random[0...SALT_SIZE]
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.random(length = 64)
|
36
|
+
SecureRandom.hex length
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'rails/railtie'
|
2
|
+
|
3
|
+
module TechnoGate
|
4
|
+
module Contao
|
5
|
+
class Railtie < Rails::Railtie
|
6
|
+
railtie_name :contao
|
7
|
+
|
8
|
+
rake_tasks do
|
9
|
+
Dir["#{File.expand_path '../../tasks', __FILE__}/**/*.rake"].each {|f| load f}
|
10
|
+
end
|
11
|
+
|
12
|
+
initializer 'load_contao_configurations' do
|
13
|
+
TechnoGate::Contao::Application.load_global_config!
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class Rails::Railtie::Configuration
|
20
|
+
def contao
|
21
|
+
@contao_configuration ||= default_contao_configuration
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def default_contao_configuration
|
27
|
+
cc = ActiveSupport::OrderedOptions.new
|
28
|
+
cc.smtp = ActiveSupport::OrderedOptions.new
|
29
|
+
cc.smtp.enabled = false
|
30
|
+
cc
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# This initializer is used by Rake and Capistrano to help generating the
|
2
|
+
# localconfig.php file, it stores basically the encrypted install password,
|
3
|
+
# the encryption_key and the SMTP credentials if SMTP is enabled
|
4
|
+
|
5
|
+
module ContaoTemplate
|
6
|
+
class Application < Rails::Application
|
7
|
+
# The install password is used by /contao/install.php page
|
8
|
+
config.contao.install_password = '<%= config.install_password %>'
|
9
|
+
|
10
|
+
# The encryption key is used by extensions
|
11
|
+
config.contao.encryption_key = '<%= config.encryption_key %>'
|
12
|
+
|
13
|
+
# The admin email
|
14
|
+
config.admin_email = '<%= config.admin_email %>'
|
15
|
+
|
16
|
+
# The time zone
|
17
|
+
config.time_zone = '<%= config.time_zone %>'
|
18
|
+
|
19
|
+
# SMTP Configuration
|
20
|
+
# Configure contao to use an SMTP server
|
21
|
+
|
22
|
+
# Enable SMTP ?
|
23
|
+
config.contao.smtp.enabled = <%= config.smtp_enabled %>
|
24
|
+
<% if config.smtp_enabled %>
|
25
|
+
# SMTP Host
|
26
|
+
config.contao.smtp.host = '<%= config.smtp_host %>'
|
27
|
+
|
28
|
+
# SMTP User
|
29
|
+
config.contao.smtp.user = '<%= config.smtp_user %>'
|
30
|
+
|
31
|
+
# SMTP Pass
|
32
|
+
config.contao.smtp.pass = '<%= config.smtp_pass %>'
|
33
|
+
|
34
|
+
# SMTP SSL
|
35
|
+
config.contao.smtp.ssl = <%= config.smtp_ssl %>
|
36
|
+
|
37
|
+
# SMTP Port
|
38
|
+
config.contao.smtp.port = <%= config.smtp_port %>
|
39
|
+
<% end %>
|
40
|
+
end
|
41
|
+
end
|
data/lib/contao/version.rb
CHANGED
data/lib/contao.rb
CHANGED
@@ -3,12 +3,10 @@ require 'contao/core_ext/object'
|
|
3
3
|
require 'singleton'
|
4
4
|
require 'ostruct'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
end
|
9
|
-
end
|
6
|
+
# Utilities
|
7
|
+
require 'contao/password'
|
10
8
|
|
11
9
|
# Contao
|
12
10
|
require 'contao/application'
|
13
11
|
require 'contao/notifier'
|
14
|
-
require 'contao/
|
12
|
+
require 'contao/railties' if defined?(::Rails)
|
data/lib/tasks/contao.rake
CHANGED
@@ -12,7 +12,7 @@ def ask(what, options = {})
|
|
12
12
|
q.validate = validate
|
13
13
|
q.responses[:not_valid] = what
|
14
14
|
unless echo
|
15
|
-
q.echo =
|
15
|
+
q.echo = '*'
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -22,7 +22,7 @@ def public_path
|
|
22
22
|
end
|
23
23
|
|
24
24
|
namespace :contao do
|
25
|
-
desc
|
25
|
+
desc 'Link all contao files'
|
26
26
|
task :bootstrap do
|
27
27
|
TechnoGate::Contao::Application.linkify
|
28
28
|
|
@@ -35,22 +35,22 @@ namespace :contao do
|
|
35
35
|
Rake::Task['assets:precompile'].invoke if Rails.env.production?
|
36
36
|
Rake::Task['contao:fix_permissions'].invoke
|
37
37
|
|
38
|
-
TechnoGate::Contao::Notifier.notify
|
38
|
+
TechnoGate::Contao::Notifier.notify 'The contao folder has been bootstraped, Good Luck.'
|
39
39
|
end
|
40
40
|
|
41
41
|
desc 'Apply Patches'
|
42
42
|
task :apply_patches do
|
43
43
|
path = File.expand_path "../../../contao_patches/#{Rails.env}", __FILE__
|
44
44
|
Dir["#{path}/**/*.patch"].each do |patch|
|
45
|
-
TechnoGate::Contao::Notifier.notify("Applying patch #{File.basename patch}"
|
45
|
+
TechnoGate::Contao::Notifier.notify("Applying patch #{File.basename patch}")
|
46
46
|
result = system <<-CMD
|
47
47
|
cd #{public_path}
|
48
48
|
patch -Nfp1 -i #{patch} --no-backup-if-mismatch
|
49
49
|
CMD
|
50
50
|
|
51
51
|
if !result
|
52
|
-
TechnoGate::Contao::Notifier.notify("Patch #{File.basename patch} failed to apply"
|
53
|
-
abort
|
52
|
+
TechnoGate::Contao::Notifier.notify("Patch #{File.basename patch} failed to apply")
|
53
|
+
abort 'Please fix patches before bootstrapping'
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -82,47 +82,43 @@ namespace :contao do
|
|
82
82
|
|
83
83
|
FileUtils.chmod 0666, public_path.join('sitemap.xml')
|
84
84
|
|
85
|
-
TechnoGate::Contao::Notifier.notify
|
85
|
+
TechnoGate::Contao::Notifier.notify 'The permissions of the contao folder has been fixed'
|
86
|
+
end
|
87
|
+
|
88
|
+
desc 'Generate an initializer'
|
89
|
+
task :generate_initializer do
|
90
|
+
require 'contao/generators/contao_initializer'
|
91
|
+
|
92
|
+
TechnoGate::Contao::Generators::ContaoInitializer.new(path: Rails.root).generate
|
93
|
+
|
94
|
+
TechnoGate::Contao::Notifier.notify 'The contao initializer has been generated'
|
86
95
|
end
|
87
96
|
|
88
97
|
desc "Generate the localconfig.php"
|
89
|
-
task :generate_localconfig do
|
98
|
+
task :generate_localconfig => :environment do
|
90
99
|
require 'active_support/core_ext/object/blank'
|
91
|
-
config =
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
config.db_port = config.mysql.port
|
108
|
-
config.db_username = config.mysql.user
|
109
|
-
config.db_password = config.mysql.pass
|
110
|
-
config.db_database = TechnoGate::Contao::Application.name
|
111
|
-
|
112
|
-
localconfig_template = Rails.root.join 'config/examples/localconfig.php.erb'
|
113
|
-
localconfig_path = public_path.join 'system/config/localconfig.php'
|
114
|
-
|
115
|
-
localconfig = ERB.new(File.read(localconfig_template)).result(binding)
|
116
|
-
File.open(localconfig_path, 'w') {|f| f.write localconfig }
|
117
|
-
|
118
|
-
TechnoGate::Contao::Notifier.notify("The configuration file localconfig.php was generated successfully.", title: "Contao Bootstrap")
|
119
|
-
end
|
100
|
+
config = Rails.application.config.contao.dup
|
101
|
+
|
102
|
+
config.db_server_app = 'mysql'
|
103
|
+
config.db_hostname = config.global.mysql.host
|
104
|
+
config.db_port = config.global.mysql.port
|
105
|
+
config.db_username = config.global.mysql.user
|
106
|
+
config.db_password = config.global.mysql.pass
|
107
|
+
config.db_database = config.application_name
|
108
|
+
|
109
|
+
localconfig_template = Rails.root.join 'config/examples/localconfig.php.erb'
|
110
|
+
localconfig_path = public_path.join 'system/config/localconfig.php'
|
111
|
+
|
112
|
+
localconfig = ERB.new(File.read(localconfig_template), nil, '-').result(binding)
|
113
|
+
File.open(localconfig_path, 'w') {|f| f.write localconfig }
|
114
|
+
|
115
|
+
TechnoGate::Contao::Notifier.notify 'The configuration file localconfig.php was generated successfully.'
|
120
116
|
end
|
121
117
|
|
122
118
|
desc "Generate the htaccess file"
|
123
119
|
task :generate_htaccess do
|
124
120
|
FileUtils.cp public_path.join('.htaccess.default'), public_path.join('.htaccess')
|
125
121
|
|
126
|
-
TechnoGate::Contao::Notifier.notify
|
122
|
+
TechnoGate::Contao::Notifier.notify 'The .htaccess was successfully generated'
|
127
123
|
end
|
128
124
|
end
|
@@ -3,29 +3,29 @@ require 'spec_helper'
|
|
3
3
|
module TechnoGate
|
4
4
|
module Contao
|
5
5
|
describe Application, :fakefs do
|
6
|
-
subject { Contao::Application
|
6
|
+
subject { Contao::Application }
|
7
7
|
let(:klass) { Contao::Application }
|
8
8
|
|
9
9
|
before :each do
|
10
10
|
stub_filesystem!(:global_config => {'install_password' => 'some install password'})
|
11
|
-
subject.
|
11
|
+
subject.load_global_config!
|
12
12
|
end
|
13
13
|
|
14
14
|
describe "Global Config" do
|
15
15
|
|
16
16
|
it "should parse the global config file if the file exists" do
|
17
|
-
subject.config.
|
17
|
+
subject.config.contao.global.should_not be_empty
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should correctly parse the global config" do
|
21
|
-
subject.config.
|
21
|
+
subject.config.contao.global.install_password.should == 'some install password'
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
describe '#linkify' do
|
26
26
|
it "should call #exhaustive_list_of_files_to_link" do
|
27
27
|
subject.should_receive(:exhaustive_list_of_files_to_link).with(
|
28
|
-
Rails.root.join(Rails.application.config.
|
28
|
+
Rails.root.join(Rails.application.config.contao.path),
|
29
29
|
Rails.public_path
|
30
30
|
).once.and_return []
|
31
31
|
|
@@ -62,7 +62,7 @@ module TechnoGate
|
|
62
62
|
describe "without it being set in the configuration" do
|
63
63
|
before :each do
|
64
64
|
Rails.config.tap do |config|
|
65
|
-
config.application_name = nil
|
65
|
+
config.contao.application_name = nil
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
@@ -78,7 +78,7 @@ module TechnoGate
|
|
78
78
|
describe "with it being set in the configuration" do
|
79
79
|
before :each do
|
80
80
|
Rails.config.tap do |config|
|
81
|
-
config.application_name = 'my_super_awesome_project'
|
81
|
+
config.contao.application_name = 'my_super_awesome_project'
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
@@ -6,8 +6,9 @@ module TechnoGate
|
|
6
6
|
module Generators
|
7
7
|
describe Application do
|
8
8
|
let(:klass) { Application }
|
9
|
+
|
9
10
|
subject {
|
10
|
-
|
11
|
+
klass.new path: @path
|
11
12
|
}
|
12
13
|
|
13
14
|
before :each do
|
@@ -64,7 +65,7 @@ module TechnoGate
|
|
64
65
|
subject.send :rename_project
|
65
66
|
|
66
67
|
File.read('/root/my_awesome_project/config/application.rb').should =~
|
67
|
-
/config\.application_name\s+=\s+'my_awesome_project'/
|
68
|
+
/config\.contao\.application_name\s+=\s+'my_awesome_project'/
|
68
69
|
end
|
69
70
|
end
|
70
71
|
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'contao/generators/contao_initializer.rb'
|
3
|
+
|
4
|
+
module TechnoGate
|
5
|
+
module Contao
|
6
|
+
module Generators
|
7
|
+
describe ContaoInitializer, :fakefs => true do
|
8
|
+
let(:klass) { ContaoInitializer }
|
9
|
+
|
10
|
+
subject {
|
11
|
+
klass.new path: @path
|
12
|
+
}
|
13
|
+
|
14
|
+
before :each do
|
15
|
+
@path = '/root/my_awesome_project'
|
16
|
+
|
17
|
+
stub_filesystem! :global_config => {
|
18
|
+
'admin_email' => 'test@example.com',
|
19
|
+
'time_zone' => 'Europe/Paris',
|
20
|
+
'smtp' => {
|
21
|
+
'enabled' => true,
|
22
|
+
'host' => 'localhost',
|
23
|
+
'user' => 'myuser',
|
24
|
+
'pass' => 'mypass',
|
25
|
+
'ssl' => true,
|
26
|
+
'port' => 465,
|
27
|
+
},
|
28
|
+
}
|
29
|
+
|
30
|
+
Contao::Application.send :load_global_config!
|
31
|
+
end
|
32
|
+
|
33
|
+
it_should_behave_like "Generator"
|
34
|
+
|
35
|
+
describe '#generate' do
|
36
|
+
before :each do
|
37
|
+
FakeFS.deactivate!
|
38
|
+
template = File.read ContaoInitializer::TEMPLATE
|
39
|
+
FakeFS.activate!
|
40
|
+
FileUtils.mkdir_p File.dirname(ContaoInitializer::TEMPLATE)
|
41
|
+
File.open ContaoInitializer::TEMPLATE, 'w' do |f|
|
42
|
+
f.write template
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should generate an initializer file' do
|
47
|
+
subject.generate
|
48
|
+
File.exists?('/root/my_awesome_project/config/initializers/contao.rb').should be_true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '#build_config' do
|
53
|
+
it 'should build a config variable for the template' do
|
54
|
+
Password.any_instance.stub(:to_s).and_return 'encrypted_password'
|
55
|
+
SecureRandom.stub(:hex).and_return 'e626cd6b8fd219b3e1803dc59620d972'
|
56
|
+
|
57
|
+
config = subject.send :build_config
|
58
|
+
config.install_password.should == 'encrypted_password'
|
59
|
+
config.encryption_key.should == 'e626cd6b8fd219b3e1803dc59620d972'
|
60
|
+
config.admin_email.should == 'test@example.com'
|
61
|
+
config.time_zone.should == 'Europe/Paris'
|
62
|
+
config.smtp_host.should == 'localhost'
|
63
|
+
config.smtp_user.should == 'myuser'
|
64
|
+
config.smtp_pass.should == 'mypass'
|
65
|
+
config.smtp_port.should == 465
|
66
|
+
config.smtp_enabled.should be_true
|
67
|
+
config.smtp_ssl.should be_true
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module TechnoGate
|
4
|
+
module Contao
|
5
|
+
describe Password do
|
6
|
+
let(:clear_password) { 'password' }
|
7
|
+
let(:password) { '52c938dedcdc146d0a3f5fef834e9881be343d6c' }
|
8
|
+
let(:salt) { '537a4e714483674274a2b07' }
|
9
|
+
let(:password_hash) { "#{password}:#{salt}" }
|
10
|
+
|
11
|
+
describe 'class methods' do
|
12
|
+
subject { Password }
|
13
|
+
|
14
|
+
describe '#create' do
|
15
|
+
|
16
|
+
it { should respond_to :create }
|
17
|
+
|
18
|
+
it 'should return an instance of Password' do
|
19
|
+
subject.create(clear_password).should be_instance_of Password
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should return an instance with @password_hash and @salt set' do
|
23
|
+
p = subject.create clear_password
|
24
|
+
p.instance_variable_get(:@password_hash).should_not be_nil
|
25
|
+
p.instance_variable_get(:@salt).should_not be_nil
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should split the password_hash into instance variables' do
|
29
|
+
Password.should_receive(:generate_salt).and_return salt
|
30
|
+
|
31
|
+
p = subject.create clear_password
|
32
|
+
p.instance_variable_get(:@password_hash).should == password
|
33
|
+
p.instance_variable_get(:@salt).should == salt
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#generate_salt' do
|
38
|
+
it { should respond_to :generate_salt }
|
39
|
+
|
40
|
+
it 'should return a salt' do
|
41
|
+
subject.send(:generate_salt).should_not be_nil
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should be of the size of SALT_SIZE' do
|
45
|
+
subject.send(:generate_salt).size.should == Password::SALT_SIZE
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#random' do
|
50
|
+
it {should respond_to :random}
|
51
|
+
|
52
|
+
it 'should return a random string' do
|
53
|
+
subject.send(:random).should_not be_nil
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should honor the requested length' do
|
57
|
+
subject.send(:random, 14).size.should == 28
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should be 128 chars by default' do
|
61
|
+
subject.send(:random).size.should == 128
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should be a string' do
|
65
|
+
subject.send(:random).should be_instance_of String
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe 'initialization' do
|
71
|
+
subject { Password.new password_hash }
|
72
|
+
|
73
|
+
it 'should split the password_hash into instance variables' do
|
74
|
+
subject.instance_variable_get(:@password_hash).should == password
|
75
|
+
subject.instance_variable_get(:@salt).should == salt
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe 'instance methods' do
|
80
|
+
subject { Password.new password_hash }
|
81
|
+
|
82
|
+
describe 'to_s' do
|
83
|
+
it 'should return the password_hash' do
|
84
|
+
subject.to_s.should == password_hash
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -21,15 +21,15 @@ RSpec.configure do |c|
|
|
21
21
|
c.include FakeFS::SpecHelpers, :fakefs
|
22
22
|
|
23
23
|
c.before :each do
|
24
|
-
Rails.env
|
25
|
-
Rails.root =
|
24
|
+
Rails.env = 'development'
|
25
|
+
Rails.root = '/root/my_awesome_project'
|
26
26
|
|
27
|
-
Rails.config.tap do |config|
|
28
|
-
config.
|
27
|
+
Rails.application.config.tap do |config|
|
28
|
+
config.contao.path = 'contao'
|
29
29
|
end
|
30
30
|
|
31
31
|
silence_warnings do
|
32
|
-
TechnoGate::Contao::UI = stub('
|
32
|
+
TechnoGate::Contao::UI = stub('UI').as_null_object
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -2,6 +2,7 @@ def stub_filesystem!(options = {})
|
|
2
2
|
[
|
3
3
|
|
4
4
|
'/root/my_awesome_project/config',
|
5
|
+
'/root/my_awesome_project/config/initializers',
|
5
6
|
'/root/my_awesome_project/app/assets/javascripts',
|
6
7
|
'/root/my_awesome_project/app/assets/stylesheets',
|
7
8
|
'/root/my_awesome_project/app/assets/images',
|
@@ -24,12 +25,11 @@ def stub_filesystem!(options = {})
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def stub_global_config_file!(config = {})
|
27
|
-
|
28
|
-
'install_password' => '
|
29
|
-
'encryption_key' => 'e626cd6b8fd219b3e1803dc59620d972'
|
28
|
+
condig = TechnoGate::Contao::Application.send(:default_global_config,
|
29
|
+
'install_password' => 'password'
|
30
30
|
).merge(config)
|
31
31
|
|
32
|
-
config_file =
|
32
|
+
config_file = "#{ENV['HOME']}/.contao/config.yml"
|
33
33
|
|
34
34
|
FileUtils.mkdir_p File.dirname(config_file)
|
35
35
|
File.open(config_file, 'w') do |file|
|
@@ -59,7 +59,7 @@ module ContaoTemplate
|
|
59
59
|
# -- all .rb files in that directory are automatically loaded.
|
60
60
|
|
61
61
|
# The application name
|
62
|
-
config.application_name = '#{application_name}'
|
62
|
+
config.contao.application_name = '#{application_name}'
|
63
63
|
|
64
64
|
# Custom directories with classes and modules you want to be autoloadable.
|
65
65
|
# config.autoload_paths += %W(\#{config.root}/extras)
|
@@ -80,7 +80,7 @@ module ContaoTemplate
|
|
80
80
|
config.assets.version = '1.0'
|
81
81
|
|
82
82
|
# Contao configurations
|
83
|
-
config.
|
83
|
+
config.contao.path = 'contao'
|
84
84
|
end
|
85
85
|
end
|
86
86
|
EOS
|
data/spec/support/pry.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'pry'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'binding_of_caller'
|
5
|
+
rescue LoadError
|
6
|
+
end
|
7
|
+
|
8
|
+
def pry_it
|
9
|
+
FakeFS.deactivate! if example.metadata[:fakefs]
|
10
|
+
|
11
|
+
if binding.respond_to? :of_caller
|
12
|
+
binding.of_caller(1).pry
|
13
|
+
else
|
14
|
+
binding.pry
|
15
|
+
end
|
16
|
+
|
17
|
+
FakeFS.activate! if example.metadata[:fakefs]
|
18
|
+
end
|