ruhoh 1.0.0.alpha → 1.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.
- data/README.md +2 -3
- data/history.json +17 -0
- data/lib/ruhoh/client/client.rb +5 -1
- data/lib/ruhoh/compiler.rb +19 -1
- data/lib/ruhoh/compilers/rss.rb +5 -2
- data/lib/ruhoh/compilers/theme.rb +32 -27
- data/lib/ruhoh/config.rb +13 -1
- data/lib/ruhoh/db.rb +4 -1
- data/lib/ruhoh/page.rb +1 -1
- data/lib/ruhoh/parsers/javascripts.rb +8 -20
- data/lib/ruhoh/parsers/pages.rb +4 -2
- data/lib/ruhoh/parsers/payload.rb +4 -2
- data/lib/ruhoh/parsers/posts.rb +4 -2
- data/lib/ruhoh/parsers/stylesheets.rb +9 -21
- data/lib/ruhoh/parsers/theme_config.rb +30 -0
- data/lib/ruhoh/paths.rb +14 -14
- data/lib/ruhoh/previewer.rb +2 -1
- data/lib/ruhoh/program.rb +9 -0
- data/lib/ruhoh/templaters/base_helpers.rb +4 -0
- data/lib/ruhoh/urls.rb +8 -8
- data/lib/ruhoh/version.rb +1 -1
- data/lib/ruhoh.rb +32 -11
- data/ruhoh.gemspec +1 -0
- data/widgets/comments/config.yml +1 -0
- data/widgets/comments/layouts/facebook.html +2 -2
- data/widgets/comments/layouts/intensedebate.html +1 -1
- data/widgets/comments/layouts/livefyre.html +1 -1
- metadata +49 -18
data/README.md
CHANGED
data/history.json
CHANGED
@@ -1,4 +1,21 @@
|
|
1
1
|
[
|
2
|
+
{
|
3
|
+
"version" : "1.0",
|
4
|
+
"date" : "22.08.2012",
|
5
|
+
"changes" : [
|
6
|
+
"Ruhoh.setup is now broken out into modular setup routines.",
|
7
|
+
"Themes now port over ALL static assets to production when compiling. Change from whitelist to blacklist."
|
8
|
+
],
|
9
|
+
"features" : [
|
10
|
+
"Add support for base_path which allows all urls to be prepended with a base_path if set.",
|
11
|
+
"Support for absolute links to third party domains for javascript and stylesheets within theme.yml",
|
12
|
+
"Add urls.theme variable to the payload",
|
13
|
+
"Add ?to_json contextual helper"
|
14
|
+
],
|
15
|
+
"bugs" : [
|
16
|
+
"Themes now correctly port over assets to production when compiling"
|
17
|
+
]
|
18
|
+
},
|
2
19
|
{
|
3
20
|
"version" : "1.0.0.alpha",
|
4
21
|
"date" : "05.06.2012",
|
data/lib/ruhoh/client/client.rb
CHANGED
@@ -17,7 +17,11 @@ class Ruhoh
|
|
17
17
|
exit
|
18
18
|
} unless self.respond_to?(cmd)
|
19
19
|
|
20
|
-
|
20
|
+
unless ['help','blog','compile'].include?(cmd)
|
21
|
+
Ruhoh.setup
|
22
|
+
Ruhoh.setup_paths
|
23
|
+
Ruhoh.setup_urls
|
24
|
+
end
|
21
25
|
|
22
26
|
self.__send__(cmd)
|
23
27
|
end
|
data/lib/ruhoh/compiler.rb
CHANGED
@@ -26,6 +26,7 @@ class Ruhoh
|
|
26
26
|
def self.run(target, page)
|
27
27
|
self.pages(target, page)
|
28
28
|
self.media(target, page)
|
29
|
+
self.javascripts(target, page)
|
29
30
|
end
|
30
31
|
|
31
32
|
def self.pages(target, page)
|
@@ -43,11 +44,28 @@ class Ruhoh
|
|
43
44
|
|
44
45
|
def self.media(target, page)
|
45
46
|
return unless FileTest.directory? Ruhoh.paths.media
|
46
|
-
|
47
|
+
url = Ruhoh.urls.media.gsub(/^\//, '')
|
48
|
+
media = Ruhoh::Utils.url_to_path(url, target)
|
47
49
|
FileUtils.mkdir_p media
|
48
50
|
FileUtils.cp_r File.join(Ruhoh.paths.media, '.'), media
|
49
51
|
end
|
50
52
|
|
53
|
+
# Create all the javascripts.
|
54
|
+
# Javascripts may be registered from either a theme or a widget.
|
55
|
+
# Technically the theme compiler may create javascripts relative to the theme.
|
56
|
+
# This ensures the widget javascripts are created as well.
|
57
|
+
def self.javascripts(target, page)
|
58
|
+
Ruhoh::DB.javascripts.each do |type, assets|
|
59
|
+
assets.each do |asset|
|
60
|
+
url = asset['url'].gsub(/^\//, '')
|
61
|
+
next unless File.exist?(asset['id'])
|
62
|
+
file_path = Ruhoh::Utils.url_to_path(File.dirname(url), target)
|
63
|
+
FileUtils.mkdir_p file_path
|
64
|
+
FileUtils.cp(asset['id'], file_path)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
51
69
|
end #Defaults
|
52
70
|
|
53
71
|
end #Compiler
|
data/lib/ruhoh/compilers/rss.rb
CHANGED
@@ -10,13 +10,16 @@ class Ruhoh
|
|
10
10
|
# render the content to save to disk. This will be a problem when
|
11
11
|
# posts numbers expand. Merge this in later.
|
12
12
|
def self.run(target, page)
|
13
|
+
num_posts = Ruhoh.config.rss_limit
|
14
|
+
posts = Ruhoh::DB.posts['chronological'].first(num_posts)
|
15
|
+
|
13
16
|
feed = Nokogiri::XML::Builder.new do |xml|
|
14
17
|
xml.rss(:version => '2.0') {
|
15
18
|
xml.channel {
|
16
19
|
xml.title_ Ruhoh::DB.site['title']
|
17
20
|
xml.link_ Ruhoh::DB.site['config']['production_url']
|
18
|
-
xml.pubDate_ Time.now
|
19
|
-
|
21
|
+
xml.pubDate_ Time.now
|
22
|
+
posts.each do |post_id|
|
20
23
|
post = Ruhoh::DB.posts['dictionary'][post_id]
|
21
24
|
page.change(post_id)
|
22
25
|
xml.item {
|
@@ -3,39 +3,44 @@ class Ruhoh
|
|
3
3
|
module Theme
|
4
4
|
|
5
5
|
def self.run(target, page)
|
6
|
-
self.
|
7
|
-
self.javascripts(target, page)
|
8
|
-
self.media(target, page)
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.stylesheets(target, page)
|
12
|
-
Ruhoh::DB.stylesheets.each do |type, assets|
|
13
|
-
assets.each do |asset|
|
14
|
-
next unless File.exist?(asset['id'])
|
15
|
-
file_path = Ruhoh::Utils.url_to_path(File.dirname(asset['url']), target)
|
16
|
-
FileUtils.mkdir_p file_path
|
17
|
-
FileUtils.cp(asset['id'], file_path)
|
18
|
-
end
|
19
|
-
end
|
6
|
+
self.copy(target, page)
|
20
7
|
end
|
21
8
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
9
|
+
# Copies all theme assets over to the compiled site.
|
10
|
+
# Note the compiled assets are namespaced at /assets/<theme-name>/
|
11
|
+
# theme.yml may specify exclusion rules for excluding assets.
|
12
|
+
def self.copy(target, page)
|
13
|
+
url = Ruhoh.urls.theme.gsub(/^\//, '')
|
14
|
+
theme = Ruhoh::Utils.url_to_path(url, target)
|
15
|
+
FileUtils.mkdir_p theme
|
16
|
+
|
17
|
+
self.files.each do |file|
|
18
|
+
original_file = File.join(Ruhoh.paths.theme, file)
|
19
|
+
compiled_file = File.join(theme, file)
|
20
|
+
FileUtils.mkdir_p File.dirname(compiled_file)
|
21
|
+
FileUtils.cp_r original_file, compiled_file
|
30
22
|
end
|
31
23
|
end
|
32
24
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
FileUtils.
|
25
|
+
# Returns list of all files from the theme that need to be
|
26
|
+
# compiled to the production environment.
|
27
|
+
# Returns Array of relative filepaths
|
28
|
+
def self.files
|
29
|
+
FileUtils.cd(Ruhoh.paths.theme) {
|
30
|
+
return Dir["**/*"].select { |filepath|
|
31
|
+
next unless self.is_valid_asset?(filepath)
|
32
|
+
true
|
33
|
+
}
|
34
|
+
}
|
38
35
|
end
|
36
|
+
|
37
|
+
# Checks a given asset filepath against any user-defined exclusion rules in theme.yml
|
38
|
+
def self.is_valid_asset?(filepath)
|
39
|
+
return false if FileTest.directory?(filepath)
|
40
|
+
Ruhoh::DB.theme_config["exclude"].each {|regex| return false if filepath =~ regex }
|
41
|
+
true
|
42
|
+
end
|
43
|
+
|
39
44
|
end #Theme
|
40
45
|
end #Compiler
|
41
46
|
end #Ruhoh
|
data/lib/ruhoh/config.rb
CHANGED
@@ -9,7 +9,9 @@ class Ruhoh
|
|
9
9
|
:posts_exclude,
|
10
10
|
:posts_layout,
|
11
11
|
:posts_permalink,
|
12
|
-
:
|
12
|
+
:rss_limit,
|
13
|
+
:theme,
|
14
|
+
:base_path
|
13
15
|
)
|
14
16
|
|
15
17
|
def self.generate(path_to_config)
|
@@ -27,8 +29,18 @@ class Ruhoh
|
|
27
29
|
|
28
30
|
config = Config.new
|
29
31
|
config.theme = theme
|
32
|
+
|
30
33
|
config.env = site_config['env'] || nil
|
34
|
+
|
35
|
+
config.base_path = '/'
|
36
|
+
if site_config['base_path']
|
37
|
+
config.base_path = site_config['base_path'].to_s
|
38
|
+
config.base_path += "/" unless config.base_path[-1] == '/'
|
39
|
+
end
|
31
40
|
|
41
|
+
config.rss_limit = site_config['rss']['limit'] rescue nil
|
42
|
+
config.rss_limit = 20 if config.rss_limit.nil?
|
43
|
+
|
32
44
|
config.posts_permalink = site_config['posts']['permalink'] rescue nil
|
33
45
|
config.posts_layout = site_config['posts']['layout'] rescue nil
|
34
46
|
config.posts_layout = 'post' if config.posts_layout.nil?
|
data/lib/ruhoh/db.rb
CHANGED
@@ -4,6 +4,7 @@ require 'ruhoh/parsers/routes'
|
|
4
4
|
require 'ruhoh/parsers/layouts'
|
5
5
|
require 'ruhoh/parsers/partials'
|
6
6
|
require 'ruhoh/parsers/widgets'
|
7
|
+
require 'ruhoh/parsers/theme_config'
|
7
8
|
require 'ruhoh/parsers/stylesheets'
|
8
9
|
require 'ruhoh/parsers/javascripts'
|
9
10
|
require 'ruhoh/parsers/payload'
|
@@ -12,7 +13,7 @@ require 'ruhoh/parsers/site'
|
|
12
13
|
class Ruhoh
|
13
14
|
# Public: Database class for interacting with "data" in Ruhoh.
|
14
15
|
class DB
|
15
|
-
WhiteList = [:site, :posts, :pages, :routes, :layouts, :partials, :widgets, :stylesheets, :javascripts, :payload]
|
16
|
+
WhiteList = [:site, :posts, :pages, :routes, :layouts, :partials, :widgets, :theme_config, :stylesheets, :javascripts, :payload]
|
16
17
|
|
17
18
|
class << self
|
18
19
|
self.__send__ :attr_reader, *WhiteList
|
@@ -34,6 +35,8 @@ class Ruhoh
|
|
34
35
|
Ruhoh::Parsers::Partials.generate
|
35
36
|
when :widgets
|
36
37
|
Ruhoh::Parsers::Widgets.generate
|
38
|
+
when :theme_config
|
39
|
+
Ruhoh::Parsers::ThemeConfig.generate
|
37
40
|
when :stylesheets
|
38
41
|
Ruhoh::Parsers::Stylesheets.generate
|
39
42
|
when :javascripts
|
data/lib/ruhoh/page.rb
CHANGED
@@ -8,20 +8,20 @@ class Ruhoh
|
|
8
8
|
# Generates mappings to all registered javascripts.
|
9
9
|
# Returns Hash with layout names as keys and Array of asset Objects as values
|
10
10
|
def self.generate
|
11
|
-
|
12
|
-
assets = self.
|
13
|
-
assets[Ruhoh.names.widgets] = self.widget_javascripts(theme_config)
|
11
|
+
assets = self.theme_javascripts
|
12
|
+
assets[Ruhoh.names.widgets] = self.widget_javascripts
|
14
13
|
assets
|
15
14
|
end
|
16
15
|
|
17
|
-
def self.theme_javascripts
|
18
|
-
return {} unless theme_config[Ruhoh.names.javascripts].is_a? Hash
|
16
|
+
def self.theme_javascripts
|
17
|
+
return {} unless Ruhoh::DB.theme_config[Ruhoh.names.javascripts].is_a? Hash
|
19
18
|
assets = {}
|
20
|
-
theme_config[Ruhoh.names.javascripts].each do |key, value|
|
19
|
+
Ruhoh::DB.theme_config[Ruhoh.names.javascripts].each do |key, value|
|
21
20
|
next if key == Ruhoh.names.widgets # Widgets are handled separately.
|
22
21
|
assets[key] = Array(value).map { |v|
|
22
|
+
url = (v =~ /^(http:|https:)?\/\//i) ? v : "#{Ruhoh.urls.theme_javascripts}/#{v}"
|
23
23
|
{
|
24
|
-
"url" =>
|
24
|
+
"url" => url,
|
25
25
|
"id" => File.join(Ruhoh.paths.theme_javascripts, v)
|
26
26
|
}
|
27
27
|
}
|
@@ -35,7 +35,7 @@ class Ruhoh
|
|
35
35
|
# This differs from the auto-stylesheet inclusion relative to themes,
|
36
36
|
# which is handled in the stylesheet parser.
|
37
37
|
# Make sure there are some standards with this.
|
38
|
-
def self.widget_javascripts
|
38
|
+
def self.widget_javascripts
|
39
39
|
assets = []
|
40
40
|
Ruhoh::DB.widgets.each_value do |widget|
|
41
41
|
next unless widget[Ruhoh.names.javascripts]
|
@@ -50,18 +50,6 @@ class Ruhoh
|
|
50
50
|
assets
|
51
51
|
end
|
52
52
|
|
53
|
-
def self.theme_config
|
54
|
-
theme_config = Ruhoh::Utils.parse_yaml_file(Ruhoh.paths.theme_config_data)
|
55
|
-
if theme_config.nil?
|
56
|
-
Ruhoh::Friend.say{
|
57
|
-
yellow "WARNING: theme.yml config file not found:"
|
58
|
-
yellow " #{Ruhoh.paths.theme_config_data}"
|
59
|
-
}
|
60
|
-
return {}
|
61
|
-
end
|
62
|
-
return {} unless theme_config.is_a? Hash
|
63
|
-
theme_config
|
64
|
-
end
|
65
53
|
end #Javascripts
|
66
54
|
end #Parsers
|
67
55
|
end #Ruhoh
|
data/lib/ruhoh/parsers/pages.rb
CHANGED
@@ -65,10 +65,12 @@ class Ruhoh
|
|
65
65
|
name = page['id'].gsub(Regexp.new("#{ext}$"), '')
|
66
66
|
ext = '.html' if Ruhoh::Converter.extensions.include?(ext)
|
67
67
|
url = name.split('/').map {|p| Ruhoh::Urls.to_url_slug(p) }.join('/')
|
68
|
-
url = "
|
68
|
+
url = "#{url}#{ext}".gsub(/index.html$/, '')
|
69
69
|
if page['permalink'] == 'pretty' || Ruhoh.config.pages_permalink == 'pretty'
|
70
|
-
url = url.gsub(/\.html$/, '')
|
70
|
+
url = url.gsub(/\.html$/, '/')
|
71
71
|
end
|
72
|
+
|
73
|
+
url = "#{Ruhoh.config.base_path}#{url}"
|
72
74
|
url = '/' if url.empty?
|
73
75
|
|
74
76
|
url
|
@@ -11,10 +11,12 @@ class Ruhoh
|
|
11
11
|
"site" => Ruhoh::DB.site,
|
12
12
|
'page' => {},
|
13
13
|
"urls" => {
|
14
|
+
"theme" => Ruhoh.urls.theme,
|
14
15
|
"theme_stylesheets" => Ruhoh.urls.theme_stylesheets,
|
15
16
|
"theme_javascripts" => Ruhoh.urls.theme_javascripts,
|
16
17
|
"theme_media" => Ruhoh.urls.theme_media,
|
17
18
|
"media" => Ruhoh.urls.media,
|
19
|
+
"base_path" => Ruhoh.config.base_path,
|
18
20
|
}
|
19
21
|
}
|
20
22
|
end
|
@@ -24,7 +26,7 @@ class Ruhoh
|
|
24
26
|
def self.determine_category_and_tag_urls
|
25
27
|
return nil unless Ruhoh::DB.routes && Ruhoh::DB.posts
|
26
28
|
categories_url = nil
|
27
|
-
[
|
29
|
+
["#{Ruhoh.config.base_path}categories/", "#{Ruhoh.config.base_path}categories.html"].each { |url|
|
28
30
|
categories_url = url and break if Ruhoh::DB.routes.key?(url)
|
29
31
|
}
|
30
32
|
Ruhoh::DB.posts['categories'].each do |key, value|
|
@@ -32,7 +34,7 @@ class Ruhoh
|
|
32
34
|
end
|
33
35
|
|
34
36
|
tags_url = nil
|
35
|
-
[
|
37
|
+
["#{Ruhoh.config.base_path}tags/", "#{Ruhoh.config.base_path}tags.html"].each { |url|
|
36
38
|
tags_url = url and break if Ruhoh::DB.routes.key?(url)
|
37
39
|
}
|
38
40
|
Ruhoh::DB.posts['tags'].each do |key, value|
|
data/lib/ruhoh/parsers/posts.rb
CHANGED
@@ -138,11 +138,11 @@ class Ruhoh
|
|
138
138
|
date = Date.parse(post['date'])
|
139
139
|
title = Ruhoh::Urls.to_url_slug(post['title'])
|
140
140
|
format = post['permalink'] || Ruhoh.config.posts_permalink || "/:categories/:year/:month/:day/:title.html"
|
141
|
-
|
141
|
+
|
142
142
|
# Use the literal permalink if it is a non-tokenized string.
|
143
143
|
unless format.include?(':')
|
144
144
|
url = format.gsub(/^\//, '').split('/').map {|p| CGI::escape(p) }.join('/')
|
145
|
-
return "
|
145
|
+
return "#{Ruhoh.config.base_path}#{url}"
|
146
146
|
end
|
147
147
|
|
148
148
|
filename = File.basename(post['id'], File.extname(post['id']))
|
@@ -162,6 +162,8 @@ class Ruhoh
|
|
162
162
|
result.gsub(/:#{Regexp.escape token.first}/, token.last)
|
163
163
|
}.gsub(/\/+/, "/")
|
164
164
|
|
165
|
+
url = url.gsub(/^\//, '') #prep for prepending the base_path
|
166
|
+
url = "#{Ruhoh.config.base_path}#{url}"
|
165
167
|
url
|
166
168
|
end
|
167
169
|
|
@@ -10,23 +10,23 @@ class Ruhoh
|
|
10
10
|
# Generates mappings to all registered stylesheets.
|
11
11
|
# Returns Hash with layout names as keys and Array of asset Objects as values
|
12
12
|
def self.generate
|
13
|
-
|
14
|
-
assets = self.
|
15
|
-
assets[Ruhoh.names.widgets] = self.widget_stylesheets(theme_config)
|
13
|
+
assets = self.theme_stylesheets
|
14
|
+
assets[Ruhoh.names.widgets] = self.widget_stylesheets
|
16
15
|
assets
|
17
16
|
end
|
18
17
|
|
19
18
|
# Create mappings for stylesheets registered to the theme layouts.
|
20
19
|
# Themes register stylesheets relative to their layouts.
|
21
20
|
# Returns Hash with layout names as keys and Array of asset Objects as values.
|
22
|
-
def self.theme_stylesheets
|
23
|
-
return {} unless theme_config[Ruhoh.names.stylesheets].is_a? Hash
|
21
|
+
def self.theme_stylesheets
|
22
|
+
return {} unless Ruhoh::DB.theme_config[Ruhoh.names.stylesheets].is_a? Hash
|
24
23
|
assets = {}
|
25
|
-
theme_config[Ruhoh.names.stylesheets].each do |key, value|
|
24
|
+
Ruhoh::DB.theme_config[Ruhoh.names.stylesheets].each do |key, value|
|
26
25
|
next if key == Ruhoh.names.widgets # Widgets are handled separately.
|
27
26
|
assets[key] = Array(value).map { |v|
|
27
|
+
url = (v =~ /^(http:|https:)?\/\//i) ? v : "#{Ruhoh.urls.theme_stylesheets}/#{v}"
|
28
28
|
{
|
29
|
-
"url" =>
|
29
|
+
"url" => url,
|
30
30
|
"id" => File.join(Ruhoh.paths.theme_stylesheets, v)
|
31
31
|
}
|
32
32
|
}
|
@@ -41,11 +41,11 @@ class Ruhoh
|
|
41
41
|
# Themes may also specify an explicit widget stylesheet to load.
|
42
42
|
#
|
43
43
|
# Returns Array of asset objects.
|
44
|
-
def self.widget_stylesheets
|
44
|
+
def self.widget_stylesheets
|
45
45
|
assets = []
|
46
46
|
Ruhoh::DB.widgets.each_key do |name|
|
47
47
|
default_name = "#{name}.css"
|
48
|
-
stylesheet = theme_config[Ruhoh.names.stylesheets][Ruhoh.names.widgets][name] rescue default_name
|
48
|
+
stylesheet = Ruhoh::DB.theme_config[Ruhoh.names.stylesheets][Ruhoh.names.widgets][name] rescue default_name
|
49
49
|
stylesheet ||= default_name
|
50
50
|
file = File.join(Ruhoh.paths.theme_widgets, name, Ruhoh.names.stylesheets, stylesheet)
|
51
51
|
next unless File.exists?(file)
|
@@ -58,18 +58,6 @@ class Ruhoh
|
|
58
58
|
assets
|
59
59
|
end
|
60
60
|
|
61
|
-
def self.theme_config
|
62
|
-
theme_config = Ruhoh::Utils.parse_yaml_file(Ruhoh.paths.theme_config_data)
|
63
|
-
if theme_config.nil?
|
64
|
-
Ruhoh::Friend.say{
|
65
|
-
yellow "WARNING: theme.yml config file not found:"
|
66
|
-
yellow " #{Ruhoh.paths.theme_config_data}"
|
67
|
-
}
|
68
|
-
return {}
|
69
|
-
end
|
70
|
-
return {} unless theme_config.is_a? Hash
|
71
|
-
theme_config
|
72
|
-
end
|
73
61
|
end #Stylesheets
|
74
62
|
end #Parsers
|
75
63
|
end #Ruhoh
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class Ruhoh
|
2
|
+
module Parsers
|
3
|
+
module ThemeConfig
|
4
|
+
|
5
|
+
def self.generate
|
6
|
+
config = Ruhoh::Utils.parse_yaml_file(Ruhoh.paths.theme_config_data)
|
7
|
+
if config.nil?
|
8
|
+
Ruhoh::Friend.say{
|
9
|
+
yellow "WARNING: theme.yml config file not found:"
|
10
|
+
yellow " #{Ruhoh.paths.theme_config_data}"
|
11
|
+
}
|
12
|
+
return {}
|
13
|
+
end
|
14
|
+
return {} unless config.is_a? Hash
|
15
|
+
|
16
|
+
config["exclude"] = Array(config['exclude']).compact.map do |node|
|
17
|
+
is_last = node[0] == "*"
|
18
|
+
node = node.chomp("*").reverse.chomp("*").reverse
|
19
|
+
node = Regexp.escape("#{node}")
|
20
|
+
node = is_last ? "#{node}$" : "^#{node}"
|
21
|
+
|
22
|
+
Regexp.new(node, true)
|
23
|
+
end
|
24
|
+
|
25
|
+
config
|
26
|
+
end
|
27
|
+
|
28
|
+
end #ThemeConfig
|
29
|
+
end #Parsers
|
30
|
+
end #Ruhoh
|
data/lib/ruhoh/paths.rb
CHANGED
@@ -32,22 +32,22 @@ class Ruhoh
|
|
32
32
|
:system_widgets
|
33
33
|
)
|
34
34
|
|
35
|
-
def self.generate
|
35
|
+
def self.generate
|
36
36
|
paths = Paths.new
|
37
|
-
paths.base = base
|
38
|
-
paths.config_data = File.join(base, Ruhoh.names.config_data)
|
39
|
-
paths.pages = File.join(base, Ruhoh.names.pages)
|
40
|
-
paths.posts = File.join(base, Ruhoh.names.posts)
|
41
|
-
paths.partials = File.join(base, Ruhoh.names.partials)
|
42
|
-
paths.media = File.join(base, Ruhoh.names.media)
|
43
|
-
paths.widgets = File.join(base, Ruhoh.names.widgets)
|
44
|
-
paths.compiled = File.join(base, Ruhoh.names.compiled)
|
45
|
-
paths.dashboard_file = File.join(base, Ruhoh.names.dashboard_file)
|
46
|
-
paths.site_data = File.join(base, Ruhoh.names.site_data)
|
47
|
-
paths.themes = File.join(base, Ruhoh.names.themes)
|
48
|
-
paths.plugins = File.join(base, Ruhoh.names.plugins)
|
37
|
+
paths.base = Ruhoh.base
|
38
|
+
paths.config_data = File.join(Ruhoh.base, Ruhoh.names.config_data)
|
39
|
+
paths.pages = File.join(Ruhoh.base, Ruhoh.names.pages)
|
40
|
+
paths.posts = File.join(Ruhoh.base, Ruhoh.names.posts)
|
41
|
+
paths.partials = File.join(Ruhoh.base, Ruhoh.names.partials)
|
42
|
+
paths.media = File.join(Ruhoh.base, Ruhoh.names.media)
|
43
|
+
paths.widgets = File.join(Ruhoh.base, Ruhoh.names.widgets)
|
44
|
+
paths.compiled = File.join(Ruhoh.base, Ruhoh.names.compiled)
|
45
|
+
paths.dashboard_file = File.join(Ruhoh.base, Ruhoh.names.dashboard_file)
|
46
|
+
paths.site_data = File.join(Ruhoh.base, Ruhoh.names.site_data)
|
47
|
+
paths.themes = File.join(Ruhoh.base, Ruhoh.names.themes)
|
48
|
+
paths.plugins = File.join(Ruhoh.base, Ruhoh.names.plugins)
|
49
49
|
|
50
|
-
paths.theme = File.join(base, Ruhoh.names.themes, config.theme)
|
50
|
+
paths.theme = File.join(Ruhoh.base, Ruhoh.names.themes, Ruhoh.config.theme)
|
51
51
|
paths.theme_dashboard_file= File.join(paths.theme, Ruhoh.names.dashboard_file)
|
52
52
|
paths.theme_config_data = File.join(paths.theme, Ruhoh.names.theme_config)
|
53
53
|
paths.theme_layouts = File.join(paths.theme, Ruhoh.names.layouts)
|
data/lib/ruhoh/previewer.rb
CHANGED
@@ -14,7 +14,8 @@ class Ruhoh
|
|
14
14
|
|
15
15
|
def call(env)
|
16
16
|
return favicon if env['PATH_INFO'] == '/favicon.ico'
|
17
|
-
|
17
|
+
env['PATH_INFO'] += "/" unless (env['PATH_INFO'] =~ /\.\w+$/ || env['PATH_INFO'][-1] == "/")
|
18
|
+
return admin if env['PATH_INFO'] == "#{Ruhoh.urls.dashboard}/"
|
18
19
|
|
19
20
|
id = Ruhoh::DB.routes[env['PATH_INFO']]
|
20
21
|
raise "Page id not found for url: #{env['PATH_INFO']}" unless id
|
data/lib/ruhoh/program.rb
CHANGED
@@ -18,7 +18,12 @@ class Ruhoh
|
|
18
18
|
|
19
19
|
Ruhoh.setup
|
20
20
|
Ruhoh.config.env = opts[:env]
|
21
|
+
Ruhoh.setup_paths
|
22
|
+
Ruhoh.setup_urls
|
23
|
+
Ruhoh.setup_plugins unless opts[:enable_plugins] == false
|
24
|
+
|
21
25
|
Ruhoh::DB.update_all
|
26
|
+
|
22
27
|
Ruhoh::Watch.start if opts[:watch]
|
23
28
|
Rack::Builder.new {
|
24
29
|
use Rack::Lint
|
@@ -51,6 +56,10 @@ class Ruhoh
|
|
51
56
|
def self.compile(target)
|
52
57
|
Ruhoh.setup
|
53
58
|
Ruhoh.config.env = 'production'
|
59
|
+
Ruhoh.setup_paths
|
60
|
+
Ruhoh.setup_urls
|
61
|
+
Ruhoh.setup_plugins
|
62
|
+
|
54
63
|
Ruhoh::DB.update_all
|
55
64
|
Ruhoh::Compiler.compile(target)
|
56
65
|
end
|
data/lib/ruhoh/urls.rb
CHANGED
@@ -14,22 +14,22 @@ class Ruhoh
|
|
14
14
|
:theme_widgets
|
15
15
|
)
|
16
16
|
|
17
|
-
def self.generate
|
17
|
+
def self.generate
|
18
18
|
urls = Urls.new
|
19
19
|
urls.media = self.to_url(Ruhoh.names.assets, Ruhoh.names.media)
|
20
20
|
urls.widgets = self.to_url(Ruhoh.names.assets, Ruhoh.names.widgets)
|
21
21
|
urls.dashboard = self.to_url(Ruhoh.names.dashboard_file.split('.')[0])
|
22
22
|
|
23
|
-
urls.theme = self.to_url(Ruhoh.names.assets, config.theme)
|
24
|
-
urls.theme_media = self.to_url(Ruhoh.names.assets, config.theme, Ruhoh.names.media)
|
25
|
-
urls.theme_javascripts = self.to_url(Ruhoh.names.assets, config.theme, Ruhoh.names.javascripts)
|
26
|
-
urls.theme_stylesheets = self.to_url(Ruhoh.names.assets, config.theme, Ruhoh.names.stylesheets)
|
27
|
-
urls.theme_widgets = self.to_url(Ruhoh.names.assets, config.theme, Ruhoh.names.widgets)
|
23
|
+
urls.theme = self.to_url(Ruhoh.names.assets, Ruhoh.config.theme)
|
24
|
+
urls.theme_media = self.to_url(Ruhoh.names.assets, Ruhoh.config.theme, Ruhoh.names.media)
|
25
|
+
urls.theme_javascripts = self.to_url(Ruhoh.names.assets, Ruhoh.config.theme, Ruhoh.names.javascripts)
|
26
|
+
urls.theme_stylesheets = self.to_url(Ruhoh.names.assets, Ruhoh.config.theme, Ruhoh.names.stylesheets)
|
27
|
+
urls.theme_widgets = self.to_url(Ruhoh.names.assets, Ruhoh.config.theme, Ruhoh.names.widgets)
|
28
28
|
urls
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
def self.to_url(*args)
|
32
|
-
args.
|
32
|
+
Ruhoh.config.base_path + args.join('/')
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.to_url_slug(title)
|
data/lib/ruhoh/version.rb
CHANGED
data/lib/ruhoh.rb
CHANGED
@@ -30,7 +30,7 @@ class Ruhoh
|
|
30
30
|
|
31
31
|
class << self
|
32
32
|
attr_accessor :log
|
33
|
-
attr_reader :config, :names, :paths, :root, :urls
|
33
|
+
attr_reader :config, :names, :paths, :root, :urls, :base
|
34
34
|
end
|
35
35
|
|
36
36
|
@log = Ruhoh::Logger.new
|
@@ -63,28 +63,49 @@ class Ruhoh
|
|
63
63
|
self.reset
|
64
64
|
@log.log_file = opts[:log_file] if opts[:log_file]
|
65
65
|
@base = opts[:source] if opts[:source]
|
66
|
-
|
67
|
-
|
68
|
-
@paths = Ruhoh::Paths.generate(@config, @base)
|
69
|
-
@urls = Ruhoh::Urls.generate(@config)
|
70
|
-
|
71
|
-
return false unless(@config && @paths && @urls)
|
72
|
-
|
73
|
-
self.setup_plugins unless opts[:enable_plugins] == false
|
74
|
-
true
|
66
|
+
@config = Ruhoh::Config.generate(@names.config_data)
|
67
|
+
!!@config
|
75
68
|
end
|
76
69
|
|
77
70
|
def self.reset
|
78
71
|
@base = Dir.getwd
|
79
72
|
end
|
80
73
|
|
74
|
+
def self.setup_paths
|
75
|
+
self.ensure_config
|
76
|
+
@paths = Ruhoh::Paths.generate
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.setup_urls
|
80
|
+
self.ensure_config
|
81
|
+
@urls = Ruhoh::Urls.generate
|
82
|
+
end
|
83
|
+
|
81
84
|
def self.setup_plugins
|
85
|
+
self.ensure_paths
|
82
86
|
plugins = Dir[File.join(self.paths.plugins, "**/*.rb")]
|
83
87
|
plugins.each {|f| require f } unless plugins.empty?
|
84
88
|
end
|
85
89
|
|
86
90
|
def self.ensure_setup
|
87
|
-
|
91
|
+
return if Ruhoh.config && Ruhoh.paths && Ruhoh.urls
|
92
|
+
raise 'Ruhoh has not been fully setup. Please call: Ruhoh.setup'
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.ensure_config
|
96
|
+
return if Ruhoh.config
|
97
|
+
raise 'Ruhoh has not setup config. Please call: Ruhoh.setup'
|
98
|
+
end
|
99
|
+
|
100
|
+
def self.ensure_paths
|
101
|
+
return if Ruhoh.config && Ruhoh.paths
|
102
|
+
raise 'Ruhoh has not setup paths. Please call: Ruhoh.setup'
|
88
103
|
end
|
89
104
|
|
105
|
+
def self.ensure_urls
|
106
|
+
return if Ruhoh.config && Ruhoh.urls
|
107
|
+
raise 'Ruhoh has not setup urls. Please call: Ruhoh.setup + Ruhoh.setup_urls'
|
108
|
+
end
|
109
|
+
|
110
|
+
|
90
111
|
end # Ruhoh
|
data/ruhoh.gemspec
CHANGED
data/widgets/comments/config.yml
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
var js, fjs = d.getElementsByTagName(s)[0];
|
4
4
|
if (d.getElementById(id)) return;
|
5
5
|
js = d.createElement(s); js.id = id;
|
6
|
-
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId={{ site.config.
|
6
|
+
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId={{ site.config.facebook.appid }}";
|
7
7
|
fjs.parentNode.insertBefore(js, fjs);
|
8
8
|
}(document, 'script', 'facebook-jssdk'));</script>
|
9
|
-
<div class="fb-comments" data-href="{{ site.production_url }}" data-num-posts="{{ config.
|
9
|
+
<div class="fb-comments" data-href="{{ site.production_url }}" data-num-posts="{{ config.facebook.num_posts }}" data-width="{{ config.facebook.width }}" data-colorscheme="{{ config.facebook.colorscheme }}"></div>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<script type='text/javascript' src='http://zor.livefyre.com/wjs/v1.0/javascripts/livefyre_init.js'></script>
|
2
2
|
<script type='text/javascript'>
|
3
3
|
var fyre = LF({
|
4
|
-
site_id: {{ config.
|
4
|
+
site_id: {{ config.livefyre.site_id }}
|
5
5
|
});
|
6
6
|
</script>
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruhoh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
5
|
-
prerelease:
|
4
|
+
version: '1.0'
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jade Dominguez
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '1.4'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.4'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: mustache
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0.99'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0.99'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: directory_watcher
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ~>
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '1.4'
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.4'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: redcarpet
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ~>
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '2.1'
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2.1'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: psych
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ~>
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: '1.3'
|
66
86
|
type: :runtime
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '1.3'
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: nokogiri
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ~>
|
@@ -76,7 +101,12 @@ dependencies:
|
|
76
101
|
version: '1.5'
|
77
102
|
type: :runtime
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '1.5'
|
80
110
|
description: Ruhoh is a Universal API for your static blog.
|
81
111
|
email: plusjade@gmail.com
|
82
112
|
executables:
|
@@ -113,6 +143,7 @@ files:
|
|
113
143
|
- lib/ruhoh/parsers/routes.rb
|
114
144
|
- lib/ruhoh/parsers/site.rb
|
115
145
|
- lib/ruhoh/parsers/stylesheets.rb
|
146
|
+
- lib/ruhoh/parsers/theme_config.rb
|
116
147
|
- lib/ruhoh/parsers/widgets.rb
|
117
148
|
- lib/ruhoh/paths.rb
|
118
149
|
- lib/ruhoh/previewer.rb
|
@@ -175,12 +206,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
175
206
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
207
|
none: false
|
177
208
|
requirements:
|
178
|
-
- - ! '
|
209
|
+
- - ! '>='
|
179
210
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
211
|
+
version: '0'
|
181
212
|
requirements: []
|
182
213
|
rubyforge_project:
|
183
|
-
rubygems_version: 1.8.
|
214
|
+
rubygems_version: 1.8.24
|
184
215
|
signing_key:
|
185
216
|
specification_version: 3
|
186
217
|
summary: Ruby based library to process your Ruhoh static blog.
|