nesta 0.12.0 → 0.14.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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/tests.yml +21 -0
  3. data/.gitignore +1 -0
  4. data/.gitmodules +0 -6
  5. data/CHANGES +99 -0
  6. data/Gemfile.lock +43 -39
  7. data/LICENSE +1 -1
  8. data/README.md +9 -14
  9. data/RELEASING.md +9 -7
  10. data/Rakefile +2 -2
  11. data/bin/nesta +5 -2
  12. data/config/deploy.rb.sample +1 -1
  13. data/lib/nesta/app.rb +1 -2
  14. data/lib/nesta/commands/build.rb +38 -0
  15. data/lib/nesta/commands/demo/content.rb +8 -10
  16. data/lib/nesta/commands/edit.rb +2 -6
  17. data/lib/nesta/commands/new.rb +11 -12
  18. data/lib/nesta/commands/plugin/create.rb +7 -9
  19. data/lib/nesta/commands/template.rb +20 -0
  20. data/lib/nesta/commands/theme/create.rb +8 -8
  21. data/lib/nesta/commands/theme/enable.rb +3 -5
  22. data/lib/nesta/commands/theme/install.rb +6 -10
  23. data/lib/nesta/commands.rb +9 -0
  24. data/lib/nesta/config.rb +49 -75
  25. data/lib/nesta/config_file.rb +29 -0
  26. data/lib/nesta/helpers.rb +0 -5
  27. data/lib/nesta/models.rb +33 -34
  28. data/lib/nesta/navigation.rb +0 -5
  29. data/lib/nesta/overrides.rb +32 -43
  30. data/lib/nesta/plugin.rb +0 -16
  31. data/lib/nesta/static/assets.rb +50 -0
  32. data/lib/nesta/static/html_file.rb +26 -0
  33. data/lib/nesta/static/site.rb +104 -0
  34. data/lib/nesta/system_command.rb +15 -0
  35. data/lib/nesta/version.rb +1 -1
  36. data/lib/nesta.rb +7 -4
  37. data/nesta.gemspec +5 -5
  38. data/templates/config/config.yml +28 -2
  39. data/templates/themes/README.md +1 -1
  40. data/templates/themes/views/master.sass +1 -1
  41. data/test/integration/atom_feed_test.rb +1 -1
  42. data/test/integration/commands/build_test.rb +53 -0
  43. data/test/integration/commands/demo/content_test.rb +8 -6
  44. data/test/integration/commands/edit_test.rb +4 -4
  45. data/test/integration/commands/new_test.rb +22 -51
  46. data/test/integration/commands/plugin/create_test.rb +7 -4
  47. data/test/integration/commands/theme/create_test.rb +8 -2
  48. data/test/integration/commands/theme/enable_test.rb +7 -1
  49. data/test/integration/commands/theme/install_test.rb +13 -9
  50. data/test/integration/overrides_test.rb +1 -1
  51. data/test/integration/sitemap_test.rb +1 -1
  52. data/test/support/temporary_files.rb +1 -1
  53. data/test/support/test_configuration.rb +2 -4
  54. data/test/unit/config_test.rb +25 -94
  55. data/test/unit/static/assets_test.rb +56 -0
  56. data/test/unit/static/html_file_test.rb +41 -0
  57. data/test/unit/static/site_test.rb +104 -0
  58. data/test/unit/system_command_test.rb +20 -0
  59. data/views/atom.haml +2 -2
  60. data/views/comments.haml +2 -2
  61. data/views/footer.haml +1 -1
  62. data/views/header.haml +2 -3
  63. data/views/layout.haml +2 -2
  64. data/views/master.sass +1 -1
  65. data/views/mixins.sass +2 -2
  66. data/views/normalize.scss +0 -1
  67. data/views/sitemap.haml +1 -1
  68. metadata +44 -31
  69. data/.hound.yml +0 -2
  70. data/.rspec +0 -1
  71. data/.travis.yml +0 -11
  72. data/lib/nesta/commands/command.rb +0 -57
  73. data/test/support/silence_commands_during_tests.rb +0 -5
  74. data/test/unit/commands_test.rb +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a79722f3a6494862b4365151dd2300b0eccece20b6cb711298c753763926d9ea
