deris 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/deris.rb +1 -2
- data/lib/directory.rb +28 -0
- data/lib/directory_writer.rb +33 -0
- data/lib/file.rb +1 -0
- data/lib/partial_hasher.rb +27 -0
- data/lib/project.rb +20 -35
- data/lib/subdirectory_list.rb +21 -0
- data/tests/build_project.rb +16 -0
- data/tests/examples/file/initial.haml +23 -0
- data/tests/examples/file/nested.haml +2 -0
- data/tests/examples/project/_src/content.haml +2 -0
- data/tests/examples/project/_src/layout.haml +21 -0
- data/tests/examples/project/_src/menu.haml +6 -0
- data/tests/examples/project/_src/morrisons/bread/content.haml +2 -0
- data/tests/examples/project/_src/morrisons/content.haml +5 -0
- data/tests/examples/project/_src/morrisons/subnav.haml +5 -0
- data/tests/examples/project/_src/subnav.haml +3 -0
- data/tests/project_specs/nested_files.rb +33 -0
- metadata +47 -6
data/lib/deris.rb
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
Dir.glob(File.join(File.expand_path(File.dirname(__FILE__)), '
|
2
|
-
Dir.glob(File.join(File.expand_path(File.dirname(__FILE__)), 'project.rb')).each {|f| require f }
|
1
|
+
Dir.glob(File.join(File.expand_path(File.dirname(__FILE__)), '*.rb')).each {|f| require f }
|
data/lib/directory.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'fileutils'
|
3
|
+
require ::File.join(::File.dirname(__FILE__), 'partial_hasher')
|
4
|
+
require ::File.join(::File.dirname(__FILE__), 'directory_writer')
|
5
|
+
require ::File.join(::File.dirname(__FILE__), 'subdirectory_list')
|
6
|
+
|
7
|
+
module Deris
|
8
|
+
|
9
|
+
class Directory
|
10
|
+
include PartialHasher
|
11
|
+
include DirectoryWriter
|
12
|
+
include SubdirectoryList
|
13
|
+
|
14
|
+
attr_reader :file_name, :partials, :directory
|
15
|
+
|
16
|
+
def initialize(directory, defaults = {})
|
17
|
+
@directory = directory
|
18
|
+
@file_name = ::File.basename(directory)
|
19
|
+
@partials = defaults.merge(partials_hash)
|
20
|
+
end
|
21
|
+
|
22
|
+
def sub_output(output)
|
23
|
+
::File.join(output, @file_name)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'fileutils'
|
3
|
+
require ::File.join(::File.dirname(__FILE__), 'file')
|
4
|
+
|
5
|
+
module Deris
|
6
|
+
|
7
|
+
module DirectoryWriter
|
8
|
+
|
9
|
+
def write(output)
|
10
|
+
unless respond_to?(:sub_directories) and respond_to?(:partials) and respond_to?(:sub_output)
|
11
|
+
raise 'need to respond to "sub directories", "partials" and "sub_output" to write'
|
12
|
+
end
|
13
|
+
|
14
|
+
# write out the content from this directory
|
15
|
+
write_file output
|
16
|
+
|
17
|
+
# write out the sub directories
|
18
|
+
sub_directories.each do |dir|
|
19
|
+
Directory.new(dir, partials).write(sub_output(output))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def write_file(output)
|
24
|
+
unless respond_to?(:file_name) and respond_to?(:partials)
|
25
|
+
raise 'need to respond to "file_name" and "partials" to use write_file'
|
26
|
+
end
|
27
|
+
|
28
|
+
File.new(file_name, partials).write output
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
data/lib/file.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module Deris
|
5
|
+
|
6
|
+
module PartialHasher
|
7
|
+
|
8
|
+
def partials_hash
|
9
|
+
unless respond_to?(:directory)
|
10
|
+
raise 'need to response to "directory" to create a hash of partials'
|
11
|
+
end
|
12
|
+
|
13
|
+
partials = {}
|
14
|
+
partial_file_mask = ::File.join(directory, '*.haml')
|
15
|
+
partial_files = ::Dir.glob(partial_file_mask)
|
16
|
+
|
17
|
+
partial_files.each do |file|
|
18
|
+
file_sym = ::File.basename(file, '.haml').to_sym
|
19
|
+
partials[file_sym] = ::File.new(file).read
|
20
|
+
end
|
21
|
+
|
22
|
+
partials
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/lib/project.rb
CHANGED
@@ -1,18 +1,29 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'fileutils'
|
3
|
-
require ::File.join(::File.dirname(__FILE__), '
|
3
|
+
require ::File.join(::File.dirname(__FILE__), 'directory')
|
4
|
+
require ::File.join(::File.dirname(__FILE__), 'partial_hasher')
|
5
|
+
require ::File.join(::File.dirname(__FILE__), 'directory_writer')
|
6
|
+
require ::File.join(::File.dirname(__FILE__), 'subdirectory_list')
|
4
7
|
|
5
8
|
module Deris
|
6
9
|
|
7
10
|
class Project
|
11
|
+
include PartialHasher
|
12
|
+
include DirectoryWriter
|
13
|
+
include SubdirectoryList
|
14
|
+
|
15
|
+
attr_reader :file_name, :partials, :directory
|
8
16
|
|
9
|
-
def initialize(source)
|
17
|
+
def initialize(source, defaults = {})
|
10
18
|
@source = source
|
11
|
-
@
|
12
|
-
@
|
19
|
+
@file_name = 'index'
|
20
|
+
@directory = ::File.join(@source, '_src')
|
21
|
+
@partials = defaults.merge(partials_hash)
|
13
22
|
end
|
14
23
|
|
15
24
|
def write(output)
|
25
|
+
# adds additional behaviour on top of the DirectoryWriter mixin
|
26
|
+
|
16
27
|
# recreate the output directory
|
17
28
|
FileUtils.rm_rf(output) if ::File.exists?(output)
|
18
29
|
FileUtils.mkdir(output)
|
@@ -22,40 +33,14 @@ module Deris
|
|
22
33
|
static_content = Dir[static_content_mask].reject{|path| path =~ /_src$/}
|
23
34
|
static_content.each{|path| FileUtils.cp_r(path, output)}
|
24
35
|
|
25
|
-
#
|
26
|
-
|
27
|
-
|
28
|
-
# generate the other pages of the site from sub-directories
|
29
|
-
source_directories.each do |dir|
|
30
|
-
partials = partials_from dir
|
31
|
-
partials = @defaults.merge(partials)
|
32
|
-
file_name = ::File.basename(dir)
|
33
|
-
File.new(file_name, partials).write output
|
34
|
-
end
|
36
|
+
# call the DirectoryWriter mixin
|
37
|
+
super
|
35
38
|
end
|
36
39
|
|
37
|
-
|
38
|
-
|
39
|
-
def source_directories
|
40
|
-
source_directory_mask = ::File.join(@source_directory, '*')
|
41
|
-
::Dir[source_directory_mask].find_all do |dir|
|
42
|
-
::File.directory?(dir)
|
43
|
-
end
|
40
|
+
def sub_output(output)
|
41
|
+
output
|
44
42
|
end
|
45
|
-
|
46
|
-
def partials_from(directory)
|
47
|
-
partials = {}
|
48
|
-
partial_file_mask = ::File.join(directory, '*.haml')
|
49
|
-
partial_files = ::Dir.glob(partial_file_mask)
|
50
|
-
|
51
|
-
partial_files.each do |file|
|
52
|
-
file_sym = ::File.basename(file, '.haml').to_sym
|
53
|
-
partials[file_sym] = ::File.new(file).read
|
54
|
-
end
|
55
|
-
|
56
|
-
partials
|
57
|
-
end
|
58
|
-
|
43
|
+
|
59
44
|
end
|
60
45
|
|
61
46
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module Deris
|
5
|
+
|
6
|
+
module SubdirectoryList
|
7
|
+
|
8
|
+
def sub_directories
|
9
|
+
unless respond_to?(:directory)
|
10
|
+
raise 'need to respond to "directory" to list sub directories'
|
11
|
+
end
|
12
|
+
|
13
|
+
sub_directory_mask = ::File.join(directory, '*')
|
14
|
+
::Dir[sub_directory_mask].find_all do |dir|
|
15
|
+
::File.directory?(dir)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# work out base paths
|
4
|
+
current_dir = File.dirname(__FILE__)
|
5
|
+
root_dir = File.join(current_dir, '..')
|
6
|
+
|
7
|
+
# require the project class
|
8
|
+
require File.join(root_dir, 'lib', 'project')
|
9
|
+
|
10
|
+
# work out paths for test
|
11
|
+
project_path = File.join(current_dir, 'examples', 'project')
|
12
|
+
output_path = File.join(root_dir, 'output')
|
13
|
+
|
14
|
+
# create and write out project
|
15
|
+
project = Deris::Project.new project_path
|
16
|
+
project.write output_path
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec'
|
2
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'project')
|
3
|
+
|
4
|
+
describe Deris::Project do
|
5
|
+
|
6
|
+
let(:examples) { File.join(File.dirname(__FILE__), '..', 'examples') }
|
7
|
+
let(:output) { File.join(File.dirname(__FILE__), '..', '..', 'output') }
|
8
|
+
|
9
|
+
context 'with nested templates' do
|
10
|
+
|
11
|
+
let(:project) { Deris::Project.new(File.join(examples, 'project')) }
|
12
|
+
let(:morrisons_directory) { File.join(output, 'morrisons') }
|
13
|
+
let(:bread_file) { File.join(morrisons_directory, 'bread.html') }
|
14
|
+
|
15
|
+
before do
|
16
|
+
project.write(output)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should create the morrisons directory' do
|
20
|
+
File.exist?(morrisons_directory).should be_true
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should create a file called "bread.html" in the morrisons directory' do
|
24
|
+
File.exist?(bread_file).should be_true
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should have the phrase "Freshly baked in store, every day" in "bread.html"' do
|
28
|
+
File.read(bread_file).should =~ /Freshly baked in store, every day/
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
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: 29
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
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-08 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -34,6 +34,22 @@ dependencies:
|
|
34
34
|
version: 2.2.0
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rspec
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 27
|
46
|
+
segments:
|
47
|
+
- 1
|
48
|
+
- 3
|
49
|
+
- 0
|
50
|
+
version: 1.3.0
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
37
53
|
description: Simple documentation creation engine based on HAML
|
38
54
|
email: garry@robustsoftware.co.uk
|
39
55
|
executables: []
|
@@ -44,8 +60,23 @@ extra_rdoc_files: []
|
|
44
60
|
|
45
61
|
files:
|
46
62
|
- lib/deris.rb
|
63
|
+
- lib/directory.rb
|
64
|
+
- lib/directory_writer.rb
|
47
65
|
- lib/file.rb
|
66
|
+
- lib/partial_hasher.rb
|
48
67
|
- lib/project.rb
|
68
|
+
- lib/subdirectory_list.rb
|
69
|
+
- tests/build_project.rb
|
70
|
+
- tests/examples/file/initial.haml
|
71
|
+
- tests/examples/file/nested.haml
|
72
|
+
- tests/examples/project/_src/content.haml
|
73
|
+
- tests/examples/project/_src/layout.haml
|
74
|
+
- tests/examples/project/_src/menu.haml
|
75
|
+
- tests/examples/project/_src/morrisons/bread/content.haml
|
76
|
+
- tests/examples/project/_src/morrisons/content.haml
|
77
|
+
- tests/examples/project/_src/morrisons/subnav.haml
|
78
|
+
- tests/examples/project/_src/subnav.haml
|
79
|
+
- tests/project_specs/nested_files.rb
|
49
80
|
has_rdoc: true
|
50
81
|
homepage: http://github.com/gshutler/deris
|
51
82
|
licenses: []
|
@@ -80,5 +111,15 @@ rubygems_version: 1.3.7
|
|
80
111
|
signing_key:
|
81
112
|
specification_version: 3
|
82
113
|
summary: Simple documentation creation engine based on HAML
|
83
|
-
test_files:
|
84
|
-
|
114
|
+
test_files:
|
115
|
+
- tests/build_project.rb
|
116
|
+
- tests/examples/file/initial.haml
|
117
|
+
- tests/examples/file/nested.haml
|
118
|
+
- tests/examples/project/_src/content.haml
|
119
|
+
- tests/examples/project/_src/layout.haml
|
120
|
+
- tests/examples/project/_src/menu.haml
|
121
|
+
- tests/examples/project/_src/morrisons/bread/content.haml
|
122
|
+
- tests/examples/project/_src/morrisons/content.haml
|
123
|
+
- tests/examples/project/_src/morrisons/subnav.haml
|
124
|
+
- tests/examples/project/_src/subnav.haml
|
125
|
+
- tests/project_specs/nested_files.rb
|