olelo 0.9.2 → 0.9.3

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