ruhoh 0.3.0 → 1.0.0.alpha
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/README.md +0 -33
- data/dash.html +1 -0
- data/history.json +29 -0
- data/lib/ruhoh/client/client.rb +30 -22
- data/lib/ruhoh/client/help.yml +6 -2
- data/lib/ruhoh/compiler.rb +8 -20
- data/lib/ruhoh/compilers/rss.rb +36 -0
- data/lib/ruhoh/compilers/theme.rb +41 -0
- data/lib/ruhoh/config.rb +49 -0
- data/lib/ruhoh/converters/converter.rb +17 -4
- data/lib/ruhoh/converters/markdown.rb +2 -2
- data/lib/ruhoh/db.rb +29 -2
- data/lib/ruhoh/deployers/s3.rb +1 -1
- data/lib/ruhoh/logger.rb +1 -1
- data/lib/ruhoh/page.rb +38 -22
- data/lib/ruhoh/parsers/javascripts.rb +67 -0
- data/lib/ruhoh/parsers/layouts.rb +6 -10
- data/lib/ruhoh/parsers/pages.rb +17 -24
- data/lib/ruhoh/parsers/partials.rb +6 -14
- data/lib/ruhoh/parsers/payload.rb +47 -0
- data/lib/ruhoh/parsers/posts.rb +27 -29
- data/lib/ruhoh/parsers/site.rb +2 -2
- data/lib/ruhoh/parsers/stylesheets.rb +75 -0
- data/lib/ruhoh/parsers/widgets.rb +104 -0
- data/lib/ruhoh/paths.rb +75 -0
- data/lib/ruhoh/previewer.rb +11 -5
- data/lib/ruhoh/program.rb +35 -4
- data/lib/ruhoh/templaters/asset_helpers.rb +66 -0
- data/lib/ruhoh/templaters/base_helpers.rb +143 -0
- data/lib/ruhoh/templaters/helpers.rb +1 -148
- data/lib/ruhoh/templaters/rmustache.rb +45 -4
- data/lib/ruhoh/urls.rb +46 -0
- data/lib/ruhoh/utils.rb +59 -17
- data/lib/ruhoh/version.rb +2 -2
- data/lib/ruhoh/watch.rb +26 -14
- data/lib/ruhoh.rb +38 -96
- data/ruhoh.gemspec +29 -10
- data/scaffolds/draft.html +9 -0
- data/scaffolds/page.html +0 -2
- data/scaffolds/post.html +0 -4
- data/scaffolds/theme/{images → javascripts}/.gitkeep +0 -0
- data/scaffolds/theme/layouts/default.html +2 -4
- data/scaffolds/theme/layouts/page.html +1 -1
- data/scaffolds/theme/layouts/post.html +1 -1
- data/scaffolds/theme/{css/style.css → media/.gitkeep} +0 -0
- data/scaffolds/theme/stylesheets/style.css +0 -0
- data/scaffolds/theme/theme.yml +27 -0
- data/scaffolds/theme/widgets/.gitkeep +0 -0
- data/spec/config_spec.rb +50 -0
- data/spec/db_spec.rb +28 -14
- data/spec/page_spec.rb +24 -35
- data/spec/parsers/layouts_spec.rb +5 -13
- data/spec/parsers/pages_spec.rb +13 -11
- data/spec/parsers/posts_spec.rb +34 -29
- data/spec/parsers/routes_spec.rb +2 -1
- data/spec/parsers/site_spec.rb +6 -5
- data/spec/setup_spec.rb +3 -47
- data/widgets/analytics/config.yml +5 -0
- data/{system_partials/analytics/getclicky → widgets/analytics/layouts/getclicky.html} +2 -2
- data/{system_partials/analytics/google → widgets/analytics/layouts/google.html} +1 -1
- data/widgets/comments/config.yml +12 -0
- data/{system_partials/comments/disqus → widgets/comments/layouts/disqus.html} +2 -2
- data/{system_partials/comments/facebook → widgets/comments/layouts/facebook.html} +1 -1
- data/{system_partials/comments/intensedebate → widgets/comments/layouts/intensedebate.html} +1 -1
- data/{system_partials/comments/livefyre → widgets/comments/layouts/livefyre.html} +1 -1
- data/widgets/google_prettify/config.yml +1 -0
- data/widgets/google_prettify/layouts/google_prettify.html +10 -0
- metadata +54 -31
- data/lib/ruhoh/templaters/base.rb +0 -57
- data/system_partials/syntax/google_prettify +0 -11
data/lib/ruhoh/utils.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
class Ruhoh
|
2
|
-
|
3
2
|
module Utils
|
4
3
|
|
5
4
|
FMregex = /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
|
6
|
-
ContentRegex = /\{\{\s*content\s*\}\}/i
|
7
5
|
|
8
|
-
def self.
|
6
|
+
def self.parse_yaml_file(*args)
|
9
7
|
filepath = File.__send__ :join, args
|
10
8
|
return nil unless File.exist? filepath
|
11
9
|
|
@@ -17,20 +15,23 @@ class Ruhoh
|
|
17
15
|
nil
|
18
16
|
end
|
19
17
|
|
20
|
-
def self.
|
18
|
+
def self.parse_page_file(*args)
|
21
19
|
path = File.__send__(:join, args)
|
22
|
-
|
23
20
|
raise "File not found: #{path}" unless File.exist?(path)
|
24
21
|
|
25
22
|
page = File.open(path, 'r:UTF-8') {|f| f.read }
|
26
|
-
front_matter = page.match(FMregex)
|
27
|
-
|
28
|
-
return {} unless front_matter
|
29
|
-
|
30
|
-
data = YAML.load(front_matter[0].gsub(/---\n/, "")) || {}
|
31
23
|
|
24
|
+
front_matter = page.match(FMregex)
|
25
|
+
if front_matter
|
26
|
+
data = YAML.load(front_matter[0].gsub(/---\n/, "")) || {}
|
27
|
+
data['categories'] = Array(data['categories'])
|
28
|
+
data['tags'] = Array(data['tags'])
|
29
|
+
else
|
30
|
+
data = {}
|
31
|
+
end
|
32
|
+
|
32
33
|
{
|
33
|
-
"data" =>
|
34
|
+
"data" => data,
|
34
35
|
"content" => page.gsub(FMregex, '')
|
35
36
|
}
|
36
37
|
rescue Psych::SyntaxError => e
|
@@ -38,13 +39,36 @@ class Ruhoh
|
|
38
39
|
nil
|
39
40
|
end
|
40
41
|
|
41
|
-
def self.
|
42
|
-
|
43
|
-
|
44
|
-
data
|
42
|
+
def self.parse_layout_file(*args)
|
43
|
+
path = File.__send__(:join, args)
|
44
|
+
raise "Layout file not found: #{path}" unless File.exist?(path)
|
45
|
+
data = {}
|
46
|
+
page = File.open(path, 'r:UTF-8') {|f| f.read }
|
47
|
+
|
48
|
+
front_matter = page.match(FMregex)
|
49
|
+
if front_matter
|
50
|
+
data = YAML.load(front_matter[0].gsub(/---\n/, "")) || {}
|
51
|
+
end
|
52
|
+
|
53
|
+
{
|
54
|
+
"data" => data,
|
55
|
+
"content" => page.gsub(FMregex, '')
|
56
|
+
}
|
57
|
+
rescue Psych::SyntaxError => e
|
58
|
+
Ruhoh.log.error("ERROR in #{path}: #{e.message}")
|
59
|
+
nil
|
45
60
|
end
|
46
61
|
|
47
|
-
|
62
|
+
def self.relative_path(filename)
|
63
|
+
filename.gsub(Regexp.new("^#{Ruhoh.paths.base}/"), '')
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.url_to_path(url, base=nil)
|
67
|
+
parts = url.split('/')
|
68
|
+
parts = parts.unshift(base) if base
|
69
|
+
File.__send__(:join, parts)
|
70
|
+
end
|
71
|
+
|
48
72
|
def self.report(name, collection, invalid)
|
49
73
|
output = "#{collection.count}/#{collection.count + invalid.count} #{name} processed."
|
50
74
|
if collection.empty? && invalid.empty?
|
@@ -59,6 +83,24 @@ class Ruhoh
|
|
59
83
|
end
|
60
84
|
end
|
61
85
|
|
86
|
+
# Merges hash with another hash, recursively.
|
87
|
+
#
|
88
|
+
# Adapted from Jekyll which got it from some gem whose link is now broken.
|
89
|
+
# Thanks to whoever made it.
|
90
|
+
def self.deep_merge(hash1, hash2)
|
91
|
+
target = hash1.dup
|
92
|
+
|
93
|
+
hash2.keys.each do |key|
|
94
|
+
if hash2[key].is_a? Hash and hash1[key].is_a? Hash
|
95
|
+
target[key] = self.deep_merge(target[key], hash2[key])
|
96
|
+
next
|
97
|
+
end
|
98
|
+
|
99
|
+
target[key] = hash2[key]
|
100
|
+
end
|
101
|
+
|
102
|
+
target
|
103
|
+
end
|
104
|
+
|
62
105
|
end
|
63
|
-
|
64
106
|
end #Ruhoh
|
data/lib/ruhoh/version.rb
CHANGED
data/lib/ruhoh/watch.rb
CHANGED
@@ -11,46 +11,58 @@ class Ruhoh
|
|
11
11
|
def self.start
|
12
12
|
Ruhoh.ensure_setup
|
13
13
|
Ruhoh::Friend.say {
|
14
|
-
plain "=> Start watching: #{Ruhoh.paths.
|
14
|
+
plain "=> Start watching: #{Ruhoh.paths.base}"
|
15
15
|
}
|
16
16
|
glob = ''
|
17
17
|
|
18
18
|
# Watch all files + all sub directories except for special folders e.g '_database'
|
19
|
-
Dir.chdir(Ruhoh.paths.
|
19
|
+
Dir.chdir(Ruhoh.paths.base) {
|
20
20
|
dirs = Dir['*'].select { |x| File.directory?(x) }
|
21
|
-
dirs -= [Ruhoh.folders.database]
|
22
21
|
dirs = dirs.map { |x| "#{x}/**/*" }
|
23
22
|
dirs += ['*']
|
24
23
|
glob = dirs
|
25
24
|
}
|
26
25
|
|
27
|
-
dw = DirectoryWatcher.new(Ruhoh.paths.
|
26
|
+
dw = DirectoryWatcher.new(Ruhoh.paths.base, {
|
28
27
|
:glob => glob,
|
29
28
|
:pre_load => true
|
30
29
|
})
|
31
30
|
dw.interval = 1
|
32
31
|
dw.add_observer {|*args|
|
33
32
|
args.each {|event|
|
34
|
-
path = event['path'].gsub(Ruhoh.paths.
|
33
|
+
path = event['path'].gsub(Ruhoh.paths.base + '/', '')
|
35
34
|
|
36
|
-
if path ==
|
35
|
+
if path == Ruhoh.names.site_data
|
37
36
|
type = "Site"
|
38
37
|
Ruhoh::DB.update(:site)
|
39
|
-
elsif path ==
|
38
|
+
elsif path == Ruhoh.names.config_data
|
40
39
|
type = "Config"
|
41
40
|
Ruhoh::DB.update(:site)
|
42
|
-
elsif path =~ Regexp.new("
|
41
|
+
elsif path =~ Regexp.new("^#{Ruhoh.names.pages}")
|
42
|
+
type = "Pages"
|
43
|
+
Ruhoh::DB.update(:pages)
|
44
|
+
Ruhoh::DB.update(:routes)
|
45
|
+
elsif path =~ Regexp.new("^(#{Ruhoh.names.partials}|#{Ruhoh.names.themes}\/#{Ruhoh.config.theme}\/#{Ruhoh.names.partials})")
|
46
|
+
type = "Partials"
|
47
|
+
Ruhoh::DB.update(:partials)
|
48
|
+
elsif path =~ Regexp.new("^#{Ruhoh.names.posts}")
|
43
49
|
type = "Posts"
|
44
50
|
Ruhoh::DB.update(:posts)
|
45
51
|
Ruhoh::DB.update(:routes)
|
46
|
-
elsif path =~ Regexp.new("
|
47
|
-
type = "
|
52
|
+
elsif path =~ Regexp.new("^#{Ruhoh.names.themes}\/#{Ruhoh.config.theme}\/#{Ruhoh.names.layouts}")
|
53
|
+
type = "Layouts"
|
48
54
|
Ruhoh::DB.update(:layouts)
|
49
|
-
|
55
|
+
elsif path =~ Regexp.new("^#{Ruhoh.names.themes}\/#{Ruhoh.config.theme}")
|
56
|
+
type = "Theme"
|
57
|
+
Ruhoh::DB.update(:stylesheets)
|
58
|
+
Ruhoh::DB.update(:javascripts)
|
59
|
+
Ruhoh::DB.update(:widgets)
|
60
|
+
Ruhoh::DB.update(:layouts)
|
61
|
+
elsif path =~ Regexp.new("^#{Ruhoh.names.widgets}")
|
62
|
+
type = "Widgets"
|
63
|
+
Ruhoh::DB.update(:widgets)
|
50
64
|
else
|
51
|
-
type =
|
52
|
-
Ruhoh::DB.update(:pages)
|
53
|
-
Ruhoh::DB.update(:routes)
|
65
|
+
type = 'Unrecognized'
|
54
66
|
end
|
55
67
|
|
56
68
|
Ruhoh::Friend.say {
|
data/lib/ruhoh.rb
CHANGED
@@ -8,23 +8,18 @@ require 'json'
|
|
8
8
|
require 'time'
|
9
9
|
require 'cgi'
|
10
10
|
require 'fileutils'
|
11
|
+
require 'ostruct'
|
11
12
|
|
12
13
|
require 'mustache'
|
13
14
|
|
14
15
|
require 'ruhoh/logger'
|
15
16
|
require 'ruhoh/utils'
|
16
17
|
require 'ruhoh/friend'
|
17
|
-
require 'ruhoh/
|
18
|
-
require 'ruhoh/
|
19
|
-
require 'ruhoh/
|
20
|
-
require 'ruhoh/parsers/layouts'
|
21
|
-
require 'ruhoh/parsers/partials'
|
22
|
-
require 'ruhoh/parsers/site'
|
18
|
+
require 'ruhoh/config'
|
19
|
+
require 'ruhoh/paths'
|
20
|
+
require 'ruhoh/urls'
|
23
21
|
require 'ruhoh/db'
|
24
|
-
require 'ruhoh/templaters/helpers'
|
25
22
|
require 'ruhoh/templaters/rmustache'
|
26
|
-
require 'ruhoh/templaters/base'
|
27
|
-
require 'ruhoh/converters/markdown'
|
28
23
|
require 'ruhoh/converters/converter'
|
29
24
|
require 'ruhoh/page'
|
30
25
|
require 'ruhoh/previewer'
|
@@ -35,97 +30,52 @@ class Ruhoh
|
|
35
30
|
|
36
31
|
class << self
|
37
32
|
attr_accessor :log
|
38
|
-
attr_reader :
|
33
|
+
attr_reader :config, :names, :paths, :root, :urls
|
39
34
|
end
|
40
35
|
|
41
36
|
@log = Ruhoh::Logger.new
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
37
|
+
Root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
38
|
+
Names = {
|
39
|
+
:assets => 'assets',
|
40
|
+
:config_data => 'config.yml',
|
41
|
+
:compiled => 'compiled',
|
42
|
+
:dashboard_file => 'dash.html',
|
43
|
+
:layouts => 'layouts',
|
44
|
+
:media => 'media',
|
45
|
+
:pages => 'pages',
|
46
|
+
:partials => 'partials',
|
47
|
+
:plugins => 'plugins',
|
48
|
+
:posts => 'posts',
|
49
|
+
:javascripts => 'javascripts',
|
50
|
+
:site_data => 'site.yml',
|
51
|
+
:stylesheets => 'stylesheets',
|
52
|
+
:themes => 'themes',
|
53
|
+
:theme_config => 'theme.yml',
|
54
|
+
:widgets => 'widgets',
|
55
|
+
:widget_config => 'config.yml'
|
56
|
+
}
|
57
|
+
@names = OpenStruct.new(Names)
|
58
|
+
@root = Root
|
52
59
|
|
53
60
|
# Public: Setup Ruhoh utilities relative to the current application directory.
|
54
61
|
# Returns boolean on success/failure
|
55
62
|
def self.setup(opts={})
|
56
|
-
@log.log_file = opts[:log_file] if opts[:log_file]
|
57
63
|
self.reset
|
58
|
-
@
|
59
|
-
|
60
|
-
if (self.setup_config && self.setup_paths && self.setup_filters)
|
61
|
-
self.setup_plugins unless opts[:enable_plugins] == false
|
62
|
-
true
|
63
|
-
else
|
64
|
-
false
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def self.reset
|
69
|
-
@folders = Folders.new('_database', '_pages', '_posts', '_templates', 'themes', 'layouts', 'partials', "_media", "syntax", '_compiled', '_plugins')
|
70
|
-
@files = Files.new('_site.yml', '_config.yml', 'dash.html')
|
71
|
-
@filters = Filters.new
|
72
|
-
@config = Config.new
|
73
|
-
@paths = Paths.new
|
74
|
-
@site_source = Dir.getwd
|
75
|
-
end
|
76
|
-
|
77
|
-
def self.setup_config
|
78
|
-
site_config = Ruhoh::Utils.parse_file_as_yaml(@site_source, @files.config)
|
79
|
-
|
80
|
-
unless site_config
|
81
|
-
Ruhoh.log.error("Empty site_config.\nEnsure ./#{Ruhoh.files.config} exists and contains valid YAML")
|
82
|
-
return false
|
83
|
-
end
|
84
|
-
|
85
|
-
theme = site_config['theme'] ? site_config['theme'].to_s.gsub(/\s/, '') : ''
|
86
|
-
if theme.empty?
|
87
|
-
Ruhoh.log.error("Theme not specified in _config.yml")
|
88
|
-
return false
|
89
|
-
end
|
64
|
+
@log.log_file = opts[:log_file] if opts[:log_file]
|
65
|
+
@base = opts[:source] if opts[:source]
|
90
66
|
|
91
|
-
@config
|
92
|
-
@
|
93
|
-
@
|
94
|
-
@config.syntax_path = File.join('/', @folders.templates, @folders.syntax)
|
95
|
-
@config.permalink = site_config['permalink']
|
96
|
-
@config.pages_permalink = site_config['pages']['permalink'] rescue nil
|
97
|
-
excluded_pages = site_config['pages']['exclude'] rescue nil
|
98
|
-
@config.exclude = {
|
99
|
-
"posts" => Array(site_config['exclude'] || nil),
|
100
|
-
"pages" => Array(excluded_pages),
|
101
|
-
}
|
102
|
-
@config.env = site_config['env'] || nil
|
103
|
-
@config
|
104
|
-
end
|
105
|
-
|
106
|
-
def self.setup_paths
|
107
|
-
@paths.site_source = @site_source
|
108
|
-
@paths.database = self.absolute_path(@folders.database)
|
109
|
-
@paths.pages = self.absolute_path(@folders.pages)
|
110
|
-
@paths.posts = self.absolute_path(@folders.posts)
|
67
|
+
@config = Ruhoh::Config.generate(@names.config_data)
|
68
|
+
@paths = Ruhoh::Paths.generate(@config, @base)
|
69
|
+
@urls = Ruhoh::Urls.generate(@config)
|
111
70
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
@paths.media = self.absolute_path(@folders.media)
|
117
|
-
@paths.syntax = self.absolute_path(@folders.templates, @folders.syntax)
|
118
|
-
@paths.compiled = self.absolute_path(@folders.compiled)
|
119
|
-
@paths.dashboard = self.absolute_path(@files.dashboard)
|
120
|
-
@paths.plugins = self.absolute_path(@folders.plugins)
|
121
|
-
@paths
|
71
|
+
return false unless(@config && @paths && @urls)
|
72
|
+
|
73
|
+
self.setup_plugins unless opts[:enable_plugins] == false
|
74
|
+
true
|
122
75
|
end
|
123
76
|
|
124
|
-
|
125
|
-
|
126
|
-
@filters.pages = @config.exclude['pages'].map {|node| Regexp.new(node) }
|
127
|
-
@filters.posts = @config.exclude['posts'].map {|node| Regexp.new(node) }
|
128
|
-
@filters
|
77
|
+
def self.reset
|
78
|
+
@base = Dir.getwd
|
129
79
|
end
|
130
80
|
|
131
81
|
def self.setup_plugins
|
@@ -133,14 +83,6 @@ class Ruhoh
|
|
133
83
|
plugins.each {|f| require f } unless plugins.empty?
|
134
84
|
end
|
135
85
|
|
136
|
-
def self.absolute_path(*args)
|
137
|
-
File.__send__ :join, args.unshift(self.paths.site_source)
|
138
|
-
end
|
139
|
-
|
140
|
-
def self.relative_path(filename)
|
141
|
-
filename.gsub( Regexp.new("^#{self.paths.site_source}/"), '' )
|
142
|
-
end
|
143
|
-
|
144
86
|
def self.ensure_setup
|
145
87
|
raise 'Ruhoh has not been setup. Please call: Ruhoh.setup' unless Ruhoh.config && Ruhoh.paths
|
146
88
|
end
|
data/ruhoh.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.add_dependency 'directory_watcher', "~> 1.4"
|
20
20
|
s.add_dependency 'redcarpet', "~> 2.1"
|
21
21
|
s.add_dependency 'psych', "~> 1.3"
|
22
|
+
s.add_dependency 'nokogiri', "~> 1.5"
|
22
23
|
|
23
24
|
# = MANIFEST =
|
24
25
|
s.files = %w[
|
@@ -32,6 +33,9 @@ Gem::Specification.new do |s|
|
|
32
33
|
lib/ruhoh/client/client.rb
|
33
34
|
lib/ruhoh/client/help.yml
|
34
35
|
lib/ruhoh/compiler.rb
|
36
|
+
lib/ruhoh/compilers/rss.rb
|
37
|
+
lib/ruhoh/compilers/theme.rb
|
38
|
+
lib/ruhoh/config.rb
|
35
39
|
lib/ruhoh/converters/converter.rb
|
36
40
|
lib/ruhoh/converters/markdown.rb
|
37
41
|
lib/ruhoh/db.rb
|
@@ -39,30 +43,42 @@ Gem::Specification.new do |s|
|
|
39
43
|
lib/ruhoh/friend.rb
|
40
44
|
lib/ruhoh/logger.rb
|
41
45
|
lib/ruhoh/page.rb
|
46
|
+
lib/ruhoh/parsers/javascripts.rb
|
42
47
|
lib/ruhoh/parsers/layouts.rb
|
43
48
|
lib/ruhoh/parsers/pages.rb
|
44
49
|
lib/ruhoh/parsers/partials.rb
|
50
|
+
lib/ruhoh/parsers/payload.rb
|
45
51
|
lib/ruhoh/parsers/posts.rb
|
46
52
|
lib/ruhoh/parsers/routes.rb
|
47
53
|
lib/ruhoh/parsers/site.rb
|
54
|
+
lib/ruhoh/parsers/stylesheets.rb
|
55
|
+
lib/ruhoh/parsers/widgets.rb
|
56
|
+
lib/ruhoh/paths.rb
|
48
57
|
lib/ruhoh/previewer.rb
|
49
58
|
lib/ruhoh/program.rb
|
50
|
-
lib/ruhoh/templaters/
|
59
|
+
lib/ruhoh/templaters/asset_helpers.rb
|
60
|
+
lib/ruhoh/templaters/base_helpers.rb
|
51
61
|
lib/ruhoh/templaters/helpers.rb
|
52
62
|
lib/ruhoh/templaters/rmustache.rb
|
63
|
+
lib/ruhoh/urls.rb
|
53
64
|
lib/ruhoh/utils.rb
|
54
65
|
lib/ruhoh/version.rb
|
55
66
|
lib/ruhoh/watch.rb
|
56
67
|
ruhoh.gemspec
|
68
|
+
scaffolds/draft.html
|
57
69
|
scaffolds/layout.html
|
58
70
|
scaffolds/page.html
|
59
71
|
scaffolds/post.html
|
60
|
-
scaffolds/theme/
|
61
|
-
scaffolds/theme/images/.gitkeep
|
72
|
+
scaffolds/theme/javascripts/.gitkeep
|
62
73
|
scaffolds/theme/layouts/default.html
|
63
74
|
scaffolds/theme/layouts/page.html
|
64
75
|
scaffolds/theme/layouts/post.html
|
76
|
+
scaffolds/theme/media/.gitkeep
|
65
77
|
scaffolds/theme/partials/.gitkeep
|
78
|
+
scaffolds/theme/stylesheets/style.css
|
79
|
+
scaffolds/theme/theme.yml
|
80
|
+
scaffolds/theme/widgets/.gitkeep
|
81
|
+
spec/config_spec.rb
|
66
82
|
spec/db_spec.rb
|
67
83
|
spec/page_spec.rb
|
68
84
|
spec/parsers/layouts_spec.rb
|
@@ -72,13 +88,16 @@ Gem::Specification.new do |s|
|
|
72
88
|
spec/parsers/site_spec.rb
|
73
89
|
spec/setup_spec.rb
|
74
90
|
spec/spec_helper.rb
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
91
|
+
widgets/analytics/config.yml
|
92
|
+
widgets/analytics/layouts/getclicky.html
|
93
|
+
widgets/analytics/layouts/google.html
|
94
|
+
widgets/comments/config.yml
|
95
|
+
widgets/comments/layouts/disqus.html
|
96
|
+
widgets/comments/layouts/facebook.html
|
97
|
+
widgets/comments/layouts/intensedebate.html
|
98
|
+
widgets/comments/layouts/livefyre.html
|
99
|
+
widgets/google_prettify/config.yml
|
100
|
+
widgets/google_prettify/layouts/google_prettify.html
|
82
101
|
]
|
83
102
|
# = MANIFEST =
|
84
103
|
end
|
data/scaffolds/page.html
CHANGED
data/scaffolds/post.html
CHANGED
File without changes
|
@@ -1,15 +1,13 @@
|
|
1
|
-
---
|
2
|
-
---
|
3
1
|
<!DOCTYPE html>
|
4
2
|
<html lang="en">
|
5
3
|
<head>
|
6
4
|
<meta charset="utf-8">
|
7
|
-
|
5
|
+
{{{ assets }}}
|
8
6
|
</head>
|
9
7
|
<body>
|
10
8
|
|
11
9
|
<div class="content">
|
12
|
-
{{ content }}
|
10
|
+
{{{ content }}}
|
13
11
|
</div>
|
14
12
|
|
15
13
|
{{{ analytics }}}
|
File without changes
|
File without changes
|
File without changes
|
data/spec/config_spec.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Config
|
4
|
+
describe "Config" do
|
5
|
+
describe "#setup_config" do
|
6
|
+
context "Invalid _config.yml file" do
|
7
|
+
it 'should log error and return false if theme is not specified.' do
|
8
|
+
Ruhoh::Utils.should_receive(:parse_yaml_file).and_return({})
|
9
|
+
|
10
|
+
Ruhoh.log.should_receive(:error)
|
11
|
+
Ruhoh::Config.generate('config.yml').should be_false
|
12
|
+
end
|
13
|
+
end
|
14
|
+
context "Valid _config.yml file" do
|
15
|
+
it 'should setup the config struct based on configuration input.' do
|
16
|
+
custom_permalink = '/my/custom/link'
|
17
|
+
custom_theme = 'table'
|
18
|
+
custom_exclude = ['.secret']
|
19
|
+
Ruhoh::Utils.should_receive(:parse_yaml_file).and_return({
|
20
|
+
"theme" => custom_theme,
|
21
|
+
"posts" => {
|
22
|
+
"permalink" => custom_permalink,
|
23
|
+
'exclude' => custom_exclude
|
24
|
+
}
|
25
|
+
})
|
26
|
+
|
27
|
+
config = Ruhoh::Config.generate('config.yml')
|
28
|
+
config.theme.should == custom_theme
|
29
|
+
config.posts_exclude.should == [/.secret/]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#setup_filters" do
|
35
|
+
it 'should add custom exclude filters to the filters variable' do
|
36
|
+
custom_exclude = ['.secret', '^test']
|
37
|
+
Ruhoh::Utils.should_receive(:parse_yaml_file).and_return({
|
38
|
+
'theme' => "twitter",
|
39
|
+
"posts" => {
|
40
|
+
'exclude' => custom_exclude
|
41
|
+
},
|
42
|
+
})
|
43
|
+
|
44
|
+
config = Ruhoh::Config.generate('config.yml')
|
45
|
+
config.posts_exclude.should include(/.secret/)
|
46
|
+
config.posts_exclude.should include(/^test/)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/spec/db_spec.rb
CHANGED
@@ -1,21 +1,19 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
module DB
|
4
2
|
|
5
3
|
describe Ruhoh::DB do
|
6
|
-
let(:whitelist){
|
7
|
-
[:site, :routes, :posts, :pages, :layouts, :partials]
|
8
|
-
}
|
4
|
+
let(:whitelist){ Ruhoh::DB::WhiteList }
|
9
5
|
|
10
6
|
before(:each) do
|
11
|
-
Ruhoh::Utils.stub(:
|
7
|
+
Ruhoh::Utils.stub(:parse_yaml_file).and_return({'theme' => "twitter"})
|
8
|
+
Ruhoh::Paths.stub(:theme_is_valid?).and_return(true)
|
12
9
|
Ruhoh.setup(:source => SampleSitePath)
|
13
10
|
end
|
14
11
|
|
15
12
|
context "database has not been updated" do
|
16
|
-
it "should return nil for all whitelisted variables" do
|
13
|
+
it "should return nil for all whitelisted variables except payload" do
|
17
14
|
whitelist.each do |var|
|
18
|
-
result = Ruhoh::DB.__send__
|
15
|
+
result = Ruhoh::DB.__send__(var)
|
16
|
+
next if var == :payload
|
19
17
|
result.should be_nil
|
20
18
|
end
|
21
19
|
end
|
@@ -62,16 +60,32 @@ module DB
|
|
62
60
|
Ruhoh::DB.update(:partials)
|
63
61
|
Ruhoh::DB.partials.should == {'test' => 'hi'}
|
64
62
|
end
|
63
|
+
|
64
|
+
it "should run the widgets parser when updating :widgets" do
|
65
|
+
Ruhoh::Parsers::Widgets.should_receive(:generate).and_return({'test' => 'hi'})
|
66
|
+
Ruhoh::DB.update(:widgets)
|
67
|
+
Ruhoh::DB.widgets.should == {'test' => 'hi'}
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should run the stylesheets parser when updating :stylesheets" do
|
71
|
+
Ruhoh::Parsers::Stylesheets.should_receive(:generate).and_return({'test' => 'hi'})
|
72
|
+
Ruhoh::DB.update(:stylesheets)
|
73
|
+
Ruhoh::DB.stylesheets.should == {'test' => 'hi'}
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should run the scripts parser when updating :javascripts" do
|
77
|
+
Ruhoh::Parsers::Javascripts.should_receive(:generate).and_return({'test' => 'hi'})
|
78
|
+
Ruhoh::DB.update(:javascripts)
|
79
|
+
Ruhoh::DB.javascripts.should == {'test' => 'hi'}
|
80
|
+
end
|
81
|
+
|
65
82
|
end
|
66
83
|
|
67
84
|
describe "#update_all" do
|
68
85
|
it "should call update for all WhiteListed variables." do
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
Ruhoh::DB.should_receive(:update).with(:routes).ordered
|
73
|
-
Ruhoh::DB.should_receive(:update).with(:layouts).ordered
|
74
|
-
Ruhoh::DB.should_receive(:update).with(:partials).ordered
|
86
|
+
whitelist.each do |name|
|
87
|
+
Ruhoh::DB.should_receive(:update).with(name).ordered
|
88
|
+
end
|
75
89
|
Ruhoh::DB.update_all
|
76
90
|
end
|
77
91
|
end
|