olelo 0.9.2 → 0.9.3

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.
Files changed (57) hide show
  1. data/{doc/LICENSE → LICENSE} +0 -0
  2. data/README.creole +127 -0
  3. data/Rakefile +2 -2
  4. data/bin/olelo +55 -2
  5. data/config.ru +21 -4
  6. data/config/aspects.rb +9 -7
  7. data/config/config.yml.default +1 -0
  8. data/lib/olelo.rb +1 -0
  9. data/lib/olelo/application.rb +25 -14
  10. data/lib/olelo/config.rb +1 -1
  11. data/lib/olelo/extensions.rb +0 -12
  12. data/lib/olelo/helper.rb +0 -4
  13. data/lib/olelo/initializer.rb +4 -7
  14. data/lib/olelo/locale.yml +0 -3
  15. data/lib/olelo/page.rb +1 -1
  16. data/lib/olelo/plugin.rb +5 -4
  17. data/lib/olelo/routing.rb +15 -12
  18. data/lib/olelo/user.rb +10 -24
  19. data/lib/olelo/util.rb +4 -11
  20. data/lib/olelo/version.rb +1 -1
  21. data/lib/olelo/virtualfs.rb +11 -19
  22. data/olelo.gemspec +5 -2
  23. data/plugins/aspects/locale.yml +5 -0
  24. data/plugins/aspects/main.rb +8 -4
  25. data/plugins/authentication/yamlfile.rb +1 -1
  26. data/plugins/blog/main.rb +5 -5
  27. data/plugins/editor/ace/init.js +17 -0
  28. data/plugins/editor/ace/main.rb +7 -0
  29. data/plugins/editor/markup/main.rb +1 -1
  30. data/plugins/editor/markup/script.js +8 -8
  31. data/plugins/editor/markup/script/init.js +3 -3
  32. data/plugins/editor/recaptcha.rb +2 -2
  33. data/plugins/filters/interwiki.rb +0 -1
  34. data/plugins/gallery/main.rb +1 -1
  35. data/plugins/login/persistent.rb +2 -2
  36. data/plugins/misc/fancybox/script.js +1 -1
  37. data/plugins/misc/fancybox/script/init.js +2 -2
  38. data/plugins/misc/variables.rb +2 -2
  39. data/plugins/tags/math.rb +6 -7
  40. data/plugins/tags/scripting.rb +1 -1
  41. data/plugins/tags/tabs.rb +1 -1
  42. data/plugins/treeview/script.js +2 -2
  43. data/plugins/treeview/script/init.js +26 -24
  44. data/plugins/utils/assets.rb +20 -14
  45. data/static/themes/atlantis/images/bg/header.jpg +0 -0
  46. data/static/themes/atlantis/images/bg/header_gray.jpg +0 -0
  47. data/views/layout.slim +0 -1
  48. data/views/login.slim +3 -2
  49. metadata +127 -34
  50. data/README.markdown +0 -104
  51. data/doc/AUTHORS +0 -7
  52. data/lib/rack/olelo_patches.rb +0 -33
  53. data/lib/yard/addons.rb +0 -1
  54. data/lib/yard/addons/hook_handler.rb +0 -25
  55. data/lib/yard/addons/override_tag.rb +0 -14
  56. data/lib/yard/addons/route_handler.rb +0 -33
  57. data/lib/yard/addons/sanitize_anchor.rb +0 -16
