nesta 0.11.1 → 0.13.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.
- checksums.yaml +5 -5
- data/.github/workflows/tests.yml +21 -0
- data/.gitmodules +0 -0
- data/CHANGES +44 -2
- data/Gemfile +1 -1
- data/Gemfile.lock +73 -55
- data/LICENSE +1 -1
- data/README.md +7 -14
- data/RELEASING.md +10 -9
- data/Rakefile +20 -3
- data/bin/nesta +1 -1
- data/config/deploy.rb.sample +1 -1
- data/lib/nesta/app.rb +4 -8
- data/lib/nesta/commands/demo/content.rb +28 -12
- data/lib/nesta/commands/edit.rb +2 -6
- data/lib/nesta/commands/new.rb +9 -11
- data/lib/nesta/commands/plugin/create.rb +7 -9
- data/lib/nesta/commands/template.rb +20 -0
- data/lib/nesta/commands/theme/create.rb +8 -8
- data/lib/nesta/commands/theme/enable.rb +3 -5
- data/lib/nesta/commands/theme/install.rb +12 -14
- data/lib/nesta/commands.rb +8 -0
- data/lib/nesta/config_file.rb +25 -0
- data/lib/nesta/helpers.rb +14 -0
- data/lib/nesta/models.rb +26 -22
- data/lib/nesta/navigation.rb +1 -1
- data/lib/nesta/system_command.rb +15 -0
- data/lib/nesta/version.rb +1 -1
- data/lib/nesta.rb +6 -1
- data/nesta.gemspec +11 -12
- data/templates/config/config.yml +1 -1
- data/{spec → test}/fixtures/nesta-plugin-test/Gemfile +0 -0
- data/{spec → test}/fixtures/nesta-plugin-test/Rakefile +0 -0
- data/{spec → test}/fixtures/nesta-plugin-test/lib/nesta-plugin-test/init.rb +0 -0
- data/{spec → test}/fixtures/nesta-plugin-test/lib/nesta-plugin-test/version.rb +0 -0
- data/{spec → test}/fixtures/nesta-plugin-test/lib/nesta-plugin-test.rb +0 -0
- data/{spec → test}/fixtures/nesta-plugin-test/nesta-plugin-test.gemspec +0 -0
- data/test/integration/atom_feed_test.rb +178 -0
- data/test/integration/commands/demo/content_test.rb +33 -0
- data/test/integration/commands/edit_test.rb +21 -0
- data/test/integration/commands/new_test.rb +91 -0
- data/test/integration/commands/plugin/create_test.rb +131 -0
- data/test/integration/commands/theme/create_test.rb +41 -0
- data/test/integration/commands/theme/enable_test.rb +28 -0
- data/test/integration/commands/theme/install_test.rb +66 -0
- data/test/integration/default_theme_test.rb +220 -0
- data/test/integration/overrides_test.rb +118 -0
- data/test/integration/route_handlers_test.rb +96 -0
- data/test/integration/sitemap_test.rb +85 -0
- data/test/integration_test_helper.rb +61 -0
- data/test/support/model_factory.rb +169 -0
- data/test/support/temporary_files.rb +33 -0
- data/test/support/test_configuration.rb +19 -0
- data/test/test_helper.rb +26 -0
- data/test/unit/config_test.rb +138 -0
- data/test/unit/file_model_test.rb +71 -0
- data/test/unit/menu_test.rb +82 -0
- data/test/unit/page_test.rb +571 -0
- data/test/unit/path_test.rb +41 -0
- data/test/unit/plugin_test.rb +47 -0
- data/test/unit/system_command_test.rb +20 -0
- data/views/master.sass +1 -1
- metadata +90 -89
- data/.hound.yml +0 -2
- data/.rspec +0 -1
- data/.travis.yml +0 -6
- data/lib/nesta/commands/command.rb +0 -58
- data/smoke-test.sh +0 -107
- data/spec/atom_spec.rb +0 -141
- data/spec/commands/demo/content_spec.rb +0 -65
- data/spec/commands/edit_spec.rb +0 -27
- data/spec/commands/new_spec.rb +0 -88
- data/spec/commands/plugin/create_spec.rb +0 -97
- data/spec/commands/system_spec.rb +0 -25
- data/spec/commands/theme/create_spec.rb +0 -41
- data/spec/commands/theme/enable_spec.rb +0 -44
- data/spec/commands/theme/install_spec.rb +0 -56
- data/spec/config_spec.rb +0 -127
- data/spec/model_factory.rb +0 -92
- data/spec/models_spec.rb +0 -700
- data/spec/overrides_spec.rb +0 -132
- data/spec/page_spec.rb +0 -560
- data/spec/path_spec.rb +0 -28
- data/spec/plugin_spec.rb +0 -51
- data/spec/sitemap_spec.rb +0 -105
- data/spec/spec_helper.rb +0 -114
@@ -1,65 +0,0 @@
|
|
1
|
-
require File.expand_path('../../spec_helper', File.dirname(__FILE__))
|
2
|
-
require File.expand_path('../../../lib/nesta/commands', File.dirname(__FILE__))
|
3
|
-
|
4
|
-
describe "nesta:demo:content" do
|
5
|
-
include_context "temporary working directory"
|
6
|
-
|
7
|
-
before(:each) do
|
8
|
-
@config_path = project_path('config/config.yml')
|
9
|
-
FileUtils.mkdir_p(File.dirname(@config_path))
|
10
|
-
Nesta::Config.stub(:yaml_path).and_return(@config_path)
|
11
|
-
create_config_yaml('content: path/to/content')
|
12
|
-
Nesta::App.stub(:root).and_return(@project_path)
|
13
|
-
@repo_url = 'git://github.com/gma/nesta-demo-content.git'
|
14
|
-
@demo_path = project_path('content-demo')
|
15
|
-
@command = Nesta::Commands::Demo::Content.new
|
16
|
-
@command.stub(:run_process)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should clone the repository" do
|
20
|
-
@command.should_receive(:run_process).with(
|
21
|
-
'git', 'clone', @repo_url, @demo_path)
|
22
|
-
@command.execute
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should configure the content directory" do
|
26
|
-
@command.execute
|
27
|
-
File.read(@config_path).should match(/^content: content-demo/)
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "when repository already exists" do
|
31
|
-
before(:each) do
|
32
|
-
FileUtils.mkdir_p(@demo_path)
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should update the repository" do
|
36
|
-
@command.should_receive(:run_process).with(
|
37
|
-
'git', 'pull', 'origin', 'master')
|
38
|
-
@command.execute
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "when site versioned with git" do
|
43
|
-
before(:each) do
|
44
|
-
@exclude_path = project_path('.git/info/exclude')
|
45
|
-
FileUtils.mkdir_p(File.dirname(@exclude_path))
|
46
|
-
File.open(@exclude_path, 'w') { |file| file.puts '# Excludes' }
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should tell git to ignore content-demo" do
|
50
|
-
@command.execute
|
51
|
-
File.read(@exclude_path).should match(/content-demo/)
|
52
|
-
end
|
53
|
-
|
54
|
-
describe "and content-demo already ignored" do
|
55
|
-
before(:each) do
|
56
|
-
File.open(@exclude_path, 'w') { |file| file.puts 'content-demo' }
|
57
|
-
end
|
58
|
-
|
59
|
-
it "shouldn't tell git to ignore it twice" do
|
60
|
-
@command.execute
|
61
|
-
File.read(@exclude_path).scan('content-demo').size.should == 1
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
data/spec/commands/edit_spec.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
-
require File.expand_path('../../lib/nesta/commands', File.dirname(__FILE__))
|
3
|
-
|
4
|
-
describe "nesta:edit" do
|
5
|
-
include_context "temporary working directory"
|
6
|
-
|
7
|
-
before(:each) do
|
8
|
-
Nesta::Config.stub(:content_path).and_return('content')
|
9
|
-
@page_path = 'path/to/page.mdown'
|
10
|
-
@command = Nesta::Commands::Edit.new(@page_path)
|
11
|
-
@command.stub(:run_process)
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should launch the editor" do
|
15
|
-
ENV['EDITOR'] = 'vi'
|
16
|
-
full_path = File.join('content/pages', @page_path)
|
17
|
-
@command.should_receive(:run_process).with(ENV['EDITOR'], full_path)
|
18
|
-
@command.execute
|
19
|
-
end
|
20
|
-
|
21
|
-
it "should not try and launch an editor if environment not setup" do
|
22
|
-
ENV.delete('EDITOR')
|
23
|
-
@command.should_not_receive(:run_process)
|
24
|
-
$stderr.stub(:puts)
|
25
|
-
@command.execute
|
26
|
-
end
|
27
|
-
end
|
data/spec/commands/new_spec.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
-
require File.expand_path('../../lib/nesta/commands', File.dirname(__FILE__))
|
3
|
-
|
4
|
-
describe "nesta:new" do
|
5
|
-
include_context "temporary working directory"
|
6
|
-
|
7
|
-
def gemfile_source
|
8
|
-
File.read(project_path('Gemfile'))
|
9
|
-
end
|
10
|
-
|
11
|
-
def rakefile_source
|
12
|
-
File.read(project_path('Rakefile'))
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "without options" do
|
16
|
-
before(:each) do
|
17
|
-
Nesta::Commands::New.new(@project_path).execute
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should create the content directories" do
|
21
|
-
should_exist('content/attachments')
|
22
|
-
should_exist('content/pages')
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should create the home page" do
|
26
|
-
should_exist('content/pages/index.haml')
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should create the rackup file" do
|
30
|
-
should_exist('config.ru')
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should create the config.yml file" do
|
34
|
-
should_exist('config/config.yml')
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should add a Gemfile" do
|
38
|
-
should_exist('Gemfile')
|
39
|
-
gemfile_source.should match(/gem 'nesta'/)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe "--git" do
|
44
|
-
before(:each) do
|
45
|
-
@command = Nesta::Commands::New.new(@project_path, 'git' => '')
|
46
|
-
@command.stub(:run_process)
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should create a .gitignore file" do
|
50
|
-
@command.execute
|
51
|
-
File.read(project_path('.gitignore')).should match(/\.bundle/)
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should create a git repo" do
|
55
|
-
@command.should_receive(:run_process).with('git', 'init')
|
56
|
-
@command.execute
|
57
|
-
end
|
58
|
-
|
59
|
-
it "should commit the blank project" do
|
60
|
-
@command.should_receive(:run_process).with('git', 'add', '.')
|
61
|
-
@command.should_receive(:run_process).with(
|
62
|
-
'git', 'commit', '-m', 'Initial commit')
|
63
|
-
@command.execute
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
describe "--vlad" do
|
68
|
-
before(:each) do
|
69
|
-
Nesta::Commands::New.new(@project_path, 'vlad' => '').execute
|
70
|
-
end
|
71
|
-
|
72
|
-
it "should add vlad to Gemfile" do
|
73
|
-
gemfile_source.should match(/gem 'vlad', '2.1.0'/)
|
74
|
-
gemfile_source.should match(/gem 'vlad-git', '2.2.0'/)
|
75
|
-
end
|
76
|
-
|
77
|
-
it "should configure the vlad rake tasks" do
|
78
|
-
should_exist('Rakefile')
|
79
|
-
rakefile_source.should match(/require 'vlad'/)
|
80
|
-
end
|
81
|
-
|
82
|
-
it "should create deploy.rb" do
|
83
|
-
should_exist('config/deploy.rb')
|
84
|
-
deploy_source = File.read(project_path('config/deploy.rb'))
|
85
|
-
deploy_source.should match(/set :application, 'mysite.com'/)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
@@ -1,97 +0,0 @@
|
|
1
|
-
require File.expand_path('../../spec_helper', File.dirname(__FILE__))
|
2
|
-
require File.expand_path('../../../lib/nesta/commands', File.dirname(__FILE__))
|
3
|
-
|
4
|
-
describe 'nesta:plugin:create' do
|
5
|
-
include_context 'temporary working directory'
|
6
|
-
|
7
|
-
def path_in_gem(path)
|
8
|
-
File.join(@gem_name, path)
|
9
|
-
end
|
10
|
-
|
11
|
-
def should_exist(path)
|
12
|
-
File.exist?(path_in_gem(path)).should be_true
|
13
|
-
end
|
14
|
-
|
15
|
-
def should_contain(path, pattern)
|
16
|
-
contents = File.read(path_in_gem(path))
|
17
|
-
contents.should match(pattern)
|
18
|
-
end
|
19
|
-
|
20
|
-
before(:each) do
|
21
|
-
@name = 'my-feature'
|
22
|
-
@gem_name = "nesta-plugin-#{@name}"
|
23
|
-
@plugins_path = temp_path('plugins')
|
24
|
-
@working_dir = Dir.pwd
|
25
|
-
Dir.mkdir(@plugins_path)
|
26
|
-
Dir.chdir(@plugins_path)
|
27
|
-
Nesta::Commands::Plugin::Create.any_instance.stub(:system)
|
28
|
-
Nesta::Commands::Plugin::Create.new(@name).execute
|
29
|
-
end
|
30
|
-
|
31
|
-
after(:each) do
|
32
|
-
Dir.chdir(@working_dir)
|
33
|
-
FileUtils.rm_r(@plugins_path)
|
34
|
-
end
|
35
|
-
|
36
|
-
it "creates the gem's directory" do
|
37
|
-
File.directory?(@gem_name).should be_true
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'creates a README.md file with installation instructions' do
|
41
|
-
should_exist('README.md')
|
42
|
-
should_contain('README.md', %r{echo 'gem "#{@gem_name}"' >> Gemfile})
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'creates .gitignore' do
|
46
|
-
should_exist('.gitignore')
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'creates the gemspec' do
|
50
|
-
path = "#{@gem_name}.gemspec"
|
51
|
-
should_exist(path)
|
52
|
-
should_contain(path, %r{require "#{@gem_name}/version"})
|
53
|
-
should_contain(path, %r{Nesta::Plugin::My::Feature::VERSION})
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'creates a Gemfile' do
|
57
|
-
should_exist('Gemfile')
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'creates Rakefile that helps with packaging the gem' do
|
61
|
-
should_exist("Rakefile")
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'creates default folder for Ruby files' do
|
65
|
-
code_directory = File.join(@gem_name, 'lib', @gem_name)
|
66
|
-
File.directory?(code_directory).should be_true
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'creates file required when gem loaded' do
|
70
|
-
path = "#{File.join('lib', @gem_name)}.rb"
|
71
|
-
should_exist(path)
|
72
|
-
should_contain(path, %r{require "#{@gem_name}/version"})
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'creates version.rb' do
|
76
|
-
path = File.join('lib', @gem_name, 'version.rb')
|
77
|
-
should_exist(path)
|
78
|
-
should_contain path, <<-EOF
|
79
|
-
module Nesta
|
80
|
-
module Plugin
|
81
|
-
module My
|
82
|
-
module Feature
|
83
|
-
VERSION = '0.1.0'
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
EOF
|
89
|
-
end
|
90
|
-
|
91
|
-
it 'creates skeleton code for the plugin in init.rb' do
|
92
|
-
path = File.join('lib', @gem_name, 'init.rb')
|
93
|
-
should_exist(path)
|
94
|
-
should_contain(path, "module Nesta\n module Plugin\n module My::Feature")
|
95
|
-
should_contain(path, 'helpers Nesta::Plugin::My::Feature::Helpers')
|
96
|
-
end
|
97
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
-
require File.expand_path('../../lib/nesta/commands', File.dirname(__FILE__))
|
3
|
-
|
4
|
-
class TestCommand
|
5
|
-
include Nesta::Commands::Command
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "Nesta::Commands::Command.run_process" do
|
9
|
-
before do
|
10
|
-
@stderr = $stderr
|
11
|
-
$stderr = File.new('/dev/null', 'w')
|
12
|
-
end
|
13
|
-
|
14
|
-
after do
|
15
|
-
$stderr.close
|
16
|
-
$stderr = @stderr
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'can run an external process and catch errors' do
|
20
|
-
TestCommand.new.run_process('ls / >/dev/null')
|
21
|
-
expect {
|
22
|
-
TestCommand.new.run_process('ls /no-such-file 2>/dev/null')
|
23
|
-
}.to raise_error(SystemExit)
|
24
|
-
end
|
25
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require File.expand_path('../../spec_helper', File.dirname(__FILE__))
|
2
|
-
require File.expand_path('../../../lib/nesta/commands', File.dirname(__FILE__))
|
3
|
-
|
4
|
-
describe "nesta:theme:create" do
|
5
|
-
include_context "temporary working directory"
|
6
|
-
|
7
|
-
def should_exist(file)
|
8
|
-
File.exist?(Nesta::Path.themes(@name, file)).should be_true
|
9
|
-
end
|
10
|
-
|
11
|
-
before(:each) do
|
12
|
-
Nesta::App.stub(:root).and_return(TempFileHelper::TEMP_DIR)
|
13
|
-
@name = 'my-new-theme'
|
14
|
-
Nesta::Commands::Theme::Create.new(@name).execute
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should create the theme directory" do
|
18
|
-
File.directory?(Nesta::Path.themes(@name)).should be_true
|
19
|
-
end
|
20
|
-
|
21
|
-
it "should create a dummy README file" do
|
22
|
-
should_exist('README.md')
|
23
|
-
text = File.read(Nesta::Path.themes(@name, 'README.md'))
|
24
|
-
text.should match(/#{@name} is a theme/)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should create a default app.rb file" do
|
28
|
-
should_exist('app.rb')
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should create public and views directories" do
|
32
|
-
should_exist("public/#{@name}")
|
33
|
-
should_exist('views')
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should copy the default view templates into views" do
|
37
|
-
%w(layout.haml page.haml master.sass).each do |file|
|
38
|
-
should_exist("views/#{file}")
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require File.expand_path('../../spec_helper', File.dirname(__FILE__))
|
2
|
-
require File.expand_path('../../../lib/nesta/commands', File.dirname(__FILE__))
|
3
|
-
|
4
|
-
describe "nesta:theme:enable" do
|
5
|
-
include_context "temporary working directory"
|
6
|
-
|
7
|
-
before(:each) do
|
8
|
-
config = temp_path('config.yml')
|
9
|
-
Nesta::Config.stub(:yaml_path).and_return(config)
|
10
|
-
@name = 'mytheme'
|
11
|
-
@command = Nesta::Commands::Theme::Enable.new(@name)
|
12
|
-
end
|
13
|
-
|
14
|
-
shared_examples_for "command that configures the theme" do
|
15
|
-
it "should enable the theme" do
|
16
|
-
@command.execute
|
17
|
-
File.read(Nesta::Config.yaml_path).should match(/^theme: #{@name}/)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "when theme config is commented out" do
|
22
|
-
before(:each) do
|
23
|
-
create_config_yaml(' # theme: blah')
|
24
|
-
end
|
25
|
-
|
26
|
-
it_should_behave_like "command that configures the theme"
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "when another theme is configured" do
|
30
|
-
before(:each) do
|
31
|
-
create_config_yaml('theme: another')
|
32
|
-
end
|
33
|
-
|
34
|
-
it_should_behave_like "command that configures the theme"
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "when no theme config exists" do
|
38
|
-
before(:each) do
|
39
|
-
create_config_yaml('# I have no theme config')
|
40
|
-
end
|
41
|
-
|
42
|
-
it_should_behave_like "command that configures the theme"
|
43
|
-
end
|
44
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require File.expand_path('../../spec_helper', File.dirname(__FILE__))
|
2
|
-
require File.expand_path('../../../lib/nesta/commands', File.dirname(__FILE__))
|
3
|
-
|
4
|
-
describe "nesta:theme:install" do
|
5
|
-
include_context "temporary working directory"
|
6
|
-
|
7
|
-
before(:each) do
|
8
|
-
@repo_url = 'git://github.com/gma/nesta-theme-mine.git'
|
9
|
-
@theme_dir = 'themes/mine'
|
10
|
-
FileUtils.mkdir_p(File.join(@theme_dir, '.git'))
|
11
|
-
@command = Nesta::Commands::Theme::Install.new(@repo_url)
|
12
|
-
@command.stub(:enable)
|
13
|
-
@command.stub(:run_process)
|
14
|
-
end
|
15
|
-
|
16
|
-
after(:each) do
|
17
|
-
FileUtils.rm_r(@theme_dir)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should clone the repository" do
|
21
|
-
@command.should_receive(:run_process).with(
|
22
|
-
'git', 'clone', @repo_url, @theme_dir)
|
23
|
-
@command.execute
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should remove the theme's .git directory" do
|
27
|
-
@command.execute
|
28
|
-
File.exist?(@theme_dir).should be_true
|
29
|
-
File.exist?(File.join(@theme_dir, '.git')).should be_false
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should enable the freshly installed theme" do
|
33
|
-
@command.should_receive(:enable)
|
34
|
-
@command.execute
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "when theme URL doesn't match recommended pattern" do
|
38
|
-
before(:each) do
|
39
|
-
@repo_url = 'git://foobar.com/path/to/mytheme.git'
|
40
|
-
@other_theme_dir = 'themes/mytheme'
|
41
|
-
FileUtils.mkdir_p(File.join(@other_theme_dir, '.git'))
|
42
|
-
@command = Nesta::Commands::Theme::Install.new(@repo_url)
|
43
|
-
@command.stub(:enable)
|
44
|
-
end
|
45
|
-
|
46
|
-
after(:each) do
|
47
|
-
FileUtils.rm_r(@other_theme_dir)
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should use the basename as theme dir" do
|
51
|
-
@command.should_receive(:run_process).with(
|
52
|
-
'git', 'clone', @repo_url, @other_theme_dir)
|
53
|
-
@command.execute
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
data/spec/config_spec.rb
DELETED
@@ -1,127 +0,0 @@
|
|
1
|
-
require File.expand_path('spec_helper', File.dirname(__FILE__))
|
2
|
-
|
3
|
-
describe "Config" do
|
4
|
-
after(:each) do
|
5
|
-
ENV.keys.each { |variable| ENV.delete(variable) if variable =~ /NESTA_/ }
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'should return default value for "Read more"' do
|
9
|
-
Nesta::Config.read_more.should == 'Continue reading'
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'should return nil for author when not defined' do
|
13
|
-
Nesta::Config.author.should == nil
|
14
|
-
end
|
15
|
-
|
16
|
-
describe "when settings defined in ENV" do
|
17
|
-
before(:each) do
|
18
|
-
@title = "Title from ENV"
|
19
|
-
ENV["NESTA_TITLE"] = @title
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should fallback to config.yml" do
|
23
|
-
stub_config_key("subtitle", "Subtitle in YAML file")
|
24
|
-
Nesta::Config.subtitle.should == "Subtitle in YAML file"
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should override config.yml" do
|
28
|
-
stub_config_key("title", "Title in YAML file")
|
29
|
-
Nesta::Config.title.should == @title
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should know how to cope with boolean values" do
|
33
|
-
Nesta::Config.settings << 'a_boolean'
|
34
|
-
begin
|
35
|
-
ENV["NESTA_A_BOOLEAN"] = "true"
|
36
|
-
Nesta::Config.a_boolean.should be_true
|
37
|
-
ENV["NESTA_A_BOOLEAN"] = "false"
|
38
|
-
Nesta::Config.a_boolean.should be_false
|
39
|
-
ensure
|
40
|
-
Nesta::Config.settings.pop
|
41
|
-
ENV.delete('NESTA_A_BOOLEAN')
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'should return configured value for "Read more"' do
|
46
|
-
ENV['NESTA_READ_MORE'] = 'Read on'
|
47
|
-
begin
|
48
|
-
Nesta::Config.read_more.should == 'Read on'
|
49
|
-
ensure
|
50
|
-
ENV.delete('NESTA_READ_MORE')
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should set author hash from ENV" do
|
55
|
-
name = "Name from ENV"
|
56
|
-
uri = "URI from ENV"
|
57
|
-
ENV["NESTA_AUTHOR__NAME"] = name
|
58
|
-
ENV["NESTA_AUTHOR__URI"] = uri
|
59
|
-
Nesta::Config.author["name"].should == name
|
60
|
-
Nesta::Config.author["uri"].should == uri
|
61
|
-
Nesta::Config.author["email"].should be_nil
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe "when settings only defined in config.yml" do
|
66
|
-
before(:each) do
|
67
|
-
@title = "Title in YAML file"
|
68
|
-
stub_config_key("subtitle", @title)
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should read configuration from YAML" do
|
72
|
-
Nesta::Config.subtitle.should == @title
|
73
|
-
end
|
74
|
-
|
75
|
-
it "should set author hash from YAML" do
|
76
|
-
name = "Name from YAML"
|
77
|
-
uri = "URI from YAML"
|
78
|
-
stub_config_key("author", { "name" => name, "uri" => uri })
|
79
|
-
Nesta::Config.author["name"].should == name
|
80
|
-
Nesta::Config.author["uri"].should == uri
|
81
|
-
Nesta::Config.author["email"].should be_nil
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should override top level settings with environment specific settings" do
|
85
|
-
stub_config_key('content', 'general/path')
|
86
|
-
stub_config_key('content', 'rack_env/path', for_environment: true)
|
87
|
-
Nesta::Config.content.should == 'rack_env/path'
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe 'Nesta::Config.fetch' do
|
92
|
-
it 'should be retrieve settings from environment' do
|
93
|
-
ENV['NESTA_MY_SETTING'] = 'value in ENV'
|
94
|
-
begin
|
95
|
-
Nesta::Config.fetch('my_setting').should == 'value in ENV'
|
96
|
-
Nesta::Config.fetch(:my_setting).should == 'value in ENV'
|
97
|
-
ensure
|
98
|
-
ENV.delete('NESTA_MY_SETTING')
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
it 'should retrieved settings from YAML' do
|
103
|
-
stub_config_key('my_setting', 'value in YAML')
|
104
|
-
Nesta::Config.fetch('my_setting').should == 'value in YAML'
|
105
|
-
Nesta::Config.fetch(:my_setting).should == 'value in YAML'
|
106
|
-
end
|
107
|
-
|
108
|
-
it "should throw NotDefined if a setting isn't defined" do
|
109
|
-
lambda {
|
110
|
-
Nesta::Config.fetch('no such setting')
|
111
|
-
}.should raise_error(Nesta::Config::NotDefined)
|
112
|
-
end
|
113
|
-
|
114
|
-
it 'should allow default values to be set' do
|
115
|
-
Nesta::Config.fetch('no such setting', 'default').should == 'default'
|
116
|
-
end
|
117
|
-
|
118
|
-
it 'should cope with non-truthy boolean values' do
|
119
|
-
ENV['NESTA_SETTING'] = 'false'
|
120
|
-
begin
|
121
|
-
Nesta::Config.fetch('setting').should == false
|
122
|
-
ensure
|
123
|
-
ENV.delete('NESTA_SETTING')
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
data/spec/model_factory.rb
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
module ModelFactory
|
2
|
-
def create_page(options)
|
3
|
-
extension = options[:ext] || :mdown
|
4
|
-
path = filename(Nesta::Config.page_path, options[:path], extension)
|
5
|
-
create_file(path, options)
|
6
|
-
yield(path) if block_given?
|
7
|
-
Nesta::Page.new(path)
|
8
|
-
end
|
9
|
-
|
10
|
-
def create_article(options = {}, &block)
|
11
|
-
o = {
|
12
|
-
path: 'article-prefix/my-article',
|
13
|
-
heading: 'My article',
|
14
|
-
content: 'Content goes here',
|
15
|
-
metadata: {
|
16
|
-
'date' => '29 December 2008'
|
17
|
-
}.merge(options.delete(:metadata) || {})
|
18
|
-
}.merge(options)
|
19
|
-
create_page(o, &block)
|
20
|
-
end
|
21
|
-
|
22
|
-
def create_category(options = {}, &block)
|
23
|
-
o = {
|
24
|
-
path: 'category-prefix/my-category',
|
25
|
-
heading: 'My category',
|
26
|
-
content: 'Content goes here'
|
27
|
-
}.merge(options)
|
28
|
-
create_page(o, &block)
|
29
|
-
end
|
30
|
-
|
31
|
-
def write_menu_item(indent, file, menu_item)
|
32
|
-
if menu_item.is_a?(Array)
|
33
|
-
indent.sub!(/^/, ' ')
|
34
|
-
menu_item.each { |path| write_menu_item(indent, file, path) }
|
35
|
-
indent.sub!(/^ /, '')
|
36
|
-
else
|
37
|
-
file.write("#{indent}#{menu_item}\n")
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def create_menu(menu_text)
|
42
|
-
file = filename(Nesta::Config.content_path, 'menu', :txt)
|
43
|
-
File.open(file, 'w') { |file| file.write(menu_text) }
|
44
|
-
end
|
45
|
-
|
46
|
-
def delete_page(type, permalink, extension)
|
47
|
-
file = filename(Nesta::Config.page_path, permalink, extension)
|
48
|
-
FileUtils.rm(file)
|
49
|
-
end
|
50
|
-
|
51
|
-
def create_content_directories
|
52
|
-
FileUtils.mkdir_p(Nesta::Config.page_path)
|
53
|
-
FileUtils.mkdir_p(Nesta::Config.attachment_path)
|
54
|
-
end
|
55
|
-
|
56
|
-
def mock_file_stat(method, filename, time)
|
57
|
-
stat = double(:stat)
|
58
|
-
stat.stub(:mtime).and_return(Time.parse(time))
|
59
|
-
File.send(method, :stat).with(filename).and_return(stat)
|
60
|
-
end
|
61
|
-
|
62
|
-
private
|
63
|
-
def filename(directory, basename, extension = :mdown)
|
64
|
-
File.join(directory, "#{basename}.#{extension}")
|
65
|
-
end
|
66
|
-
|
67
|
-
def heading(options)
|
68
|
-
prefix = case options[:ext]
|
69
|
-
when :haml
|
70
|
-
"%div\n %h1"
|
71
|
-
when :textile
|
72
|
-
"<div>\nh1."
|
73
|
-
else
|
74
|
-
'# '
|
75
|
-
end
|
76
|
-
"#{prefix} #{options[:heading]}\n\n"
|
77
|
-
end
|
78
|
-
|
79
|
-
def create_file(path, options = {})
|
80
|
-
create_content_directories
|
81
|
-
metadata = options[:metadata] || {}
|
82
|
-
metatext = metadata.map { |key, value| "#{key}: #{value}" }.join("\n")
|
83
|
-
heading = options[:heading] ? heading(options) : ''
|
84
|
-
contents =<<-EOF
|
85
|
-
#{metatext}
|
86
|
-
|
87
|
-
#{heading}#{options[:content]}
|
88
|
-
EOF
|
89
|
-
FileUtils.mkdir_p(File.dirname(path))
|
90
|
-
File.open(path, 'w') { |file| file.write(contents) }
|
91
|
-
end
|
92
|
-
end
|