mediawiki-butt 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 39a298105810a6c06ffbc2ffe93a7f2583e47454
4
- data.tar.gz: ac4291f2d83dfdf74bdfd7f2364057d558ea6400
3
+ metadata.gz: bbd268a2d756469fbc632169feaeaa48b2eaabea
4
+ data.tar.gz: dad624c4add5afefe4a0dd5bcbcd9b09dbc203d5
5
5
  SHA512:
6
- metadata.gz: b1afc8b4b77984f2b97fd0284f7e01cbc99d437debbd80f7f2fb1ee5dbd9a90e69e679151bac741318efb19a3afa10066b79a36ac86d0399d5ad2e9865adcf10
7
- data.tar.gz: 80e4cd4d90dd99006ec742a7fa4cb0aa3c90590c16715893ab18dabd16b5f74f49ba908fece363190ee0416fd92b052541b40aaf59acdde926e5c6bfb54260dc
6
+ metadata.gz: dc460415bd8589e103c3956c5c24cb4754aef9c0a0395a6b9f5e534a878d68606395797e75f0cb0aa0460eb51fdd72e5fd950209708b316144d478fb2b9afd59
7
+ data.tar.gz: b7cfec3633270b2374c7e219166e6ce917a8632b7605df9d1af34cb7a7233d00601c398a2e08719ce002e54753f07a43016e09808f0f0d501e5575b80367ab68
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
  ## Version 0
3
+ ### Version 0.4.0
4
+ * New get_userrights method for getting an array of all user rights that user has.
5
+ * New get_user_gender method for getting the gender of the provided user.
6
+ * New get_current_user_meta for getting userlists about the currently logged in user. Essentially the equivalent of get_userlists for logged in users.
7
+ * Fix all userlist methods to work without supplying a username.
8
+ * New get_registration_time method to get when the user registered.
9
+ * Update to work with latest version of string-utility.
10
+ * Namespaces are now in a hash instead of just a bunch of variables.
11
+ * Namespace parameters are now actually limited to the valid namespaces constant. It will default to the main namespace (0) if the integer provided is not in the namespaces hash.
12
+ * get_random_pages no longer wrongly sets the rnlimit to the namespaces argument rather than the namespace argument.
13
+
3
14
  ### Version 0.3.1
4
15
  * Fix edit and create_page NoMethodErrors.
5
16
  * Remove dependency for JSON as the version we use is included in the Ruby standard library.
@@ -2,217 +2,218 @@ module MediaWiki
2
2
  module Constants
3
3
  # Constants Namespace IDs. Taken from https://www.mediawiki.org/wiki/Extension_default_namespaces
4
4
  module Namespaces