4
- data.tar.gz: 4eca7c5b41e3103500237791960658ca8a3b0d1bf50e83860d74d531dd40fb17
3
+ metadata.gz: e14e3ed99700277225c068df787864f52f19385f08469d91bf1a8f4073e24568
4
+ data.tar.gz: 84e9c0fb31ba8b380b0ce86f9edc6f660fd8a8f9474ad28400e7c921fd745c01
5
5
  SHA512:
6
- metadata.gz: 36a89f709fa69d85e340a93ef44ca6fa43a31f54585d0da3c7ca359ed40dddd1003374a75feb0350bd53403595df0f71e513255a16e13dce0568c434fca62d9e
7
- data.tar.gz: b3c443a50646d62b70247743c6157433a946d98566b72631284217458e218908720c2ce3bf01534630458cb35cd4c3045d187861385ad3ada43256f74e55f054
6
+ metadata.gz: e39c4ada00a1ac3b4be18b6887240a670d4f1c050023771dc71fa6703bbb315bac54f959053788dc7018761a5bfc3e1fe387486e856629a785ae3098c8203704
7
+ data.tar.gz: 4da9e195b6679df8c9f2c9ec3a07b780409b2a68f6cffe66feab9276a0ee90b987b7221a13d5f363c0b700c3d5b8d956e9b6a5753a0aa81058e1e10458ced75f
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: run-tests
3
+
4
+ on: [push, pull_request]
5
+
6
+ jobs:
7
+ test:
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ ruby: ["2.7", "3.0", "3.1", "3.2", "head"]
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v3
15
+ - uses: ruby/setup-ruby@v1
16
+ with:
17
+ ruby-version: ${{ matrix.ruby }}
18
+ bundler-cache: true
19
+ - run: bundle exec rake test
20
+ env:
21
+ REPORTER: default
data/.gitignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /.rbenv-version
7
7
  /.ruby-version
8
8
  /.rvmrc
9
+ /checksums
9
10
  /config/config.yml
10
11
  /config/deploy.rb
