ruhoh 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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