5
- # Core
6
- $NS_MAIN = 0
7
- $NS_TALK = 1
8
- $NS_USER = 2
9
- $NS_USER_TALK = 3
10
- $NS_PROJECT = 4
11
- $NS_PROJECT_TALK = 5
12
- $NS_FILE = 6
13
- $NS_FILE_TALK = 7
14
- $NS_MEDIAWIKI = 8
15
- $NS_MEDIAWIKI_TALK = 9
16
- $NS_TEMPLATE = 10
17
- $NS_TEMPLATE_TALK = 11
18
- $NS_HELP = 12
19
- $NS_HELP_TALK = 13
20
- $NS_CATEGORY = 14
21
- $NS_CATEGORY_TALK = 15
22
- $NS_SPECIAL = -1
23
- $NS_MEDIA = -2
24
-
25
- # Extension:LiquidThreads
26
- $NS_LQT_THREAD = 90
27
- $NS_LQT_THREAD_TALK = 91
28
- $NS_LQT_SUMMARY = 92
29
- $NS_LQT_SUMMARY_TALK = 93
30
-
31
- # Extension:Semantic MediaWiki / Extension:Semantic Forms
32
- $NS_SMW_RELATION = 100
33
- $NS_SMW_RELATION_TALK = 101
34
- $NS_SMW_PROPERTY = 102
35
- $NS_SMW_PROPERTY_TALK = 103
36
- $NS_SMW_TYPE = 104
37
- $NS_SMW_TYPE_TALK = 105
38
- $NS_SMW_FORM = 106
39
- $NS_SMW_FORM_TALK = 107
40
- $NS_SF_CONCEPT = 108
41
- $NS_SF_CONCEPT_TALK = 109
42
-
43
- # Extension:DPLforum
44
- $NS_DPLF_FORUM = 110
45
- $NS_DPLF_FORUM_TAlK = 111
46
-
47
- # Extension:RefHelper
48
- $NS_RFH_CITE = 120
49
- $NS_RFH_CITE_TALK = 121
50
-
51
- # Extension:SemanticAccessControl
52
- $NS_ACL_USERGROUP = 160
53
- $NS_ACL_ACL = 162
54
-
55
- # Extension:Semantic Drilldown
56
- $NS_SED_FILTER = 170
57
- $NS_SED_FILTER_TALK = 171
58
-
59
- # Extension:SocialProfile
60
- $NS_SCP_USERWIKI = 200
61
- $NS_SCP_USERWIKI_TALK = 201
62
- $NS_SCP_USERPROFILE = 202
63
- $NS_SCP_USERPROFILE_TALK = 203
64
-
65
- # Extension:Proofread Page
66
- $NS_PRP_PAGE = 250
67
- $NS_PRP_PAGE_TALK = 251
68
- $NS_PRP_INDEX = 252
69
- $NS_PRP_INDEX_TALK = 253
70
-
71
- # Extension:TrustedMath
72
- $NS_TRM_MATH = 262
73
- $NS_TRM_MATH_TALK = 263
74
-
75
- # Extension:Widgets
76
- $NS_WID_WIDGET = 274
77
- $NS_WID_WIDGET_TALK = 275
78
-
79
- # Extension:EmbedScript
80
- $NS_EMS_JSAPPLET = 280
81
- $NS_EMS_JSAPPLET_TALK = 281
82
-
83
- # Extension:PollNY
84
- $NS_PLN_POLL = 300
85
- $NS_PLN_POLL_TALK = 301
86
-
87
- # Extension:Semantic Image Annotator
88
- $NS_SIA_IMAGE_ANNOTATOR = 380
89
-
90
- # Extension:Wiki2LaTeX
91
- $NS_WTL_WIKI2LATEX = 400
92
- $NS_WTL_WIKI2LATEX_TALK = 401
93
-
94
- # Extension:Workflow
95
- $NS_WRF_WORKFLOW = 410
96
- $NS_WRF_WORKFLOW_TALK = 411
97
-
98
- # Extension:Maps
99
- $NS_MAP_LAYER = 420
100
- $NS_MAP_LAYER_TALK = 421
101
-
102
- # Extension:QuizTabulate
103
- $NS_QTB_QUIZ = 430
104
- $NS_QTB_QUIZ_TALK = 431
105
-
106
- # Extension:Education Program
107
- $NS_EDP_EDUCATION_PROGRAM = 446
108
- $NS_EDP_EDUCATION_PROGRAM_TALK = 447
109
-
110
- # Extension:BoilerRoom
111
- $NS_BLR_BOILERPLATE = 450
112
- $NS_BLR_BOILERPLATE_TALK = 451
113
-
114
- # Extension:UploadWizard
115
- $NS_UPW_CAMPAIGN = 460
116
- $NS_UPW_CAMPAIGN_TALK = 461
117
-
118
- # Extension:EventLogging
119
- $NS_ELG_SCHEMA = 470
120
- $NS_ELG_SCHEMA_TALK = 471
121
-
122
- # Extension:ZeroBanner
123
- $NS_ZRB_ZERO = 480
124
- $NS_ZRB_ZERO_TALK = 481
125
-
126
- # Extension:JsonConfig
127
- $NS_JSC_CONFIG = 482
128
- $NS_JSC_CONFIG_TALK = 483
129
- $NS_JSC_DATA = 486
130
- $NS_JSC_DATA_TALK = 487
131
-
132
- # Extension:Graph
133
- $NS_GRP_GRAPH = 484
134
- $NS_GRP_GRAPH_TALK = 485
135
-
136
- # Extension:OpenStackManager
137
- $NS_OSM_NOVA_RESOURCE = 488
138
- $NS_OSM_NOVA_RESOURCE_TALK = 489
139
-
140
- # Extension:GWToolset
141
- $NS_GWT_GWTOOLSET = 490
142
- $NS_GWT_GWTOOLSET_TALK = 491
143
-
144
- # Extension:BlogPage
145
- $NS_BLP_BLOG = 500
146
- $NS_BLP_BLOG_TALK = 501
147
-
148
- # Extension:XMLContentExtension
149
- $NS_XCE_XML = 580
150
- $NS_XCE_XML_TALK = 581
151
- $NS_XCE_SCHEMA = 582
152
- $NS_XCE_SCHEMA_TALK = 583
153
-
154
- # Extension:FanBoxes
155
- $NS_FNB_USERBOX = 600
156
- $NS_FNB_USERBOX_TALK = 601
157
-
158
- # Extension:LinkFilter
159
- $NS_LFT_LINK = 700
160
- $NS_LFT_LINK_TALK = 701
161
-
162
- # Extension:TimedMediaHandler
163
- $NS_TMH_TIMEDTEXT = 710
164
- $NS_TMH_TIMEDTEXT_TALK = 711
165
-
166
- # Extension:QPoll
167
- $NS_QPL_INTERPRETATION = 800
168
- $NS_QPL_INTERPRETATION_TALK = 801
169
-
170
- # Extension:SemanticMustacheFormat :3
171
- $NS_SMF_MUSTACHE = 806
172
- $NS_SMF_MUSTACHE_TALK = 807
173
-
174
- # Extension:R
175
- $NS_R_R = 814
176
- $NS_R_R_TALK = 815
177
-
178
- # Extension:Scribunto
179
- $NS_SCR_MODULE = 828
180
- $NS_SCR_MODULE_TALK = 829
181
-
182
- # Extension:SecurePoll
183
- $NS_SEP_SECUREPOLL = 830
184
- $NS_SEP_SECUREPOLL_TALK = 831
185
-
186
- # Extension:CentralNotice
187
- $NS_CNT_CNBANNER = 866
188
- $NS_CNT_CNBANNER_TALK = 867
189
-
190
- # Extension:Translate
191
- $NS_TRN_TRANSLATIONS = 1198
192
- $NS_TRN_TRANSLATIONS_TALK = 1199
193
-
194
- # Extension:PackageForce
195
- $NS_PKF_PACKAGEFORCE = 1300
196
- $NS_PKF_PACKAGEFORCE_TALK = 1301
197
-
198
- # Extension:BlueSpice
199
- $NS_BLS_BLOG = 1502
200
- $NS_BLS_BLOG_TALK = 1503
201
- $NS_BLS_BOOK = 1504
202
- $NS_BLS_BOOK_TALK = 1505
203
-
204
- # Extension:Gadgets
205
- $NS_GDG_GADGET = 2300
206
- $NS_GDG_GADGET_TALK = 2301
207
- $NS_GDG_GADGET_DEFININTION = 2302
208
- $NS_GDG_GADGET_DEFININTION_TALK = 2303
209
-
210
- # Extension:VisualEditor
211
- $NS_VSE_VISUALEDITOR = 2500
212
- $NS_VSE_VISUALEDITOR_TALK = 2501
213
-
214
- # Extension:Flow
215
- $NS_FLW_TOPIC = 2600
5
+ $namespaces = {
6
+ "MAIN": 0,
7
+ "TALK": 1,
8
+ "USER": 2,
9
+ "USER_TALK": 3,
10
+ "PROJECT": 4,
11
+ "PROJECT_TALK": 5,
12
+ "FILE": 6,
13
+ "FILE_TALK": 7,
14
+ "MEDIAWIKI": 8,
15
+ "MEDIAWIKI_TALK": 9,
16
+ "TEMPLATE": 10,
17
+ "TEMPLATE_TALK": 11,
18
+ "HELP": 12,
19
+ "HELP_TALK": 13,
20
+ "CATEGORY": 14,
21
+ "CATEGORY_TALK": 15,
22
+ "SPECIAL": -1,
23
+ "MEDIA": -2,
24
+
25
+ # Extension:LiquidThreads
26
+ "LQT_THREAD": 90,
27
+ "LQT_THREAD_TALK": 91,
28
+ "LQT_SUMMARY": 92,
29
+ "LQT_SUMMARY_TALK": 93,
30
+
31
+ # Extension:Semantic MediaWiki / Extension:Semantic Forms
32
+ "SMW_RELATION": 100,
33
+ "SMW_RELATION_TALK": 101,
34
+ "SMW_PROPERTY": 102,
35
+ "SMW_PROPERTY_TALK": 103,
36
+ "SMW_TYPE": 104,
37
+ "SMW_TYPE_TALK": 105,
38
+ "SMW_FORM": 106,
39
+ "SMW_FORM_TALK": 107,
40
+ "SF_CONCEPT": 108,
41
+ "SF_CONCEPT_TALK": 109,
42
+
43
+ # Extension:DPLforum
44
+ "DPLF_FORUM": 110,
45
+ "DPLF_FORUM_TAlK": 111,
46
+
47
+ # Extension:RefHelper
48
+ "RFH_CITE": 120,
49
+ "RFH_CITE_TALK": 121,
50
+
51
+ # Extension:SemanticAccessControl
52
+ "ACL_USERGROUP": 160,
53
+ "ACL_ACL": 162,
54
+
55
+ # Extension:Semantic Drilldown
56
+ "SED_FILTER": 170,
57
+ "SED_FILTER_TALK": 171,
58
+
59
+ # Extension:SocialProfile
60
+ "SCP_USERWIKI": 200,
61
+ "SCP_USERWIKI_TALK": 201,
62
+ "SCP_USERPROFILE": 202,
63
+ "SCP_USERPROFILE_TALK": 203,
64
+
65
+ # Extension:Proofread Page
66
+ "PRP_PAGE": 250,
67
+ "PRP_PAGE_TALK": 251,
68
+ "PRP_INDEX": 252,
69
+ "PRP_INDEX_TALK": 253,
70
+
71
+ # Extension:TrustedMath
72
+ "TRM_MATH": 262,
73
+ "TRM_MATH_TALK": 263,
74
+
75
+ # Extension:Widgets
76
+ "WID_WIDGET": 274,
77
+ "WID_WIDGET_TALK": 275,
78
+
79
+ # Extension:EmbedScript
80
+ "EMS_JSAPPLET": 280,
81
+ "EMS_JSAPPLET_TALK": 281,
82
+
83
+ # Extension:PollNY
84
+ "PLN_POLL": 300,
85
+ "PLN_POLL_TALK": 301,
86
+
87
+ # Extension:Semantic Image Annotator
88
+ "SIA_IMAGE_ANNOTATOR": 380,
89
+
90
+ # Extension:Wiki2LaTeX
91
+ "WTL_WIKI2LATEX": 400,
92
+ "WTL_WIKI2LATEX_TALK": 401,
93
+
94
+ # Extension:Workflow
95
+ "WRF_WORKFLOW": 410,
96
+ "WRF_WORKFLOW_TALK": 411,
97
+
98
+ # Extension:Maps
99
+ "MAP_LAYER": 420,
100
+ "MAP_LAYER_TALK": 421,
101
+
102
+ # Extension:QuizTabulate
103
+ "QTB_QUIZ": 430,
104
+ "QTB_QUIZ_TALK": 431,
105
+
106
+ # Extension:Education Program
107
+ "EDP_EDUCATION_PROGRAM": 446,
108
+ "EDP_EDUCATION_PROGRAM_TALK": 447,
109
+
110
+ # Extension:BoilerRoom
111
+ "BLR_BOILERPLATE": 450,
112
+ "BLR_BOILERPLATE_TALK": 451,
113
+
114
+ # Extension:UploadWizard
115
+ "UPW_CAMPAIGN": 460,
116
+ "UPW_CAMPAIGN_TALK": 461,
117
+
118
+ # Extension:EventLogging
119
+ "ELG_SCHEMA": 470,
120
+ "ELG_SCHEMA_TALK": 471,
121
+
122
+ # Extension:ZeroBanner
123
+ "ZRB_ZERO": 480,
124
+ "ZRB_ZERO_TALK": 481,
125
+
126
+ # Extension:JsonConfig
127
+ "JSC_CONFIG": 482,
128
+ "JSC_CONFIG_TALK": 483,
129
+ "JSC_DATA": 486,
130
+ "JSC_DATA_TALK": 487,
131
+
132
+ # Extension:Graph
133
+ "GRP_GRAPH": 484,
134
+ "GRP_GRAPH_TALK": 485,
135
+
136
+ # Extension:OpenStackManager
137
+ "OSM_NOVA_RESOURCE": 488,
138
+ "OSM_NOVA_RESOURCE_TALK": 489,
139
+
140
+ # Extension:GWToolset
141
+ "GWT_GWTOOLSET": 490,
142
+ "GWT_GWTOOLSET_TALK": 491,
143
+
144
+ # Extension:BlogPage
145
+ "BLP_BLOG": 500,
146
+ "BLP_BLOG_TALK": 501,
147
+
148
+ # Extension:XMLContentExtension
149
+ "XCE_XML": 580,
150
+ "XCE_XML_TALK": 581,
151
+ "XCE_SCHEMA": 582,
152
+ "XCE_SCHEMA_TALK": 583,
153
+
154
+ # Extension:FanBoxes
155
+ "FNB_USERBOX": 600,
156
+ "FNB_USERBOX_TALK": 601,
157
+
158
+ # Extension:LinkFilter
159
+ "LFT_LINK": 700,
160
+ "LFT_LINK_TALK": 701,
161
+
162
+ # Extension:TimedMediaHandler
163
+ "TMH_TIMEDTEXT": 710,
164
+ "TMH_TIMEDTEXT_TALK": 711,
165
+
166
+ # Extension:QPoll
167
+ "QPL_INTERPRETATION": 800,
168
+ "QPL_INTERPRETATION_TALK": 801,
169
+
170
+ # Extension:SemanticMustacheFormat :3,
171
+ "SMF_MUSTACHE": 806,
172
+ "SMF_MUSTACHE_TALK": 807,
173
+
174
+ # Extension:R
175
+ "R_R": 814,
176
+ "R_R_TALK": 815,
177
+
178
+ # Extension:Scribunto
179
+ "SCR_MODULE": 828,
180
+ "SCR_MODULE_TALK": 829,
181
+
182
+ # Extension:SecurePoll
183
+ "SEP_SECUREPOLL": 830,
184
+ "SEP_SECUREPOLL_TALK": 831,
185
+
186
+ # Extension:CentralNotice
187
+ "CNT_CNBANNER": 866,
188
+ "CNT_CNBANNER_TALK": 867,
189
+
190
+ # Extension:Translate
191
+ "TRN_TRANSLATIONS": 1198,
192
+ "TRN_TRANSLATIOTALK": 1199,
193
+
194
+ # Extension:PackageForce
195
+ "PKF_PACKAGEFORCE": 1300,
196
+ "PKF_PACKAGEFORCE_TALK": 1301,
197
+
198
+ # Extension:BlueSpice
199
+ "BLS_BLOG": 1502,
200
+ "BLS_BLOG_TALK": 1503,
201
+ "BLS_BOOK": 1504,
202
+ "BLS_BOOK_TALK": 1505,
203
+
204
+ # Extension:Gadgets
205
+ "GDG_GADGET": 2300,
206
+ "GDG_GADGET_TALK": 2301,
207
+ "GDG_GADGET_DEFININTION": 2302,
208
+ "GDG_GADGET_DEFININTION_TALK": 2303,
209
+
210
+ # Extension:VisualEditor
211
+ "VSE_VISUALEDITOR": 2500,
212
+ "VSE_VISUALEDITOR_TALK": 2501,
213
+
214
+ # Extension:Flow
215
+ "FLW_TOPIC": 2600
216
+ }
216
217
  end
