ruhoh 0.2.1 → 0.3.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/Gemfile CHANGED
@@ -3,9 +3,8 @@ gemspec
3
3
 
4
4
  gem 'rack', "~> 1.4"
5
5
  gem 'directory_watcher', "~> 1.4"
6
- gem 'kramdown', "~> 0.13"
7
- gem 'maruku', "~> 0.6"
8
6
  gem 'psych', "~> 1.3"
7
+ gem 'redcarpet', "~> 2.1"
9
8
 
10
9
  group :development do
11
10
  gem 'rspec'
data/README.md CHANGED
@@ -8,13 +8,6 @@
8
8
  $ gem install ruhoh
9
9
  $ ruhoh help
10
10
 
11
-
12
- - Ruhoh.setup :after_setup
13
- - Ruhoh::DB.update\_all :after_db_update
14
- - @page = Ruhoh::Page.new :after_page_initialize
15
- - templater
16
- - converter
17
-
18
11
 
19
12
  - setup
20
13
  - database
data/history.json CHANGED
@@ -1,4 +1,14 @@
1
1
  [
2
+ {
3
+ "version" : "0.3.0",
4
+ "date" : "13.5.2012",
5
+ "changes" : [
6
+ "Change markdown parser from maruku to redcarpet. Adds support for fenced code blocks and autolinking."
7
+ ],
8
+ "features" : [
9
+ "Add plugin architecture for custom mustache helpers, custom converters, and custom compile tasks."
10
+ ]
11
+ },
2
12
  {
3
13
  "version" : "0.2.1",
4
14
  "date" : "9.5.2012",
@@ -121,7 +121,8 @@ class Ruhoh
121
121
 
122
122
  # Public: Compile to static website.
123
123
  def compile
124
- Ruhoh::Compiler.new(@args[1]).compile
124
+ Ruhoh::DB.update_all
125
+ Ruhoh::Compiler.compile(@args[1])
125
126
  end
126
127
 
127
128
  # Public: Create a new blog at the directory provided.
@@ -1,60 +1,66 @@
1
1
  class Ruhoh
2
-
3
- class Compiler
4
-
5
- def initialize(target_directory)
6
- Ruhoh.config.env ||= 'production'
7
- Ruhoh::Friend.say { plain "Compiling for environment: '#{Ruhoh.config.env}'" }
2
+ module Compiler
8
3
 
9
- Ruhoh::DB.update_all
10
- @target = target_directory || "./#{Ruhoh.folders.compiled}"
11
- @page = Ruhoh::Page.new
12
- end
13
-
14
4
  # TODO: seems rather dangerous to delete the incoming target directory?
15
- def compile
16
- FileUtils.rm_r @target if File.exist?(@target)
17
- FileUtils.mkdir_p @target
18
- self.theme
19
- self.pages
20
- self.media
21
- self.syntax
5
+ def self.compile(target_directory = nil, page = nil)
6
+ Ruhoh.config.env ||= 'production'
7
+ Ruhoh::Friend.say { plain "Compiling for environment: '#{Ruhoh.config.env}'" }
8
+ target = target_directory || "./#{Ruhoh.folders.compiled}"
9
+ page = page || Ruhoh::Page.new
10
+
11
+ FileUtils.rm_r target if File.exist?(target)
12
+ FileUtils.mkdir_p target
13
+
14
+ self.constants.each {|c|
15
+ task = self.const_get(c)
16
+ next unless task.respond_to?(:run)
17
+ task.run(target, page)
18
+ }
22
19
  true
23
20
  end
24
21
 
25
- def pages
26
- FileUtils.cd(@target) {
27
- Ruhoh::DB.all_pages.each_value do |p|
28
- @page.change(p['id'])
22
+ module Defaults
29
23
 
30
- FileUtils.mkdir_p File.dirname(@page.compiled_path)
31
- File.open(@page.compiled_path, 'w:UTF-8') { |p| p.puts @page.render }
24
+ def self.run(target, page)
25
+ self.pages(target, page)
26
+ self.theme(target, page)
27
+ self.media(target, page)
28
+ self.syntax(target, page)
29
+ end
30
+
31
+ def self.pages(target, page)
32
+ FileUtils.cd(target) {
33
+ Ruhoh::DB.all_pages.each_value do |p|
34
+ page.change(p['id'])
32
35
 
33
- Ruhoh::Friend.say { green "processed: #{p['id']}" }
34
- end
35
- }
36
+ FileUtils.mkdir_p File.dirname(page.compiled_path)
37
+ File.open(page.compiled_path, 'w:UTF-8') { |p| p.puts page.render }
38
+
39
+ Ruhoh::Friend.say { green "processed: #{p['id']}" }
40
+ end
41
+ }
42
+ end
43
+
44
+ def self.theme(target, page)
45
+ return unless FileTest.directory? Ruhoh.paths.theme
46
+ FileUtils.mkdir_p File.join(target, Ruhoh.config.theme_path)
47
+ FileUtils.cp_r Ruhoh.paths.theme, File.join(target, Ruhoh.folders.templates, Ruhoh.folders.themes)
48
+ end
49
+
50
+ def self.media(target, page)
51
+ return unless FileTest.directory? Ruhoh.paths.media
52
+ FileUtils.mkdir_p File.join(target, Ruhoh.folders.media)
53
+ FileUtils.cp_r Ruhoh.paths.media, target
54
+ end
55
+
56
+ def self.syntax(target, page)
57
+ return unless FileTest.directory? Ruhoh.paths.syntax
58
+ syntax_path = File.join(target, Ruhoh.folders.templates, Ruhoh.folders.syntax)
59
+ FileUtils.mkdir_p syntax_path
60
+ FileUtils.cp_r "#{Ruhoh.paths.syntax}/.", syntax_path
61
+ end
62
+
63
+ end #Defaults
36
64
 
37
- end
38
-
39
- def theme
40
- return unless FileTest.directory? Ruhoh.paths.theme
41
- FileUtils.mkdir_p File.join(@target, Ruhoh.config.theme_path)
42
- FileUtils.cp_r Ruhoh.paths.theme, File.join(@target, Ruhoh.folders.templates, Ruhoh.folders.themes)
43
- end
44
-
45
- def media
46
- return unless FileTest.directory? Ruhoh.paths.media
47
- FileUtils.mkdir_p File.join(@target, Ruhoh.folders.media)
48
- FileUtils.cp_r Ruhoh.paths.media, @target
49
- end
50
-
51
- def syntax
52
- return unless FileTest.directory? Ruhoh.paths.syntax
53
- syntax_path = File.join(@target, Ruhoh.folders.templates, Ruhoh.folders.syntax)
54
- FileUtils.mkdir_p syntax_path
55
- FileUtils.cp_r "#{Ruhoh.paths.syntax}/.", syntax_path
56
- end
57
-
58
65
  end #Compiler
59
-
60
66
  end #Ruhoh
@@ -1,44 +1,19 @@
1
- require 'kramdown'
2
-
3
1
  class Ruhoh
4
-
5
2
  module Converter
6
3
 
7
- MarkdownExtensions = ['.md', '.markdown']
8
- TextileExtensions = ['.textile']
9
-
10
4
  def self.convert(page)
11
- self.__send__ self.which_converter(page.data['id']), page
12
- end
13
-
14
- def self.which_converter(filename)
15
- extension = File.extname(filename).downcase
5
+ extension = File.extname(page.data['id']).downcase
6
+
7
+ Ruhoh::Converter.constants.each {|c|
8
+ converter = Ruhoh::Converter.const_get(c)
9
+ next unless converter.respond_to?(:convert)
10
+ next unless converter.respond_to?(:extensions)
11
+ next unless Array(converter.extensions).include?(extension)
12
+ return converter.convert(page)
13
+ }
16
14
 
17
- if MarkdownExtensions.include? extension
18
- :markdown
19
- elsif TextileExtensions.include? extension
20
- :textile
21
- else
22
- :none
23
- end
24
- end
25
-
26
- # Markdown
27
- def self.markdown(page)
28
- Kramdown::Document.new(page.content).to_html
29
- end
30
-
31
- # Textile
32
- # sample implementation
33
- def self.textile(page)
34
- 'textile not supported yet =('
35
- end
36
-
37
- # No converter
38
- def self.none(page)
39
15
  page.content
40
16
  end
41
17
 
42
18
  end #Converter
43
-
44
19
  end #Ruhoh
@@ -0,0 +1,19 @@
1
+ class Ruhoh
2
+ module Converter
3
+ module Markdown
4
+
5
+ def self.extensions
6
+ ['.md', '.markdown']
7
+ end
8
+
9
+ def self.convert(page)
10
+ require 'redcarpet'
11
+ markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(:with_toc_data => true),
12
+ :autolink => true,
13
+ :fenced_code_blocks => true,
14
+ )
15
+ markdown.render(page.content)
16
+ end
17
+ end
18
+ end
19
+ end
data/lib/ruhoh/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  class Ruhoh
2
- Version = VERSION = '0.2.1'
2
+ Version = VERSION = '0.3.0'
3
3
  RuhohSpec = '0.2'
4
4
  end
data/lib/ruhoh.rb CHANGED
@@ -24,6 +24,7 @@ require 'ruhoh/db'
24
24
  require 'ruhoh/templaters/helpers'
25
25
  require 'ruhoh/templaters/rmustache'
26
26
  require 'ruhoh/templaters/base'
27
+ require 'ruhoh/converters/markdown'
27
28
  require 'ruhoh/converters/converter'
28
29
  require 'ruhoh/page'
29
30
  require 'ruhoh/previewer'
@@ -31,7 +32,7 @@ require 'ruhoh/watch'
31
32
  require 'ruhoh/program'
32
33
 
33
34
  class Ruhoh
34
-
35
+
35
36
  class << self
36
37
  attr_accessor :log
37
38
  attr_reader :folders, :files, :config, :paths, :filters
@@ -40,13 +41,13 @@ class Ruhoh
40
41
  @log = Ruhoh::Logger.new
41
42
 
42
43
  Root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
43
- Folders = Struct.new(:database, :pages, :posts, :templates, :themes, :layouts, :partials, :media, :syntax, :compiled)
44
+ Folders = Struct.new(:database, :pages, :posts, :templates, :themes, :layouts, :partials, :media, :syntax, :compiled, :plugins)
44
45
  Files = Struct.new(:site, :config, :dashboard)
45
46
  Filters = Struct.new(:posts, :pages, :static)
46
47
  Config = Struct.new(:permalink, :pages_permalink, :theme, :theme_path, :media_path, :syntax_path, :exclude, :env)
47
48
  Paths = Struct.new(
48
49
  :site_source, :database, :pages, :posts, :theme, :layouts, :partials, :global_partials, :media, :syntax,
49
- :compiled, :dashboard)
50
+ :compiled, :dashboard, :plugins)
50
51
 
