nesta 0.13.0 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/tests.yml +1 -1
  3. data/.gitignore +1 -0
  4. data/CHANGES +73 -0
  5. data/Gemfile.lock +24 -22
  6. data/README.md +4 -2
  7. data/bin/nesta +4 -1
  8. data/lib/nesta/app.rb +1 -2
  9. data/lib/nesta/commands/build.rb +38 -0
  10. data/lib/nesta/commands/new.rb +2 -1
  11. data/lib/nesta/commands.rb +1 -0
  12. data/lib/nesta/config.rb +49 -75
  13. data/lib/nesta/config_file.rb +5 -1
  14. data/lib/nesta/helpers.rb +0 -5
  15. data/lib/nesta/models.rb +33 -34
  16. data/lib/nesta/navigation.rb +0 -5
  17. data/lib/nesta/overrides.rb +32 -43
  18. data/lib/nesta/plugin.rb +0 -16
  19. data/lib/nesta/static/assets.rb +50 -0
  20. data/lib/nesta/static/html_file.rb +26 -0
  21. data/lib/nesta/static/site.rb +104 -0
  22. data/lib/nesta/version.rb +1 -1
  23. data/lib/nesta.rb +1 -3
  24. data/nesta.gemspec +4 -4
  25. data/templates/config/config.yml +28 -2
  26. data/templates/themes/README.md +1 -1
  27. data/templates/themes/views/master.sass +1 -1
  28. data/test/integration/atom_feed_test.rb +1 -1
  29. data/test/integration/commands/build_test.rb +53 -0
  30. data/test/integration/overrides_test.rb +1 -1
  31. data/test/integration/sitemap_test.rb +1 -1
  32. data/test/support/temporary_files.rb +1 -1
  33. data/test/support/test_configuration.rb +2 -4
  34. data/test/unit/config_test.rb +25 -94
  35. data/test/unit/static/assets_test.rb +56 -0
  36. data/test/unit/static/html_file_test.rb +41 -0
  37. data/test/unit/static/site_test.rb +104 -0
  38. data/views/atom.haml +2 -2
  39. data/views/comments.haml +2 -2
  40. data/views/footer.haml +1 -1
  41. data/views/header.haml +2 -3
  42. data/views/layout.haml +2 -2
  43. data/views/master.sass +1 -1
  44. data/views/mixins.sass +2 -2
  45. data/views/normalize.scss +0 -1
  46. data/views/sitemap.haml +1 -1
  47. metadata +33 -25