217
218
  end
218
219
  end
@@ -1,9 +1,11 @@
1
1
  require 'string-utility'
2
+ require_relative 'constants'
2
3
 
3
4
  module MediaWiki
4
5
  module Query
5
6
  #TODO: Actually decide on a good way to deal with meta information queries.
6
7
  # The metainformation could probably be handled in a much less verbose way.
8
+ # Perhaps we should get hashes instead?
7
9
  module Meta
8
10
 
9
11
  # Returns an array of all the wiki's file repository names.
@@ -23,6 +25,25 @@ module MediaWiki
23
25
  end
24
26
  return ret
25
27
  end
28
+
29
+ # Gets meta information for the currently logged in user.
30
+ # @param prop [String] The uiprop to get.
31
+ # @return [Response/Boolean] Either a full, parsed response, or false if not logged in.
32
+ def get_current_user_meta(prop)
33
+ if @logged_in == true
34
+ params = {
35
+ action: 'query',
36
+ meta: 'userinfo',
37
+ uiprop: prop,
38
+ format: 'json'
39
+ }
40
+
41
+ response = post(params)
42
+ return response
43
+ else
44
+ return false
45
+ end
46
+ end
26
47
  end
27
48
 
28
49
  module Properties
@@ -100,6 +121,7 @@ module MediaWiki
100
121
  end