11
12
  /db/*.db
data/.gitmodules CHANGED
@@ -1,6 +0,0 @@
1
- [submodule "test/fixtures/demo-content.git"]
2
- path = test/fixtures/demo-content.git
3
- url = https://github.com/gma/nesta-demo-content.git
4
- [submodule "test/fixtures/nesta-theme-test"]
5
- path = test/fixtures/nesta-theme-test.git
6
- url = https://github.com/gma/nesta-theme-test.git
data/CHANGES CHANGED
@@ -1,3 +1,102 @@
1
+ = 0.14.0 / (23 March 2023)
2
+
3
+ * Nesta can now be used as a Static Site Generator (SSG) with its new
4
+ `nesta build` command! Server Side Rendering (SSR) is still supported,
5
+ as is development with a local web server.
6
+
7
+ Back in the days when Heroku allowed us to deploy Nesta on their
8
+ platform for free, there really didn't seem to be any point in
9
+ converting a site to a bunch of static HTML and CSS files. If you
10
+ enabled the appropriate HTTP cache-control headers, Heroku would
11
+ automatically cache an entire site in memory, so there was no real
12
+ performance benefit. That's why Nesta never had SSG support, even
13
+ though everybody seemed to think it was cool.
14
+
15
+ But Heroku is not free any more. And there's a wide choice of hosting
16
+ platforms for static site generators. So why not?
17
+
18
+ See the docs for full details, but in short:
19
+
20
+ - If you run `bundle exec nesta build`, Nesta will generate a static
21
+ copy of your site in a ./dist directory.
22
+
23
+ - You might want to add ./dist to your .gitignore file.
24
+
25
+ - There are a couple of new config settings in config.yml.
26
+
27
+ - You can configure hosting platforms like Netlify, AWS Amplify,
28
+ Vercel (and others) to redeploy your site by running the build
29
+ command when you push changes to your git repository.
30
+
31
+ This was fun to implement. (Graham Ashton)
32
+
33
+ * Sass and SCSS files are now rendered with Dart Sass (the main implementation
34
+ of Sass). We had been using the (now deprecated) libsass library.
35
+
36
+ Sass has changed a bit since libsass was current, so you may need to make
37
+ some small changes to your stylesheets. Documentation that should help with
38
+ those changes can be found here:
39
+
40
+ https://sass-lang.com/documentation/breaking-changes
41
+
42
+ * Replace Nesta's custom template-locating code with Sinatra's #find_template
43
+ method. (Graham Ashton, suggested by Lilith River)
44
+
45
+ * Update multiple dependencies to fix security vulnerabilities; see commit
46
+ history for details. (Graham Ashton)
47
+
48
+ * Built-in support for configuring Nesta via environment variables has been
49
+ dropped. (Graham Ashton)
50
+
51
+ Should you still want to configure Nesta via the environment you can
52
+ use Erb in `config.yml`, like this:
53
+
54
+ some_value: <%= ENV.fetch('NESTA_VARIABLE') %>
55
+
56
+ * During a tidy up of the config file code, the `yaml_conf` attribute on
57
+ the Nesta::Config class has been renamed to `config`. This is unlikely
58
+ to affect you, but if it does just change the name. (Graham Ashton)
59
+
60
+ * The `yaml_path` attribute on the Nesta::Config class has been moved
61
+ to `Nesta::ConfigFile.path`. Again, I can't imagine why anybody would
62
+ have written code that used it, but it's a breaking change so I'm
63
+ mentioning it. (Graham Ashton)
64
+
65
+ * Support for loading plugins from a local directory (which was deprecated
66
+ in version 0.9.10) has been removed. (Graham Ashton)
67
+
68
+ * The local_stylesheet? helper method (deprecated in 0.9.1) has been
69
+ removed. (Graham Ashton)
70
+
71
+ * The breadcrumb_label helper method (deprecated in 0.9.3) has been removed.
72
+ (Graham Ashton)
73
+
74
+ = 0.13.0 / (28 September 2022)
75
+
76
+ * Update dependencies in order to support Ruby 3.0 and above.
77
+ (Graham Ashton)
78
+
79
+ * Upgrade multiple dependencies to fix security vulnerabilities.
80
+ (Graham Ashton)
81
+
82
+ * Switch Git repository URLs to HTTPS (fixes the demo:content command).
83
+ (Graham Ashton)
84
+
85
+ * Update dependency on Haml; Nesta currently requires a version lower
86
+ than 6.0. (Graham Ashton)
87
+
88
+ * Refactor: Extracted logic for running external processes into
89
+ a new `Nesta::SystemCommand` class. (Graham Ashton)
90
+
91
+ * Refactor: Created a new `Nesta::Commands::Template` class for
92
+ commands that create files from templates. (Graham Ashton)
93
+
94
+ * Refactor: Move logic for editing the config file from within Nesta's
95
+ commands into new `Nesta::ConfigFile` class. (Graham Ashton)
96
+
97
+ * Stopped the test suite from executing external commands during tests.
98
+ (Graham Ashton)
99
+
1
100
  = 0.12.0 / (30 June 2020)
2
101
 
3
102
  * Upgrade to Sinatra 2 and Rack 2. (Graham Ashton)
data/Gemfile.lock CHANGED
@@ -1,13 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nesta (0.12.0)
4
+ nesta (0.14.0)
5
5
  RedCloth (~> 4.2)
6
- haml (>= 3.1)
6
+ haml (>= 3.1, < 6.0)
7
7
  haml-contrib (>= 1.0)
8
- rack (~> 2.0)
8
+ rack (~> 2)
9
+ rake
9
10
  rdiscount (~> 2.1)
10
- sassc (>= 2.2)
11
+ sass-embedded (~> 1.58)
11
12
  sinatra (~> 2.0)
12
13
  tilt (~> 2.0)
13
14
 
@@ -15,8 +16,8 @@ GEM
15
16
  remote: https://rubygems.org/
16
17
  specs:
17
18
  RedCloth (4.3.2)
18
- addressable (2.7.0)
19
- public_suffix (>= 2.0.2, < 5.0)
19
+ addressable (2.8.1)
20
+ public_suffix (>= 2.0.2, < 6.0)
20
21
  ansi (1.5.0)
21
22
  builder (3.2.4)
22
23
  byebug (11.1.3)
@@ -27,21 +28,22 @@ GEM
27
28
  rack (>= 1.0.0)
28
29
  rack-test (>= 0.5.4)
29
30
  xpath (>= 2.0, < 4.0)
30
- ffi (1.13.1)
31
- haml (5.1.2)
31
+ ffi (1.15.5)
32
+ google-protobuf (3.22.2)
33
+ haml (5.2.2)
32
34
  temple (>= 0.8.0)
33
35
  tilt
34
36
  haml-contrib (1.0.0.1)
35
37
  haml (>= 3.2.0.alpha.13)
36
- kgio (2.11.3)
38
+ kgio (2.11.4)
37
39
  listen (1.3.1)
38
40
  rb-fsevent (>= 0.9.3)
39
41
  rb-inotify (>= 0.9)
40
42
  rb-kqueue (>= 0.2)
41
- mini_mime (1.0.2)
42
- mini_portile2 (2.4.0)
43
- minitest (5.14.1)
44
- minitest-reporters (1.4.2)
43
+ mini_mime (1.1.2)
44
+ mini_portile2 (2.8.1)
45
+ minitest (5.18.0)
46
+ minitest-reporters (1.6.0)
45
47
  ansi
46
48
  builder
47
49
  minitest (>= 5.0)
@@ -51,36 +53,39 @@ GEM
51
53
  rb-fsevent (>= 0.9)
52
54
  rb-inotify (>= 0.8)
53
55
  unicorn (>= 4.5)
54
- mustermann (1.1.1)
56
+ mustermann (2.0.2)
55
57
  ruby2_keywords (~> 0.0.1)
56
- nokogiri (1.10.9)
57
- mini_portile2 (~> 2.4.0)
58
- public_suffix (4.0.5)
59
- rack (2.2.3)
60
- rack-protection (2.0.8.1)
58
+ nokogiri (1.14.2)
59
+ mini_portile2 (~> 2.8.0)
60
+ racc (~> 1.4)
61
+ public_suffix (5.0.1)
62
+ racc (1.6.2)
63
+ rack (2.2.6.4)
64
+ rack-protection (2.2.4)
61
65
  rack
62
- rack-test (1.1.0)
63
- rack (>= 1.0, < 3)
64
- raindrops (0.19.1)
65
- rake (13.0.1)
66
- rb-fsevent (0.10.4)
66
+ rack-test (2.0.2)
67
+ rack (>= 1.3)
68
+ raindrops (0.20.1)
69
+ rake (13.0.6)
70
+ rb-fsevent (0.11.2)
67
71
  rb-inotify (0.10.1)
68
72
  ffi (~> 1.0)
69
- rb-kqueue (0.2.5)
73
+ rb-kqueue (0.2.8)
70
74
  ffi (>= 0.5.0)
71
- rdiscount (2.2.0.1)
72
- ruby-progressbar (1.10.1)
73
- ruby2_keywords (0.0.2)
74
- sassc (2.4.0)
75
- ffi (~> 1.9)
76
- sinatra (2.0.8.1)
77
- mustermann (~> 1.0)
78
- rack (~> 2.0)
79
- rack-protection (= 2.0.8.1)
75
+ rdiscount (2.2.7)
76
+ ruby-progressbar (1.13.0)
77
+ ruby2_keywords (0.0.5)
78
+ sass-embedded (1.58.3)
79
+ google-protobuf (~> 3.21)
80
+ rake (>= 10.0.0)
81
+ sinatra (2.2.4)
82
+ mustermann (~> 2.0)
83
+ rack (~> 2.2)
84
+ rack-protection (= 2.2.4)
80
85
  tilt (~> 2.0)
81
- temple (0.8.2)
82
- tilt (2.0.10)
83
- unicorn (5.5.5)
86
+ temple (0.10.0)
87
+ tilt (2.1.0)
88
+ unicorn (6.1.0)
84
89
  kgio (~> 2.6)
85
90
  raindrops (~> 0.7)
86
91
  xpath (3.2.0)
@@ -96,7 +101,6 @@ DEPENDENCIES
96
101
  minitest-reporters
97
102
  mr-sparkle
98
103
  nesta!
99
- rake
100
104
 
101
105
  BUNDLED WITH
102
- 2.1.4
106
+ 2.4.6
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008-2020 Graham Ashton
1
+ Copyright (c) 2008-2022 Graham Ashton
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Nesta - a CMS for Ruby Developers
2
2
 
3
- A CMS for small web sites and blogs, written in [Sinatra][frank].
3
+ A file-based CMS for web sites and blogs, written in [Sinatra][frank].
4
4
 
5
5
  Content can be written in [Markdown][markdown] or [Textile][textile] and
6
6
  stored in text files (though you can also use Haml if you need to add
@@ -44,9 +44,8 @@ full instructions).
44
44
  ## Support
45
45
 
46
46
  There's plenty of information on <http://nestacms.com>. If you need some
47
- help with anything just jump on the [mailing list][] and ask.
48
-
49
- [mailing list]: http://nestacms.com/support
47
+ help with anything feel free to file an issue, or contact me on Mastodon
48
+ (@gma@hachyderm.io) or Twitter (@grahamashton).
50
49
 
51
50
  If you like Nesta you can keep up with developments by following [@nestacms][]
52
51
  on Twitter, and on [the blog][].
@@ -54,21 +53,17 @@ on Twitter, and on [the blog][].
54
53
  [@nestacms]: http://twitter.com/nestacms
55
54
  [the blog]: http://nestacms.com/blog
56
55
 
56
+ ![Tests](https://github.com/gma/nesta/actions/workflows/tests.yml/badge.svg)
57
+
57
58
  ## Contributing
58
59
 
59
- If you want to add a new feature, I recommend that you post a quick
60
- message to the [mailing list][] before you start coding. I'm likely to
61
- suggest that we implement it as a [plugin][] (to keep Nesta itself lean
62
- and simple), so you might save yourself some time if we chat about a
63
- good approach before you start.
60
+ If you want to add a new feature, I recommend that you file an issue to discuss
61
+ it before you start coding. I'm likely to suggest that we implement it as a
62
+ [plugin][] (to keep Nesta itself lean and simple), so you might save yourself
63
+ some time if we chat about a good approach before you start.
64
64
 
65
65
  [plugin]: http://nestacms.com/docs/plugins
66
66
 
67
- If you think you've found a bug, please bring that up on the [mailing
68
- list][] too, rather than creating an issue on GitHub straight away.
69
- You'll probably get a faster response on the mailing list, as I'm the
70
- only person who'll see your new issue.
71
-
72
67
  -- Graham ([@grahamashton][] on Twitter).
73
68
 
74
69
  [@grahamashton]: http://twitter.com/grahamashton
data/RELEASING.md CHANGED
@@ -3,19 +3,21 @@
3
3
  When it comes time to release a new version of the Nesta gem, these are
4
4
  the steps:
5
5
 
6
- 1. Bump the version number in `lib/nesta/version.rb`. This will cause
6
+ 1. Check the versions of Ruby used in `.github/workflows` are up to date. If
7
+ new Ruby versions need testing, update the config and re-run the build.
8
+
9
+ 2. Bump the version number in `lib/nesta/version.rb`. This will cause
7
10
  the version number in `Gemfile.lock` to be updated too, so regenerate
8
11
  it now and check them in together.
9
12
 
10
- 2. Update the `CHANGES` file with a summary of significant changes since
13
+ 3. Update the `CHANGES` file with a summary of significant changes since
11
14
  the previous release.
12
15
 
13
- 3. Check the versions of Ruby used in `.travis.yml` are up to date. If new
14
- Ruby versions need testing, update the config and re-run the Travis build.
16
+ 4. Commit these changes with a commit message of 'Bump version to <version>'
15
17
 
16
- 4. Generate a new site with the `nesta` command, install the demo content,
18
+ 5. Generate a new site with the `nesta` command, install the demo content,
17
19
  check that it runs okay locally.
18
20
 
19
- 5. If everything seems fine, run `rake release`.
21
+ 6. If everything seems fine, run `rake release`.
20
22
 
21
- 6. Publish an announcement blog post and email the list.
23
+ 7. Publish an announcement blog post and email the list.
data/Rakefile CHANGED
@@ -15,11 +15,11 @@ namespace :test do
15
15
  end
16
16
 
17
17
  task units: :set_load_path do
18
- load_tests('unit')
18
+ load_tests('unit/**')
19
19
  end
20
20
 
21
21
  task integrations: :set_load_path do
22
- load_tests('integration')
22
+ load_tests('integration/**')
23
23
  end
24
24
  end
25
25
 
data/bin/nesta CHANGED
@@ -24,6 +24,7 @@ COMMANDS
24
24
  theme:install <url> Install a theme from a git repository.
25
25
  theme:enable <name> Make the theme active, updating config.yml.
26
26
  theme:create <name> Makes a template for a new theme in ./themes.
27
+ build [path] Build static copy of site (path defaults to ./dist)
27
28
 
28
29
  OPTIONS FOR new
29
30
  --git Create a new git repository for the project.
@@ -41,6 +42,7 @@ EOF
41
42
  def self.parse_command_line
42
43
  opts = GetoptLong.new(
43
44
  ['--bash-completion', GetoptLong::NO_ARGUMENT],
45
+ ['--domain', GetoptLong::REQUIRED_ARGUMENT],
44
46
  ['--git', GetoptLong::NO_ARGUMENT],
45
47
  ['--help', '-h', GetoptLong::NO_ARGUMENT],
46
48
  ['--version', '-v', GetoptLong::NO_ARGUMENT],
@@ -91,7 +93,7 @@ EOF
91
93
  rescue NameError
92
94
  usage
93
95
  else
94
- command_cls.new(ARGV[0], options).execute
96
+ command_cls.new(ARGV[0], options).execute(Nesta::SystemCommand.new)
95
97
  end
96
98
  rescue RuntimeError => e
97
99
  $stderr.puts "ERROR: #{e}"
@@ -118,7 +120,7 @@ _nesta() {
118
120
  cur="${COMP_WORDS[COMP_CWORD]}"
119
121
  prev="${COMP_WORDS[COMP_CWORD-1]}"
120
122
 
121
- opts="new 'demo:content' edit 'plugin:create' 'theme:install' 'theme:enable' 'theme:create'"
123
+ opts="new 'demo:content' edit 'plugin:create' 'theme:install' 'theme:enable' 'theme:create' build"
122
124
 
123
125
  case "${cur}" in
124
126
  theme:*)
@@ -172,6 +174,7 @@ _1st_arguments=(
172
174
  'theme\:install:Install a theme from a git repository'
173
175
  'theme\:enable:Make the theme active, updating config.yml'
174
176
  'theme\:create:Makes a template for a new theme in ./themes'
177
+ 'build\:Build static copy of site'
175
178
  )
176
179
 
177
180
  local expl
@@ -1,5 +1,5 @@
1
1
  set :application, "nesta"
2
- set :repository, "git://github.com/gma/nesta.git"
2
+ set :repository, "https://github.com/gma/nesta.git"
3
3
 
4
4
  # Set :user if you want to connect (via ssh) to your server using a
5
5
  # different username. You will also need to include the user in :domain
data/lib/nesta/app.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'sinatra/base'
2
2
  require 'haml'
3
- require 'sassc'
4
3
 
5
4
  require File.expand_path('../nesta', File.dirname(__FILE__))
6
5
  require File.expand_path('env', File.dirname(__FILE__))
@@ -18,6 +17,7 @@ module Nesta
18
17
  set :root, Nesta::Env.root
19
18
  set :views, File.expand_path('../../views', File.dirname(__FILE__))
20
19
  set :haml, { format: :html5 }
20
+ set :public_folder, 'public'
21
21
 
22
22
  helpers Overrides::Renderers
23
23
  helpers Navigation::Renderers
@@ -90,5 +90,4 @@ module Nesta
90
90
  end
91
91
  end
92
92
 
93
- Nesta::Plugin.load_local_plugins
94
93
  Nesta::Plugin.initialize_plugins
@@ -0,0 +1,38 @@
1
+ require 'rake'
2
+
3
+ require_relative '../static/assets'
4
+ require_relative '../static/site'
5
+
6
+ module Nesta
7
+ module Commands
8
+ class Build
9
+ DEFAULT_DESTINATION = "dist"
10
+
11
+ attr_accessor :domain
12
+
13
+ def initialize(build_dir = nil, options = {})
14
+ @build_dir = build_dir || DEFAULT_DESTINATION
15
+ if @build_dir == Nesta::App.settings.public_folder
16
+ raise RuntimeError.new("#{@build_dir} is already used, for assets")
17
+ end
18
+ @domain = options['domain'] || configured_domain_name
19
+ end
20
+
21
+ def configured_domain_name
22
+ Nesta::Config.build.fetch('domain', 'localhost')
23
+ end
24
+
25
+ def execute(process)
26
+ logger = Proc.new { |message| puts message }
27
+ site = Nesta::Static::Site.new(@build_dir, @domain, logger)
28
+ site.render_pages
29
+ site.render_not_found
30
+ site.render_atom_feed
31
+ site.render_sitemap
32
+ site.render_templated_assets
33
+ Nesta::Static::Assets.new(@build_dir, logger).copy_attachments
34
+ Nesta::Static::Assets.new(@build_dir, logger).copy_public_folder
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,12 +1,10 @@
1
- require File.expand_path('../command', File.dirname(__FILE__))
1
+ require File.expand_path('../../config_file', File.dirname(__FILE__))
2
2
 
3
3
  module Nesta
4
4
  module Commands
5
5
  module Demo
6
6
  class Content
7
- include Command
8
-
9
- @demo_repository = 'git://github.com/gma/nesta-demo-content.git'
7
+ @demo_repository = 'https://github.com/gma/nesta-demo-content.git'
10
8
  class << self
11
9
  attr_accessor :demo_repository
12
10
  end
@@ -15,12 +13,12 @@ module Nesta
15
13
  @dir = 'content-demo'
16
14
  end
17
15
 
18
- def clone_or_update_repository
16
+ def clone_or_update_repository(process)
19
17
  path = Nesta::Path.local(@dir)
20
18
  if File.exist?(path)
21
- FileUtils.cd(path) { run_process('git', 'pull', 'origin', 'master') }
19
+ FileUtils.cd(path) { process.run('git', 'pull', 'origin', 'master') }
22
20
  else
23
- run_process('git', 'clone', self.class.demo_repository, path)
21
+ process.run('git', 'clone', self.class.demo_repository, path)
24
22
  end
25
23
  end
26
24
 
@@ -45,10 +43,10 @@ module Nesta
45
43
  end
46
44
  end
47
45
 
48
- def execute
49
- clone_or_update_repository
46
+ def execute(process)
47
+ clone_or_update_repository(process)
50
48
  configure_git_to_ignore_repo
51
- update_config_yaml(/^\s*#?\s*content:.*/, "content: #{@dir}")
49
+ Nesta::ConfigFile.new.set_value('content', @dir)
52
50
  end