File without changes
data/README.creole ADDED
@@ -0,0 +1,127 @@
1
+ = Ōlelo Wiki
2
+
3
+ Ōlelo is a wiki that stores pages in a [[http://git-scm.org/|Git]] repository, supports many markup styles and has an extensible, hackable architecture!
4
+ If you want to see a demo installation go to http://www.gitwiki.org/.
5
+
6
+ == Features
7
+
8
+ Ōlelo implements a plugin system. A lot of the features are implemented as plugins and can be activated or deactivated as you wish.
9
+
10
+ Core features:
11
+ * Edit, move or delete pages
12
+ * Page attribute editor
13
+ * Support for hierarchical wikis (directory structure)
14
+ * File upload
15
+ * History, commit and diff view
16
+
17
+ Features, implemented by plugins:
18
+ * Support for many markup languages (Creole, Markdown, Textile, ...)
19
+ * RSS/Atom changelog for whole wiki or pages
20
+ * Section editing for Creole and Markdown markup
21
+ * Embedded LaTeX formulas (Rendered as image or using [[http://mathjax.org/|MathJax]]
22
+ * Syntax highlighted embedded code blocks
23
+ * Image resizing, SVG to PNG/JPEG conversion
24
+ * Auto-generated table of contents
25
+ * Wiki syntax can be extended with tags
26
+ * Editor preview
27
+ * View pages as S5 presentation
28
+ * Privacy features: Access control lists, Private wiki which needs login, readonly wiki
29
+
30
+ == Quick start
31
+
32
+ The best way to install Ōlelo is via 'gem'.
33
+
34
+ {{{
35
+ $ gem install olelo
36
+ }}}
37
+
38
+ Go to a git repository via command line and start the Ōlelo webserver.
39
+
40
+ {{{
41
+ $ olelo
42
+ }}}
43
+
44
+ Point your web browser at http://localhost:8080/.
45
+
46
+ == Installation from source
47
+
48
+ Installation from source is especially useful if you want to do development or use the newest features.
49
+
50
+ Clone the git repository:
51
+
52
+ {{{
53
+ git clone git://github.com/minad/olelo.git
54
+ }}}
55
+
56
+ Now change to the Ōlelo source directory and use Bundler to install the dependencies.
57
+
58
+ {{{
59
+ $ cd olelo
60
+ $ bundle install
61
+ }}}
62
+
63
+ Start the Ōlelo webserver from the Ōlelo source directory.
64
+
65
+ {{{
66
+ $ bin/olelo
67
+ }}}
68
+
69
+ == Deployment
70
+
71
+ For production purposes, I recommend that you deploy the wiki with [[http://unicorn.bogomips.org|Unicorn]]. You should use the rackup configuration from the Ōlelo source or gem directory.
72
+
73
+ {{{
74
+ $ unicorn path-to/config.ru
75
+ }}}
76
+
77
+ Unicorn is a very flexible ruby application server and Ōlelo runs very well on it. You can adapt the number of Unicorn workers depending on the load you expect. It is
78
+ a good idea to observe the Unicorn workers as described in https://github.com/blog/519-unicorn-god and kill missbehaving workers if necessary.
79
+
80
+ == Configuration
81
+
82
+ For deployment you might want to tweak some settings. Ōlelo reads the files config/config.yml.default and config/config.yml in that order.
83
+ So just copy the default configuration config/config.yml.default to config/config.yml and make your modifications. If you installed Ōlelo
84
+ as gem this is not a good idea since you don't want to fiddle in the gem directory. For this purpose exists the environment variable OLELO_CONFIG which
85
+ can point to the configuration file that you want to use.
86
+
87
+ {{{
88
+ export OLELO_CONFIG=/home/olelo/olelo_config.yml
89
+ }}}
90
+
91
+ You can also use the OLELO_CONFIG environment variable if you want to run multiple Ōlelo instances with different configurations.
92
+
93
+ == Dependencies
94
+
95
+ If you use Bundler or installed Ōlelo as gem you don't really have to care about the dependencies. The standard installation provides the core dependencies and a good selection of optional dependencies.
96
+
97
+ Core dependencies:
98
+ * [[http://www.git-scm.com|Git]]
99
+ * [[http://slim-lang.com/|Slim template language]]
100
+ * [[http://libgit2.github.com/|Rugged git library]]
101
+ * [[http://rack.github.com/|Rack]]
102
+ * [[https://github.com/minad/mimemagic/|MimeMagic]]
103
+
104
+ Some dependencies are optional, for example depending on the markup you want to use.
105
+ * [[https://github.com/minad/creole|Creole markup library]]
106
+ * [[https://github.com/vmg/redcarpet|Redcarpet Markdown library]]
107
+ * [[http://redcloth.org/|RedCloth Textile markup library]]
108
+ * [[http://www.imagemagick.org/|ImageMagick for image resizing]]
109
+ * [[http://nokogiri.org/|Nokogiri for auto-generated table of contents]]
110
+ * [[http://pygments.org/|Pygments for syntax highlighting of code blocks]]
111
+
112
+ == Authors
113
+
114
+ Git-Wiki was originally developed by Simon Rozet. The development of Ōlelo to its current state was done by Daniel Mendler and contributors.
115
+ The current code base doesn't have much in common with the original Git-Wiki proof-of-concept.
116
+
117
+ Contributors:
118
+ * Alex Eagle
119
+ * Alex Wall
120
+ * Hrvoje
121
+ * Luca Greco
122
+ * Pavel Suchmann
123
+ * Raffael Schmid
124
+
125
+ == License
126
+
127
+ Ōlelo is released under the MIT license.
data/Rakefile CHANGED
@@ -75,8 +75,8 @@ end
75
75
 
76
76
  desc 'Generate documentation'
77
77
  namespace :doc do
78
- task :gen do; system("yard doc -o doc/api -e lib/yard/addons.rb --backtrace 'lib/**/*.rb' 'plugins/**/*.rb'"); end
79
- task :server do; system('yard server --reload -e lib/yard/addons.rb --backtrace'); end
78
+ task :gen do; system("yard doc -o doc/api 'lib/**/*.rb' 'plugins/**/*.rb'"); end
79
+ task :server do; system('yard server --reload'); end
80
80
  task :check do; system("yardcheck 'lib/**/*.rb' 'plugins/**/*.rb'"); end
81
81
  end
82
82
 
data/bin/olelo CHANGED
@@ -1,5 +1,58 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'rack'
4
- Rack::Server.start(:Port => 8080,
5
- :config => ::File.expand_path(::File.join(__FILE__, '..', '..', 'config.ru')))
4
+ require 'optparse'
5
+
6
+ help = %{Usage: olelo [OPTIONS] [PATH]
7
+
8
+ PATH The path to the git repository to serve from (default .).
9
+
10
+ Options:
11
+ }
12
+
13
+ options = {
14
+ :port => 8080,
15
+ :host => '0.0.0.0'
16
+ }
17
+
18
+ app_path = File.expand_path(File.join(__FILE__, '..', '..'))
19
+
20
+ opts = OptionParser.new do |opts|
21
+ opts.banner = help
22
+
23
+ opts.on('-p', '--port [PORT]', 'Bind port (default 8080).') do |port|
24
+ options[:port] = port.to_i
25
+ end
26
+
27
+ opts.on('-o', '--host [HOST]', 'Hostname or IP address to listen on (default 0.0.0.0).') do |host|
28
+ options[:host] = host
29
+ end
30
+
31
+ opts.on('-c', '--config [CONFIG]', 'Path to the Olelo configuration, sets the $OLELO_CONFIG environment variable.') do |config|
32
+ ENV['OLELO_CONFIG'] = File.expand_path(config)
33
+ end
34
+
35
+ opts.on('-v', '--version', 'Display current version.') do
36
+ require File.join(app_path, 'lib', 'olelo', 'version.rb')
37
+ puts "Olelo #{Olelo::VERSION}"
38
+ exit
39
+ end
40
+
41
+ opts.on_tail('-h', '--help', 'Show this message') do
42
+ puts opts
43
+ exit
44
+ end
45
+ end
46
+ opts.parse!(ARGV)
47
+
48
+ if ARGV.size == 1
49
+ Dir.chdir(ARGV.first)
50
+ elsif ARGV.size > 1
51
+ puts "Too many arguments: #{ARGV.join(' ')}"
52
+ puts opts
53
+ exit
54
+ end
55
+
56
+ Rack::Server.start(:Port => options[:port],
57
+ :Host => options[:host],
58
+ :config => File.join(app_path, 'config.ru'))
data/config.ru CHANGED
@@ -7,7 +7,6 @@ $: << ::File.join(app_path, 'lib')
7
7
  Encoding.default_external = Encoding::UTF_8
8
8
 
9
9
  require 'fileutils'
10
- require 'rack/olelo_patches'
11
10
  require 'rack/relative_redirect'
12
11
  require 'rack/static_cache'
13
12
  require 'olelo'
@@ -43,14 +42,33 @@ else
43
42
  puts 'No default data storage location defined, please create your own configuration!'
44
43
  end
45
44
 
46
- Olelo::Config.instance.load(ENV['OLELO_CONFIG'] || ENV['WIKI_CONFIG'] || ::File.join(app_path, 'config', 'config.yml'))
45
+ if config = ENV['OLELO_CONFIG'] || ENV['WIKI_CONFIG']
46
+ Olelo::Config.instance.load!(config)
47
+ else
48
+ Olelo::Config.instance.load(::File.join(app_path, 'config', 'config.yml'))
49
+ end
50
+
47
51
  Olelo::Config.instance.freeze
48
52
 
49
53
  FileUtils.mkpath ::File.dirname(Olelo::Config['log.file'])
50
54
  logger = ::Logger.new(Olelo::Config['log.file'], :monthly, 10240000)
51
55
  logger.level = ::Logger.const_get(Olelo::Config['log.level'])
52
56
 
53
- use_lint if !Olelo::Config['production']
57
+ # Doesn't work currently, rack issue #241
58
+ # if !Olelo::Config['production']
59
+ # # Rack::Lint injector
60
+ # module UseLint
61
+ # def use(middleware, *args, &block)
62
+ # super Rack::Lint if middleware != Rack::Lint
63
+ # super
64
+ # end
65
+ # def run(app)
66
+ # use Rack::Lint
67
+ # super
68
+ # end
69
+ # end
70
+ # class << self; include UseLint; end
71
+ # end
54
72
 
55
73
  use Rack::Runtime
56
74
  use Rack::ShowExceptions if !Olelo::Config['production']
@@ -70,7 +88,6 @@ end
70
88
 
71
89
  use Rack::MethodOverride
72
90
  use Rack::CommonLogger, LoggerOutput.new(logger)
73
-
74
91
  use Olelo::Middleware::ForceEncoding
75
92
  use Olelo::Middleware::Flash, :set_accessors => %w(error warn info)
76
93
  use Rack::RelativeRedirect
data/config/aspects.rb CHANGED
@@ -9,13 +9,15 @@
9
9
  #
10
10
  ################################################################################
11
11
 
12
- regexp :remove_comments, /<!--.*?-->/m, ''
13
- regexp :tag_shortcuts, /\\\((.*?)\\\)/m, '<math display="inline">\1</math>',
14
- /\\\[(.*?)\\\]/m, '<math display="block">\1</math>',
15
- /<<(.*?)(\|(.*?))?>>/, '<include page="\1" \3/>'
16
- regexp :creole_nowiki, /\{\{\{.*?\}\}\}/m, '<notags>\0</notags>'
17
- regexp :textile_nowiki, /<pre>.*?<\/pre>/m, '<notags>\0</notags>'
18
- regexp :mediawiki_nowiki, /<nowiki>.*?<\/nowiki>/m, '<notags>\0</notags>'
12
+ regexp :remove_comments, /<!--.*?-->/m, ''
13
+ regexp :tag_shortcuts, /\\\((.*?)\\\)/m, '<math display="inline">\1</math>',
14
+ /\\\[(.*?)\\\]/m, '<math display="block">\1</math>',
15
+ /<<(.*?)(\|(.*?))?>>/, '<include page="\1" \3/>',
16
+ /^~~~\s*(\w+)\s*$(.*?)^~~~$/m, '<code lang="\1">\2</code>',
17
+ /^```\s*(\w+)\s*$(.*?)^```$/m, '<code lang="\1">\2</code>'
18
+ regexp :creole_nowiki, /\{\{\{.*?\}\}\}/m, '<notags>\0</notags>'
19
+ regexp :textile_nowiki, /<pre>.*?<\/pre>/m, '<notags>\0</notags>'
20
+ regexp :mediawiki_nowiki, /<nowiki>.*?<\/nowiki>/m, '<notags>\0</notags>'
19
21
 
20
22
  ################################################################################
21
23
  #
@@ -113,6 +113,7 @@ disabled_plugins:
113
113
  - security/readonly_wiki
114
114
  - security/private_wiki
115
115
  - editor/recaptcha
116
+ - editor/ace
116
117
 
117
118
  ##################################################
118
119
  # Rack middleware configurations
data/lib/olelo.rb CHANGED
@@ -8,6 +8,7 @@ require 'open3'
8
8
  require 'set'
9
9
  require 'yaml'
10
10
  require 'mimemagic'
11
+ require 'socket'
11
12
 
12
13
  begin
13
14
  require 'yajl/json_gem'
@@ -15,11 +15,13 @@ module Olelo
15
15
  :edit_buttons, :attributes_buttons, :upload_buttons
16
16
  has_hooks :auto_login, :render, :menu, :head, :script
17
17
 
18
- class<< self
19
- attr_accessor :reserved_paths
20
- def reserved_path?(path)
21
- path = '/' + path.cleanpath
22
- reserved_paths.any? {|pattern| path =~ pattern }
18
+ def self.reserved_path?(path)
19
+ path = '/' + path.cleanpath
20
+ path.starts_with?('/static') ||
21
+ router.any? do |method, r|
22
+ r.any? do |name,pattern,keys,function|
23
+ name !~ /^\/\(?:path\)?$/ && pattern.match(path)
24
+ end
23
25
  end
24
26
  end
25
27
 
@@ -109,7 +111,7 @@ module Olelo
109
111
  post '/signup' do
110
112
  on_error :login
111
113
  raise 'Sign-up is disabled' if !Config['authentication.enable_signup']
112
- User.current = User.create(params[:user], params[:password],
114
+ User.current = User.signup(params[:user], params[:password],
113
115
  params[:confirm], params[:email])
114
116
  redirect build_path('/')
115
117
  end
@@ -127,9 +129,13 @@ module Olelo
127
129
  post '/profile' do
128
130
  raise 'Anonymous users do not have a profile.' if !User.logged_in?
129
131
  on_error :profile
130
- User.current.modify do |u|
131
- u.change_password(params[:oldpassword], params[:password], params[:confirm]) if !params[:password].blank?
132
- u.email = params[:email]
132
+ if User.supports?(:change_password) && !params[:password].blank?
133
+ User.current.change_password(params[:oldpassword], params[:password], params[:confirm])
134
+ end
135
+ if User.supports?(:update)
136
+ User.current.update do |u|
137
+ u.email = params[:email]
138
+ end
133
139
  end
134
140
  flash.info! :changes_saved.t
135
141
  render :profile
@@ -259,20 +265,25 @@ module Olelo
259
265
 
260
266
  def show_page
261
267
  @menu_versions = true
262
- halt render(:show, :locals => {:content => page.try(:content)})
268
+ render(:show, :locals => {:content => page.try(:content)})
263
269
  end
264
270
 
265
- get '/version/:version(/:path)|/(:path)', :tail => true do
271
+ get '/(:path)', :tail => true do
266
272
  begin
267
- @page = Page.find!(params[:path], params[:version])
273
+ @page = Page.find!(params[:path])
268
274
  cache_control :version => page.version
269
275
  show_page
270
276
  rescue NotFound
271
- redirect build_path(params[:path], :action => :new) if params[:version].blank?
272
- raise
277
+ redirect build_path(params[:path], :action => :new)
273
278
  end
274
279
  end
275
280
 
281
+ get '/version/:version(/:path)' do
282
+ @page = Page.find!(params[:path], params[:version])
283
+ cache_control :version => page.version
284
+ show_page
285
+ end
286
+
276
287
  post '/(:path)', :tail => true do
277
288
  action, @close = params[:action].to_s.split('-', 2)
278
289
  if respond_to? "post_#{action}"
data/lib/olelo/config.rb CHANGED
@@ -7,7 +7,7 @@ module Olelo
7
7
  def initialize(base = nil)
8
8
  @hash = {}
9
9
  @base = base.freeze
10
- end
10
+ end
11
11
 
12
12
  def [](key)
13
13
  key = key.to_s
@@ -49,18 +49,6 @@ class Module
49
49
  end
50
50
  include(Module.new { define_method(name, &block) })
51
51
  end
52
-
53
- if method(:const_defined?).arity == 1
54
- # Ruby 1.8
55
- def local_const_defined?(const)
56
- const_defined?(const)
57
- end
58
- else
59
- # Ruby 1.9
60
- def local_const_defined?(const)
61
- const_defined?(const, false)
62
- end
63
- end
64
52
  end
65
53
 
66
54
  class Hash
data/lib/olelo/helper.rb CHANGED
@@ -246,10 +246,6 @@ module Olelo
246
246
  include_or_define_block(:title, content, &block)
247
247
  end
248
248
 
249
- def script
250
- invoke_hook(:script).join.html_safe
251
- end
252
-
253
249
  def head
254
250
  @@theme_link ||=
255
251
  begin
@@ -15,7 +15,7 @@ module Olelo
15
15
  init_locale
16
16
  init_templates
17
17
  init_plugins
18
- init_routes
18
+ show_routes if Olelo.logger.debug?
19
19
  init_scripts
20
20
  end
21
21
 
@@ -41,7 +41,7 @@ module Olelo
41
41
  end
42
42
 
43
43
  def init_plugins
44
- # Load locales for loaded plugins
44
+ # Load locales provided by plugins
45
45
  Plugin.after(:load) { Locale.load(File.join(File.dirname(file), 'locale.yml')) }
46
46
 
47
47
  # Configure plugin system
@@ -52,16 +52,13 @@ module Olelo
52
52
  Plugin.start
53
53
  end
54
54
 
55
- def init_routes
56
- Application.reserved_paths = Application.router.map do |method, router|
57
- router.head.map {|name, pattern, keys, function| pattern }
58
- end.flatten
55
+ def show_routes
59
56
  Application.router.each do |method, router|
60
57
  Olelo.logger.debug method
61
58
  router.each do |name, pattern, keys, function|
62
59
  Olelo.logger.debug "#{name} -> #{pattern.inspect}"
63
60
  end
64
- end if Olelo.logger.debug?
61
+ end
65
62
  end
66
63
 
67
64
  def init_scripts