nesta 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.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
|