101
122
 
102
123
  module Lists
124
+ using StringUtility
103
125
 
104
126
  # Gets an array of backlinks to a given title.
105
127
  # @param title [String] The page to get the backlinks of.
@@ -185,9 +207,13 @@ module MediaWiki
185
207
  format: 'json'
186
208
  }
187
209
 
188
- params[:rnnamespace] = namespace if namespace != nil
210
+ if $namespaces.has_value?(namespace)
211
+ params[:rnnamespace] = namespace
212
+ else
213
+ params[:rnnamespace] = 0
214
+ end
189
215
 
190
- if namespace > 10
216
+ if number_of_pages > 10
191
217
  if is_user_bot? == true
192
218
  if limit > 20
193
219
  params[:rnlimit] = 20
@@ -198,7 +224,7 @@ module MediaWiki
198
224
  params[:rnlimit] = 10
199
225
  end
200
226
  else
201
- params[:rnlimit] = namespace
227
+ params[:rnlimit] = number_of_pages
202
228
  end
203
229
 
204
230
  ret = Array.new
@@ -214,47 +240,76 @@ module MediaWiki
214
240
  # @param username [String] The username to get info for. Optional. Defaults to the currently logged in user if ommitted.
215
241
  # @return [String/Nil] Parsed full response if successful, nil if the username is nil and the Butt is not logged in.
