nesta 0.11.1 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +5 -5
  2. data/.gitmodules +6 -0
  3. data/.travis.yml +9 -4
  4. data/CHANGES +18 -2
  5. data/Gemfile +1 -1
  6. data/Gemfile.lock +70 -54
  7. data/LICENSE +1 -1
  8. data/RELEASING.md +5 -6
  9. data/Rakefile +20 -3
  10. data/lib/nesta/app.rb +4 -8
  11. data/lib/nesta/commands/command.rb +1 -2
  12. data/lib/nesta/commands/demo/content.rb +23 -5
  13. data/lib/nesta/commands/theme/install.rb +9 -7
  14. data/lib/nesta/helpers.rb +14 -0
  15. data/lib/nesta/models.rb +26 -22
  16. data/lib/nesta/navigation.rb +1 -1
  17. data/lib/nesta/version.rb +1 -1
  18. data/nesta.gemspec +10 -11
  19. data/templates/config/config.yml +1 -1
  20. data/{spec → test}/fixtures/nesta-plugin-test/Gemfile +0 -0
  21. data/{spec → test}/fixtures/nesta-plugin-test/Rakefile +0 -0
  22. data/{spec → test}/fixtures/nesta-plugin-test/lib/nesta-plugin-test.rb +0 -0
  23. data/{spec → test}/fixtures/nesta-plugin-test/lib/nesta-plugin-test/init.rb +0 -0
  24. data/{spec → test}/fixtures/nesta-plugin-test/lib/nesta-plugin-test/version.rb +0 -0
  25. data/{spec → test}/fixtures/nesta-plugin-test/nesta-plugin-test.gemspec +0 -0
  26. data/test/integration/atom_feed_test.rb +178 -0
  27. data/test/integration/commands/demo/content_test.rb +31 -0
  28. data/test/integration/commands/edit_test.rb +21 -0
  29. data/test/integration/commands/new_test.rb +120 -0
  30. data/test/integration/commands/plugin/create_test.rb +128 -0
  31. data/test/integration/commands/theme/create_test.rb +35 -0
  32. data/test/integration/commands/theme/enable_test.rb +22 -0
  33. data/test/integration/commands/theme/install_test.rb +62 -0
  34. data/test/integration/default_theme_test.rb +220 -0
  35. data/test/integration/overrides_test.rb +118 -0
  36. data/test/integration/route_handlers_test.rb +96 -0
  37. data/test/integration/sitemap_test.rb +85 -0
  38. data/test/integration_test_helper.rb +61 -0
  39. data/test/support/model_factory.rb +169 -0
  40. data/test/support/silence_commands_during_tests.rb +5 -0
  41. data/test/support/temporary_files.rb +33 -0
  42. data/test/support/test_configuration.rb +19 -0
  43. data/test/test_helper.rb +26 -0
  44. data/test/unit/commands_test.rb +23 -0
  45. data/test/unit/config_test.rb +138 -0
  46. data/test/unit/file_model_test.rb +71 -0
  47. data/test/unit/menu_test.rb +82 -0
  48. data/test/unit/page_test.rb +571 -0
  49. data/test/unit/path_test.rb +41 -0
  50. data/test/unit/plugin_test.rb +47 -0
  51. data/views/master.sass +1 -1
  52. metadata +81 -85
  53. data/smoke-test.sh +0 -107
  54. data/spec/atom_spec.rb +0 -141
  55. data/spec/commands/demo/content_spec.rb +0 -65
  56. data/spec/commands/edit_spec.rb +0 -27
  57. data/spec/commands/new_spec.rb +0 -88
  58. data/spec/commands/plugin/create_spec.rb +0 -97
  59. data/spec/commands/system_spec.rb +0 -25
  60. data/spec/commands/theme/create_spec.rb +0 -41
  61. data/spec/commands/theme/enable_spec.rb +0 -44
  62. data/spec/commands/theme/install_spec.rb +0 -56
  63. data/spec/config_spec.rb +0 -127
  64. data/spec/model_factory.rb +0 -92
  65. data/spec/models_spec.rb +0 -700
  66. data/spec/overrides_spec.rb +0 -132
  67. data/spec/page_spec.rb +0 -560
  68. data/spec/path_spec.rb +0 -28
  69. data/spec/plugin_spec.rb +0 -51
  70. data/spec/sitemap_spec.rb +0 -105
  71. data/spec/spec_helper.rb +0 -114