53
51
  end
54
52
  end
@@ -1,20 +1,16 @@
1
- require File.expand_path('command', File.dirname(__FILE__))
2
-
3
1
  module Nesta
4
2
  module Commands
5
3
  class Edit
6
- include Command
7
-
8
4
  def initialize(*args)
9
5
  @filename = Nesta::Config.page_path(args.shift)
10
6
  end
11
7
 
12
- def execute
8
+ def execute(process)
13
9
  editor = ENV.fetch('EDITOR')
14
10
  rescue IndexError
15
11
  $stderr.puts "No editor: set EDITOR environment variable"
16
12
  else
17
- run_process(editor, @filename)
13
+ process.run(editor, @filename)
18
14
  end
19
15
  end
20
16
  end
@@ -1,10 +1,6 @@
1
- require File.expand_path('command', File.dirname(__FILE__))
2
-
3
1
  module Nesta
4
2
  module Commands
5
3
  class New
6
- include Command
7
-
8
4
  def initialize(*args)
9
5
  path = args.shift
10
6
  options = args.shift || {}
@@ -26,18 +22,19 @@ module Nesta
26
22
  @options['vlad']
27
23
  end
28
24
 
29
- def create_repository
25
+ def create_repository(process)
30
26
  FileUtils.cd(@path) do