216
242
  def get_userlists(prop, username = nil)
217
- params = {
218
- action: 'query',
219
- list: 'users',
220
- usprop: prop,
221
- format: 'json'
222
- }
223
-
224
243
  if username.nil?
225
244
  if @logged_in == true
226
- response = post(params)
245
+ response = get_current_user_meta(prop)
227
246
  else
228
- return nil
247
+ return false
229
248
  end
230
249
  else
231
- params[:ususers] = username
250
+ params = {
251
+ action: 'query',
252
+ list: 'users',
253
+ usprop: prop,
254
+ ususers: username,
255
+ format: 'json'
256
+ }
257
+
232
258
  response = post(params)
233
259
  end
234
260
 
235
261
  return response
236
262
  end
237
263
 
238
- # Gets an array of all the currently logged in user's groups.
264
+ # Gets an array of all the user's groups.
239
265
  # @param username [String] The username to get groups of. Optional. Defaults to the currently logged in user.
240
266
  # @return [Array/Boolean] All of the user's groups, or false if username is nil and Butt is not logged in.
241
267
  def get_usergroups(username = nil)
268
+ ret = Array.new
242
269
  if username.nil?
243
270
  if @logged_in == true
244
271
  info = get_userlists('groups')
272
+ info["query"]["userinfo"]["groups"].each do |i|
273
+ ret.push(i)
274
+ end
245
275
  else