@@ -1,141 +0,0 @@
1
- require File.expand_path('spec_helper', File.dirname(__FILE__))
2
- require File.expand_path('model_factory', File.dirname(__FILE__))
3
-
4
- describe "atom feed" do
5
- include ModelFactory
6
- include RequestSpecHelper
7
-
8
- before(:each) do
9
- stub_configuration
10
- stub_config_key("author", {
11
- "name" => "Fred Bloggs",
12
- "uri" => "http://fredbloggs.com",
13
- "email" => "fred@fredbloggs.com"
14
- })
15
- get "/articles.xml"
16
- end
17
-
18
- after(:each) do
19
- remove_temp_directory
20
- end
21
-
22
- it "should render successfully" do
23
- last_response.should be_ok
24
- end
25
-
26
- it "should use Atom's XML namespace" do
27
- assert_xpath("//feed[@xmlns='http://www.w3.org/2005/Atom']")
28
- end
29
-
30
- it "should have an ID element" do
31
- assert_selector("id:contains('tag:example.org,2009:/')")
32
- end
33
-
34
- it "should have an alternate link element" do
35
- assert_xpath("//feed/link[@rel='alternate'][@href='http://example.org/']")
36
- end
37
-
38
- it "should have a self link element" do
39
- assert_xpath(
40
- "//feed/link[@rel='self'][@href='http://example.org/articles.xml']")
41
- end
42
-
43
- it "should have title and subtitle" do
44
- assert_xpath("//feed/title[@type='text']", content: "My blog")
45
- assert_xpath("//feed/subtitle[@type='text']", content: "about stuff")
46
- end
47
-
48
- it "should include the author details" do
49
- assert_xpath("//feed/author/name", content: "Fred Bloggs")
50
- assert_xpath("//feed/author/uri", content: "http://fredbloggs.com")
51
- assert_xpath("//feed/author/email", content: "fred@fredbloggs.com")
52
- end
53
-
54
- describe "for article" do
55
- before(:each) do
56
- @heading = "Heading"
57
- @articles = []
58
- @category = create_category
59
- 11.times do |i|
60
- @articles << create_article(
61
- heading: "Article #{i + 1}",
62
- path: "article-#{i + 1}",
63
- metadata: {
64
- "categories" => @category.path,
65
- "date" => "#{i + 1} January 2009"
66
- },
67
- content: "Blah blah\n\n## #{@heading}\n\n[link](/foo)"
68
- )
69
- end
70
- @article = @articles.last
71
- get "/articles.xml"
72
- end
73
-
74
- it "should set title" do
75
- assert_xpath("//entry/title", content: "Article 11")
76
- end
77
-
78
- it "should link to the HTML version" do
79
- url = "http://example.org/#{@article.path}"
80
- assert_xpath(
81
- "//entry/link[@href='#{url}'][@rel='alternate'][@type='text/html']")
82
- end
83
-
84
- it "should define unique ID" do
85
- assert_xpath(
86
- "//entry/id",
87
- content: "tag:example.org,2009-01-11:#{@article.abspath}"
88
- )
89
- end
90
-
91
- it "should specify date published" do
92
- assert_xpath("//entry/published", content: "2009-01-11T00:00:00+00:00")
93
- end
94
-
95
- it "should specify article categories" do
96
- assert_xpath("//category[@term='#{@category.permalink}']")
97
- end
98
-
99
- it "should have article content" do
100
- assert_xpath "//entry/content[@type='html']" do |a|
101
- a.should contain "<h2>#{@heading}</h2>"
102
- end
103
- end
104
-
105
- it "should include hostname in URLs" do
106
- assert_xpath("//entry/content") do |c|
107
- c.should contain 'http://example.org/foo'
108
- end
109
- end
110
-
111
- it "should not include article heading in content" do
112
- body.should_not have_selector("summary:contains('#{@article.heading}')")
113
- end
114
-
115
- it "should list the latest 10 articles" do
116
- assert_selector("entry", count: 10)
117
- end
118
- end
119
-
120
- describe "page with no date" do
121
- before(:each) do
122
- create_category(path: "no-date")
123
- get "/articles.xml"
124
- end
125
-
126
- it "should not appear in feed" do
127
- body.should_not have_selector("entry id:contains('no-date')")
128
- end
129
- end
130
-
131
- describe "article with atom ID" do
132
- it "should use pre-defined ID" do
133
- create_article(metadata: {
134
- "date" => "1 January 2009",
135
- "atom id" => "use-this-id"
136
- })
137
- get "/articles.xml"
138
- assert_xpath("//entry/id", content: "use-this-id")
139
- end
140
- end
141
- end
@@ -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
@@ -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
@@ -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