51
52
 
52
53
  # Public: Setup Ruhoh utilities relative to the current application directory.
@@ -55,12 +56,17 @@ class Ruhoh
55
56
  @log.log_file = opts[:log_file] if opts[:log_file]
56
57
  self.reset
57
58
  @site_source = opts[:source] if opts[:source]
58
-
59
- !!(self.setup_config && self.setup_paths && self.setup_filters)
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
60
66
  end
61
67
 
62
68
  def self.reset
63
- @folders = Folders.new('_database', '_pages', '_posts', '_templates', 'themes', 'layouts', 'partials', "_media", "syntax", '_compiled')
69
+ @folders = Folders.new('_database', '_pages', '_posts', '_templates', 'themes', 'layouts', 'partials', "_media", "syntax", '_compiled', '_plugins')
64
70
  @files = Files.new('_site.yml', '_config.yml', 'dash.html')
65
71
  @filters = Filters.new
66
72
  @config = Config.new
@@ -111,6 +117,7 @@ class Ruhoh
111
117
  @paths.syntax = self.absolute_path(@folders.templates, @folders.syntax)
112
118
  @paths.compiled = self.absolute_path(@folders.compiled)
113
119
  @paths.dashboard = self.absolute_path(@files.dashboard)
120
+ @paths.plugins = self.absolute_path(@folders.plugins)
114
121
  @paths