246
276
  return false
247
277
  end
248
278
  else
249
279
  info = get_userlists('groups', username)
280
+ info["query"]["users"].each do |i|
281
+ i["groups"].each do |g|
282
+ ret.push(g)
283
+ end
284
+ end
250
285
  end
251
286
 
287
+ return ret
288
+ end
289
+
290
+ # Gets the user rights for the user.
291
+ # @param username [String] The user to get the rights for. Optional. Defaults to the currently logged in user.
292
+ # @return [Array/Boolean] All of the user's groups, or false if username is nil and Butt is not logged in.
293
+ def get_userrights(username = nil)
252
294
  ret = Array.new
253
- info["query"]["users"].each do |i|
254
- i["groups"].each do |g|
255
- ret.push(g)
295
+ if username.nil?
296
+ if @logged_in == true
297
+ info = get_userlists('rights')
298
+ info["query"]["userinfo"]["rights"].each do |i|
299
+ ret.push(i)
300
+ end
301
+ else
302
+ return false
303
+ end
304
+ else
305
+ info = get_userlists('rights', username)
306
+ info["query"]["users"].each do |i|
307
+ i["rights"].each do |g|
308
+ ret.push(g)
309
+ end
256
310
  end
257
311
  end
312
+
258
313
  return ret
259
314
  end
260
315
 
@@ -263,27 +318,116 @@ module MediaWiki
263
318
  # @param autoparse [Boolean] Whether to automatically format the string with commas. Defaults to true.
264
319
  # @return [Boolean/Int/String] False if username is nil and Butt is not logged in. An integer value of the contribution count if autoparse is false. A formatted string version of the contribution count if autoparse is true.
