deris 0.1.4 → 0.1.5
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.
- data/README.markdown +119 -0
- data/lib/file.rb +3 -5
- data/lib/partial_hasher.rb +7 -1
- data/tests/directory_specs/content_convention.rb +30 -0
- data/tests/examples/contentconvention/contentconvention.haml +0 -0
- data/tests/examples/contentconventionclash/content.haml +1 -0
- data/tests/examples/contentconventionclash/contentconventionclash.haml +1 -0
- data/tests/examples/project/_src/menu.haml +2 -2
- data/tests/examples/project/_src/morrisons/subnav.haml +2 -2
- data/tests/spec_tasks.rake +15 -1
- metadata +15 -6
data/README.markdown
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
# Deris
|
2
|
+
|
3
|
+
A documentation templating engine based on [HAML](http://haml-lang.com/)
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Whenever significant functionality is added to deris a new gem will be added to
|
8
|
+
[rubygems](http://rubygems.org/gems/deris) so installation is easy:
|
9
|
+
|
10
|
+
gem install deris
|
11
|
+
|
12
|
+
## Getting started
|
13
|
+
|
14
|
+
Deris takes and transforms the contents of one directory and transforms and
|
15
|
+
writes it out to another directory. Your source directory should be laid out
|
16
|
+
something like this:
|
17
|
+
|
18
|
+
myproject/
|
19
|
+
_src/
|
20
|
+
layout.haml
|
21
|
+
|
22
|
+
`_src/layout.haml` is the only file deris expects to exist.
|
23
|
+
|
24
|
+
Any files and directories within `myproject` that aren't within `_src` will be
|
25
|
+
copied over to the output directory. This lets you have static content such as
|
26
|
+
CSS files and images.
|
27
|
+
|
28
|
+
To get deris to generate HTML from this directory you'll want to call it like
|
29
|
+
this:
|
30
|
+
|
31
|
+
require 'rubygems'
|
32
|
+
require 'deris'
|
33
|
+
|
34
|
+
Deris::Project.new('myproject/').write('myoutput/')
|
35
|
+
|
36
|
+
Which will result in an output like this:
|
37
|
+
|
38
|
+
myoutput/
|
39
|
+
index.html
|
40
|
+
|
41
|
+
This is because the contents of the `_src` directory are used to create the
|
42
|
+
`index.html` for your site.
|
43
|
+
|
44
|
+
If you want to take advantage of the templating capabilities you will want to
|
45
|
+
create a `layout.haml` something like this:
|
46
|
+
|
47
|
+
-# myproject/_src/layout.haml
|
48
|
+
!!! 5
|
49
|
+
%html
|
50
|
+
|
51
|
+
%head
|
52
|
+
%title
|
53
|
+
Deris example
|
54
|
+
|
55
|
+
%body
|
56
|
+
|
57
|
+
%h1 Deris example
|
58
|
+
|
59
|
+
#content_wrapper
|
60
|
+
|
61
|
+
#content
|
62
|
+
=partial :content
|
63
|
+
|
64
|
+
You will now want to create a `content.haml` to provide the markup for the
|
65
|
+
`:content` partial:
|
66
|
+
|
67
|
+
-# myproject/_src/content.haml
|
68
|
+
%h3 Home page
|
69
|
+
|
70
|
+
%p
|
71
|
+
As this is in the _src directory it will be used to create index.html
|
72
|
+
|
73
|
+
If you want to add another generated page to the site you need to create a new
|
74
|
+
directory under the `_src`:
|
75
|
+
|
76
|
+
myproject/
|
77
|
+
_src/
|
78
|
+
morrisons/
|
79
|
+
content.haml
|
80
|
+
content.haml
|
81
|
+
layout.haml
|
82
|
+
|
83
|
+
When the page is generated it will take the name of the directory, in this case
|
84
|
+
that means the file will be called `morrisons.html`. Each directory can override
|
85
|
+
the partials from its parent. This means that `morrisons.html` will be created
|
86
|
+
by the combination of `_src/layout.haml` and `_src/morrisons/content.haml`.
|
87
|
+
|
88
|
+
You can nest directories within other directories as well:
|
89
|
+
|
90
|
+
myproject/
|
91
|
+
_src/
|
92
|
+
morrisons/
|
93
|
+
bread/
|
94
|
+
content.haml
|
95
|
+
content.haml
|
96
|
+
content.haml
|
97
|
+
layout.haml
|
98
|
+
|
99
|
+
Which will result in an output like this:
|
100
|
+
|
101
|
+
myoutput/
|
102
|
+
morrisons/
|
103
|
+
bread.html # _src/layout.haml + _src/morrisons/bread/content.haml
|
104
|
+
index.html # _src/layout.haml + _src/content.haml
|
105
|
+
morrisons.html # _src/layout.haml + _src/morrisons/content.haml
|
106
|
+
|
107
|
+
You can create URLs relative to the root of your generated content by using the
|
108
|
+
`url` helper in your HAML files:
|
109
|
+
|
110
|
+
%a{:href => url('morrisons/bread.html')} Bread
|
111
|
+
|
112
|
+
This will look at the current "depth" of the file within your project and
|
113
|
+
prepend the correct quantity of `../` to your URL.
|
114
|
+
|
115
|
+
## Getting help
|
116
|
+
|
117
|
+
You can get hold of me [on twitter](http://twitter.com/gshutler), [through a
|
118
|
+
message on github](http://github.com/inbox/new/gshutler) or even via ye olde
|
119
|
+
email at garry@robustsoftware.co.uk
|
data/lib/file.rb
CHANGED
@@ -35,16 +35,14 @@ module Deris
|
|
35
35
|
render(template)
|
36
36
|
end
|
37
37
|
|
38
|
-
def url(
|
38
|
+
def url(path)
|
39
39
|
sections = []
|
40
40
|
@depth.times do
|
41
41
|
sections << '..'
|
42
42
|
end
|
43
|
-
|
44
|
-
sections << segment
|
45
|
-
end
|
43
|
+
sections << path
|
46
44
|
|
47
|
-
sections.join('/')
|
45
|
+
sections.join('/')
|
48
46
|
end
|
49
47
|
|
50
48
|
end
|
data/lib/partial_hasher.rb
CHANGED
@@ -15,7 +15,13 @@ module Deris
|
|
15
15
|
file_sym = ::File.basename(file, '.haml').to_sym
|
16
16
|
partials[file_sym] = ::File.new(file).read
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
|
+
# apply the convention where a partial with the same name as the file
|
20
|
+
# being output is set as the content partial unless it already exists
|
21
|
+
if !partials[:content] and partials[@file_name.to_sym]
|
22
|
+
partials[:content] = partials[@file_name.to_sym]
|
23
|
+
end
|
24
|
+
|
19
25
|
partials
|
20
26
|
end
|
21
27
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
|
+
|
3
|
+
describe Deris::Directory do
|
4
|
+
|
5
|
+
let(:examples) { File.join(File.dirname(__FILE__), '..', 'examples') }
|
6
|
+
|
7
|
+
context 'with content defined by convention' do
|
8
|
+
|
9
|
+
let(:directory) { Deris::Directory.new(File.join(examples, 'contentconvention')) }
|
10
|
+
let(:partials) { directory.partials_hash }
|
11
|
+
|
12
|
+
it 'should have the same value for :content as :contentconvention' do
|
13
|
+
partials[:content].should_not be_nil
|
14
|
+
partials[:content].should == partials[:contentconvention]
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'with content defined and a partial matching the convention' do
|
20
|
+
|
21
|
+
let(:directory) { Deris::Directory.new(File.join(examples, 'contentconventionclash')) }
|
22
|
+
let(:partials) { directory.partials_hash }
|
23
|
+
|
24
|
+
it 'should not overwrite the :content partial with the partial matching the convention' do
|
25
|
+
partials[:content].should_not == partials[:contentconventionclash]
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
Content!
|
@@ -0,0 +1 @@
|
|
1
|
+
Clash! Ahhh!
|
data/tests/spec_tasks.rake
CHANGED
@@ -2,7 +2,21 @@ require 'rake'
|
|
2
2
|
require 'rubygems'
|
3
3
|
require 'rspec/core/rake_task'
|
4
4
|
|
5
|
+
SPEC_PATTERN = File.join(File.dirname(__FILE__), '*_specs', '**', '*.rb')
|
6
|
+
|
5
7
|
RSpec::Core::RakeTask.new do |spec|
|
6
|
-
spec.pattern =
|
8
|
+
spec.pattern = SPEC_PATTERN
|
7
9
|
end
|
8
10
|
|
11
|
+
namespace :spec do
|
12
|
+
|
13
|
+
task :doc do
|
14
|
+
cmd = ['spec']
|
15
|
+
cmd << '-f n'
|
16
|
+
cmd += FileList[SPEC_PATTERN].to_a
|
17
|
+
cmd = cmd.join(' ')
|
18
|
+
system cmd
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deris
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 5
|
10
|
+
version: 0.1.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Garry Shutler
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-06-
|
18
|
+
date: 2010-06-14 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -58,8 +58,8 @@ executables: []
|
|
58
58
|
|
59
59
|
extensions: []
|
60
60
|
|
61
|
-
extra_rdoc_files:
|
62
|
-
|
61
|
+
extra_rdoc_files:
|
62
|
+
- README.markdown
|
63
63
|
files:
|
64
64
|
- lib/deris.rb
|
65
65
|
- lib/directory.rb
|
@@ -68,8 +68,13 @@ files:
|
|
68
68
|
- lib/partial_hasher.rb
|
69
69
|
- lib/project.rb
|
70
70
|
- lib/subdirectory_list.rb
|
71
|
+
- README.markdown
|
71
72
|
- tests/project_specs/nested_files.rb
|
72
73
|
- tests/spec_helper.rb
|
74
|
+
- tests/directory_specs/content_convention.rb
|
75
|
+
- tests/examples/contentconventionclash/contentconventionclash.haml
|
76
|
+
- tests/examples/contentconventionclash/content.haml
|
77
|
+
- tests/examples/contentconvention/contentconvention.haml
|
73
78
|
- tests/examples/file/nested.haml
|
74
79
|
- tests/examples/file/initial.haml
|
75
80
|
- tests/examples/project/_src/menu.haml
|
@@ -118,6 +123,10 @@ summary: Simple documentation creation engine based on HAML
|
|
118
123
|
test_files:
|
119
124
|
- tests/project_specs/nested_files.rb
|
120
125
|
- tests/spec_helper.rb
|
126
|
+
- tests/directory_specs/content_convention.rb
|
127
|
+
- tests/examples/contentconventionclash/contentconventionclash.haml
|
128
|
+
- tests/examples/contentconventionclash/content.haml
|
129
|
+
- tests/examples/contentconvention/contentconvention.haml
|
121
130
|
- tests/examples/file/nested.haml
|
122
131
|
- tests/examples/file/initial.haml
|
123
132
|
- tests/examples/project/_src/menu.haml
|