115
122
  end
116
123
 
@@ -121,6 +128,11 @@ class Ruhoh
121
128
  @filters
122
129
  end
123
130
 
131
+ def self.setup_plugins
132
+ plugins = Dir[File.join(self.paths.plugins, "**/*.rb")]
133
+ plugins.each {|f| require f } unless plugins.empty?
134
+ end
135
+
124
136
  def self.absolute_path(*args)
125
137
  File.__send__ :join, args.unshift(self.paths.site_source)
126
138
  end
data/ruhoh.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.add_dependency 'rack', "~> 1.4"
18
18
  s.add_dependency 'mustache', "~> 0.99"
19
19
  s.add_dependency 'directory_watcher', "~> 1.4"
20
- s.add_dependency 'maruku', "~> 0.6"
20
+ s.add_dependency 'redcarpet', "~> 2.1"
21
21
  s.add_dependency 'psych', "~> 1.3"
22
22
 
23
23
  # = MANIFEST =
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
33
33
  lib/ruhoh/client/help.yml
34
34
  lib/ruhoh/compiler.rb
35
35
  lib/ruhoh/converters/converter.rb
36
+ lib/ruhoh/converters/markdown.rb
36
37
  lib/ruhoh/db.rb
37
38
  lib/ruhoh/deployers/s3.rb
