Class: MediawikiApi::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/mediawiki_api/client.rb

Overview

high level client for MediaWiki

Constant Summary collapse

FORMAT =
'json'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url, log = false) ⇒ Client

Returns a new instance of Client.



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/mediawiki_api/client.rb', line 17

def initialize(url, log = false)
  @conn = Faraday.new(url: url) do |faraday|
    faraday.request :multipart
    faraday.request :url_encoded
    faraday.response :logger if log
    faraday.use :cookie_jar
    faraday.adapter Faraday.default_adapter
  end
  @logged_in = false
  @tokens = {}
end

Instance Attribute Details

#logged_inObject Also known as: logged_in?

Returns the value of attribute logged_in.



13
14
15
# File 'lib/mediawiki_api/client.rb', line 13

def logged_in
  @logged_in
end

Instance Method Details

#action(name, params = {}) ⇒ Object



29
30
31
32
33
34
35
36
37
38
# File 'lib/mediawiki_api/client.rb', line 29

def action(name, params = {})
  raw_action(name, params)
rescue ApiError => e
  if e.code == 'badtoken'
    @tokens.clear # ensure fresh token on re-try
    raw_action(name, params) # no rescue this time; only re-try once.
  else
    raise # otherwise, propagate the exception
  end
end

#create_account(username, password, token = nil) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/mediawiki_api/client.rb', line 40

def (username, password, token = nil)
  params = { name: username, password: password, token_type: false }
  params[:token] = token unless token.nil?

  data = action(:createaccount, params).data

  case data['result']
  when 'Success'
    @logged_in = true
    @tokens.clear
  when 'NeedToken'
    data = (username, password, data['token'])
  else
    raise CreateAccountError, data['result']
  end

  data
end

#create_page(title, content) ⇒ Object



59
60
61
# File 'lib/mediawiki_api/client.rb', line 59

def create_page(title, content)
  edit(title: title, text: content)
end

#delete_page(title, reason) ⇒ Object



63
64
65
# File 'lib/mediawiki_api/client.rb', line 63

def delete_page(title, reason)
  action(:delete, title: title, reason: reason)
end

#edit(params = {}) ⇒ Object

Raises:



67
68
69
70
71
# File 'lib/mediawiki_api/client.rb', line 67

def edit(params = {})
  response = action(:edit, params)
  raise EditError, response if response.data['result'] == 'Failure'
  response
end

#get_wikitext(title) ⇒ Object



73
74
75
# File 'lib/mediawiki_api/client.rb', line 73

def get_wikitext(title)
  @conn.get '/w/index.php', action: 'raw', title: title
end

#list(type, params = {}) ⇒ Object



77
78
79
# File 'lib/mediawiki_api/client.rb', line 77

def list(type, params = {})
  subquery(:list, type, params)
end

#log_in(username, password, token = nil) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/mediawiki_api/client.rb', line 81

def (username, password, token = nil)
  params = { lgname: username, lgpassword: password, token_type: false }
  params[:lgtoken] = token unless token.nil?

  data = action(:login, params).data

  case data['result']
  when 'Success'
    @logged_in = true
    @tokens.clear
  when 'NeedToken'
    data = (username, password, data['token'])
  else
    raise LoginError, data['result']
  end

  data
end

#meta(type, params = {}) ⇒ Object



100
101
102
# File 'lib/mediawiki_api/client.rb', line 100

def meta(type, params = {})
  subquery(:meta, type, params)
end

#prop(type, params = {}) ⇒ Object



104
105
106
# File 'lib/mediawiki_api/client.rb', line 104

def prop(type, params = {})
  subquery(:prop, type, params)
end

#protect_page(title, reason, protections = 'edit=sysop|move=sysop') ⇒ Object



108
109
110
# File 'lib/mediawiki_api/client.rb', line 108

def protect_page(title, reason, protections = 'edit=sysop|move=sysop')
  action(:protect, title: title, reason: reason, protections: protections)
end

#query(params = {}) ⇒ Object



112
113
114
# File 'lib/mediawiki_api/client.rb', line 112

def query(params = {})
  action(:query, { token_type: false, http_method: :get }.merge(params))
end

#unwatch_page(title) ⇒ Object



116
117
118
# File 'lib/mediawiki_api/client.rb', line 116

def unwatch_page(title)
  action(:watch, titles: title, unwatch: true)
end

#upload_image(filename, path, comment, ignorewarnings) ⇒ Object



120
121
122
123
124
125
# File 'lib/mediawiki_api/client.rb', line 120

def upload_image(filename, path, comment, ignorewarnings)
  file = Faraday::UploadIO.new(path, 'image/png')
  action(:upload,
         token_type: 'edit', filename: filename, file: file, comment: comment,
         ignorewarnings: ignorewarnings)
end

#watch_page(title) ⇒ Object



127
128
129
# File 'lib/mediawiki_api/client.rb', line 127

def watch_page(title)
  action(:watch, titles: title)
end