@@ -0,0 +1,56 @@
1
+ require 'test_helper'
2
+
3
+ require_relative '../../../lib/nesta/static/assets'
4
+
5
+ describe 'Assets' do
6
+ include TestConfiguration
7
+
8
+ after do
9
+ remove_temp_directory
10
+ end
11
+
12
+ it 'is happy if attachments directory not present' do
13
+ in_temporary_project do |project_root|
14
+ stub_config('content' => File.join(project_root, 'content')) do
15
+ Nesta::Static::Assets.new('dist').copy_attachments
16
+ end
17
+ end
18
+ end
19
+
20
+ it 'copies attachments into build directory' do
21
+ build_dir = 'dist'
22
+ attachment = 'image.jpeg'
23
+
24
+ in_temporary_project do |project_root|
25
+ stub_config('content' => File.join(project_root, 'content')) do
26
+ FileUtils.mkdir_p(Nesta::Config.attachment_path)
27
+ open(File.join(Nesta::Config.attachment_path, attachment), 'w')
28
+
29
+ Nesta::Static::Assets.new(build_dir).copy_attachments
30
+
31
+ assert_exists_in_project File.join(build_dir, 'attachments', attachment)
32
+ end
33
+ end
34
+ end
35
+
36
+ it 'is happy if public directory not present' do
37
+ in_temporary_project do |project_root|
38
+ Nesta::Static::Assets.new('dist').copy_public_folder
39
+ end
40
+ end
41
+
42
+ it 'copies contents of public directory into build directory' do
43
+ build_dir = 'dist'
44
+ asset_path = File.join('css', 'third-party.css')
45
+
46
+ in_temporary_project do |project_root|
47
+ public_path = File.join(project_root, 'public')
48
+ FileUtils.mkdir_p(File.dirname(File.join(public_path, asset_path)))
49
+ open(File.join(public_path, asset_path), 'w')
50
+
51
+ Nesta::Static::Assets.new(build_dir).copy_public_folder
52
+
53
+ assert_exists_in_project File.join(build_dir, asset_path)
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,41 @@
1
+ require 'test_helper'
2
+
3
+ require_relative '../../../lib/nesta/static/html_file'
4
+
5
+ describe 'HtmlFile' do
6
+ include ModelFactory
7
+ include TestConfiguration
8
+
9
+ after do
10
+ remove_temp_directory
11
+ end
12
+
13
+ it 'determines HTML filename from build dir and page filename' do
14
+ build_dir = "dist"
15
+
16
+ with_temp_content_directory do
17
+ page = create(:page)
18
+
19
+ html_file = Nesta::Static::HtmlFile.new(build_dir, page)
20
+
21
+ expected = File.join(build_dir, "page-1.html")
22
+ assert_equal expected, html_file.filename
23
+ end
24
+ end
25
+
26
+ it 'creates index.html in directory if page shares path with directory' do
27
+ build_dir = "dist"
28
+
29
+ with_temp_content_directory do
30
+ page = create(:page)
31
+ ext = File.extname(page.filename)
32
+ directory_path = page.filename.sub(/#{ext}$/, '')
33
+ FileUtils.mkdir(directory_path)
34
+
35
+ html_file = Nesta::Static::HtmlFile.new(build_dir, page)
36
+
37
+ expected = File.join(build_dir, "page-1", "index.html")
38
+ assert_equal expected, html_file.filename
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,104 @@
1
+ require 'test_helper'
2
+
3
+ require_relative '../../../lib/nesta/static/site'
4
+
5
+ describe 'Site' do
6
+ include ModelFactory
7
+ include TestConfiguration
8
+
9
+ after do
10
+ remove_temp_directory
11
+ end
12
+
13
+ it 'converts Markdown to HTML' do
14
+ build_dir = 'dist'
15
+ domain = 'localhost'
16
+
17
+ in_temporary_project do
18
+ with_temp_content_directory do
19
+ page = create(:page)
20
+
21
+ Nesta::Static::Site.new(build_dir, domain).render_pages
22
+
23
+ html_file = File.join(build_dir, page.abspath + '.html')
24
+ markup = open(html_file).read
25
+
26
+ assert markup.include?("<title>#{page.title}</title>")
27
+ end
28
+ end
29
+ end
30
+
31
+ it 'renders a 404 not found page' do
32
+ build_dir = 'dist'
33
+ domain = 'localhost'
34
+
35
+ in_temporary_project do
36
+ with_temp_content_directory do
37
+ Nesta::Static::Site.new(build_dir, domain).render_not_found
38
+
39
+ html_file = File.join(build_dir, '404.html')
40
+ markup = open(html_file).read
41
+
42
+ assert markup.include?("<h1>Page not found</h1>")
43
+ end
44
+ end
45
+ end
46
+
47
+ it 'renders Atom feed' do
48
+ build_dir = 'dist'
49
+ domain = 'mysite.com'
50
+
51
+ in_temporary_project do
52
+ with_temp_content_directory do
53
+ article = create(:article)
54
+ Nesta::Static::Site.new(build_dir, domain).render_atom_feed
55
+
56
+ xml_file = File.join(build_dir, 'articles.xml')
57
+ xml = open(xml_file).read
58
+
59
+ assert xml.include?("<link href='https://#{domain + article.abspath}'")
60
+ end
61
+ end
62
+ end
63
+
64
+ it 'includes domain name in sitemap' do
65
+ build_dir = 'dist'
66
+ domain = 'mysite.com'
67
+
68
+ in_temporary_project do
69
+ with_temp_content_directory do
70
+ page = create(:page)
71
+ Nesta::Static::Site.new(build_dir, domain).render_sitemap
72
+
73
+ xml_file = File.join(build_dir, 'sitemap.xml')
74
+ xml = open(xml_file).read
75
+
76
+ assert xml.include?(domain + page.abspath)
77
+ end
78
+ end
79
+ end
80
+
81
+ it "renders the user's list of templated assets" do
82
+ build_dir = 'dist'
83
+ css_path = '/css/styles.css'
84
+ build_config = {}
85
+
86
+ in_temporary_project do
87
+ stub_config('build' => { 'templated_assets' => [css_path] }) do
88
+ views = File.join(project_root, 'views')
89
+ FileUtils.mkdir_p(views)
90
+ open(File.join(views, 'styles.sass'), 'w') do |sass|
91
+ sass.write("p\n font-size: 1em\n")
92
+ end
93
+
94
+ site = Nesta::Static::Site.new(build_dir, 'mysite.com')
95
+ site.render_templated_assets
96
+
97
+ css_file = File.join(build_dir, css_path)
98
+ assert_exists_in_project(css_file)
99
+
100
+ assert_equal open(css_file).read, "p {\n font-size: 1em;\n}"
101
+ end
102
+ end
103
+ end
104
+ end
data/views/atom.haml CHANGED
@@ -1,7 +1,7 @@
1
1
  !!! XML
2
- %feed(xmlns='http://www.w3.org/2005/Atom')
2
+ %feed(xmlns='https://www.w3.org/2005/Atom')
3
3
  %title(type='text')= @title
4
- %generator(uri='http://nestacms.com') Nesta
4
+ %generator(uri='https://nestacms.com') Nesta
5
5
  %id= atom_id
6
6
  %link(href="#{path_to('/articles.xml', :uri => true)}" rel='self')
7
7
  %link(href="#{path_to('/', :uri => true)}" rel='alternate')
data/views/comments.haml CHANGED
@@ -3,7 +3,7 @@
3
3
  - if Sinatra::Application.environment == :development
4
4
  :javascript
5
5
  var disqus_developer = true;
6
- %script{:type => 'text/javascript', :src => "http://#{short_name}.disqus.com/embed.js", :async => true}
6
+ %script{:type => 'text/javascript', :src => "https://#{short_name}.disqus.com/embed.js", :async => true}
7
7
 
8
8
  %noscript
9
- %a(href="http://#{short_name}.disqus.com/embed.js?url=ref") View comments.
9
+ %a(href="https://#{short_name}.disqus.com/embed.js?url=ref") View comments.
data/views/footer.haml CHANGED
@@ -2,4 +2,4 @@
2
2
  %p
3
3
  Powered by Nesta, a
4
4
  = succeed "." do
5
- %a(href="http://nestacms.com") Ruby CMS
5
+ %a(href="https://nestacms.com") Ruby CMS
data/views/header.haml CHANGED
@@ -1,4 +1,3 @@
1
1
  %header(role="banner")
2
- %hgroup
3
- %h1= @heading
4
- %h2= @subtitle
2
+ %h1= @heading
3
+ %h2= @subtitle
data/views/layout.haml CHANGED
@@ -8,13 +8,13 @@
8
8
  - if @keywords
9
9
  %meta(name="keywords" content=@keywords)
10
10
  %title= @title
11
- %link(href='http://fonts.googleapis.com/css?family=Roboto+Slab:400,700' rel='stylesheet' type='text/css')
11
+ %link(href='//fonts.googleapis.com/css?family=Roboto+Slab:400,700' rel='stylesheet' type='text/css')
12
12
  <!--[if ! lte IE 6]><!-->
13
13
  %link(href="#{path_to('/css/master.css')}" media="screen" rel="stylesheet")
14
14
  - local_stylesheet_link_tag('local')
15
15
  <!--<![endif]-->
16
16
  /[if lte IE 6]
17
- %link(rel="stylesheet" href="http://universal-ie6-css.googlecode.com/files/ie6.1.1.css" media="screen, projection")
17
+ %link(rel="stylesheet" href="//universal-ie6-css.googlecode.com/files/ie6.1.1.css" media="screen, projection")
18
18
  /[if lt IE 9]
19
19
  %script(src="//html5shim.googlecode.com/svn/trunk/html5.js")
20
20
  %script(src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.1.0/respond.min.js")
data/views/master.sass CHANGED
@@ -70,7 +70,7 @@ li
70
70
 
71
71
  blockquote
72
72
  margin: $vertical-margin 0
73
- padding: 0 $vertical-margin / 2
73
+ padding: 0 calc($vertical-margin / 2)
74
74
  border-left: 5px solid $tint
75
75
 
76
76
  font-style: italic
data/views/mixins.sass CHANGED
@@ -1,5 +1,5 @@
1
1
  // Default ratios between font sizes; used to maintain the type hierarchy.
2
- // http://www.markboulton.co.uk/journal/comments/five-simple-steps-to-better-typography-part-4
2
+ // https://www.markboulton.co.uk/journal/comments/five-simple-steps-to-better-typography-part-4
3
3
 
4
4
  $size5: 2.18em
5
5
  $size4: 1.64em
@@ -23,7 +23,7 @@ $nav-link-color: desaturate(lighten($link-color, 10%), 25%)
23
23
  $meta-color: #87877D
24
24
 
25
25
  @function empx($em, $base: 16px)
26
- @return ($em / 1em) * $base
26
+ @return calc($em / 1em) * $base
27
27
 
28
28
  // Layout settings
29
29
 
data/views/normalize.scss CHANGED
@@ -15,7 +15,6 @@ figcaption,
15
15
  figure,
16
16
  footer,
17
17
  header,
18
- hgroup,
19
18
  main,
20
19
  nav,
21
20
  section,
data/views/sitemap.haml CHANGED
@@ -1,5 +1,5 @@
1
1
  !!! XML
2
- %urlset(xmlns="http://www.sitemaps.org/schemas/sitemap/0.9")
2
+ %urlset(xmlns="https://www.sitemaps.org/schemas/sitemap/0.9")
3
3
  %url
4
4
  %loc= path_to('/', :uri => true)
5
5
  %changefreq daily
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nesta
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Graham Ashton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-28 00:00:00.000000000 Z
11
+ date: 2023-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: haml
@@ -50,14 +50,28 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '2.0'
53
+ version: '2'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '2.0'
60
+ version: '2'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
61
75
  - !ruby/object:Gem::Dependency
62
76
  name: rdiscount
63
77
  requirement: !ruby/object:Gem::Requirement
@@ -87,19 +101,19 @@ dependencies:
87
101
  - !ruby/object:Gem::Version
88
102
  version: '4.2'
89
103
  - !ruby/object:Gem::Dependency
90
- name: sassc
104
+ name: sass-embedded
91
105
  requirement: !ruby/object:Gem::Requirement
92
106
  requirements:
93
- - - ">="
107
+ - - "~>"
94
108
  - !ruby/object:Gem::Version
95
- version: '2.2'
109
+ version: '1.58'
96
110
  type: :runtime
97
111
  prerelease: false
98
112
  version_requirements: !ruby/object:Gem::Requirement
99
113
  requirements:
100
- - - ">="
114
+ - - "~>"
101
115
  - !ruby/object:Gem::Version
102
- version: '2.2'
116
+ version: '1.58'
103
117
  - !ruby/object:Gem::Dependency
104
118
  name: sinatra
105
119
  requirement: !ruby/object:Gem::Requirement
@@ -198,20 +212,6 @@ dependencies:
198
212
  - - ">="
199
213
  - !ruby/object:Gem::Version
200
214
  version: '0'
201
- - !ruby/object:Gem::Dependency
202
- name: rake
203
- requirement: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - ">="
206
- - !ruby/object:Gem::Version
207
- version: '0'
208
- type: :development
209
- prerelease: false
210
- version_requirements: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - ">="
213
- - !ruby/object:Gem::Version
214
- version: '0'
215
215
  description: |
216
216
  Nesta is a lightweight Content Management System, written in Ruby using
217
217
  the Sinatra web framework. Nesta has the simplicity of a static site
@@ -248,6 +248,7 @@ files:
248
248
  - lib/nesta.rb
249
249
  - lib/nesta/app.rb
250
250
  - lib/nesta/commands.rb
251
+ - lib/nesta/commands/build.rb
251
252
  - lib/nesta/commands/demo.rb
252
253
  - lib/nesta/commands/demo/content.rb
253
254
  - lib/nesta/commands/edit.rb
@@ -268,6 +269,9 @@ files:
268
269
  - lib/nesta/overrides.rb
269
270
  - lib/nesta/path.rb
270
271
  - lib/nesta/plugin.rb
272
+ - lib/nesta/static/assets.rb
273
+ - lib/nesta/static/html_file.rb
274
+ - lib/nesta/static/site.rb
271
275
  - lib/nesta/system_command.rb
272
276
  - lib/nesta/version.rb
273
277
  - nesta.gemspec
@@ -298,6 +302,7 @@ files:
298
302
  - test/fixtures/nesta-plugin-test/lib/nesta-plugin-test/version.rb
299
303
  - test/fixtures/nesta-plugin-test/nesta-plugin-test.gemspec
300
304
  - test/integration/atom_feed_test.rb
305
+ - test/integration/commands/build_test.rb
301
306
  - test/integration/commands/demo/content_test.rb
302
307
  - test/integration/commands/edit_test.rb
303
308
  - test/integration/commands/new_test.rb
@@ -320,6 +325,9 @@ files:
320
325
  - test/unit/page_test.rb
321
326
  - test/unit/path_test.rb
322
327
  - test/unit/plugin_test.rb
328
+ - test/unit/static/assets_test.rb
329
+ - test/unit/static/html_file_test.rb
330
+ - test/unit/static/site_test.rb
323
331
  - test/unit/system_command_test.rb
324
332
  - views/analytics.haml
325
333
  - views/atom.haml
@@ -340,7 +348,7 @@ files:
340
348
  - views/sidebar.haml
341
349
  - views/sitemap.haml
342
350
  - views/summaries.haml
343
- homepage: http://nestacms.com
351
+ homepage: https://nestacms.com
344
352
  licenses: []
345
353
  metadata: {}
346
354
  post_install_message:
@@ -358,7 +366,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
358
366
  - !ruby/object:Gem::Version
359
367
  version: '0'
360
368
  requirements: []
361
- rubygems_version: 3.3.7
369
+ rubygems_version: 3.4.6
362
370
  signing_key:
363
371
  specification_version: 4
364
372
  summary: Ruby CMS, written in Sinatra