ruhoh 1.1 → 2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +3 -3
- data/README.md +3 -2
- data/Rakefile +1 -22
- data/bin/ruhoh +1 -5
- data/history.json +16 -0
- data/lib/ruhoh.rb +229 -84
- data/lib/ruhoh/base/collection.rb +280 -0
- data/lib/ruhoh/base/compiler.rb +55 -0
- data/lib/ruhoh/base/model.rb +220 -0
- data/lib/ruhoh/base/model_view.rb +152 -0
- data/lib/ruhoh/base/watcher.rb +25 -0
- data/lib/ruhoh/cache.rb +46 -0
- data/lib/ruhoh/client.rb +162 -0
- data/lib/ruhoh/collections.rb +172 -0
- data/lib/ruhoh/console_methods.rb +21 -0
- data/lib/ruhoh/{converters/converter.rb → converter.rb} +4 -1
- data/lib/ruhoh/programs/compile.rb +22 -0
- data/lib/ruhoh/programs/preview.rb +63 -0
- data/lib/ruhoh/programs/watch.rb +45 -0
- data/lib/ruhoh/resources/dash/collection.rb +10 -0
- data/lib/ruhoh/resources/dash/model.rb +5 -0
- data/lib/ruhoh/resources/dash/model_view.rb +5 -0
- data/lib/ruhoh/resources/dash/previewer.rb +13 -0
- data/lib/ruhoh/resources/data/collection.rb +9 -0
- data/lib/ruhoh/resources/data/collection_view.rb +23 -0
- data/lib/ruhoh/resources/javascripts/collection.rb +9 -0
- data/lib/ruhoh/resources/javascripts/collection_view.rb +46 -0
- data/lib/ruhoh/resources/javascripts/compiler.rb +5 -0
- data/lib/ruhoh/resources/layouts/client.rb +45 -0
- data/lib/ruhoh/resources/layouts/model.rb +16 -0
- data/lib/ruhoh/resources/media/collection.rb +9 -0
- data/lib/ruhoh/resources/media/compiler.rb +27 -0
- data/lib/ruhoh/resources/pages/client.rb +124 -0
- data/lib/ruhoh/resources/pages/collection.rb +86 -0
- data/lib/ruhoh/resources/pages/collection_view.rb +73 -0
- data/lib/ruhoh/resources/pages/compiler.rb +101 -0
- data/lib/ruhoh/resources/pages/model.rb +5 -0
- data/lib/ruhoh/resources/pages/model_view.rb +5 -0
- data/lib/ruhoh/resources/pages/previewer.rb +72 -0
- data/lib/ruhoh/resources/partials/model.rb +11 -0
- data/lib/ruhoh/resources/stylesheets/collection.rb +9 -0
- data/lib/ruhoh/resources/stylesheets/collection_view.rb +45 -0
- data/lib/ruhoh/resources/stylesheets/compiler.rb +5 -0
- data/lib/ruhoh/resources/theme/collection.rb +14 -0
- data/lib/ruhoh/resources/theme/compiler.rb +54 -0
- data/lib/ruhoh/resources/widgets/collection.rb +26 -0
- data/lib/ruhoh/resources/widgets/collection_view.rb +34 -0
- data/lib/ruhoh/resources/widgets/compiler.rb +27 -0
- data/lib/ruhoh/resources/widgets/model.rb +16 -0
- data/lib/ruhoh/routes.rb +29 -0
- data/lib/ruhoh/utils.rb +32 -49
- data/lib/ruhoh/version.rb +2 -2
- data/lib/ruhoh/views/helpers/categories.rb +38 -0
- data/lib/ruhoh/views/helpers/paginator.rb +39 -0
- data/lib/ruhoh/views/helpers/tags.rb +37 -0
- data/lib/ruhoh/views/master_view.rb +183 -0
- data/lib/ruhoh/views/rmustache.rb +24 -0
- data/ruhoh.gemspec +6 -82
- data/spec/spec_helper.rb +1 -1
- data/spec/support/shared_contexts.rb +6 -5
- data/system/{scaffolds/post.html → _scaffold.html} +1 -1
- data/system/{dash.html → dash/index.html} +37 -51
- data/system/{scaffolds/layout.html → layouts/_scaffold.html} +0 -0
- data/system/layouts/paginator.html +28 -0
- data/system/plugins/sprockets/javascripts/compiler.rb +25 -0
- data/system/plugins/sprockets/javascripts/previewer.rb +17 -0
- data/system/plugins/sprockets/stylesheets/compiler.rb +26 -0
- data/system/plugins/sprockets/stylesheets/previewer.rb +17 -0
- data/system/widgets/analytics/{layouts/getclicky.html → getclicky.html} +6 -2
- data/system/widgets/analytics/{layouts/google.html → google.html} +5 -1
- data/system/widgets/comments/{layouts/disqus.html → disqus.html} +6 -2
- data/system/widgets/comments/{layouts/facebook.html → facebook.html} +9 -2
- data/system/widgets/comments/{layouts/intensedebate.html → intensedebate.html} +5 -1
- data/system/widgets/comments/{layouts/livefyre.html → livefyre.html} +5 -1
- data/system/widgets/google_prettify/{layouts/google_prettify.html → default.html} +6 -2
- metadata +69 -66
- data/lib/ruhoh/client/client.rb +0 -306
- data/lib/ruhoh/client/console_methods.rb +0 -9
- data/lib/ruhoh/client/help.yml +0 -56
- data/lib/ruhoh/compiler.rb +0 -72
- data/lib/ruhoh/compilers/rss.rb +0 -39
- data/lib/ruhoh/compilers/theme.rb +0 -46
- data/lib/ruhoh/config.rb +0 -62
- data/lib/ruhoh/db.rb +0 -50
- data/lib/ruhoh/deployers/s3.rb +0 -71
- data/lib/ruhoh/page.rb +0 -106
- data/lib/ruhoh/parsers/javascripts.rb +0 -55
- data/lib/ruhoh/parsers/layouts.rb +0 -32
- data/lib/ruhoh/parsers/pages.rb +0 -79
- data/lib/ruhoh/parsers/partials.rb +0 -42
- data/lib/ruhoh/parsers/payload.rb +0 -49
- data/lib/ruhoh/parsers/posts.rb +0 -259
- data/lib/ruhoh/parsers/routes.rb +0 -20
- data/lib/ruhoh/parsers/scaffolds.rb +0 -35
- data/lib/ruhoh/parsers/site.rb +0 -19
- data/lib/ruhoh/parsers/stylesheets.rb +0 -63
- data/lib/ruhoh/parsers/theme_config.rb +0 -30
- data/lib/ruhoh/parsers/widgets.rb +0 -104
- data/lib/ruhoh/paths.rb +0 -83
- data/lib/ruhoh/previewer.rb +0 -48
- data/lib/ruhoh/program.rb +0 -68
- data/lib/ruhoh/templaters/asset_helpers.rb +0 -66
- data/lib/ruhoh/templaters/base_helpers.rb +0 -147
- data/lib/ruhoh/templaters/helpers.rb +0 -8
- data/lib/ruhoh/templaters/rmustache.rb +0 -70
- data/lib/ruhoh/urls.rb +0 -50
- data/lib/ruhoh/watch.rb +0 -78
- data/spec/config_spec.rb +0 -50
- data/spec/db_spec.rb +0 -91
- data/spec/page_spec.rb +0 -164
- data/spec/parsers/layouts_spec.rb +0 -41
- data/spec/parsers/pages_spec.rb +0 -120
- data/spec/parsers/posts_spec.rb +0 -309
- data/spec/parsers/routes_spec.rb +0 -39
- data/spec/parsers/site_spec.rb +0 -28
- data/spec/setup_spec.rb +0 -12
- data/system/scaffolds/draft.html +0 -9
- data/system/scaffolds/page.html +0 -4
- data/system/widgets/analytics/config.yml +0 -5
- data/system/widgets/comments/config.yml +0 -13
- data/system/widgets/google_prettify/config.yml +0 -1
data/lib/ruhoh/parsers/routes.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
class Ruhoh
|
2
|
-
module Parsers
|
3
|
-
module Routes
|
4
|
-
|
5
|
-
def self.generate
|
6
|
-
routes = {}
|
7
|
-
Ruhoh::DB.pages.each_value { |page|
|
8
|
-
routes[page['url']] = page['id']
|
9
|
-
}
|
10
|
-
|
11
|
-
Ruhoh::DB.posts['dictionary'].each_value { |page|
|
12
|
-
routes[page['url']] = page['id']
|
13
|
-
}
|
14
|
-
|
15
|
-
routes
|
16
|
-
end
|
17
|
-
|
18
|
-
end #Routes
|
19
|
-
end #Parsers
|
20
|
-
end #Ruhoh
|
@@ -1,35 +0,0 @@
|
|
1
|
-
class Ruhoh
|
2
|
-
module Parsers
|
3
|
-
module Scaffolds
|
4
|
-
|
5
|
-
def self.generate
|
6
|
-
self.system_scaffolds.merge(
|
7
|
-
self.scaffolds
|
8
|
-
)
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.scaffolds
|
12
|
-
self.process(Ruhoh.paths.scaffolds)
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.system_scaffolds
|
16
|
-
self.process(Ruhoh.paths.system_scaffolds)
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.process(path)
|
20
|
-
return {} unless File.exist?(path)
|
21
|
-
|
22
|
-
scaffolds = {}
|
23
|
-
FileUtils.cd(path) {
|
24
|
-
Dir.glob("**/*").each { |filename|
|
25
|
-
next if FileTest.directory?(filename)
|
26
|
-
next if ['.'].include? filename[0]
|
27
|
-
File.open(filename, 'r:UTF-8') { |f| scaffolds[filename] = f.read }
|
28
|
-
}
|
29
|
-
}
|
30
|
-
scaffolds
|
31
|
-
end
|
32
|
-
|
33
|
-
end #Scaffolds
|
34
|
-
end #Parsers
|
35
|
-
end #Ruhoh
|
data/lib/ruhoh/parsers/site.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
class Ruhoh
|
2
|
-
|
3
|
-
module Parsers
|
4
|
-
|
5
|
-
# Sitewide data hash + configuration file.
|
6
|
-
module Site
|
7
|
-
|
8
|
-
def self.generate
|
9
|
-
site = Ruhoh::Utils.parse_yaml_file(Ruhoh.paths.site_data) || {}
|
10
|
-
config = Ruhoh::Utils.parse_yaml_file(Ruhoh.paths.config_data)
|
11
|
-
site['config'] = config
|
12
|
-
site
|
13
|
-
end
|
14
|
-
|
15
|
-
end #Site
|
16
|
-
|
17
|
-
end #Parsers
|
18
|
-
|
19
|
-
end #Ruhoh
|
@@ -1,63 +0,0 @@
|
|
1
|
-
class Ruhoh
|
2
|
-
module Parsers
|
3
|
-
# Collect all registered stylesheets.
|
4
|
-
# Themes explicitly define which stylesheets to load via theme.yml.
|
5
|
-
# All styling is managed by the theme, including widget styles.
|
6
|
-
# If the theme provides widget stylesheets they will load automatically.
|
7
|
-
# theme.yml may also specify an explicit widget stylesheet to load.
|
8
|
-
module Stylesheets
|
9
|
-
|
10
|
-
# Generates mappings to all registered stylesheets.
|
11
|
-
# Returns Hash with layout names as keys and Array of asset Objects as values
|
12
|
-
def self.generate
|
13
|
-
assets = self.theme_stylesheets
|
14
|
-
assets[Ruhoh.names.widgets] = self.widget_stylesheets
|
15
|
-
assets
|
16
|
-
end
|
17
|
-
|
18
|
-
# Create mappings for stylesheets registered to the theme layouts.
|
19
|
-
# Themes register stylesheets relative to their layouts.
|
20
|
-
# Returns Hash with layout names as keys and Array of asset Objects as values.
|
21
|
-
def self.theme_stylesheets
|
22
|
-
return {} unless Ruhoh::DB.theme_config[Ruhoh.names.stylesheets].is_a? Hash
|
23
|
-
assets = {}
|
24
|
-
Ruhoh::DB.theme_config[Ruhoh.names.stylesheets].each do |key, value|
|
25
|
-
next if key == Ruhoh.names.widgets # Widgets are handled separately.
|
26
|
-
assets[key] = Array(value).map { |v|
|
27
|
-
url = (v =~ /^(http:|https:)?\/\//i) ? v : "#{Ruhoh.urls.theme_stylesheets}/#{v}"
|
28
|
-
{
|
29
|
-
"url" => url,
|
30
|
-
"id" => File.join(Ruhoh.paths.theme_stylesheets, v)
|
31
|
-
}
|
32
|
-
}
|
33
|
-
end
|
34
|
-
|
35
|
-
assets
|
36
|
-
end
|
37
|
-
|
38
|
-
# Create mappings for stylesheets registered to a given widget.
|
39
|
-
# A theme may provide widget stylesheets which will load automatically,
|
40
|
-
# provided they adhere to the default naming rules.
|
41
|
-
# Themes may also specify an explicit widget stylesheet to load.
|
42
|
-
#
|
43
|
-
# Returns Array of asset objects.
|
44
|
-
def self.widget_stylesheets
|
45
|
-
assets = []
|
46
|
-
Ruhoh::DB.widgets.each_key do |name|
|
47
|
-
default_name = "#{name}.css"
|
48
|
-
stylesheet = Ruhoh::DB.theme_config[Ruhoh.names.stylesheets][Ruhoh.names.widgets][name] rescue default_name
|
49
|
-
stylesheet ||= default_name
|
50
|
-
file = File.join(Ruhoh.paths.theme_widgets, name, Ruhoh.names.stylesheets, stylesheet)
|
51
|
-
next unless File.exists?(file)
|
52
|
-
assets << {
|
53
|
-
"url" => [Ruhoh.urls.theme_widgets, name, Ruhoh.names.stylesheets, stylesheet].join('/'),
|
54
|
-
"id" => file
|
55
|
-
}
|
56
|
-
end
|
57
|
-
|
58
|
-
assets
|
59
|
-
end
|
60
|
-
|
61
|
-
end #Stylesheets
|
62
|
-
end #Parsers
|
63
|
-
end #Ruhoh
|
@@ -1,30 +0,0 @@
|
|
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
|
@@ -1,104 +0,0 @@
|
|
1
|
-
class Ruhoh
|
2
|
-
module Parsers
|
3
|
-
module Widgets
|
4
|
-
WidgetStructure = Struct.new(
|
5
|
-
:name,
|
6
|
-
:config,
|
7
|
-
:javascripts,
|
8
|
-
:layout
|
9
|
-
)
|
10
|
-
|
11
|
-
# Process available widgets into widget dictionary.
|
12
|
-
#
|
13
|
-
# Returns Dictionary of widget data.
|
14
|
-
def self.generate
|
15
|
-
widgets = {}
|
16
|
-
self.widgets.each do |name|
|
17
|
-
config = self.process_config(name)
|
18
|
-
widgets[name] = WidgetStructure.new(
|
19
|
-
name,
|
20
|
-
config,
|
21
|
-
self.process_javascripts(config, name),
|
22
|
-
self.process_layout(config, name)
|
23
|
-
)
|
24
|
-
end
|
25
|
-
Ruhoh::Utils.report('Widgets', widgets, [])
|
26
|
-
|
27
|
-
widgets
|
28
|
-
end
|
29
|
-
|
30
|
-
# Find the widgets.
|
31
|
-
#
|
32
|
-
# Returns Array of widget names.
|
33
|
-
def self.widgets
|
34
|
-
names = []
|
35
|
-
if FileTest.directory?(Ruhoh.paths.widgets)
|
36
|
-
FileUtils.cd(Ruhoh.paths.widgets) { names += Dir["*"] }
|
37
|
-
end
|
38
|
-
if FileTest.directory?(Ruhoh.paths.system_widgets)
|
39
|
-
FileUtils.cd(Ruhoh.paths.system_widgets) { names += Dir["*"] }
|
40
|
-
end
|
41
|
-
names.uniq!
|
42
|
-
names
|
43
|
-
end
|
44
|
-
|
45
|
-
# Process the widget configuration params.
|
46
|
-
#
|
47
|
-
# Returns Hash of configuration params.
|
48
|
-
def self.process_config(widget_name)
|
49
|
-
system_config = Ruhoh::Utils.parse_yaml_file(Ruhoh.paths.system_widgets, widget_name, Ruhoh.names.config_data) || {}
|
50
|
-
user_config = Ruhoh::Utils.parse_yaml_file(Ruhoh.paths.widgets, widget_name, Ruhoh.names.config_data) || {}
|
51
|
-
config = Ruhoh::Utils.deep_merge(system_config, user_config)
|
52
|
-
config['layout'] ||= widget_name
|
53
|
-
config['stylesheet'] ||= widget_name
|
54
|
-
config
|
55
|
-
end
|
56
|
-
|
57
|
-
# Process widget script dependencies.
|
58
|
-
# Script dependencies may be set in the config.
|
59
|
-
# Look for default script at: scripts/{widget_name}.js if no config.
|
60
|
-
# If found, we include it, else no javascripts will load.
|
61
|
-
#
|
62
|
-
# Returns Array of script filenames to load.
|
63
|
-
def self.process_javascripts(config, widget_name)
|
64
|
-
scripts = config[Ruhoh.names.javascripts] ? Array(config[Ruhoh.names.javascripts]) : []
|
65
|
-
|
66
|
-
# Try for the default script if no config.
|
67
|
-
if scripts.empty?
|
68
|
-
script_file = File.join(Ruhoh.paths.widgets, widget_name, Ruhoh.names.javascripts, "#{widget_name}.js")
|
69
|
-
if File.exist?(script_file)
|
70
|
-
scripts << "#{widget_name}.js"
|
71
|
-
else
|
72
|
-
script_file = File.join(Ruhoh.paths.system_widgets, widget_name, Ruhoh.names.javascripts, "#{widget_name}.js")
|
73
|
-
scripts << "#{widget_name}.js" if File.exist?(script_file)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
scripts
|
78
|
-
end
|
79
|
-
|
80
|
-
# Determine and process the correct widget layout.
|
81
|
-
# The layout may be manually configured by the user,
|
82
|
-
# else system defaults will be used.
|
83
|
-
# Layouts cascade from: theme -> blog -> system
|
84
|
-
#
|
85
|
-
# Returns String of rendered layout content.
|
86
|
-
def self.process_layout(config, widget_name)
|
87
|
-
layout = nil
|
88
|
-
layout_path = File.join(widget_name, 'layouts', "#{config['layout']}.html")
|
89
|
-
[
|
90
|
-
File.join(Ruhoh.paths.theme_widgets, layout_path),
|
91
|
-
File.join(Ruhoh.paths.widgets, layout_path),
|
92
|
-
File.join(Ruhoh.paths.system_widgets, layout_path)
|
93
|
-
].each do |path|
|
94
|
-
layout = path and break if File.exist?(path)
|
95
|
-
end
|
96
|
-
|
97
|
-
return '' unless layout
|
98
|
-
content = File.open(layout, 'r:UTF-8') { |f| f.read }
|
99
|
-
Mustache.render(content, {'config' => config})
|
100
|
-
end
|
101
|
-
|
102
|
-
end #Widgets
|
103
|
-
end #Parsers
|
104
|
-
end #Ruhoh
|
data/lib/ruhoh/paths.rb
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
class Ruhoh
|
2
|
-
# Structured container for all paths to relevant directories and files in the system.
|
3
|
-
# Paths are based on the ruhohspec for the Universal Blog API.
|
4
|
-
# Additionally we store some system (gem) level paths for cascading to default functionality,
|
5
|
-
# such as default widgets, default dashboard view, etc.
|
6
|
-
module Paths
|
7
|
-
Paths = Struct.new(
|
8
|
-
:base,
|
9
|
-
:compiled,
|
10
|
-
:config_data,
|
11
|
-
:dashboard_file,
|
12
|
-
:media,
|
13
|
-
:pages,
|
14
|
-
:partials,
|
15
|
-
:plugins,
|
16
|
-
:posts,
|
17
|
-
:scaffolds,
|
18
|
-
:site_data,
|
19
|
-
:themes,
|
20
|
-
:widgets,
|
21
|
-
|
22
|
-
:theme,
|
23
|
-
:theme_config_data,
|
24
|
-
:theme_dashboard_file,
|
25
|
-
:theme_layouts,
|
26
|
-
:theme_media,
|
27
|
-
:theme_partials,
|
28
|
-
:theme_javascripts,
|
29
|
-
:theme_stylesheets,
|
30
|
-
:theme_widgets,
|
31
|
-
|
32
|
-
:system,
|
33
|
-
:system_dashboard_file,
|
34
|
-
:system_scaffolds,
|
35
|
-
:system_partials,
|
36
|
-
:system_widgets
|
37
|
-
)
|
38
|
-
|
39
|
-
def self.generate
|
40
|
-
paths = Paths.new
|
41
|
-
paths.base = Ruhoh.base
|
42
|
-
paths.config_data = File.join(Ruhoh.base, Ruhoh.names.config_data)
|
43
|
-
paths.pages = File.join(Ruhoh.base, Ruhoh.names.pages)
|
44
|
-
paths.posts = File.join(Ruhoh.base, Ruhoh.names.posts)
|
45
|
-
paths.partials = File.join(Ruhoh.base, Ruhoh.names.partials)
|
46
|
-
paths.media = File.join(Ruhoh.base, Ruhoh.names.media)
|
47
|
-
paths.widgets = File.join(Ruhoh.base, Ruhoh.names.widgets)
|
48
|
-
paths.compiled = File.join(Ruhoh.base, Ruhoh.names.compiled)
|
49
|
-
paths.dashboard_file = File.join(Ruhoh.base, Ruhoh.names.dashboard_file)
|
50
|
-
paths.site_data = File.join(Ruhoh.base, Ruhoh.names.site_data)
|
51
|
-
paths.themes = File.join(Ruhoh.base, Ruhoh.names.themes)
|
52
|
-
paths.plugins = File.join(Ruhoh.base, Ruhoh.names.plugins)
|
53
|
-
paths.scaffolds = File.join(Ruhoh.base, Ruhoh.names.scaffolds)
|
54
|
-
|
55
|
-
paths.theme = File.join(Ruhoh.base, Ruhoh.names.themes, Ruhoh.config.theme)
|
56
|
-
paths.theme_dashboard_file= File.join(paths.theme, Ruhoh.names.dashboard_file)
|
57
|
-
paths.theme_config_data = File.join(paths.theme, Ruhoh.names.theme_config)
|
58
|
-
paths.theme_layouts = File.join(paths.theme, Ruhoh.names.layouts)
|
59
|
-
paths.theme_stylesheets = File.join(paths.theme, Ruhoh.names.stylesheets)
|
60
|
-
paths.theme_javascripts = File.join(paths.theme, Ruhoh.names.javascripts)
|
61
|
-
paths.theme_media = File.join(paths.theme, Ruhoh.names.media)
|
62
|
-
paths.theme_widgets = File.join(paths.theme, Ruhoh.names.widgets)
|
63
|
-
paths.theme_partials = File.join(paths.theme, Ruhoh.names.partials)
|
64
|
-
|
65
|
-
return false unless self.theme_is_valid?(paths)
|
66
|
-
|
67
|
-
paths.system = File.join(Ruhoh::Root, Ruhoh.names.system)
|
68
|
-
paths.system_dashboard_file = File.join(paths.system, Ruhoh.names.dashboard_file)
|
69
|
-
paths.system_partials = File.join(paths.system, Ruhoh.names.partials)
|
70
|
-
paths.system_scaffolds = File.join(paths.system, Ruhoh.names.scaffolds)
|
71
|
-
paths.system_widgets = File.join(paths.system, Ruhoh.names.widgets)
|
72
|
-
|
73
|
-
paths
|
74
|
-
end
|
75
|
-
|
76
|
-
def self.theme_is_valid?(paths)
|
77
|
-
return true if FileTest.directory?(paths.theme)
|
78
|
-
Ruhoh.log.error("Theme directory does not exist: #{paths.theme}")
|
79
|
-
return false
|
80
|
-
end
|
81
|
-
|
82
|
-
end #Paths
|
83
|
-
end #Ruhoh
|
data/lib/ruhoh/previewer.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
class Ruhoh
|
2
|
-
# Public: Rack application used to render singular pages via their URL.
|
3
|
-
#
|
4
|
-
# This class depends on a correctly loaded Ruhoh environment;
|
5
|
-
# it should only be used as part of a Ruhoh 'program' routine.
|
6
|
-
# See Ruhoh::Program for usage.
|
7
|
-
#
|
8
|
-
class Previewer
|
9
|
-
|
10
|
-
def initialize(page)
|
11
|
-
Ruhoh.config.env ||= 'development'
|
12
|
-
@page = page
|
13
|
-
end
|
14
|
-
|
15
|
-
def call(env)
|
16
|
-
return favicon if env['PATH_INFO'] == '/favicon.ico'
|
17
|
-
# Always remove trailing slash if sent unless it's the root page.
|
18
|
-
env['PATH_INFO'].gsub!(/\/$/, '') unless env['PATH_INFO'] == "/"
|
19
|
-
return admin if env['PATH_INFO'] == Ruhoh.urls.dashboard
|
20
|
-
|
21
|
-
id = Ruhoh::DB.routes[env['PATH_INFO']]
|
22
|
-
raise "Page id not found for url: #{env['PATH_INFO']}" unless id
|
23
|
-
@page.change(id)
|
24
|
-
|
25
|
-
[200, {'Content-Type' => 'text/html'}, [@page.render]]
|
26
|
-
end
|
27
|
-
|
28
|
-
def favicon
|
29
|
-
[200, {'Content-Type' => 'image/x-icon'}, ['']]
|
30
|
-
end
|
31
|
-
|
32
|
-
def admin
|
33
|
-
template = nil
|
34
|
-
[
|
35
|
-
Ruhoh.paths.theme_dashboard_file,
|
36
|
-
Ruhoh.paths.dashboard_file,
|
37
|
-
Ruhoh.paths.system_dashboard_file
|
38
|
-
].each do |path|
|
39
|
-
template = path and break if File.exist?(path)
|
40
|
-
end
|
41
|
-
template = File.open(template, 'r:UTF-8') {|f| f.read }
|
42
|
-
output = @page.templater.render(template, Ruhoh::DB.payload)
|
43
|
-
|
44
|
-
[200, {'Content-Type' => 'text/html'}, [output]]
|
45
|
-
end
|
46
|
-
|
47
|
-
end #Previewer
|
48
|
-
end #Ruhoh
|
data/lib/ruhoh/program.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
class Ruhoh
|
2
|
-
module Program
|
3
|
-
|
4
|
-
# Public: A program for running ruhoh as a rack application
|
5
|
-
# which renders singular pages via their URL.
|
6
|
-
#
|
7
|
-
# Examples
|
8
|
-
#
|
9
|
-
# In config.ru:
|
10
|
-
#
|
11
|
-
# require 'ruhoh'
|
12
|
-
# run Ruhoh::Program.preview
|
13
|
-
#
|
14
|
-
# Returns: A new Rack builder object which should work inside config.ru
|
15
|
-
def self.preview(opts={})
|
16
|
-
opts[:watch] ||= true
|
17
|
-
opts[:env] ||= 'development'
|
18
|
-
|
19
|
-
Ruhoh.setup
|
20
|
-
Ruhoh.config.env = opts[:env]
|
21
|
-
Ruhoh.setup_paths
|
22
|
-
Ruhoh.setup_urls
|
23
|
-
Ruhoh.setup_plugins unless opts[:enable_plugins] == false
|
24
|
-
|
25
|
-
Ruhoh::DB.update_all
|
26
|
-
|
27
|
-
Ruhoh::Watch.start if opts[:watch]
|
28
|
-
Rack::Builder.new {
|
29
|
-
use Rack::Lint
|
30
|
-
use Rack::ShowExceptions
|
31
|
-
|
32
|
-
# Serve base media
|
33
|
-
map Ruhoh.urls.media do
|
34
|
-
run Rack::File.new(Ruhoh.paths.media)
|
35
|
-
end
|
36
|
-
|
37
|
-
# Serve theme assets
|
38
|
-
map Ruhoh.urls.theme do
|
39
|
-
run Rack::File.new(Ruhoh.paths.theme)
|
40
|
-
end
|
41
|
-
|
42
|
-
# Serve widget javascripts
|
43
|
-
map Ruhoh.urls.widgets do
|
44
|
-
run Rack::File.new(Ruhoh.paths.widgets)
|
45
|
-
end
|
46
|
-
|
47
|
-
map '/' do
|
48
|
-
run Ruhoh::Previewer.new(Ruhoh::Page.new)
|
49
|
-
end
|
50
|
-
}
|
51
|
-
end
|
52
|
-
|
53
|
-
# Public: A program for compiling to a static website.
|
54
|
-
# The compile environment should always be 'production' in order
|
55
|
-
# to properly omit drafts and other development-only settings.
|
56
|
-
def self.compile(target)
|
57
|
-
Ruhoh.setup
|
58
|
-
Ruhoh.config.env = 'production'
|
59
|
-
Ruhoh.setup_paths
|
60
|
-
Ruhoh.setup_urls
|
61
|
-
Ruhoh.setup_plugins
|
62
|
-
|
63
|
-
Ruhoh::DB.update_all
|
64
|
-
Ruhoh::Compiler.compile(target)
|
65
|
-
end
|
66
|
-
|
67
|
-
end #Program
|
68
|
-
end #Ruhoh
|