caramelize 0.0.3 → 0.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/Gemfile.lock +21 -18
- data/README.md +14 -5
- data/Rakefile +7 -0
- data/lib/caramelize/caramel.rb +19 -7
- data/lib/caramelize/cli.rb +7 -10
- data/lib/caramelize/cli/create_command.rb +26 -31
- data/lib/caramelize/cli/run_command.rb +13 -2
- data/lib/caramelize/content_transferer.rb +34 -18
- data/lib/caramelize/gollum_output.rb +17 -30
- data/lib/caramelize/page.rb +2 -2
- data/lib/caramelize/version.rb +1 -1
- data/lib/caramelize/{redmine_wiki.rb → wiki/redmine_wiki.rb} +1 -7
- data/lib/caramelize/wiki/trac_converter.rb +82 -0
- data/lib/caramelize/{wiki.rb → wiki/wiki.rb} +6 -2
- data/lib/caramelize/wiki/wikka_converter.rb +32 -0
- data/lib/caramelize/{wikkawiki.rb → wiki/wikkawiki.rb} +9 -4
- metadata +30 -13
- data/lib/caramelize/wikka2markdown_converter.rb +0 -27
data/Gemfile.lock
CHANGED
@@ -1,44 +1,47 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
caramelize (0.0.
|
4
|
+
caramelize (0.0.4)
|
5
|
+
cmdparse
|
5
6
|
gollum (>= 1.3.0)
|
6
7
|
mysql2
|
7
|
-
treetop (>= 1.4.9)
|
8
8
|
|
9
9
|
GEM
|
10
10
|
remote: http://rubygems.org/
|
11
11
|
specs:
|
12
12
|
albino (1.3.3)
|
13
13
|
posix-spawn (>= 0.3.6)
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
cmdparse (2.0.3)
|
15
|
+
diff-lcs (1.1.3)
|
16
|
+
github-markup (0.7.0)
|
17
|
+
gollum (1.3.1)
|
17
18
|
albino (~> 1.3.2)
|
18
19
|
github-markup (>= 0.4.0, < 1.0.0)
|
19
20
|
grit (~> 2.4.1)
|
20
21
|
mustache (>= 0.11.2, < 1.0.0)
|
21
22
|
nokogiri (~> 1.4)
|
23
|
+
redcarpet
|
22
24
|
sanitize (~> 2.0.0)
|
23
25
|
sinatra (~> 1.0)
|
24
26
|
grit (2.4.1)
|
25
27
|
diff-lcs (~> 1.1)
|
26
28
|
mime-types (~> 1.15)
|
27
|
-
mime-types (1.
|
29
|
+
mime-types (1.17.2)
|
28
30
|
mustache (0.99.4)
|
29
|
-
mysql2 (0.3.
|
30
|
-
nokogiri (1.
|
31
|
-
polyglot (0.3.1)
|
31
|
+
mysql2 (0.3.11)
|
32
|
+
nokogiri (1.5.0)
|
32
33
|
posix-spawn (0.3.6)
|
33
|
-
rack (1.3.
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
34
|
+
rack (1.3.5)
|
35
|
+
rack-protection (1.1.4)
|
36
|
+
rack
|
37
|
+
redcarpet (2.0.1)
|
38
|
+
sanitize (2.0.3)
|
39
|
+
nokogiri (>= 1.4.4, < 1.6)
|
40
|
+
sinatra (1.3.1)
|
41
|
+
rack (~> 1.3, >= 1.3.4)
|
42
|
+
rack-protection (~> 1.1, >= 1.1.2)
|
43
|
+
tilt (~> 1.3, >= 1.3.3)
|
44
|
+
tilt (1.3.3)
|
42
45
|
|
43
46
|
PLATFORMS
|
44
47
|
ruby
|
data/README.md
CHANGED
@@ -8,8 +8,6 @@ In the future more target wiki system may be added. For the moment export is sup
|
|
8
8
|
|
9
9
|
### Building
|
10
10
|
|
11
|
-
For the moment caramelize is not yet stable and not released to any gemsites.
|
12
|
-
|
13
11
|
To try it you require bundler to build it.
|
14
12
|
|
15
13
|
$ gem bundler install
|
@@ -31,21 +29,32 @@ to install the new gem right to the system.
|
|
31
29
|
|
32
30
|
### Use
|
33
31
|
|
34
|
-
$ caramelize create
|
35
|
-
|
36
|
-
Creates a template configuration file. This includes documentation on how to use the preset Wiki-connectors and how to write addition customized connectors.
|
32
|
+
$ caramelize create
|
37
33
|
|
34
|
+
Creates a template configuration file "caramel.rb". This includes documentation on how to use the preset Wiki-connectors and how to write addition customized connectors.
|
38
35
|
|
39
36
|
$ caramelize run
|
40
37
|
|
41
38
|
Will execute a wiki migration based on a found configuration file. These are found in predefined paths.
|
42
39
|
|
43
40
|
$ caramelize help
|
41
|
+
|
44
42
|
Returns help information.
|
45
43
|
|
46
44
|
$ caramelize version
|
45
|
+
|
47
46
|
Returns version and release information.
|
48
47
|
|
48
|
+
### Options
|
49
|
+
|
50
|
+
$ caramelize create --config my_caramel_configuration.rb
|
51
|
+
|
52
|
+
Creates an example config with the given name.
|
53
|
+
|
54
|
+
$ caramelize run --config my_caramel_configuration.rb
|
55
|
+
|
56
|
+
Executes the given configuration.
|
57
|
+
|
49
58
|
## Contributing to caramelize
|
50
59
|
|
51
60
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
data/Rakefile
CHANGED
data/lib/caramelize/caramel.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
require 'caramelize/wiki'
|
2
|
-
require 'caramelize/wikkawiki'
|
3
|
-
require 'caramelize/redmine_wiki'
|
1
|
+
require 'caramelize/wiki/wiki'
|
2
|
+
require 'caramelize/wiki/wikkawiki'
|
3
|
+
require 'caramelize/wiki/redmine_wiki'
|
4
|
+
|
5
|
+
## Example caramelize configuration file
|
4
6
|
|
5
7
|
# Within this method you can define your own Wiki-Connectors to Wikis not supported by default in this software
|
6
8
|
|
@@ -9,7 +11,11 @@ def customized_wiki
|
|
9
11
|
|
10
12
|
# This example is a reimplementation of the WikkaWiki-Connector.
|
11
13
|
# To connect to WikkaWiki, I suggest to use the predefined Connector below.
|
12
|
-
wiki = Caramelize::Wiki.new(:host => "localhost",
|
14
|
+
wiki = Caramelize::Wiki.new({:host => "localhost",
|
15
|
+
:username => "user",
|
16
|
+
:database => "database_name",
|
17
|
+
:password => 'admin_gnihihihi',
|
18
|
+
:markup => :wikka})
|
13
19
|
wiki.instance_eval do
|
14
20
|
def read_pages
|
15
21
|
sql = "SELECT id, tag, body, time, latest, user, note FROM wikka_pages ORDER BY time;"
|
@@ -21,7 +27,7 @@ def customized_wiki
|
|
21
27
|
page = Page.new({:id => row["id"],
|
22
28
|
:title => row["tag"],
|
23
29
|
:body => row["body"],
|
24
|
-
:
|
30
|
+
:markup => 'wikka',
|
25
31
|
:latest => row["latest"] == "Y",
|
26
32
|
:time => row["time"],
|
27
33
|
:message => row["note"],
|
@@ -44,11 +50,17 @@ end
|
|
44
50
|
def predefined_wiki
|
45
51
|
|
46
52
|
# For connection to a WikkaWiki-Database use this Connector
|
47
|
-
#return Caramelize::WikkaWiki.new(:host => "localhost",
|
53
|
+
#return Caramelize::WikkaWiki.new(:host => "localhost",
|
54
|
+
# :username => "root",
|
55
|
+
# :password => "root",
|
56
|
+
# :database => "wikka")
|
48
57
|
|
49
58
|
|
50
59
|
# For connection to a Redmine-Database use this Connector
|
51
|
-
return Caramelize::RedmineWiki.new(:host => "localhost",
|
60
|
+
return Caramelize::RedmineWiki.new(:host => "localhost",
|
61
|
+
:username => "root",
|
62
|
+
:password => "root",
|
63
|
+
:database => "redmine_development")
|
52
64
|
end
|
53
65
|
|
54
66
|
|
data/lib/caramelize/cli.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
#Encoding: UTF-8
|
1
2
|
require 'cmdparse'
|
2
3
|
require 'caramelize/version'
|
3
4
|
|
@@ -15,23 +16,18 @@ module Caramelize
|
|
15
16
|
# arguments and executing the requested command.
|
16
17
|
class CommandParser < CmdParse::CommandParser
|
17
18
|
|
18
|
-
# The website directory. Default: the current working directory.
|
19
|
-
attr_reader :directory
|
20
|
-
|
21
19
|
# The verbosity level. Default: <tt>:normal</tt>
|
22
20
|
attr_reader :verbosity
|
23
21
|
|
24
22
|
# Create a new CommandParser class. T
|
25
23
|
def initialize
|
26
24
|
super(true)
|
27
|
-
@directory = nil
|
28
25
|
@verbosity = :normal
|
29
26
|
|
30
27
|
self.program_name = "caramelize"
|
31
28
|
self.program_version = Caramelize::VERSION
|
32
29
|
self.options = CmdParse::OptionParserWrapper.new do |opts|
|
33
30
|
opts.separator "Global options:"
|
34
|
-
opts.on("--config DIR", "-d", String, "The config file (default: caramel.rb)") {|p| @directory = p}
|
35
31
|
opts.on("--verbose", "-v", "Print more output") { @verbosity = :verbose }
|
36
32
|
opts.on("--quiet", "-q", "No output") { @verbosity = :quiet }
|
37
33
|
end
|
@@ -44,24 +40,25 @@ module Caramelize
|
|
44
40
|
# Finds the configuration file, if it exists in a known location.
|
45
41
|
def detect_configuration_file(config_path = nil)
|
46
42
|
possible_files = KNOWN_CONFIG_LOCATIONS
|
43
|
+
possible_files << config_path if config_path
|
47
44
|
possible_files.detect{|f| File.exists?(f)}
|
48
45
|
end
|
49
46
|
|
50
47
|
# Utility method for sub-commands to transfer wiki contents
|
51
|
-
def transfer_content
|
52
|
-
|
48
|
+
def transfer_content config_file = ""
|
53
49
|
time_start = Time.now
|
54
50
|
|
55
|
-
file = detect_configuration_file
|
51
|
+
file = detect_configuration_file config_file
|
52
|
+
puts "Read config file: #{file}" if @verbosity == :verbose
|
56
53
|
if file && File.exists?(file)
|
57
54
|
instance_eval(File.read(file), file || '<eval>')
|
58
55
|
original_wiki = input_wiki
|
59
56
|
|
60
|
-
ContentTransferer.execute
|
57
|
+
ContentTransferer.execute(original_wiki, {:verbosity => @verbosity})
|
61
58
|
|
62
59
|
time_end = Time.now
|
63
60
|
|
64
|
-
puts "Time required: #{time_end - time_start} s" if @verbosity
|
61
|
+
puts "Time required: #{time_end - time_start} s" if @verbosity == :verbose
|
65
62
|
else
|
66
63
|
puts "No config file found."
|
67
64
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
#Encoding: UTF-8
|
2
|
-
|
3
2
|
require 'caramelize/cli'
|
4
3
|
|
5
4
|
module Caramelize::CLI
|
@@ -7,48 +6,44 @@ module Caramelize::CLI
|
|
7
6
|
# The CLI command for creating a caramelize config file.
|
8
7
|
class CreateCommand < CmdParse::Command
|
9
8
|
|
9
|
+
# The website config-file. Default: the current working directory.
|
10
|
+
attr_reader :config_file
|
11
|
+
|
10
12
|
def initialize #:nodoc:
|
11
13
|
super('create', false)
|
12
|
-
|
14
|
+
self.description = "If the verbosity level is set to verbose, the created files are listed."
|
13
15
|
self.short_desc = 'Create a default config file for caramelize'
|
14
16
|
self.options = CmdParse::OptionParserWrapper.new do |opts|
|
15
17
|
opts.separator "Arguments:"
|
16
|
-
opts.
|
18
|
+
opts.on("--config <file>", "-f", String, "The config file (default: caramel.rb)") {|p| @config_file = p}
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
20
22
|
def usage # :nodoc:
|
21
|
-
"Usage: #{commandparser.program_name} [global options] create [options]
|
23
|
+
"Usage: #{commandparser.program_name} [global options] create [options]"
|
22
24
|
end
|
23
25
|
|
24
|
-
# Create a caramelize config file
|
26
|
+
# Create a caramelize config file.
|
25
27
|
def execute(args)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
#FileUtils.rm_rf(args[0])
|
46
|
-
raise
|
47
|
-
end
|
48
|
-
if commandparser.verbosity == :verbose
|
49
|
-
puts "The following files were created in the directory #{args[0]}:"
|
50
|
-
#puts paths.sort.join("\n")
|
51
|
-
end
|
28
|
+
begin
|
29
|
+
|
30
|
+
# create dummy config file
|
31
|
+
target_file = @config_file.nil? ? "caramel.rb" : @config_file
|
32
|
+
|
33
|
+
|
34
|
+
#puts args[0]
|
35
|
+
require 'fileutils'
|
36
|
+
|
37
|
+
FileUtils.cp(File.dirname(__FILE__) +"/../caramel.rb", target_file)
|
38
|
+
|
39
|
+
rescue
|
40
|
+
#require 'fileutils'
|
41
|
+
#FileUtils.rm_rf(args[0])
|
42
|
+
raise
|
43
|
+
end
|
44
|
+
if commandparser.verbosity == :normal
|
45
|
+
puts "Created new configuration file: #{target_file}"
|
46
|
+
#puts paths.sort.join("\n")
|
52
47
|
end
|
53
48
|
end
|
54
49
|
|
@@ -1,5 +1,4 @@
|
|
1
1
|
#Encoding: UTF-8
|
2
|
-
|
3
2
|
require 'caramelize/cli'
|
4
3
|
|
5
4
|
module Caramelize::CLI
|
@@ -7,14 +6,26 @@ module Caramelize::CLI
|
|
7
6
|
# The CLI command for rendering a webgen website.
|
8
7
|
class RunCommand < CmdParse::Command
|
9
8
|
|
9
|
+
# The website config-file. Default: the current working directory.
|
10
|
+
attr_reader :config_file
|
11
|
+
|
10
12
|
def initialize # :nodoc:
|
11
13
|
super('run', false)
|
12
14
|
self.short_desc = 'Run the wiki content transfer based on the given config file'
|
15
|
+
self.options = CmdParse::OptionParserWrapper.new do |opts|
|
16
|
+
opts.separator "Arguments:"
|
17
|
+
#opts.separator opts.summary_indent + "DIR: the directory in which the website should be created"
|
18
|
+
opts.on("--config <file>", "-f", String, "The config file (default: caramel.rb)") {|p| @config_file = p}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def usage # :nodoc:
|
23
|
+
"Usage: #{commandparser.program_name} [global options] run [options]"
|
13
24
|
end
|
14
25
|
|
15
26
|
# Transfer Wiki contents
|
16
27
|
def execute(args)
|
17
|
-
commandparser.transfer_content
|
28
|
+
commandparser.transfer_content @config_file
|
18
29
|
end
|
19
30
|
|
20
31
|
end
|
@@ -4,11 +4,10 @@ require 'gollum'
|
|
4
4
|
require 'grit'
|
5
5
|
|
6
6
|
module Caramelize
|
7
|
-
autoload :Wiki, 'caramelize/wiki'
|
8
|
-
autoload :WikkaWiki, 'caramelize/wikkawiki'
|
9
|
-
autoload :RedmineWiki, 'caramelize/redmine_wiki'
|
7
|
+
autoload :Wiki, 'caramelize/wiki/wiki'
|
8
|
+
autoload :WikkaWiki, 'caramelize/wiki/wikkawiki'
|
9
|
+
autoload :RedmineWiki, 'caramelize/wiki/redmine_wiki'
|
10
10
|
autoload :GollumOutput, 'caramelize/gollum_output'
|
11
|
-
autoload :Wikka2MarkdownConverter, 'wikka2markdown_converter'
|
12
11
|
autoload :Author, 'caramelize/author'
|
13
12
|
autoload :Page, 'caramelize/page'
|
14
13
|
|
@@ -16,7 +15,10 @@ module Caramelize
|
|
16
15
|
class ContentTransferer
|
17
16
|
|
18
17
|
# Execute the content migration
|
19
|
-
def self.execute
|
18
|
+
def self.execute(original_wiki, options={})
|
19
|
+
|
20
|
+
options[:markup] = :markdown if !options[:markup]
|
21
|
+
options[:default_author] = "Caramelize" if !options[:default_author]
|
20
22
|
|
21
23
|
# read page revisions from wiki
|
22
24
|
# store page revisions
|
@@ -25,32 +27,46 @@ module Caramelize
|
|
25
27
|
@revisions = original_wiki.read_pages
|
26
28
|
|
27
29
|
# initiate new wiki
|
30
|
+
output_wiki = GollumOutput.new('wiki.git') # TODO make wiki_path an option
|
28
31
|
|
29
|
-
|
30
|
-
|
32
|
+
# TODO ask if we should replace existing paths
|
33
|
+
|
31
34
|
# commit page revisions to new wiki
|
35
|
+
output_wiki.commit_history @revisions, options
|
32
36
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
if original_wiki.
|
37
|
-
|
37
|
+
# if wiki needs to convert syntax, do so
|
38
|
+
puts "From markup: " + original_wiki.markup.to_s if options[:verbosity] == :verbose
|
39
|
+
puts "To markup: " + options[:markup].to_s if options[:verbosity] == :verbose
|
40
|
+
if original_wiki.convert_markup? options[:markup] # is wiki in target markup
|
41
|
+
|
42
|
+
puts "Latest revisions:" if options[:verbosity] == :verbose
|
38
43
|
# take each latest revision
|
39
44
|
for rev in original_wiki.latest_revisions
|
40
|
-
puts "Updated syntax: #{rev.title} #{rev.time}"
|
45
|
+
puts "Updated syntax: #{rev.title} #{rev.time}" if options[:verbosity] == :verbose
|
46
|
+
|
41
47
|
# parse markup & convert to new syntax
|
42
|
-
|
43
|
-
|
48
|
+
if options[:markup] == :markdown
|
49
|
+
body_new = original_wiki.to_markdown rev.body
|
50
|
+
else
|
51
|
+
body_new = original_wiki.to_textile rev.body
|
52
|
+
end
|
53
|
+
|
54
|
+
if body_new.start_with?('Einige interessante')
|
55
|
+
puts rev.body
|
56
|
+
puts body_new
|
57
|
+
end
|
58
|
+
|
59
|
+
unless body_new.eql? rev.body
|
44
60
|
rev.body = body_new
|
45
|
-
rev.author_name =
|
61
|
+
rev.author_name = options[:markup]
|
46
62
|
rev.time = Time.now
|
47
63
|
rev.author = nil
|
48
64
|
|
49
65
|
# commit as latest page revision
|
50
|
-
output_wiki.commit_revision rev
|
66
|
+
output_wiki.commit_revision rev, options[:markup]
|
51
67
|
end
|
52
68
|
end
|
53
69
|
end
|
54
|
-
end
|
70
|
+
end # end execute
|
55
71
|
end
|
56
72
|
end
|
@@ -3,6 +3,10 @@
|
|
3
3
|
module Caramelize
|
4
4
|
class GollumOutput
|
5
5
|
|
6
|
+
def supported_markup
|
7
|
+
[:markdown, :textile]
|
8
|
+
end
|
9
|
+
|
6
10
|
# Initialize a new gollum-wiki-repository at the given path.
|
7
11
|
def initialize wiki_path
|
8
12
|
# TODO use sanitized name as wiki-repository-title
|
@@ -11,12 +15,12 @@ module Caramelize
|
|
11
15
|
end
|
12
16
|
|
13
17
|
# Commit the given page into the gollum-wiki-repository.
|
14
|
-
|
15
|
-
|
18
|
+
# Make sure the target markup is correct before calling this method.
|
19
|
+
def commit_revision(page, markup)
|
16
20
|
message = page.message.empty? ? "Edit in page #{page.title}" : page.message
|
17
|
-
|
21
|
+
|
18
22
|
if page.author
|
19
|
-
author = page.author
|
23
|
+
author = page.author
|
20
24
|
else
|
21
25
|
author = Author.new
|
22
26
|
author.name = page.author_name
|
@@ -29,43 +33,26 @@ module Caramelize
|
|
29
33
|
:authored_date => page.time,
|
30
34
|
:committed_date => page.time
|
31
35
|
}
|
36
|
+
|
37
|
+
gollum_page = @gollum.page(page.title)
|
32
38
|
if gollum_page
|
33
39
|
@gollum.update_page(gollum_page, gollum_page.name, gollum_page.format, page.body, commit)
|
34
40
|
else
|
35
|
-
|
36
|
-
@gollum.write_page(page.title, :markdown, page.body, commit)
|
41
|
+
@gollum.write_page(page.title, markup, page.body, commit)
|
37
42
|
end
|
38
43
|
end
|
39
44
|
|
40
45
|
# Commit all revisions of the given history into this gollum-wiki-repository.
|
41
|
-
def commit_history
|
46
|
+
def commit_history(revisions, options={})
|
47
|
+
options[:markup] = :markdown if options[:markup].nil? # target markup
|
42
48
|
revisions.each_with_index do |page, index|
|
43
|
-
|
44
|
-
|
45
|
-
gollum_page = @gollum.page(page.title)
|
46
|
-
message = page.message.empty? ? "Edit in page #{page.title}" : page.message
|
47
|
-
|
48
|
-
if page.author
|
49
|
-
author = page.author
|
50
|
-
else
|
51
|
-
author = Author.new
|
52
|
-
author.name = page.author_name
|
53
|
-
author.email = "mail@example.com"
|
49
|
+
if options[:verbosity] == :normal || options[:verbosity] == :verbose
|
50
|
+
puts "(#{index+1}/#{revisions.count}) #{page.time} #{page.title}"
|
54
51
|
end
|
55
52
|
|
56
|
-
|
57
|
-
:name => author.name,
|
58
|
-
:email => author.email,
|
59
|
-
:authored_date => page.time,
|
60
|
-
:committed_date => page.time
|
61
|
-
}
|
62
|
-
if gollum_page
|
63
|
-
@gollum.update_page(gollum_page, gollum_page.name, gollum_page.format, page.body, commit)
|
64
|
-
else
|
65
|
-
# OPTIMIZE support not just markdown
|
66
|
-
@gollum.write_page(page.title, :markdown, page.body, commit)
|
67
|
-
end
|
53
|
+
commit_revision(page, options[:markup])
|
68
54
|
end
|
69
55
|
end
|
56
|
+
|
70
57
|
end
|
71
58
|
end
|
data/lib/caramelize/page.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
module Caramelize
|
2
2
|
class Page
|
3
3
|
|
4
|
-
attr_accessor :title, :body, :id, :
|
4
|
+
attr_accessor :title, :body, :id, :markup, :latest, :time, :message, :author, :author_name
|
5
5
|
|
6
6
|
def initialize page={}
|
7
7
|
@id = page[:id]
|
8
8
|
@title = page[:title]
|
9
9
|
@body = page[:body]
|
10
|
-
@syntax = page[:
|
10
|
+
@syntax = page[:markup]
|
11
11
|
@latest = page[:latest]
|
12
12
|
@time = page[:time]
|
13
13
|
@message = page[:message]
|
data/lib/caramelize/version.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
#Encoding: UTF-8
|
2
2
|
module Caramelize
|
3
3
|
autoload :DatabaseConnector, 'caramelize/database_connector'
|
4
|
-
autoload :Wikka2MarkdownConverter, 'caramelize/wikka2markdown_converter'
|
5
4
|
|
6
5
|
class RedmineWiki < Wiki
|
7
6
|
include DatabaseConnector
|
@@ -24,7 +23,7 @@ module Caramelize
|
|
24
23
|
page = Page.new({:id => row_content["id"],
|
25
24
|
:title => title,
|
26
25
|
:body => row_content["data"],
|
27
|
-
:
|
26
|
+
:markup => :textile,
|
28
27
|
:latest => false,
|
29
28
|
:time => row_content["updated_on"],
|
30
29
|
:message => row_content["comments"],
|
@@ -44,11 +43,6 @@ module Caramelize
|
|
44
43
|
@revisions
|
45
44
|
end
|
46
45
|
|
47
|
-
def convert_syntax?
|
48
|
-
# TODO
|
49
|
-
false
|
50
|
-
end
|
51
|
-
|
52
46
|
def read_authors
|
53
47
|
sql = "SELECT id, login, mail FROM users;"
|
54
48
|
@authors = {}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Caramelize
|
2
|
+
module TracConverter
|
3
|
+
|
4
|
+
# take an input stream and convert all wikka syntax to markdown syntax
|
5
|
+
# taken from 'trac_wiki_to_textile' at
|
6
|
+
def to_textile str
|
7
|
+
body = body.dup
|
8
|
+
body.gsub!(/\r/, '')
|
9
|
+
body.gsub!(/\{\{\{([^\n]+?)\}\}\}/, '@\1@')
|
10
|
+
body.gsub!(/\{\{\{\n#!([^\n]+?)(.+?)\}\}\}/m, '<pre><code class="\1">\2</code></pre>')
|
11
|
+
body.gsub!(/\{\{\{(.+?)\}\}\}/m, '<pre>\1</pre>')
|
12
|
+
# macro
|
13
|
+
body.gsub!(/\[\[BR\]\]/, '')
|
14
|
+
body.gsub!(/\[\[PageOutline.*\]\]/, '{{toc}}')
|
15
|
+
body.gsub!(/\[\[Image\((.+?)\)\]\]/, '!\1!')
|
16
|
+
# header
|
17
|
+
body.gsub!(/=====\s(.+?)\s=====/, "h5. #{'\1'} \n\n")
|
18
|
+
body.gsub!(/====\s(.+?)\s====/, "h4. #{'\1'} \n\n")
|
19
|
+
body.gsub!(/===\s(.+?)\s===/, "h3. #{'\1'} \n\n")
|
20
|
+
body.gsub!(/==\s(.+?)\s==/, "h2. #{'\1'} \n\n")
|
21
|
+
body.gsub!(/=\s(.+?)\s=[\s\n]*/, "h1. #{'\1'} \n\n")
|
22
|
+
# table
|
23
|
+
body.gsub!(/\|\|/, "|")
|
24
|
+
# link
|
25
|
+
body.gsub!(/\[(http[^\s\[\]]+)\s([^\[\]]+)\]/, ' "\2":\1' )
|
26
|
+
body.gsub!(/\[([^\s]+)\s(.+)\]/, ' [[\1 | \2]] ')
|
27
|
+
body.gsub!(/([^"\/\!])(([A-Z][a-z0-9]+){2,})/, ' \1[[\2]] ')
|
28
|
+
body.gsub!(/\!(([A-Z][a-z0-9]+){2,})/, '\1')
|
29
|
+
# text decoration
|
30
|
+
body.gsub!(/'''(.+)'''/, '*\1*')
|
31
|
+
body.gsub!(/''(.+)''/, '_\1_')
|
32
|
+
body.gsub!(/`(.+)`/, '@\1@')
|
33
|
+
# itemize
|
34
|
+
body.gsub!(/^\s\s\s\*/, '***')
|
35
|
+
body.gsub!(/^\s\s\*/, '**')
|
36
|
+
body.gsub!(/^\s\*/, '*')
|
37
|
+
body.gsub!(/^\s\s\s\d\./, '###')
|
38
|
+
body.gsub!(/^\s\s\d\./, '##')
|
39
|
+
body.gsub!(/^\s\d\./, '#')
|
40
|
+
body
|
41
|
+
end
|
42
|
+
|
43
|
+
# TODO this is so far only copy of textile conversion
|
44
|
+
# not tested!
|
45
|
+
def to_markdown str
|
46
|
+
body = body.dup
|
47
|
+
body.gsub!(/\r/, '')
|
48
|
+
body.gsub!(/\{\{\{([^\n]+?)\}\}\}/, '@\1@')
|
49
|
+
body.gsub!(/\{\{\{\n#!([^\n]+?)(.+?)\}\}\}/m, '<pre><code class="\1">\2</code></pre>')
|
50
|
+
body.gsub!(/\{\{\{(.+?)\}\}\}/m, '<pre>\1</pre>')
|
51
|
+
# macro
|
52
|
+
body.gsub!(/\[\[BR\]\]/, '')
|
53
|
+
body.gsub!(/\[\[PageOutline.*\]\]/, '{{toc}}')
|
54
|
+
body.gsub!(/\[\[Image\((.+?)\)\]\]/, '!\1!')
|
55
|
+
# header
|
56
|
+
body.gsub!(/=====\s(.+?)\s=====/, "== #{'\1'} ==\n\n")
|
57
|
+
body.gsub!(/====\s(.+?)\s====/, "=== #{'\1'} ===\n\n")
|
58
|
+
body.gsub!(/===\s(.+?)\s===/, "==== #{'\1'} ====\n\n")
|
59
|
+
body.gsub!(/==\s(.+?)\s==/, "===== #{'\1'} =====\n\n")
|
60
|
+
body.gsub!(/=\s(.+?)\s=[\s\n]*/, "====== #{'\1'} ======\n\n")
|
61
|
+
# table
|
62
|
+
body.gsub!(/\|\|/, "|")
|
63
|
+
# link
|
64
|
+
body.gsub!(/\[(http[^\s\[\]]+)\s([^\[\]]+)\]/, ' "\2":\1' )
|
65
|
+
body.gsub!(/\[([^\s]+)\s(.+)\]/, ' [[\1 | \2]] ')
|
66
|
+
body.gsub!(/([^"\/\!])(([A-Z][a-z0-9]+){2,})/, ' \1[[\2]] ')
|
67
|
+
body.gsub!(/\!(([A-Z][a-z0-9]+){2,})/, '\1')
|
68
|
+
# text decoration
|
69
|
+
body.gsub!(/'''(.+)'''/, '*\1*')
|
70
|
+
body.gsub!(/''(.+)''/, '_\1_')
|
71
|
+
body.gsub!(/`(.+)`/, '@\1@')
|
72
|
+
# itemize
|
73
|
+
body.gsub!(/^\s\s\s\*/, '***')
|
74
|
+
body.gsub!(/^\s\s\*/, '**')
|
75
|
+
body.gsub!(/^\s\*/, '*')
|
76
|
+
body.gsub!(/^\s\s\s\d\./, '###')
|
77
|
+
body.gsub!(/^\s\s\d\./, '##')
|
78
|
+
body.gsub!(/^\s\d\./, '#')
|
79
|
+
body
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -21,8 +21,8 @@ module Caramelize
|
|
21
21
|
return []
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
25
|
-
|
24
|
+
def convert_markup? to_markup
|
25
|
+
markup != to_markup
|
26
26
|
end
|
27
27
|
|
28
28
|
def latest_revisions
|
@@ -33,5 +33,9 @@ module Caramelize
|
|
33
33
|
end
|
34
34
|
@latest_revisions
|
35
35
|
end
|
36
|
+
|
37
|
+
def markup
|
38
|
+
@options[:markup]
|
39
|
+
end
|
36
40
|
end
|
37
41
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Caramelize
|
2
|
+
module WikkaConverter
|
3
|
+
|
4
|
+
# take an input stream and convert all wikka syntax to markdown syntax
|
5
|
+
def to_markdown body
|
6
|
+
body = body.dup
|
7
|
+
body.gsub!(/(======)(.*?)(======)/ ) {|s| '# ' + $2 } #h1
|
8
|
+
body.gsub!(/(=====)(.*?)(=====)/) {|s| '## ' + $2 } #h2
|
9
|
+
body.gsub!(/(====)(.*?)(====)/) {|s| '### ' + $2 } #h3
|
10
|
+
body.gsub!(/(===)(.*?)(===)/) {|s| '#### ' + $2 } #h4
|
11
|
+
|
12
|
+
body.gsub!(/(\*\*)(.*?)(\*\*)/) {|s| '**' + $2 + '**' } #bold
|
13
|
+
body.gsub!(/(\/\/)(.*?)(\/\/)/) {|s| '_' + $2 + '_' } #italic
|
14
|
+
#str.gsub!(/(===)(.*?)(===)/) {|s| '`' + $2 + '`'} #code
|
15
|
+
body.gsub!(/(__)(.*?)(__)/) {|s| '<u>' + $2 + '</u>'} #underline
|
16
|
+
|
17
|
+
body.gsub!(/(.*?)(\n\t-)(.*?)/) {|s| $1 + '\n' + $3 } #list
|
18
|
+
|
19
|
+
body.gsub!(/(\t-)(.*?)/) {|s| '*' + $2 } #list
|
20
|
+
#str.gsub!(/(----)/) {|s| '~~~~'} #seperator
|
21
|
+
|
22
|
+
|
23
|
+
body.gsub!(/(\[\[)(\w+)\s(.+?)(\]\])/, '[[\3|\2]]')
|
24
|
+
#body.gsub!(/\[\[(\w+)\s(.+)\]\]/, ' [[\1 | \2]] ')
|
25
|
+
|
26
|
+
|
27
|
+
# TODO more syntax conversion for links and images
|
28
|
+
|
29
|
+
body
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,12 +1,17 @@
|
|
1
1
|
#Encoding: UTF-8
|
2
2
|
module Caramelize
|
3
3
|
autoload :DatabaseConnector, 'caramelize/database_connector'
|
4
|
-
autoload :
|
4
|
+
autoload :WikkaConverter, 'caramelize/wiki/wikka_converter'
|
5
5
|
|
6
6
|
class WikkaWiki < Wiki
|
7
7
|
include DatabaseConnector
|
8
|
-
include
|
8
|
+
include WikkaConverter
|
9
9
|
|
10
|
+
def initialize options={}
|
11
|
+
super(options)
|
12
|
+
options[:markup] = :wikka
|
13
|
+
end
|
14
|
+
|
10
15
|
# after calling this action, I expect the @titles and @revisions to be filled
|
11
16
|
def read_pages
|
12
17
|
sql = "SELECT id, tag, body, time, latest, user, note FROM wikka_pages ORDER BY time;"
|
@@ -19,7 +24,7 @@ module Caramelize
|
|
19
24
|
page = Page.new({:id => row["id"],
|
20
25
|
:title => row["tag"],
|
21
26
|
:body => row["body"],
|
22
|
-
:
|
27
|
+
:markup => :wikka,
|
23
28
|
:latest => row["latest"] == "Y",
|
24
29
|
:time => row["time"],
|
25
30
|
:message => row["note"],
|
@@ -46,5 +51,5 @@ module Caramelize
|
|
46
51
|
end
|
47
52
|
@authors
|
48
53
|
end
|
49
|
-
end
|
54
|
+
end
|
50
55
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caramelize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.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:
|
12
|
+
date: 2013-01-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mysql2
|
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: '0'
|
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: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: cmdparse
|
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'
|
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'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: gollum
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,7 +53,12 @@ dependencies:
|
|
43
53
|
version: 1.3.0
|
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.3.0
|
47
62
|
description: By defining the access from the input to the output wiki you can migrate
|
48
63
|
any wiki.
|
49
64
|
email:
|
@@ -71,11 +86,12 @@ files:
|
|
71
86
|
- lib/caramelize/ext.rb
|
72
87
|
- lib/caramelize/gollum_output.rb
|
73
88
|
- lib/caramelize/page.rb
|
74
|
-
- lib/caramelize/redmine_wiki.rb
|
75
89
|
- lib/caramelize/version.rb
|
76
|
-
- lib/caramelize/wiki.rb
|
77
|
-
- lib/caramelize/
|
78
|
-
- lib/caramelize/
|
90
|
+
- lib/caramelize/wiki/redmine_wiki.rb
|
91
|
+
- lib/caramelize/wiki/trac_converter.rb
|
92
|
+
- lib/caramelize/wiki/wiki.rb
|
93
|
+
- lib/caramelize/wiki/wikka_converter.rb
|
94
|
+
- lib/caramelize/wiki/wikkawiki.rb
|
79
95
|
- test/helper.rb
|
80
96
|
- test/test_caramelize.rb
|
81
97
|
homepage: http://github.com/Dahie/caramelize
|
@@ -99,10 +115,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
115
|
version: '0'
|
100
116
|
requirements: []
|
101
117
|
rubyforge_project: caramelize
|
102
|
-
rubygems_version: 1.8.
|
118
|
+
rubygems_version: 1.8.21
|
103
119
|
signing_key:
|
104
120
|
specification_version: 3
|
105
121
|
summary: Abstract wiki convert to migrate your data from one wiki software to another
|
106
122
|
test_files:
|
107
123
|
- test/helper.rb
|
108
124
|
- test/test_caramelize.rb
|
125
|
+
has_rdoc:
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Caramelize
|
2
|
-
module Wikka2MarkdownConverter
|
3
|
-
|
4
|
-
# take an input stream and convert all wikka syntax to markdown syntax
|
5
|
-
def convert2markdown str
|
6
|
-
str.gsub!(/(======)(.*?)(======)/ ) {|s| '# ' + $2 } #h1
|
7
|
-
str.gsub!(/(=====)(.*?)(=====)/) {|s| '## ' + $2 } #h2
|
8
|
-
str.gsub!(/(====)(.*?)(====)/) {|s| '### ' + $2 } #h3
|
9
|
-
str.gsub!(/(===)(.*?)(===)/) {|s| '#### ' + $2 } #h4
|
10
|
-
|
11
|
-
str.gsub!(/(\*\*)(.*?)(\*\*)/) {|s| '**' + $2 + '**' } #bold
|
12
|
-
str.gsub!(/(\/\/)(.*?)(\/\/)/) {|s| '_' + $2 + '_' } #italic
|
13
|
-
#str.gsub!(/(===)(.*?)(===)/) {|s| '`' + $2 + '`'} #code
|
14
|
-
str.gsub!(/(__)(.*?)(__)/) {|s| '<u>' + $2 + '</u>'} #underline
|
15
|
-
|
16
|
-
#str.gsub!(/(.*?)(\n\t-)(.*?)/) {|s| $1 + '\n' + $3 } #list
|
17
|
-
|
18
|
-
str.gsub!(/(\t-)(.*?)/) {|s| '*' + $2 } #list
|
19
|
-
#str.gsub!(/(----)/) {|s| '~~~~'} #seperator
|
20
|
-
|
21
|
-
|
22
|
-
# TODO more syntax conversion for links and images
|
23
|
-
|
24
|
-
str
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|