31
27
  File.open('.gitignore', 'w') do |file|
32
- file.puts %w[._* .*.swp .bundle .DS_Store .sass-cache].join("\n")
28
+ lines = %w[._* .*.swp .bundle .DS_Store .sass-cache dist]
29
+ file.puts lines.join("\n")
33
30
  end
34
- run_process('git', 'init')
35
- run_process('git', 'add', '.')
36
- run_process('git', 'commit', '-m', 'Initial commit')
31
+ process.run('git', 'init')
32
+ process.run('git', 'add', '.')
33
+ process.run('git', 'commit', '-m', 'Initial commit')
37
34
  end
38
35
  end
39
36
 
40
- def execute
37
+ def execute(process)
41
38
  make_directories
42
39
  templates = {
43
40
  'config.ru' => "#{@path}/config.ru",
@@ -49,8 +46,10 @@ module Nesta
49
46
  if @options['vlad']
50
47
  templates['config/deploy.rb'] = "#{@path}/config/deploy.rb"
51
48
  end
52
- copy_templates(templates)
53
- create_repository if @options['git']
49
+ templates.each do |src, dest|
50
+ Nesta::Commands::Template.new(src).copy_to(dest, binding)
51
+ end
52
+ create_repository(process) if @options['git']
54
53
  end
55
54
  end
56
55
  end
@@ -1,11 +1,7 @@
1
- require File.expand_path('../command', File.dirname(__FILE__))
2
-
3
1
  module Nesta
4
2
  module Commands
5
3
  module Plugin
6
4
  class Create
7
- include Command
8
-
9
5
  def initialize(*args)
10
6
  name = args.shift
11
7
  name.nil? && (raise UsageError.new('name not specified'))
@@ -54,9 +50,9 @@ module Nesta
54
50
  File.join(@gem_name, path)
55
51
  end
56
52
 
57
- def execute
53
+ def execute(process)
58
54
  make_directories
59
- copy_templates(
55
+ {
60
56
  'plugins/README.md' => gem_path('README.md'),
61
57
  'plugins/gitignore' => gem_path('.gitignore'),
62
58
  'plugins/plugin.gemspec' => gem_path("#{@gem_name}.gemspec"),
@@ -65,10 +61,12 @@ module Nesta
65
61
  'plugins/lib/version.rb' => gem_path("lib/#{@gem_name}/version.rb"),
66
62
  'plugins/lib/init.rb' => gem_path("lib/#{@gem_name}/init.rb"),
67
63
  'plugins/Rakefile' => gem_path('Rakefile')
68
- )
64
+ }.each do |src, dest|
65
+ Nesta::Commands::Template.new(src).copy_to(dest, binding)
66
+ end
69
67
  Dir.chdir(@gem_name) do
70
- run_process('git', 'init')
71
- run_process('git', 'add', '.')
68
+ process.run('git', 'init')
69
+ process.run('git', 'add', '.')
72
70
  end
73
71
  end
74
72