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&amp;action=edit&amp;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
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