nesta 0.12.0 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/tests.yml +21 -0
- data/.gitmodules +0 -6
- data/CHANGES +26 -0
- data/Gemfile.lock +35 -33
- data/LICENSE +1 -1
- data/README.md +7 -14
- data/RELEASING.md +9 -7
- data/Rakefile +2 -2
- data/bin/nesta +1 -1
- data/config/deploy.rb.sample +1 -1
- data/lib/nesta/commands/demo/content.rb +8 -10
- 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 +6 -10
- data/lib/nesta/commands.rb +8 -0
- data/lib/nesta/config_file.rb +25 -0
- data/lib/nesta/system_command.rb +15 -0
- data/lib/nesta/version.rb +1 -1
- data/lib/nesta.rb +6 -1
- data/nesta.gemspec +1 -1
- data/test/integration/commands/demo/content_test.rb +8 -6
- data/test/integration/commands/edit_test.rb +4 -4
- data/test/integration/commands/new_test.rb +22 -51
- data/test/integration/commands/plugin/create_test.rb +7 -4
- data/test/integration/commands/theme/create_test.rb +8 -2
- data/test/integration/commands/theme/enable_test.rb +7 -1
- data/test/integration/commands/theme/install_test.rb +13 -9
- data/test/unit/system_command_test.rb +20 -0
- metadata +14 -9
- data/.hound.yml +0 -2
- data/.rspec +0 -1
- data/.travis.yml +0 -11
- data/lib/nesta/commands/command.rb +0 -57
- data/test/support/silence_commands_during_tests.rb +0 -5
- data/test/unit/commands_test.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e80fef7e8fe518a674eb7527d91410d162fca8288985971e641a3329ae192eef
|
4
|
+
data.tar.gz: bc6f671dc4f0ae10b403fa53b489f06c74ae8e9c6560ae49e08dc2518185dc22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 857872073a0ea318df15323bd0f9a64de0104106b45c0c749a2261e266866abc0dd38f475fa98de07fb9cb09ee41411b837ec91a1e7d581bb1924f697557184d
|
7
|
+
data.tar.gz: 828a24e35350cfae15ff093f42a67a6ee33faf48435b0e0d9ff831e3e5a1592b2e22db2910442eb39adc7642f5b3f451224dcf8f49fcc11d7a062e7a48f4b47c
|
@@ -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", "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/.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,29 @@
|
|
1
|
+
= 0.13.0 / (28 September 2022)
|
2
|
+
|
3
|
+
* Update dependencies in order to support Ruby 3.0 and above.
|
4
|
+
(Graham Ashton)
|
5
|
+
|
6
|
+
* Upgrade multiple dependencies to fix security vulnerabilities.
|
7
|
+
(Graham Ashton)
|
8
|
+
|
9
|
+
* Switch Git repository URLs to HTTPS (fixes the demo:content command).
|
10
|
+
(Graham Ashton)
|
11
|
+
|
12
|
+
* Update dependency on Haml; Nesta currently requires a version lower
|
13
|
+
than 6.0. (Graham Ashton)
|
14
|
+
|
15
|
+
* Refactor: Extracted logic for running external processes into
|
16
|
+
a new `Nesta::SystemCommand` class. (Graham Ashton)
|
17
|
+
|
18
|
+
* Refactor: Created a new `Nesta::Commands::Template` class for
|
19
|
+
commands that create files from templates. (Graham Ashton)
|
20
|
+
|
21
|
+
* Refactor: Move logic for editing the config file from within Nesta's
|
22
|
+
commands into new `Nesta::ConfigFile` class. (Graham Ashton)
|
23
|
+
|
24
|
+
* Stopped the test suite from executing external commands during tests.
|
25
|
+
(Graham Ashton)
|
26
|
+
|
1
27
|
= 0.12.0 / (30 June 2020)
|
2
28
|
|
3
29
|
* Upgrade to Sinatra 2 and Rack 2. (Graham Ashton)
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nesta (0.
|
4
|
+
nesta (0.13.0)
|
5
5
|
RedCloth (~> 4.2)
|
6
|
-
haml (>= 3.1)
|
6
|
+
haml (>= 3.1, < 6.0)
|
7
7
|
haml-contrib (>= 1.0)
|
8
8
|
rack (~> 2.0)
|
9
9
|
rdiscount (~> 2.1)
|
@@ -15,8 +15,8 @@ GEM
|
|
15
15
|
remote: https://rubygems.org/
|
16
16
|
specs:
|
17
17
|
RedCloth (4.3.2)
|
18
|
-
addressable (2.
|
19
|
-
public_suffix (>= 2.0.2, <
|
18
|
+
addressable (2.8.1)
|
19
|
+
public_suffix (>= 2.0.2, < 6.0)
|
20
20
|
ansi (1.5.0)
|
21
21
|
builder (3.2.4)
|
22
22
|
byebug (11.1.3)
|
@@ -27,21 +27,21 @@ GEM
|
|
27
27
|
rack (>= 1.0.0)
|
28
28
|
rack-test (>= 0.5.4)
|
29
29
|
xpath (>= 2.0, < 4.0)
|
30
|
-
ffi (1.
|
31
|
-
haml (5.
|
30
|
+
ffi (1.15.5)
|
31
|
+
haml (5.2.2)
|
32
32
|
temple (>= 0.8.0)
|
33
33
|
tilt
|
34
34
|
haml-contrib (1.0.0.1)
|
35
35
|
haml (>= 3.2.0.alpha.13)
|
36
|
-
kgio (2.11.
|
36
|
+
kgio (2.11.4)
|
37
37
|
listen (1.3.1)
|
38
38
|
rb-fsevent (>= 0.9.3)
|
39
39
|
rb-inotify (>= 0.9)
|
40
40
|
rb-kqueue (>= 0.2)
|
41
|
-
mini_mime (1.
|
42
|
-
mini_portile2 (2.
|
43
|
-
minitest (5.
|
44
|
-
minitest-reporters (1.
|
41
|
+
mini_mime (1.1.2)
|
42
|
+
mini_portile2 (2.8.0)
|
43
|
+
minitest (5.16.3)
|
44
|
+
minitest-reporters (1.5.0)
|
45
45
|
ansi
|
46
46
|
builder
|
47
47
|
minitest (>= 5.0)
|
@@ -51,36 +51,38 @@ GEM
|
|
51
51
|
rb-fsevent (>= 0.9)
|
52
52
|
rb-inotify (>= 0.8)
|
53
53
|
unicorn (>= 4.5)
|
54
|
-
mustermann (
|
54
|
+
mustermann (2.0.2)
|
55
55
|
ruby2_keywords (~> 0.0.1)
|
56
|
-
nokogiri (1.
|
57
|
-
mini_portile2 (~> 2.
|
58
|
-
|
59
|
-
|
60
|
-
|
56
|
+
nokogiri (1.13.8)
|
57
|
+
mini_portile2 (~> 2.8.0)
|
58
|
+
racc (~> 1.4)
|
59
|
+
public_suffix (5.0.0)
|
60
|
+
racc (1.6.0)
|
61
|
+
rack (2.2.4)
|
62
|
+
rack-protection (2.2.2)
|
61
63
|
rack
|
62
|
-
rack-test (
|
63
|
-
rack (>= 1.
|
64
|
-
raindrops (0.
|
65
|
-
rake (13.0.
|
66
|
-
rb-fsevent (0.
|
64
|
+
rack-test (2.0.2)
|
65
|
+
rack (>= 1.3)
|
66
|
+
raindrops (0.20.0)
|
67
|
+
rake (13.0.6)
|
68
|
+
rb-fsevent (0.11.2)
|
67
69
|
rb-inotify (0.10.1)
|
68
70
|
ffi (~> 1.0)
|
69
|
-
rb-kqueue (0.2.
|
71
|
+
rb-kqueue (0.2.8)
|
70
72
|
ffi (>= 0.5.0)
|
71
|
-
rdiscount (2.2.0.
|
72
|
-
ruby-progressbar (1.
|
73
|
-
ruby2_keywords (0.0.
|
73
|
+
rdiscount (2.2.0.2)
|
74
|
+
ruby-progressbar (1.11.0)
|
75
|
+
ruby2_keywords (0.0.5)
|
74
76
|
sassc (2.4.0)
|
75
77
|
ffi (~> 1.9)
|
76
|
-
sinatra (2.
|
77
|
-
mustermann (~>
|
78
|
-
rack (~> 2.
|
79
|
-
rack-protection (= 2.
|
78
|
+
sinatra (2.2.2)
|
79
|
+
mustermann (~> 2.0)
|
80
|
+
rack (~> 2.2)
|
81
|
+
rack-protection (= 2.2.2)
|
80
82
|
tilt (~> 2.0)
|
81
83
|
temple (0.8.2)
|
82
|
-
tilt (2.0.
|
83
|
-
unicorn (
|
84
|
+
tilt (2.0.11)
|
85
|
+
unicorn (6.1.0)
|
84
86
|
kgio (~> 2.6)
|
85
87
|
raindrops (~> 0.7)
|
86
88
|
xpath (3.2.0)
|
@@ -99,4 +101,4 @@ DEPENDENCIES
|
|
99
101
|
rake
|
100
102
|
|
101
103
|
BUNDLED WITH
|
102
|
-
2.
|
104
|
+
2.3.14
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Nesta - a CMS for Ruby Developers
|
2
2
|
|
3
|
-
A CMS for
|
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
|
48
|
-
|
49
|
-
[mailing list]: http://nestacms.com/support
|
47
|
+
help with anything feel free to file an issue, or contact me (@grahamashton)
|
48
|
+
on Twitter.
|
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][].
|
@@ -56,19 +55,13 @@ on Twitter, and on [the blog][].
|
|
56
55
|
|
57
56
|
## Contributing
|
58
57
|
|
59
|
-
If you want to add a new feature, I recommend that you
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
good approach before you start.
|
58
|
+
If you want to add a new feature, I recommend that you file an issue to discuss
|
59
|
+
it before you start coding. I'm likely to suggest that we implement it as a
|
60
|
+
[plugin][] (to keep Nesta itself lean and simple), so you might save yourself
|
61
|
+
some time if we chat about a good approach before you start.
|
64
62
|
|
65
63
|
[plugin]: http://nestacms.com/docs/plugins
|
66
64
|
|
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
65
|
-- Graham ([@grahamashton][] on Twitter).
|
73
66
|
|
74
67
|
[@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.
|
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
|
-
|
13
|
+
3. Update the `CHANGES` file with a summary of significant changes since
|
11
14
|
the previous release.
|
12
15
|
|
13
|
-
|
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
|
-
|
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
|
-
|
21
|
+
6. If everything seems fine, run `rake release`.
|
20
22
|
|
21
|
-
|
23
|
+
7. Publish an announcement blog post and email the list.
|
data/Rakefile
CHANGED
data/bin/nesta
CHANGED
data/config/deploy.rb.sample
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
set :application, "nesta"
|
2
|
-
set :repository, "
|
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
|
@@ -1,12 +1,10 @@
|
|
1
|
-
require File.expand_path('
|
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
|
-
|
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) {
|
19
|
+
FileUtils.cd(path) { process.run('git', 'pull', 'origin', 'master') }
|
22
20
|
else
|
23
|
-
|
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
|
-
|
49
|
+
Nesta::ConfigFile.new.set_value('content', @dir)
|
52
50
|
end
|
53
51
|
end
|
54
52
|
end
|
data/lib/nesta/commands/edit.rb
CHANGED
@@ -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
|
-
|
13
|
+
process.run(editor, @filename)
|
18
14
|
end
|
19
15
|
end
|
20
16
|
end
|
data/lib/nesta/commands/new.rb
CHANGED
@@ -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,18 @@ 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
28
|
file.puts %w[._* .*.swp .bundle .DS_Store .sass-cache].join("\n")
|
33
29
|
end
|
34
|
-
|
35
|
-
|
36
|
-
|
30
|
+
process.run('git', 'init')
|
31
|
+
process.run('git', 'add', '.')
|
32
|
+
process.run('git', 'commit', '-m', 'Initial commit')
|
37
33
|
end
|
38
34
|
end
|
39
35
|
|
40
|
-
def execute
|
36
|
+
def execute(process)
|
41
37
|
make_directories
|
42
38
|
templates = {
|
43
39
|
'config.ru' => "#{@path}/config.ru",
|
@@ -49,8 +45,10 @@ module Nesta
|
|
49
45
|
if @options['vlad']
|
50
46
|
templates['config/deploy.rb'] = "#{@path}/config/deploy.rb"
|
51
47
|
end
|
52
|
-
|
53
|
-
|
48
|
+
templates.each do |src, dest|
|
49
|
+
Nesta::Commands::Template.new(src).copy_to(dest, binding)
|
50
|
+
end
|
51
|
+
create_repository(process) if @options['git']
|
54
52
|
end
|
55
53
|
end
|
56
54
|
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
|
-
|
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
|
-
|
71
|
-
|
68
|
+
process.run('git', 'init')
|
69
|
+
process.run('git', 'add', '.')
|
72
70
|
end
|
73
71
|
end
|
74
72
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Nesta
|
2
|
+
module Commands
|
3
|
+
class Template
|
4
|
+
def initialize(filename)
|
5
|
+
@filename = filename
|
6
|
+
end
|
7
|
+
|
8
|
+
def template_path
|
9
|
+
dir = File.expand_path('../../../templates', File.dirname(__FILE__))
|
10
|
+
File.join(dir, @filename)
|
11
|
+
end
|
12
|
+
|
13
|
+
def copy_to(dest, context)
|
14
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
15
|
+
template = ERB.new(File.read(template_path), trim_mode: "-")
|
16
|
+
File.open(dest, 'w') { |file| file.puts template.result(context) }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,18 +1,16 @@
|
|
1
|
-
require File.expand_path('../command', File.dirname(__FILE__))
|
2
|
-
|
3
1
|
module Nesta
|
4
2
|
module Commands
|
5
3
|
module Theme
|
6
4
|
class Create
|
7
|
-
include Command
|
8
|
-
|
9
5
|
def initialize(*args)
|
10
6
|
name = args.shift
|
11
7
|
options = args.shift || {}
|
12
8
|
name.nil? && (raise UsageError.new('name not specified'))
|
13
9
|
@name = name
|
14
10
|
@theme_path = Nesta::Path.themes(@name)
|
15
|
-
|
11
|
+
if File.exist?(@theme_path)
|
12
|
+
Nesta.fail_with("#{@theme_path} already exists")
|
13
|
+
end
|
16
14
|
end
|
17
15
|
|
18
16
|
def make_directories
|
@@ -20,15 +18,17 @@ module Nesta
|
|
20
18
|
FileUtils.mkdir_p(File.join(@theme_path, 'views'))
|
21
19
|
end
|
22
20
|
|
23
|
-
def execute
|
21
|
+
def execute(process)
|
24
22
|
make_directories
|
25
|
-
|
23
|
+
{
|
26
24
|
'themes/README.md' => "#{@theme_path}/README.md",
|
27
25
|
'themes/app.rb' => "#{@theme_path}/app.rb",
|
28
26
|
'themes/views/layout.haml' => "#{@theme_path}/views/layout.haml",
|
29
27
|
'themes/views/page.haml' => "#{@theme_path}/views/page.haml",
|
30
28
|
'themes/views/master.sass' => "#{@theme_path}/views/master.sass"
|
31
|
-
|
29
|
+
}.each do |src, dest|
|
30
|
+
Nesta::Commands::Template.new(src).copy_to(dest, binding)
|
31
|
+
end
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -1,11 +1,9 @@
|
|
1
|
-
require File.expand_path('
|
1
|
+
require File.expand_path('../../config_file', File.dirname(__FILE__))
|
2
2
|
|
3
3
|
module Nesta
|
4
4
|
module Commands
|
5
5
|
module Theme
|
6
6
|
class Enable
|
7
|
-
include Command
|
8
|
-
|
9
7
|
def initialize(*args)
|
10
8
|
name = args.shift
|
11
9
|
options = args.shift || {}
|
@@ -13,8 +11,8 @@ module Nesta
|
|
13
11
|
@name = name
|
14
12
|
end
|
15
13
|
|
16
|
-
def execute
|
17
|
-
|
14
|
+
def execute(process)
|
15
|
+
Nesta::ConfigFile.new.set_value('theme', @name)
|
18
16
|
end
|
19
17
|
end
|
20
18
|
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 Theme
|
6
4
|
class Install
|
7
|
-
include Command
|
8
|
-
|
9
5
|
def initialize(*args)
|
10
6
|
@url = args.shift
|
11
7
|
@url.nil? && (raise UsageError.new('URL not specified'))
|
@@ -16,14 +12,14 @@ module Nesta
|
|
16
12
|
File.basename(@url, '.git').sub(/nesta-theme-/, '')
|
17
13
|
end
|
18
14
|
|
19
|
-
def execute
|
20
|
-
|
21
|
-
FileUtils.
|
22
|
-
enable
|
15
|
+
def execute(process)
|
16
|
+
process.run('git', 'clone', @url, "themes/#{theme_name}")
|
17
|
+
FileUtils.rm_rf(File.join("themes/#{theme_name}", '.git'))
|
18
|
+
enable(process)
|
23
19
|
end
|
24
20
|
|
25
|
-
def enable
|
26
|
-
Enable.new(theme_name).execute
|
21
|
+
def enable(process)
|
22
|
+
Enable.new(theme_name).execute(process)
|
27
23
|
end
|
28
24
|
end
|
29
25
|
end
|
data/lib/nesta/commands.rb
CHANGED
@@ -4,10 +4,18 @@ require 'fileutils'
|
|
4
4
|
require File.expand_path('env', File.dirname(__FILE__))
|
5
5
|
require File.expand_path('app', File.dirname(__FILE__))
|
6
6
|
require File.expand_path('path', File.dirname(__FILE__))
|
7
|
+
require File.expand_path('system_command', File.dirname(__FILE__))
|
7
8
|
require File.expand_path('version', File.dirname(__FILE__))
|
8
9
|
|
9
10
|
require File.expand_path('commands/demo', File.dirname(__FILE__))
|
10
11
|
require File.expand_path('commands/edit', File.dirname(__FILE__))
|
11
12
|
require File.expand_path('commands/new', File.dirname(__FILE__))
|
12
13
|
require File.expand_path('commands/plugin', File.dirname(__FILE__))
|
14
|
+
require File.expand_path('commands/template', File.dirname(__FILE__))
|
13
15
|
require File.expand_path('commands/theme', File.dirname(__FILE__))
|
16
|
+
|
17
|
+
module Nesta
|
18
|
+
module Commands
|
19
|
+
class UsageError < RuntimeError; end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Nesta
|
2
|
+
class ConfigFile
|
3
|
+
def set_value(key, value)
|
4
|
+
pattern = /^\s*#?\s*#{key}:.*/
|
5
|
+
replacement = "#{key}: #{value}"
|
6
|
+
|
7
|
+
configured = false
|
8
|
+
File.open(Nesta::Config.yaml_path, 'r+') do |file|
|
9
|
+
output = ''
|
10
|
+
file.each_line do |line|
|
11
|
+
if configured
|
12
|
+
output << line
|
13
|
+
else
|
14
|
+
output << line.sub(pattern, replacement)
|
15
|
+
configured = true if line =~ pattern
|
16
|
+
end
|
17
|
+
end
|
18
|
+
output << "#{replacement}\n" unless configured
|
19
|
+
file.pos = 0
|
20
|
+
file.print(output)
|
21
|
+
file.truncate(file.pos)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Nesta
|
2
|
+
class SystemCommand
|
3
|
+
def run(*args)
|
4
|
+
system(*args)
|
5
|
+
if ! $?.success?
|
6
|
+
message = if $?.exitstatus == 127
|
7
|
+
"#{args[0]} not found"
|
8
|
+
else
|
9
|
+
"'#{args.join(' ')}' failed with status #{$?.exitstatus}"
|
10
|
+
end
|
11
|
+
Nesta.fail_with(message)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/nesta/version.rb
CHANGED
data/lib/nesta.rb
CHANGED
@@ -4,6 +4,11 @@ module Nesta
|
|
4
4
|
$stderr.puts "DEPRECATION WARNING: #{name} is deprecated; #{message}"
|
5
5
|
end
|
6
6
|
end
|
7
|
+
|
8
|
+
def self.fail_with(message)
|
9
|
+
$stderr.puts "Error: #{message}"
|
10
|
+
exit 1
|
11
|
+
end
|
7
12
|
end
|
8
13
|
|
9
|
-
require 'nesta/plugin'
|
14
|
+
require File.expand_path('nesta/plugin', File.dirname(__FILE__))
|
data/nesta.gemspec
CHANGED
@@ -29,7 +29,7 @@ EOF
|
|
29
29
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
30
30
|
s.require_paths = ["lib"]
|
31
31
|
|
32
|
-
s.add_dependency('haml', '>= 3.1')
|
32
|
+
s.add_dependency('haml', '>= 3.1', '< 6.0')
|
33
33
|
s.add_dependency('haml-contrib', '>= 1.0')
|
34
34
|
s.add_dependency('rack', '~> 2.0')
|
35
35
|
s.add_dependency('rdiscount', '~> 2.1')
|
@@ -1,9 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
|
-
require_relative '../../../support/silence_commands_during_tests'
|
3
2
|
require_relative '../../../../lib/nesta/commands'
|
4
3
|
|
5
|
-
Nesta::Commands::Demo::Content.send(:include, SilenceCommandsDuringTests)
|
6
|
-
|
7
4
|
describe 'nesta demo:content' do
|
8
5
|
include TemporaryFiles
|
9
6
|
|
@@ -11,10 +8,15 @@ describe 'nesta demo:content' do
|
|
11
8
|
Nesta::Commands::Demo::Content.demo_repository = '../../fixtures/demo-content.git'
|
12
9
|
end
|
13
10
|
|
11
|
+
def process_stub
|
12
|
+
Object.new.tap do |stub|
|
13
|
+
def stub.run(*args); end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
14
17
|
it 'clones the demo repository and configures project to use it' do
|
15
18
|
in_temporary_project do
|
16
|
-
Nesta::Commands::Demo::Content.new.execute
|
17
|
-
assert_exists_in_project 'content-demo/pages/index.haml'
|
19
|
+
Nesta::Commands::Demo::Content.new.execute(process_stub)
|
18
20
|
|
19
21
|
yaml = File.read(File.join(project_root, 'config', 'config.yml'))
|
20
22
|
assert_match /content: content-demo/, yaml
|
@@ -24,7 +26,7 @@ describe 'nesta demo:content' do
|
|
24
26
|
it 'ensures demo repository is ignored by git' do
|
25
27
|
in_temporary_project do
|
26
28
|
FileUtils.mkdir('.git')
|
27
|
-
Nesta::Commands::Demo::Content.new.execute
|
29
|
+
Nesta::Commands::Demo::Content.new.execute(process_stub)
|
28
30
|
assert_match /content-demo/, File.read(project_path('.git/info/exclude'))
|
29
31
|
end
|
30
32
|
end
|
@@ -9,13 +9,13 @@ describe 'nesta edit' do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'launches the editor' do
|
12
|
-
ENV['EDITOR'] = '
|
12
|
+
ENV['EDITOR'] = 'vi'
|
13
13
|
edited_file = 'path/to/page.md'
|
14
|
+
process = Minitest::Mock.new
|
15
|
+
process.expect(:run, true, [ENV['EDITOR'], /#{edited_file}$/])
|
14
16
|
with_temp_content_directory do
|
15
|
-
FileUtils.mkdir_p(Nesta::Config.page_path(File.dirname(edited_file)))
|
16
17
|
command = Nesta::Commands::Edit.new(edited_file)
|
17
|
-
command.execute
|
18
|
-
assert File.exist?(Nesta::Config.page_path(edited_file)), 'editor not run'
|
18
|
+
command.execute(process)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -1,9 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
|
-
require_relative '../../support/silence_commands_during_tests'
|
3
2
|
require_relative '../../../lib/nesta/commands'
|
4
3
|
|
5
|
-
Nesta::Commands::New.send(:include, SilenceCommandsDuringTests)
|
6
|
-
|
7
4
|
describe 'nesta new' do
|
8
5
|
include TemporaryFiles
|
9
6
|
|
@@ -19,30 +16,36 @@ describe 'nesta new' do
|
|
19
16
|
remove_temp_directory
|
20
17
|
end
|
21
18
|
|
19
|
+
def process_stub
|
20
|
+
Object.new.tap do |stub|
|
21
|
+
def stub.run(*args); end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
22
25
|
describe 'without options' do
|
23
26
|
it 'creates the content directories' do
|
24
|
-
Nesta::Commands::New.new(project_root).execute
|
27
|
+
Nesta::Commands::New.new(project_root).execute(process_stub)
|
25
28
|
assert_exists_in_project 'content/attachments'
|
26
29
|
assert_exists_in_project 'content/pages'
|
27
30
|
end
|
28
31
|
|
29
32
|
it 'creates the home page' do
|
30
|
-
Nesta::Commands::New.new(project_root).execute
|
33
|
+
Nesta::Commands::New.new(project_root).execute(process_stub)
|
31
34
|
assert_exists_in_project 'content/pages/index.haml'
|
32
35
|
end
|
33
36
|
|
34
37
|
it 'creates the rackup file' do
|
35
|
-
Nesta::Commands::New.new(project_root).execute
|
38
|
+
Nesta::Commands::New.new(project_root).execute(process_stub)
|
36
39
|
assert_exists_in_project 'config.ru'
|
37
40
|
end
|
38
41
|
|
39
42
|
it 'creates the config.yml file' do
|
40
|
-
Nesta::Commands::New.new(project_root).execute
|
43
|
+
Nesta::Commands::New.new(project_root).execute(process_stub)
|
41
44
|
assert_exists_in_project 'config/config.yml'
|
42
45
|
end
|
43
46
|
|
44
47
|
it 'creates a Gemfile' do
|
45
|
-
Nesta::Commands::New.new(project_root).execute
|
48
|
+
Nesta::Commands::New.new(project_root).execute(process_stub)
|
46
49
|
assert_exists_in_project 'Gemfile'
|
47
50
|
assert_match /gem 'nesta'/, gemfile_source
|
48
51
|
end
|
@@ -51,67 +54,35 @@ describe 'nesta new' do
|
|
51
54
|
describe 'with --git option' do
|
52
55
|
it 'creates a .gitignore file' do
|
53
56
|
command = Nesta::Commands::New.new(project_root, 'git' => '')
|
54
|
-
command.
|
55
|
-
|
56
|
-
assert_match /\.bundle/, File.read(project_path('.gitignore'))
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def disabling_git_hooks
|
61
|
-
# I (@gma) have got a git repository template setup on my computer
|
62
|
-
# containing git hooks that automatically run ctags in a
|
63
|
-
# background process whenever I run `git commit`. The hooks are
|
64
|
-
# copied into new repositories when I run `git init`.
|
65
|
-
#
|
66
|
-
# The generation of the ctags file (in a forked process) causes a
|
67
|
-
# race condition; sometimes ctags will recreate a test's project
|
68
|
-
# folder and git directory after the test's `after` block has
|
69
|
-
# deleted it. If the project directory isn't removed after each
|
70
|
-
# test, the New command will throw an error in the subsequent
|
71
|
-
# test (complaining that the project directory already exists).
|
72
|
-
#
|
73
|
-
templates = temp_path('git_template')
|
74
|
-
FileUtils.mkdir_p(templates)
|
75
|
-
ENV['GIT_TEMPLATE_DIR'] = templates
|
76
|
-
yield
|
77
|
-
ENV.delete('GIT_TEMPLATE_DIR')
|
78
|
-
FileUtils.rm_r(templates)
|
57
|
+
command.execute(process_stub)
|
58
|
+
assert_match /\.bundle/, File.read(project_path('.gitignore'))
|
79
59
|
end
|
80
60
|
|
81
61
|
it 'creates a git repo' do
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
it 'commits the blank project' do
|
90
|
-
disabling_git_hooks do
|
91
|
-
command = Nesta::Commands::New.new(project_root, 'git' => '')
|
92
|
-
command.execute
|
93
|
-
Dir.chdir(project_root) do
|
94
|
-
assert_match /Initial commit/, `git log --pretty=oneline | head -n 1`
|
95
|
-
end
|
96
|
-
end
|
62
|
+
command = Nesta::Commands::New.new(project_root, 'git' => '')
|
63
|
+
process = Minitest::Mock.new
|
64
|
+
process.expect(:run, true, ['git', 'init'])
|
65
|
+
process.expect(:run, true, ['git', 'add', '.'])
|
66
|
+
process.expect(:run, true, ['git', 'commit', '-m', 'Initial commit'])
|
67
|
+
command.execute(process)
|
97
68
|
end
|
98
69
|
end
|
99
70
|
|
100
71
|
describe 'with --vlad option' do
|
101
72
|
it 'adds vlad to Gemfile' do
|
102
|
-
Nesta::Commands::New.new(project_root, 'vlad' => '').execute
|
73
|
+
Nesta::Commands::New.new(project_root, 'vlad' => '').execute(process_stub)
|
103
74
|
assert_match /gem 'vlad', '2.1.0'/, gemfile_source
|
104
75
|
assert_match /gem 'vlad-git', '2.2.0'/, gemfile_source
|
105
76
|
end
|
106
77
|
|
107
78
|
it 'configures the vlad rake tasks' do
|
108
|
-
Nesta::Commands::New.new(project_root, 'vlad' => '').execute
|
79
|
+
Nesta::Commands::New.new(project_root, 'vlad' => '').execute(process_stub)
|
109
80
|
assert_exists_in_project 'Rakefile'
|
110
81
|
assert_match /require 'vlad'/, rakefile_source
|
111
82
|
end
|
112
83
|
|
113
84
|
it 'creates deploy.rb' do
|
114
|
-
Nesta::Commands::New.new(project_root, 'vlad' => '').execute
|
85
|
+
Nesta::Commands::New.new(project_root, 'vlad' => '').execute(process_stub)
|
115
86
|
assert_exists_in_project 'config/deploy.rb'
|
116
87
|
deploy_source = File.read(project_path('config/deploy.rb'))
|
117
88
|
assert_match /set :application, 'mysite.com'/, deploy_source
|
@@ -24,13 +24,16 @@ describe 'nesta plugin:create' do
|
|
24
24
|
"nesta-plugin-#{plugin_name}"
|
25
25
|
end
|
26
26
|
|
27
|
+
def process_stub
|
28
|
+
Object.new.tap do |stub|
|
29
|
+
def stub.run(*args); end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
27
33
|
def create_plugin(&block)
|
28
34
|
Dir.chdir(working_directory) do
|
29
35
|
command = Nesta::Commands::Plugin::Create.new(plugin_name)
|
30
|
-
command.
|
31
|
-
command.execute
|
32
|
-
yield
|
33
|
-
end
|
36
|
+
command.execute(process_stub)
|
34
37
|
end
|
35
38
|
end
|
36
39
|
|
@@ -16,9 +16,15 @@ describe 'nesta theme:create' do
|
|
16
16
|
remove_temp_directory
|
17
17
|
end
|
18
18
|
|
19
|
+
def process_stub
|
20
|
+
Object.new.tap do |stub|
|
21
|
+
def stub.run(*args); end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
19
25
|
it 'creates default files in the theme directory' do
|
20
26
|
Dir.chdir(project_root) do
|
21
|
-
Nesta::Commands::Theme::Create.new('theme-name').execute
|
27
|
+
Nesta::Commands::Theme::Create.new('theme-name').execute(process_stub)
|
22
28
|
end
|
23
29
|
assert_exists_in_project theme_path('README.md')
|
24
30
|
assert_exists_in_project theme_path('app.rb')
|
@@ -26,7 +32,7 @@ describe 'nesta theme:create' do
|
|
26
32
|
|
27
33
|
it 'copies default view templates into views directory' do
|
28
34
|
Dir.chdir(project_root) do
|
29
|
-
Nesta::Commands::Theme::Create.new('theme-name').execute
|
35
|
+
Nesta::Commands::Theme::Create.new('theme-name').execute(process_stub)
|
30
36
|
end
|
31
37
|
%w(layout.haml page.haml master.sass).each do |template|
|
32
38
|
assert_exists_in_project theme_path("views/#{template}")
|
@@ -13,9 +13,15 @@ describe 'nesta theme:enable' do
|
|
13
13
|
remove_temp_directory
|
14
14
|
end
|
15
15
|
|
16
|
+
def process_stub
|
17
|
+
Object.new.tap do |stub|
|
18
|
+
def stub.run(*args); end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
16
22
|
it 'enables the theme' do
|
17
23
|
Dir.chdir(project_root) do
|
18
|
-
Nesta::Commands::Theme::Enable.new('theme-name').execute
|
24
|
+
Nesta::Commands::Theme::Enable.new('theme-name').execute(process_stub)
|
19
25
|
assert_match /^theme: theme-name/, File.read('config/config.yml')
|
20
26
|
end
|
21
27
|
end
|
@@ -1,9 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
|
-
require_relative '../../../support/silence_commands_during_tests'
|
3
2
|
require_relative '../../../../lib/nesta/commands'
|
4
3
|
|
5
|
-
Nesta::Commands::Theme::Install.send(:include, SilenceCommandsDuringTests)
|
6
|
-
|
7
4
|
describe 'nesta theme:install' do
|
8
5
|
include TemporaryFiles
|
9
6
|
|
@@ -27,35 +24,42 @@ describe 'nesta theme:install' do
|
|
27
24
|
remove_temp_directory
|
28
25
|
end
|
29
26
|
|
27
|
+
def process_stub
|
28
|
+
Object.new.tap do |stub|
|
29
|
+
def stub.run(*args); end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
30
33
|
it 'clones the repository' do
|
34
|
+
process = Minitest::Mock.new
|
35
|
+
process.expect(:run, true, ['git', 'clone', repo_url, "themes/#{theme_name}"])
|
31
36
|
in_temporary_project do
|
32
|
-
Nesta::Commands::Theme::Install.new(repo_url).execute
|
33
|
-
assert File.directory?(theme_dir), 'theme not cloned'
|
37
|
+
Nesta::Commands::Theme::Install.new(repo_url).execute(process)
|
34
38
|
end
|
35
39
|
end
|
36
40
|
|
37
41
|
it "removes the theme's .git directory" do
|
38
42
|
in_temporary_project do
|
39
|
-
Nesta::Commands::Theme::Install.new(repo_url).execute
|
43
|
+
Nesta::Commands::Theme::Install.new(repo_url).execute(process_stub)
|
40
44
|
refute File.exist?("#{theme_dir}/.git"), '.git folder found'
|
41
45
|
end
|
42
46
|
end
|
43
47
|
|
44
48
|
it 'enables the freshly installed theme' do
|
45
49
|
in_temporary_project do
|
46
|
-
Nesta::Commands::Theme::Install.new(repo_url).execute
|
50
|
+
Nesta::Commands::Theme::Install.new(repo_url).execute(process_stub)
|
47
51
|
assert_match /theme: #{theme_name}/, File.read('config/config.yml')
|
48
52
|
end
|
49
53
|
end
|
50
54
|
|
51
55
|
it 'determines name of theme from name of repository' do
|
52
|
-
url = '
|
56
|
+
url = 'https://foobar.com/path/to/nesta-theme-the-name.git'
|
53
57
|
command = Nesta::Commands::Theme::Install.new(url)
|
54
58
|
assert_equal 'the-name', command.theme_name
|
55
59
|
end
|
56
60
|
|
57
61
|
it "falls back to name of repo when theme name doesn't match correct format" do
|
58
|
-
url = '
|
62
|
+
url = 'https://foobar.com/path/to/mytheme.git'
|
59
63
|
command = Nesta::Commands::Theme::Install.new(url)
|
60
64
|
assert_equal 'mytheme', command.theme_name
|
61
65
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require_relative '../../lib/nesta/system_command'
|
3
|
+
|
4
|
+
describe 'Nesta::SystemCommand' do
|
5
|
+
describe '#run' do
|
6
|
+
it 'catches errors when running external processes' do
|
7
|
+
command = Nesta::SystemCommand.new
|
8
|
+
command.run('ls / >/dev/null')
|
9
|
+
begin
|
10
|
+
stderr, $stderr = $stderr, StringIO.new
|
11
|
+
assert_raises(SystemExit) do
|
12
|
+
command.run('ls no-such-file 2>/dev/null')
|
13
|
+
end
|
14
|
+
ensure
|
15
|
+
$stderr.close
|
16
|
+
$stderr = stderr
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
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.
|
4
|
+
version: 0.13.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:
|
11
|
+
date: 2022-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: haml
|
@@ -17,6 +17,9 @@ dependencies:
|
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.1'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '6.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -24,6 +27,9 @@ dependencies:
|
|
24
27
|
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '3.1'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '6.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: haml-contrib
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -225,11 +231,9 @@ executables:
|
|
225
231
|
extensions: []
|
226
232
|
extra_rdoc_files: []
|
227
233
|
files:
|
234
|
+
- ".github/workflows/tests.yml"
|
228
235
|
- ".gitignore"
|
229
236
|
- ".gitmodules"
|
230
|
-
- ".hound.yml"
|
231
|
-
- ".rspec"
|
232
|
-
- ".travis.yml"
|
233
237
|
- CHANGES
|
234
238
|
- Gemfile
|
235
239
|
- Gemfile.lock
|
@@ -244,18 +248,19 @@ files:
|
|
244
248
|
- lib/nesta.rb
|
245
249
|
- lib/nesta/app.rb
|
246
250
|
- lib/nesta/commands.rb
|
247
|
-
- lib/nesta/commands/command.rb
|
248
251
|
- lib/nesta/commands/demo.rb
|
249
252
|
- lib/nesta/commands/demo/content.rb
|
250
253
|
- lib/nesta/commands/edit.rb
|
251
254
|
- lib/nesta/commands/new.rb
|
252
255
|
- lib/nesta/commands/plugin.rb
|
253
256
|
- lib/nesta/commands/plugin/create.rb
|
257
|
+
- lib/nesta/commands/template.rb
|
254
258
|
- lib/nesta/commands/theme.rb
|
255
259
|
- lib/nesta/commands/theme/create.rb
|
256
260
|
- lib/nesta/commands/theme/enable.rb
|
257
261
|
- lib/nesta/commands/theme/install.rb
|
258
262
|
- lib/nesta/config.rb
|
263
|
+
- lib/nesta/config_file.rb
|
259
264
|
- lib/nesta/env.rb
|
260
265
|
- lib/nesta/helpers.rb
|
261
266
|
- lib/nesta/models.rb
|
@@ -263,6 +268,7 @@ files:
|
|
263
268
|
- lib/nesta/overrides.rb
|
264
269
|
- lib/nesta/path.rb
|
265
270
|
- lib/nesta/plugin.rb
|
271
|
+
- lib/nesta/system_command.rb
|
266
272
|
- lib/nesta/version.rb
|
267
273
|
- nesta.gemspec
|
268
274
|
- scripts/import-from-mephisto
|
@@ -305,17 +311,16 @@ files:
|
|
305
311
|
- test/integration/sitemap_test.rb
|
306
312
|
- test/integration_test_helper.rb
|
307
313
|
- test/support/model_factory.rb
|
308
|
-
- test/support/silence_commands_during_tests.rb
|
309
314
|
- test/support/temporary_files.rb
|
310
315
|
- test/support/test_configuration.rb
|
311
316
|
- test/test_helper.rb
|
312
|
-
- test/unit/commands_test.rb
|
313
317
|
- test/unit/config_test.rb
|
314
318
|
- test/unit/file_model_test.rb
|
315
319
|
- test/unit/menu_test.rb
|
316
320
|
- test/unit/page_test.rb
|
317
321
|
- test/unit/path_test.rb
|
318
322
|
- test/unit/plugin_test.rb
|
323
|
+
- test/unit/system_command_test.rb
|
319
324
|
- views/analytics.haml
|
320
325
|
- views/atom.haml
|
321
326
|
- views/categories.haml
|
@@ -353,7 +358,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
353
358
|
- !ruby/object:Gem::Version
|
354
359
|
version: '0'
|
355
360
|
requirements: []
|
356
|
-
rubygems_version: 3.
|
361
|
+
rubygems_version: 3.3.7
|
357
362
|
signing_key:
|
358
363
|
specification_version: 4
|
359
364
|
summary: Ruby CMS, written in Sinatra
|
data/.hound.yml
DELETED
data/.rspec
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--color
|
data/.travis.yml
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
module Nesta
|
2
|
-
module Commands
|
3
|
-
class UsageError < RuntimeError; end
|
4
|
-
|
5
|
-
module Command
|
6
|
-
def run_process(*args)
|
7
|
-
system(*args)
|
8
|
-
if ! $?.success?
|
9
|
-
message = if $?.exitstatus == 127
|
10
|
-
"#{args[0]} not found"
|
11
|
-
else
|
12
|
-
"'#{args.join(' ')}' failed with status #{$?.exitstatus}"
|
13
|
-
end
|
14
|
-
fail(message)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def fail(message)
|
19
|
-
$stderr.puts "Error: #{message}"
|
20
|
-
exit 1
|
21
|
-
end
|
22
|
-
|
23
|
-
def template_root
|
24
|
-
File.expand_path('../../../templates', File.dirname(__FILE__))
|
25
|
-
end
|
26
|
-
|
27
|
-
def copy_template(src, dest)
|
28
|
-
FileUtils.mkdir_p(File.dirname(dest))
|
29
|
-
template = ERB.new(File.read(File.join(template_root, src)), nil, "-")
|
30
|
-
File.open(dest, 'w') { |file| file.puts template.result(binding) }
|
31
|
-
end
|
32
|
-
|
33
|
-
def copy_templates(templates)
|
34
|
-
templates.each { |src, dest| copy_template(src, dest) }
|
35
|
-
end
|
36
|
-
|
37
|
-
def update_config_yaml(pattern, replacement)
|
38
|
-
configured = false
|
39
|
-
File.open(Nesta::Config.yaml_path, 'r+') do |file|
|
40
|
-
output = ''
|
41
|
-
file.each_line do |line|
|
42
|
-
if configured
|
43
|
-
output << line
|
44
|
-
else
|
45
|
-
output << line.sub(pattern, replacement)
|
46
|
-
configured = true if line =~ pattern
|
47
|
-
end
|
48
|
-
end
|
49
|
-
output << "#{replacement}\n" unless configured
|
50
|
-
file.pos = 0
|
51
|
-
file.print(output)
|
52
|
-
file.truncate(file.pos)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
data/test/unit/commands_test.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require_relative '../../lib/nesta/commands'
|
3
|
-
|
4
|
-
class TestCommand
|
5
|
-
include Nesta::Commands::Command
|
6
|
-
end
|
7
|
-
|
8
|
-
describe 'Nesta::Commands::Command' do
|
9
|
-
describe '#run_process' do
|
10
|
-
it 'catches errors when running external processes' do
|
11
|
-
TestCommand.new.run_process('ls / >/dev/null')
|
12
|
-
begin
|
13
|
-
stderr, $stderr = $stderr, File.open('/dev/null', 'w')
|
14
|
-
assert_raises(SystemExit) do
|
15
|
-
TestCommand.new.run_process('ls no-such-file 2>/dev/null')
|
16
|
-
end
|
17
|
-
ensure
|
18
|
-
$stderr.close
|
19
|
-
$stderr = stderr
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|