class MediaWiki::FakeWiki::App
Public Class Methods
new()
click to toggle source
Calls superclass method
# File lib/media_wiki/fake_wiki.rb 16 def initialize 17 reset 18 super 19 end
Public Instance Methods
action()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 174 def action 175 [:userrights].each do |action_type| 176 return send(action_type) 177 end 178 halt(404, "Page not found") 179 end
add_user(username, password, domain, is_admin)
click to toggle source
# File lib/media_wiki/fake_wiki.rb 49 def add_user(username, password, domain, is_admin) 50 @users[username] = { 51 :userid => next_id, 52 :username => username, 53 :password => password, 54 :domain => domain, 55 :is_admin => is_admin 56 } 57 end
allpages()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 227 def allpages 228 api_response do |_| 229 _.query do 230 _.allpages do 231 prefix = params[:apprefix] 232 namespace = @pages.namespaces_by_id[params[:apnamespace].to_i] 233 prefix = "#{namespace}:#{prefix}" unless namespace.empty? 234 @pages.list(prefix).each do |key, page| 235 _.p(nil, { :title => page[:title], :ns => page[:namespace], :id => page[:pageid] }) 236 end 237 end 238 end 239 end 240 end
api_error_response(code, info)
click to toggle source
# File lib/media_wiki/fake_wiki.rb 308 def api_error_response(code, info) 309 api_response do |_| 310 _.error(nil, 311 :code => code, 312 :info => info) 313 end 314 end
api_response(api_attr = {}, &block)
click to toggle source
# File lib/media_wiki/fake_wiki.rb 302 def api_response(api_attr = {}, &block) 303 Nokogiri::XML::Builder.new do |_| 304 _.api(api_attr, &block) 305 end.to_xml 306 end
createaccount()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 436 def createaccount 437 api_response do |_| 438 @token.request(user) 439 440 if params[:token] && !params[:token].empty? 441 @token.validate_admin 442 add_user(params[:name], params[:password], 'local', false) 443 _.createaccount(:token => @token.createusertoken, :userid => @users.length, :username => params[:name], :result => 'success') 444 else 445 _.createaccount(:token => @token.createusertoken, :result => 'needtoken') 446 end 447 end 448 end
delete()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 125 def delete 126 @token.validate_admin 127 128 title = params[:title] 129 raise ApiError.new("missingtitle", "The page you requested doesn't exist") unless @pages.get(title) 130 @pages.delete(title) 131 132 api_response do |_| 133 _.delete(nil, {:title => title, :reason => "Default reason"}) 134 end 135 end
edit()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 105 def edit 106 @token.validate 107 108 title = params[:title] 109 current_page = @pages.get(title) 110 validate_page_overwrite(current_page) 111 112 new_page = @pages.add(title, params[:text]) 113 page_info = {:result => "Success", :pageid => new_page[:pageid], :title => new_page[:title], :newrevid => new_page[:pageid]} 114 if current_page 115 page_info.merge!(:oldrevid => current_page[:pageid]) 116 else 117 page_info.merge!(:new => "", :oldrevid => 0) 118 end 119 120 api_response do |_| 121 _.edit(nil, page_info) 122 end 123 end
export()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 195 def export 196 Nokogiri::XML::Builder.new do |_| 197 _.mediawiki do 198 requested_page_titles.each do |requested_title| 199 page = @pages.get(requested_title) 200 _.page do 201 _.title(page[:title]) 202 _.id(page[:pageid]) 203 _.revision do 204 _.id(page[:pageid]) 205 _.text!(page[:content]) 206 end 207 end 208 end 209 end 210 end.to_xml 211 end
extensions()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 288 def extensions 289 api_response do |_| 290 _.query do 291 _.extensions do 292 @extensions.each do |name, version| 293 attr = { :version => version } 294 attr[:name] = name unless name.empty? 295 _.ext(name, attr) 296 end 297 end 298 end 299 end 300 end
get_info()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 328 def get_info 329 query_pages do |_, title, page| 330 attributes = { :title => title, :ns => '0'} 331 if page.nil? 332 attributes[:missing] = "" 333 else 334 attributes[:redirect] = "" if page[:redirect] 335 end 336 _.page(nil, attributes) 337 end 338 end
get_revisions()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 340 def get_revisions 341 query_pages do |_, title, page| 342 if page.nil? 343 _.page(nil, { :title => title, :ns => '0', :missing => "" }) 344 else 345 page = page.dup 346 content = page.delete(:content) 347 _.page(page.merge({ :ns => 0 })) do 348 _.revisions do 349 _.rev(content) 350 end 351 end 352 end 353 end 354 end
get_token()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 373 def get_token 374 token_str = @token.request(user) 375 query_pages do |_, title, page| 376 page = page ? page.dup : {} 377 page[params[:intoken] + "token"] = token_str if token_str 378 _.page(nil, page.merge({ :ns => 0 })) 379 end 380 end
get_undelete_token()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 382 def get_undelete_token 383 @token.set_type 'undelete' 384 token_str = @token.request(user) 385 api_response do |_| 386 _.query do 387 _.deletedrevs do 388 requested_page_titles.select {|title| ! @pages.get(title) }.each do |title| 389 _.page(nil, { :title => title, :token => token_str }) 390 end 391 end 392 end 393 end 394 end
get_userrights_token(username)
click to toggle source
# File lib/media_wiki/fake_wiki.rb 396 def get_userrights_token(username) 397 @token.set_type 'userrights' 398 token_str = @token.request(user) 399 400 user_to_manage = @users[username] 401 402 if user_to_manage 403 api_response do |_| 404 _.query do 405 _.users do 406 _.user(nil, { :name => user_to_manage[:username], :userrightstoken => token_str }) 407 end 408 end 409 end 410 else 411 api_response do |_| 412 _.error(nil, { :code => 'nosuchuser', :info => "The user '#{params[:ususer].to_s}' does not exist"} ) 413 end 414 end 415 end
handle_request()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 71 def handle_request 72 begin 73 halt(503, "Maxlag exceeded") if params[:maxlag].to_i < 0 74 75 @token = ApiToken.new(params) 76 action = params[:action] 77 if respond_to?(action) 78 content_type "application/xml" 79 return send(action) 80 end 81 82 halt(404, "Page not found") 83 rescue ApiError => e 84 return api_error_response(e.code, e.message) 85 end 86 end
import()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 88 def import 89 @token.validate_admin 90 91 api_response do |_| 92 _.import do 93 _.page(nil, :title => "Main Page", :ns => 0, :revisions => 0) 94 _.page(nil, :title => "Template:Header", :ns => 10, :revisions => 1) 95 end 96 end 97 end
list()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 213 def list 214 list_type = params[:list].to_sym 215 216 # api.php?action=query&list=users&ususers=Bob&ustoken=userrights 217 if list_type == :users && params[:ustoken] && params[:ususers] 218 # This "list" is actually a request for a user rights token 219 return get_userrights_token(params[:ususers]) 220 end 221 222 # This is a real list 223 return send(list_type) if respond_to?(list_type) 224 halt(404, "Page not found") 225 end
logged_in(username)
click to toggle source
# File lib/media_wiki/fake_wiki.rb 59 def logged_in(username) 60 @logged_in_users.include?(username) 61 end
login()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 417 def login 418 user = @users[params[:lgname]] 419 if user and user[:domain] == params[:lgdomain] 420 if params[:lgpassword] == user[:password] 421 @logged_in_users << user[:username] 422 response.set_cookie('login', user[:username]) 423 result = { :result => "Success", :lguserid => "1", :lgusername => "Atlasmw"} 424 else 425 result = { :result => "WrongPass" } 426 end 427 else 428 result = { :result => "NotExists" } 429 end 430 431 api_response do |_| 432 _.login(nil, result) 433 end 434 end
meta()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 255 def meta 256 meta_type = params[:meta].to_sym 257 return send(meta_type) if respond_to?(meta_type) 258 halt(404, "Page not found") 259 end
namespaces()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 274 def namespaces 275 api_response do |_| 276 _.query do 277 _.namespaces do 278 @pages.namespaces_by_prefix.each do |prefix, id| 279 attr = { :id => id } 280 attr[:canonical] = prefix unless prefix.empty? 281 _.ns(prefix, attr) 282 end 283 end 284 end 285 end 286 end
next_id()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 45 def next_id 46 @sequence_id += 1 47 end
options()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 450 def options 451 api_response(:options => 'success') 452 end
parse()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 157 def parse 158 page = @pages.get(params[:page]) 159 api_response do |_| 160 _.parse({ :revid => page ? page[:pageid] : 0}) do 161 if params[:page] == "Foopage" 162 _.text!('Sample <B>HTML</B> content.' \ 163 '<img width="150" height="150" class="thumbimage" src="http://upload.wikimedia.org/foo/Ruby_logo.svg" alt="Ruby logo.svg"/>' \ 164 '<span class="editsection">[<a title="Edit section: Nomenclature" href="/w/index.php?title=Seat_of_local_government&action=edit&section=1">edit</a>]</span>' \ 165 '<a title="Interpreted language" href="/wiki/Interpreted_language">interpreted language</a>' 166 ) 167 else 168 _.text!('Sample <B>HTML</B> content.') 169 end 170 end 171 end 172 end
prop()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 188 def prop 189 return get_revisions if params[:prop] == "revisions" 190 return get_undelete_token if params[:drprop] == 'token' 191 return get_token if params[:intoken] 192 return get_info if params[:prop] == "info" 193 end
query()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 181 def query 182 [:prop, :export, :list, :meta].each do |query_type| 183 return send(query_type) if params[query_type] 184 end 185 halt(404, "Page not found") 186 end
query_pages() { |_, title, get| ... }
click to toggle source
# File lib/media_wiki/fake_wiki.rb 316 def query_pages 317 api_response do |_| 318 _.query do 319 _.pages do 320 requested_page_titles.each do |title| 321 yield(_, title, @pages.get(title)) 322 end 323 end 324 end 325 end 326 end
requested_page_titles()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 361 def requested_page_titles 362 params[:titles].split("|") 363 end
reset()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 21 def reset 22 @sequence_id = 0 23 24 @users = {} 25 add_user('atlasmw', 'wombat', 'local', true) 26 add_user('nonadmin', 'sekrit', 'local', false) 27 add_user('ldapuser', 'ldappass', 'ldapdomain', false) 28 29 @pages = ApiPages.new 30 @pages.add('Main Page', 'Content') 31 @pages.add('Main 2', 'Content') 32 @pages.add('Empty', '') 33 @pages.add('Level/Level/Index', '{{#include:Foo}} {{#include:Bar}}') 34 @pages.add_namespace(100, "Book") 35 @pages.add('Book:Italy', 'Introduction') 36 @pages.add_namespace(200, "Sandbox") 37 @pages.add('Foopage', 'Content') 38 @pages.add('Redirect', '#REDIRECT', true) 39 40 @extensions = { 'FooExtension' => 'r1', 'BarExtension' => 'r2', 'Semantic MediaWiki' => '1.5' } 41 42 @logged_in_users = [] 43 end
search()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 242 def search 243 api_response do |_| 244 _.query do 245 _.search do 246 namespaces = params[:srnamespace] ? params[:srnamespace].split('|') : [ "0" ] 247 @pages.search(params[:srsearch], namespaces).first(params[:srlimit].to_i).each do |key, page| 248 _.p(nil, { :title => page[:title], :ns => page[:namespace], :id => page[:pageid] }) 249 end 250 end 251 end 252 end 253 end
siteinfo()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 261 def siteinfo 262 if siteinfo_type = params[:siprop] 263 return send(siteinfo_type) if respond_to?(siteinfo_type) 264 halt(404, "Page not found") 265 else 266 api_response do |_| 267 _.query do 268 _.general(generator: "MediaWiki #{MediaWiki::VERSION}") 269 end 270 end 271 end 272 end
tokens()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 365 def tokens 366 @token.request(user) 367 368 api_response do |_| 369 _.tokens(:optionstoken => @token.optionstoken) 370 end 371 end
undelete()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 137 def undelete 138 @token.validate_admin 139 140 title = params[:title] 141 revisions = @pages.undelete(title) 142 api_response do |_| 143 _.undelete(nil, {:title => title, :revisions => revisions}) 144 end 145 end
upload()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 147 def upload 148 @token.validate 149 150 filename = params[:filename] 151 @pages.add(filename, params[:file]) 152 api_response do |_| 153 _.upload(nil, {:filename => filename, :result => "Success"}) 154 end 155 end
user()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 356 def user 357 username = request.cookies['login'] 358 @users[username] if logged_in(username) 359 end
userrights()
click to toggle source
# File lib/media_wiki/fake_wiki.rb 454 def userrights 455 api_response do |_| 456 _.userrights({:user => params[:user]}) do 457 _.removed do 458 params[:remove].split('|').each do |removed_group| 459 _.group(removed_group) 460 end 461 end 462 _.added do 463 params[:add].split('|').each do |added_group| 464 _.group(added_group) 465 end 466 end 467 end 468 end 469 end
validate_page_overwrite(current_page)
click to toggle source
# File lib/media_wiki/fake_wiki.rb 99 def validate_page_overwrite(current_page) 100 if current_page && params[:createonly] 101 raise ApiError.new("articleexists", "The article you tried to create has been created already") 102 end 103 end