265
320
  def get_contrib_count(username = nil, autoparse = true)
321
+ count = nil
266
322
  if username.nil?
267
323
  if @logged_in == true
268
324
  info = get_userlists('editcount')
325
+ count = info["query"]["userinfo"]["editcount"]
269
326
  else
270
327
  return false
271
328
  end
272
329
  else
273
330
  info = get_userlists('editcount', username)
274
- end
275
-
276
- count = nil
277
- info["query"]["users"].each do |i|
278
- count = i["editcount"]
331
+ info["query"]["users"].each do |i|
332
+ count = i["editcount"]
333
+ end
279
334
  end
280
335
 
281
336
  if autoparse == true
282
- countstring = StringUtility.separate_with(count.to_s)
337
+ countstring = count.to_s.separate
283
338
  return countstring
284
339
  end
285
340
  return count
286
341
  end
342
+
343
+ # Gets when the user registered.
344
+ # @param username [String] The username to get the registration date and time of. Optional. Defaults to the currently logged in user.
345
+ # @return [DateTime] The registration date and time as a DateTime object.
346
+ def get_registration_time(username = nil)
347
+ time = nil
348
+ # Do note that in Userinfo, registration is called registrationdate.
349
+ if username.nil?
350
+ if @logged_in == true
351
+ info = get_userlists('registrationdate')
352
+ time = info["query"]["userinfo"]["registrationdate"]
353
+ else
354
+ return false
355
+ end
356
+ else
357
+ info = get_userlists('registration', username)
358
+ info["query"]["users"].each do |i|
359
+ time = i["registration"]
360
+ end
361
+ end
362
+
363
+ # %Y: Year including century, %m: Month num, %d day of month, %T Time as H:M:S
364
+ timeformat = "%Y-%m-%dT%T"
365
+ time = DateTime.strptime(time, timeformat)
366
+ return time
367
+ end
368
+
369
+ # Gets the gender for the provded user.
370
+ # @param username [String] The user.
371
+ # @return [String] The gender. "male", "female", or "unknown".
372
+ def get_user_gender(username)
373
+ gender = nil
374
+ info = get_userlists('gender', username)
375
+ info["query"]["users"].each do |i|
376
+ gender = i["gender"]
377
+ end
378
+
379
+ return gender
380
+ end
381
+
382
+ # Gets the amount of results for the search value.
383
+ # @param search_value [String] The thing to search for.
384
+ # @param namespace [Int] The namespace to search in. Defaults to the main namespace.
385
+ # @return [Int] The number of pages that matched the search.
386
+ def get_search_result_amount(search_value, namespace = 0)
387
+ params = {
388
+ action: 'query',
389
+ list: 'search',
390
+ srsearch: search_value,
391
+ format: 'json'
392
+ }
393
+
394
+ if $namespaces.has_value?(namespace)
395
+ params[:srnamespace] = namespace
396
+ else
397
+ params[:srnamespace] = 0
398
+ end
399
+
400
+ response = post(params)
401
+
402
+ return response["query"]["searchinfo"]["totalhits"]
403
+ end
404
+
405
+ # Gets an array containing page titles that matched the search.
406
+ # @param search_value [String] The thing to search for.
407
+ # @param namespace [Int] The namespace to search in. Defaults to the main namespace.
408
+ # @return [Array] The page titles that matched the search.
409
+ def get_search_results(search_value, namespace = 0)
410
+ params = {
411
+ action: 'query',
412
+ list: 'search',
413
+ srsearch: search_value,
414
+ format: 'json'
415
+ }
416
+
417
+ if $namespaces.has_value?(namespace)
418
+ params[:srnamespace] = namespace
419
+ else
420
+ params[:srnamespace] = 0
421
+ end
422
+
423
+ response = post(params)
424
+
425
+ ret = Array.new
426
+ response["query"]["search"].each do |search|
427
+ ret.push(search["title"])
428
+ end
429
+ return ret
430
+ end
287
431
  end
288
432
  end
289
433
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mediawiki-butt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eli Foster
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-10-02 00:00:00.000000000 Z
12
+ date: 2015-10-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: string-utility
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 1.0.1
20
+ version: 2.0.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: 1.0.1
27
+ version: 2.0.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: httpclient
30
30
  requirement: !ruby/object:Gem::Requirement