38
39
  lib/ruhoh/friend.rb
data/spec/setup_spec.rb CHANGED
@@ -7,6 +7,7 @@ module Setup
7
7
  Ruhoh.should_receive(:setup_config).and_return(true)
8
8
  Ruhoh.should_receive(:setup_paths).and_return(true)
9
9
  Ruhoh.should_receive(:setup_filters).and_return(true)
10
+ Ruhoh.should_receive(:setup_plugins).and_return(true)
10
11
  Ruhoh.setup
11
12
  end
12
13
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruhoh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-09 00:00:00.000000000 Z
12
+ date: 2012-05-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &70126524196260 !ruby/object:Gem::Requirement
16
+ requirement: &70215904076860 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '1.4'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70126524196260
24
+ version_requirements: *70215904076860
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mustache
27
- requirement: &70126524225960 !ruby/object:Gem::Requirement
27
+ requirement: &70215904075600 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0.99'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70126524225960
35
+ version_requirements: *70215904075600
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: directory_watcher
38
- requirement: &70126524225500 !ruby/object:Gem::Requirement
38
+ requirement: &70215904074300 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,21 +43,21 @@ dependencies:
43
43
  version: '1.4'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70126524225500
46
+ version_requirements: *70215904074300
47
47
  - !ruby/object:Gem::Dependency
48
- name: maruku
49
- requirement: &70126524225040 !ruby/object:Gem::Requirement
48
+ name: redcarpet
49
+ requirement: &70215904072340 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: '0.6'
54
+ version: '2.1'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70126524225040
57
+ version_requirements: *70215904072340
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: psych
60
- requirement: &70126524224580 !ruby/object:Gem::Requirement
60
+ requirement: &70215904071680 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '1.3'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70126524224580
68
+ version_requirements: *70215904071680
69
69
  description: Ruhoh is a Universal API for your static blog.
70
70
  email: plusjade@gmail.com
71
71
  executables:
@@ -84,6 +84,7 @@ files:
84
84
  - lib/ruhoh/client/help.yml
85
85
  - lib/ruhoh/compiler.rb
86
86
  - lib/ruhoh/converters/converter.rb
87
+ - lib/ruhoh/converters/markdown.rb
87
88
  - lib/ruhoh/db.rb
88
89
  - lib/ruhoh/deployers/s3.rb
89
90
  - lib/ruhoh/friend.rb
@@ -142,12 +143,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
142
143
  - - ! '>='
143
144
  - !ruby/object:Gem::Version
144
145
  version: '0'
146
+ segments:
147
+ - 0
148
+ hash: 90005056232513636
145
149
  required_rubygems_version: !ruby/object:Gem::Requirement
146
150
  none: false
147
151
  requirements:
148
152
  - - ! '>='
149
153
  - !ruby/object:Gem::Version
150
154
  version: '0'
155
+ segments:
156
+ - 0
157
+ hash: 90005056232513636
151
158
  requirements: []
152
159
  rubyforge_project:
153
160
  rubygems_version: 1.8.17