Class: Orange::GollumResource
- Inherits:
-
Resource
- Object
- Resource
- Orange::GollumResource
- Defined in:
- lib/orange-gollum/resources/gollum_resource.rb
Instance Method Summary collapse
- #authorize!(packet) ⇒ Object
- #commit_message(packet) ⇒ Object
- #compare(packet, opts = {}) ⇒ Object
- #create(packet, opts = {}) ⇒ Object
- #edit(packet, opts = {}) ⇒ Object
- #exposed(packet) ⇒ Object
- #gollum(packet) ⇒ Object
- #history(packet, opts = {}) ⇒ Object
- #left_diff_line_number(id, line, left_diff_line, current_line_number) ⇒ Object
- #line_class(line) ⇒ Object
- #lines_for_diff(diff) ⇒ Object
- #preview(packet, opts = {}) ⇒ Object
- #right_diff_line_number(id, line, right_diff_line_number, current_line_number) ⇒ Object
- #show(packet, opts = {}) ⇒ Object
- #stack_init ⇒ Object
- #view(packet = false, *args) ⇒ Object
- #wiki_url(packet) ⇒ Object
Instance Method Details
#authorize!(packet) ⇒ Object
26 27 28 29 30 31 32 33 34 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 26 def (packet) unless packet["user.id"] packet.flash["user.after_login"] = packet["route.path"] packet.flash["login.message"] = "Please provide a valid OpenID to edit the wiki." packet.reroute('/login') return false end return true end |
#commit_message(packet) ⇒ Object
12 13 14 15 16 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 12 def (packet) { :message => packet.request.params["message"], :name => packet['user.id'] || 'anonymous', :email => packet['user.id'] || '[email protected]'} end |
#compare(packet, opts = {}) ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 126 def compare(packet, opts = {}) opts = Mash.new(opts.with_defaults(packet.request.params)) if packet.request.post? versions = opts[:versions] || [] name = opts[:path] if versions.size < 2 packet.reroute(wiki_url(packet) + 'history/'+::Gollum::Page.cname(name)) else packet.reroute(wiki_url(packet) + 'compare/'+::Gollum::Page.cname(name) + '/' + versions.last + '...' + versions.first) end else parts = opts[:path].split('/') version_list = parts.pop opts[:path] = parts.join('/') name = opts[:path] || opts[:name] opts[:version_list] ||= version_list opts[:versions] = opts[:version_list].split(/\.{2,3}/) opts[:name] = name opts[:page] ||= gollum(packet).page(name) diffs = gollum(packet).repo.diff(opts[:versions].first, opts[:versions].last, opts[:page].path) opts[:diff] = diffs.first opts[:lines] = lines_for_diff(diffs.first) do_view(packet, :compare, opts) end end |
#create(packet, opts = {}) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 55 def create(packet, opts = {}) (packet) path = opts[:path] || packet['route.resource_path'] || "Home" if packet.request.post? name = packet.request.params["page"] wiki = gollum(packet) format = "markdown".intern begin wiki.write_page(name, format, packet.request.params["content"], (packet)) packet.reroute(wiki_url(packet) + name) rescue Exception => e do_view(packet, :error, {:message => "Errored: #{e.inspect}"}) end else opts[:name] ||= path opts[:title] ||= path.gsub('-', ' ') do_view(packet, :create, opts) end end |
#edit(packet, opts = {}) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 76 def edit(packet, opts = {}) (packet) wiki = gollum(packet) path = opts[:path] || packet['route.resource_path'] || "Home" if packet.request.post? name = path wiki = gollum(packet) page = wiki.page(name) format = "markdown".intern name = packet.request.params["rename"] if packet.request.params["rename"] wiki.update_page(page, name, format, packet.request.params["content"], (packet)) packet.reroute(wiki_url(packet) + ::Gollum::Page.cname(name)) elsif page = wiki.page(path) opts[:page] = page opts[:name] = path opts[:title] = path.gsub('-', ' ') opts[:content] = page.raw_data do_view(packet, :edit, opts) else packet.reroute(wiki_url(packet)) end end |
#exposed(packet) ⇒ Object
6 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 6 def exposed(packet); [:index]; end |
#gollum(packet) ⇒ Object
22 23 24 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 22 def gollum(packet) ::Gollum::Wiki.new([:path], {:base_path => wiki_url(packet)}) end |
#history(packet, opts = {}) ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 101 def history(packet, opts = {}) opts.with_defaults!(packet.request.params) opts[:path] ||= (packet['route.resource_path'] || "Home") opts[:name] = opts[:path] opts[:page] ||= gollum(packet).page(opts[:path]) opts[:page_num] = [opts[:page_num].to_i, 1, opts.delete("page_num").to_i].max page = opts[:page] versions = page.versions :page => opts[:page_num] i = versions.size + 1 opts[:versions] = versions.map do |v| i -= 1 { :id => v.id, :id7 => v.id[0..6], :num => i, :selected => page.version.id == v.id, :author => v..name, :message => v., :date => v.committed_date.strftime("%B %d, %Y"), :gravatar => Digest::MD5.hexdigest(v..email) } end opts[:title] = opts[:path].gsub('-', ' ') do_view(packet, :history, opts) end |
#left_diff_line_number(id, line, left_diff_line, current_line_number) ⇒ Object
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 203 def left_diff_line_number(id, line, left_diff_line, current_line_number) if line =~ /^@@/ m, li = *line.match(/\-(\d+)/) left_diff_line = li.to_i current_line_number = left_diff_line ret = '...' elsif line[0] == ?- ret = left_diff_line.to_s left_diff_line += 1 current_line_number = left_diff_line - 1 elsif line[0] == ?+ ret = ' ' else ret = left_diff_line.to_s left_diff_line += 1 current_line_number = left_diff_line - 1 end [left_diff_line,current_line_number,ret] end |
#line_class(line) ⇒ Object
191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 191 def line_class(line) if line =~ /^@@/ 'gc' elsif line =~ /^\+/ 'gi' elsif line =~ /^\-/ 'gd' else '' end end |
#lines_for_diff(diff) ⇒ Object
177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 177 def lines_for_diff(diff) lines = [] left_line = right_line = nil diff.diff.split("\n")[2..-1].each_with_index do |line, line_index| left_line, current_line, left = left_diff_line_number(id, line, left_line, current_line) right_line, current_line, right = right_diff_line_number(id, line, right_line, current_line) lines << { :line => line, :class => line_class(line), :ldln => left, :rdln => right } end lines end |
#preview(packet, opts = {}) ⇒ Object
172 173 174 175 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 172 def preview(packet, opts = {}) data = packet.request.params['text'] packet.markdown(gollum(packet).preview_page("Preview", data, "markdown").formatted_data) end |
#right_diff_line_number(id, line, right_diff_line_number, current_line_number) ⇒ Object
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 223 def right_diff_line_number(id, line, right_diff_line_number, current_line_number) if line =~ /^@@/ m, ri = *line.match(/\+(\d+)/) right_diff_line_number = ri.to_i current_line_number = right_diff_line_number ret = '...' elsif line[0] == ?- ret = ' ' elsif line[0] == ?+ ret = right_diff_line_number.to_s right_diff_line_number += 1 current_line_number = right_diff_line_number - 1 else ret = right_diff_line_number.to_s right_diff_line_number += 1 current_line_number = right_diff_line_number - 1 end [right_diff_line_number,current_line_number,ret] end |
#show(packet, opts = {}) ⇒ Object
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 152 def show(packet, opts = {}) path = opts[:path] || packet['route.resource_path'] || "Home" path = path.gsub(/^\//, "") if path =~ /^\// wiki = gollum(packet) if page = wiki.page(path) opts[:page] = page opts[:name] = path opts[:title] = path.gsub('-', ' ') opts[:content] = page.formatted_data do_view(packet, :show, opts) elsif file = wiki.file(path) packet["template.disable"] = true file.raw_data else opts[:name] = path opts[:title] = path.gsub('-', ' ') create(packet, opts) end end |
#stack_init ⇒ Object
8 9 10 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 8 def stack_init [:path] = orange.["gollum_path"] end |
#view(packet = false, *args) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 36 def view(packet = false, *args) %w(editbar gollum screen syntax).each{|css| packet.add_css("#{css}.css", :module => "_gollum_")} %w(previewable_comment_form tabs text_selection.min).each{|js| packet.add_js("jquery.#{js}.js", :module => "_gollum_")} packet.add_js("gollum.js", :module => "_gollum_") packet.add_js("MathJax/MathJax.js", :module => "_gollum_") opts = args. path = opts[:path] || packet['route.resource_path'] || "/Home" path = "/Home" if path.blank? path_parts = path.split('/') path_parts.shift if %w(edit history compare create preview).include?(path_parts.first) action = path_parts.shift else action = "show" end opts[:path] = path_parts.join('/') self.__send__(action.to_sym, packet, opts) end |
#wiki_url(packet) ⇒ Object
18 19 20 |
# File 'lib/orange-gollum/resources/gollum_resource.rb', line 18 def wiki_url(packet) orange[:sitemap].url_for(packet, :resource => "gollum") end |