nesta 0.10.0 → 0.11.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 +4 -4
- data/.gitignore +11 -11
- data/.hound.yml +2 -0
- data/.travis.yml +2 -1
- data/CHANGES +43 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +18 -23
- data/lib/nesta/app.rb +0 -5
- data/lib/nesta/commands.rb +5 -288
- data/lib/nesta/commands/command.rb +58 -0
- data/lib/nesta/commands/demo.rb +1 -0
- data/lib/nesta/commands/demo/content.rb +38 -0
- data/lib/nesta/commands/edit.rb +21 -0
- data/lib/nesta/commands/new.rb +57 -0
- data/lib/nesta/commands/plugin.rb +1 -0
- data/lib/nesta/commands/plugin/create.rb +82 -0
- data/lib/nesta/commands/theme.rb +3 -0
- data/lib/nesta/commands/theme/create.rb +36 -0
- data/lib/nesta/commands/theme/enable.rb +22 -0
- data/lib/nesta/commands/theme/install.rb +29 -0
- data/lib/nesta/config.rb +1 -6
- data/lib/nesta/models.rb +18 -20
- data/lib/nesta/version.rb +1 -1
- data/nesta.gemspec +1 -0
- data/smoke-test.sh +24 -19
- data/spec/commands/demo/content_spec.rb +65 -0
- data/spec/commands/edit_spec.rb +27 -0
- data/spec/commands/new_spec.rb +88 -0
- data/spec/commands/plugin/create_spec.rb +97 -0
- data/spec/commands/system_spec.rb +25 -0
- data/spec/commands/theme/create_spec.rb +41 -0
- data/spec/commands/theme/enable_spec.rb +44 -0
- data/spec/commands/theme/install_spec.rb +56 -0
- data/spec/config_spec.rb +3 -3
- data/spec/models_spec.rb +43 -25
- data/spec/page_spec.rb +18 -2
- data/spec/spec_helper.rb +23 -0
- data/templates/Gemfile +1 -1
- data/templates/plugins/Gemfile +4 -0
- data/templates/plugins/README.md +13 -0
- data/templates/plugins/Rakefile +58 -0
- data/templates/plugins/gitignore +3 -0
- data/templates/plugins/lib/init.rb +13 -0
- data/templates/plugins/lib/required.rb +3 -0
- data/templates/plugins/lib/version.rb +5 -0
- data/templates/plugins/plugin.gemspec +28 -0
- data/views/analytics.haml +9 -10
- data/views/master.sass +1 -1
- metadata +53 -5
- data/spec/commands_spec.rb +0 -395
data/lib/nesta/version.rb
CHANGED
data/nesta.gemspec
CHANGED
data/smoke-test.sh
CHANGED
@@ -5,10 +5,12 @@
|
|
5
5
|
# Ruby.
|
6
6
|
#
|
7
7
|
# It assumes you've got the relevant versions of Ruby installed locally
|
8
|
-
# via
|
8
|
+
# via chruby.
|
9
9
|
|
10
10
|
|
11
|
-
|
11
|
+
source /usr/local/opt/chruby/share/chruby/chruby.sh
|
12
|
+
|
13
|
+
RUBIES="ruby-2.0.0-p598 ruby-2.1.5 ruby-2.2.1"
|
12
14
|
|
13
15
|
|
14
16
|
## Functions
|
@@ -36,27 +38,32 @@ gem_file()
|
|
36
38
|
echo "nesta-$(nesta_version).gem"
|
37
39
|
}
|
38
40
|
|
41
|
+
run_with_ruby()
|
42
|
+
{
|
43
|
+
chruby-exec $RUBY_VERSION -- $@
|
44
|
+
}
|
45
|
+
|
39
46
|
get_ruby()
|
40
47
|
{
|
41
|
-
# Why not just use RUBY_VERSION? Because tmux can prevent
|
42
|
-
# changing the local version if the RBENV_VERSION
|
43
|
-
# another session. If we don't notice we'll think
|
44
|
-
# Nesta under multiple versions, but in fact
|
45
|
-
# testing it under the same copy of Ruby every
|
46
|
-
|
48
|
+
# Why not just use RUBY_VERSION? Because tmux can prevent child
|
49
|
+
# processes from changing the local version if the RBENV_VERSION
|
50
|
+
# variable is set in another session. If we don't notice we'll think
|
51
|
+
# we've been testing Nesta under multiple versions, but in fact
|
52
|
+
# we'll just have been testing it under the same copy of Ruby every
|
53
|
+
# time.
|
54
|
+
run_with_ruby ruby --version | cut -f 2 -d ' '
|
47
55
|
}
|
48
56
|
|
49
57
|
run_tests()
|
50
58
|
{
|
51
|
-
bundle install
|
52
|
-
bundle exec rake spec
|
59
|
+
run_with_ruby bundle install
|
60
|
+
run_with_ruby bundle exec rake spec
|
53
61
|
}
|
54
62
|
|
55
63
|
build_and_install()
|
56
64
|
{
|
57
65
|
echo rm -f pkg/$(gem_file)
|
58
|
-
bundle install
|
59
|
-
bundle exec rake install
|
66
|
+
run_with_ruby bundle exec rake install
|
60
67
|
}
|
61
68
|
|
62
69
|
site_folder()
|
@@ -66,15 +73,14 @@ site_folder()
|
|
66
73
|
|
67
74
|
create_and_test_new_site()
|
68
75
|
{
|
69
|
-
bundle exec nesta new $(site_folder)
|
76
|
+
run_with_ruby bundle exec nesta new $(site_folder)
|
70
77
|
cd $(site_folder)
|
71
|
-
|
72
|
-
bundle
|
73
|
-
bundle exec nesta demo:content
|
78
|
+
run_with_ruby bundle install
|
79
|
+
run_with_ruby bundle exec nesta demo:content
|
74
80
|
|
75
81
|
log "Starting server in $(site_folder)"
|
76
82
|
set +e
|
77
|
-
bundle exec mr-sparkle
|
83
|
+
run_with_ruby bundle exec mr-sparkle
|
78
84
|
set -e
|
79
85
|
|
80
86
|
cd - >/dev/null
|
@@ -85,10 +91,9 @@ create_and_test_new_site()
|
|
85
91
|
## Main program
|
86
92
|
|
87
93
|
set -e
|
88
|
-
[
|
94
|
+
[ "$DEBUG" ] && set -x
|
89
95
|
|
90
96
|
for RUBY_VERSION in $RUBIES; do
|
91
|
-
rbenv local $RUBY_VERSION
|
92
97
|
log "Rebuilding nesta gem with Ruby $(get_ruby)"
|
93
98
|
|
94
99
|
run_tests
|
@@ -0,0 +1,65 @@
|
|
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
|
@@ -0,0 +1,27 @@
|
|
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
|
@@ -0,0 +1,88 @@
|
|
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
|
@@ -0,0 +1,97 @@
|
|
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
|
@@ -0,0 +1,25 @@
|
|
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
|
@@ -0,0 +1,41 @@
|
|
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
|