mediawiki-butt 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a7fcf2ef47e61692db61d985c91b7cd22bcc1051
4
- data.tar.gz: d806db7d3a63c4654322b30cae4ae98ce68e2eb9
3
+ metadata.gz: df04952bdb2d1140a9043e184d00306437d76f8f
4
+ data.tar.gz: 4fc43b654cb22b125f3aa8762c1365658b00c301
5
5
  SHA512:
6
- metadata.gz: 31c4e56c5104e4758fbe710bdec577feb3c16a2f9c620a9ccd45fbd8b47afa10e19027b114c2c06c9a6363822b1de964e0d7e7c84640ec33ef85414250964a9d
7
- data.tar.gz: 915a073ac9f0d9654e46f4976b352c2318a56c939be7e1282bd8099c67f2a2c054af735d28342ee601f1aab27d76537897b52c57e42f15c26c187aa15692789a
6
+ metadata.gz: e17acafbe7a11c7d51c75fc96d69f2d4b709ac386b27cf5e0117bd4dbe352884783c46594eb5b8435435eadbea19430afb227fce3df27387a29449eb0c3e08df
7
+ data.tar.gz: c716d6a0a2d6e3c589f1b155d6d7a3a62ff8ac6552e25803d8e5a7a0a050a73c11a1f6197e3cc93f517ca9caf6592bb4b0d118fb94e98fe4d354a450b327ef04
@@ -0,0 +1,250 @@
1
+ # Changelog
2
+ ## Version 0
3
+ ### Version 0.10.0
4
+ * Remove all incorrectly splatted method arguments, so account creation reasons and edit summaries work now (#12).
5
+ * Support a bunch of more Lists (#17). All of the old methods still exist in various submodules. The new methods are:
6
+ * Log:
7
+ * get_interwiki_backlinks
8
+ * get_language_backlinks
9
+ * get_image_backlinks
10
+ * get_url_backlinks
11
+ * get_block_log
12
+ * get_reblock_log
13
+ * get_unblock_log
14
+ * get_delete_log
15
+ * get_deletion_restore_log
16
+ * get_interwiki_import_log
17
+ * get_upload_import_log
18
+ * get_overall_log
19
+ * get_merge_log
20
+ * get_move_log
21
+ * get_move_redirect_log
22
+ * get_autocreate_users_log
23
+ * get_user_create2_log
24
+ * get_user_create2_log
25
+ * get_patrol_log
26
+ * get_modify_protection_log
27
+ * get_move_protected_log
28
+ * get_protect_log
29
+ * get_unprotect_log
30
+ * get_autopromotion_log
31
+ * get_rights_log
32
+ * get_upload_overwrite_log
33
+ * get_upload_log
34
+ * The logs not explicitly supported (they are still supported in get_overall_log) are:
35
+ * upload/revert
36
+ * rights/erevoke
37
+ * delete/event
38
+ * delete/revision
39
+ * Miscellaneous:
40
+ * get_tags
41
+ * QueryPage:
42
+ * get_mostrevisions_page
43
+ * get_mostlinked_page
44
+ * get_mostlinkedtemplates_page
45
+ * get_mostlinkedcategories_page
46
+ * get_mostinterwikis_page
47
+ * get_mostimages_page
48
+ * get_mostlinkedcategories_page
49
+ * get_listduplicatedfiles_page
50
+ * get_listredirects_page
51
+ * get_wantedtemplates_page
52
+ * get_wantedpages_page
53
+ * get_wantedfiles_page
54
+ * get_wantedcategories_page
55
+ * get_unwatchedpages_page
56
+ * get_unusedtemplates_page
57
+ * get_unusedcategories_page
58
+ * get_uncategorizedtemplates_page
59
+ * get_uncategorizedpages_page
60
+ * get_uncategorizedcategories_page
61
+ * get_shortpages_page
62
+ * get_withoutinterwiki_page
63
+ * get_fewestrevisions_page
64
+ * get_lonelypages_page
65
+ * get_ancientpages_page
66
+ * get_longpages_page
67
+ * get_doubleredirects_page
68
+ * get_brokenredirects_page
69
+ * get_querypage
70
+ * RecentChanges:
71
+ * get_recent_changes
72
+ * get_recent_deleted_revisions
73
+ * Search
74
+ * get_prefix_search
75
+ * New constant MediaWiki::Constants::TIME_FORMAT for the standard MediaWiki timestamp format.
76
+ * Improve performance slightly by using Array#<< instead of Array#push.
77
+
78
+ ### Version 0.9.0
79
+ * get_category_members has a new parameter, type, which can be used to get more data in a single result.
80
+ * get_category_members no longer gets files and subcategories by default. Use the above to get more data at once.
81
+ * New get_subcategories and get_files_in_category for specifically getting files or subcategories.
82
+
83
+ ### Version 0.8.2
84
+ * Fix outdated usage of @namespaces variable, causing a NoMethodError on get_random_pages calls.
85
+ * Greatly improved documentation.
86
+
87
+ ### Version 0.8.1
88
+ * Fix get_limited's NoMethodError on user_bot?
89
+ * Fix user_bot? always returning false.
90
+
91
+ ### Version 0.8.0
92
+ * A ton of property query methods (#7). View their docs for info:
93
+ * get_all_links_in_page
94
+ * get_other_langs_of_page
95
+ * get_interwiki_links_in_page
96
+ * get_templates_in_page
97
+ * get_images_in_page
98
+ * get_page_size
99
+ * get_protection_levels
100
+ * get_display_title
101
+ * get_number_of_watchers
102
+ * page_new?
103
+ * page_redirect?
104
+ * can_i_read?
105
+ * do_i_watch?
106
+ * get_external_links
107
+ * get_duplicated_files_of
108
+ * get_image_bytes
109
+ * get_image_dimensions
110
+ * get_image_sizes
111
+ * A ton of list query methods (#8). View their docs for info:
112
+ * get_all_pages_in_namespace
113
+ * get_all_users
114
+ * get_all_blocks
115
+ * get_all_transcluders
116
+ * get_all_deleted_files
117
+ * get_all_protected_titles
118
+ * get_user_contributions
119
+ * get_full_watchlist
120
+ * get_all_duplicated_files
121
+ * Fix a NoMethodError on what_links_here caused by not actually setting the list in that query (#14).
122
+ * User-Agents are optionally customizable in the MediaWiki::Butt initialization. If this is not used, the old defaults will still be used ('NotLoggedIn/MediaWiki-Butt' and 'Username/MediaWiki-Butt') (#13).
123
+ * Fix @returns in docs.
124
+ * Got rid of false things in docs.
125
+ * Remove dependency on string-utility. That should be something the user does on their end.
126
+ * get_contrib_count no longer has a second parameter, because of the above change.
127
+ * Fix open-ended dependency for HTTPClient.
128
+ * New get_logged_in_contributors method for getting all logged in user's usernames that have contributed to a page.
129
+ * New get_total_contributors method for getting the total number of contributors to a page.
130
+ * Refactor Properties to be more like Meta.
131
+ * New get_limited protected method that limits the 'limit' parameter for queries. It's essentially just reducing duplicated code.
132
+ * Remove all global variables. MediaWiki::Constants::Namespaces' $namespaces is now MediaWiki::Constants with the hash being defined as NAMESPACES (#10).
133
+
134
+ ### Version 0.7.0
135
+ * upload's filename argument is no longer splat, because arrays.
136
+ * Fix incorrect regex $ when ^ should be used in upload.
137
+ * New get_all_categories method.
138
+ * New get_all_images method.
139
+ * Fix broken user_bot? calls.
140
+ * user_bot? returns false when not logged in and username is not set.
141
+ * Refactor Query module to have its own folder, and subfolder for meta. This shouldn't change anything on the user's end.
142
+ * A couple methods no longer stupidly print stuff.
143
+ * New get_categories_in_page method.
144
+
145
+ ### Version 0.6.0
146
+ * Slightly expanded Gem description.
147
+ * Finished all Meta modules and their methods, except for the allmessages meta query. [#6](https://github.com/ftb-gamepedia/mediawiki-butt-ruby/issues/6)
148
+ * New get_variables method.
149
+ * New get_function_hooks method.
150
+ * New get_extension_tags method.
151
+ * New get_skins method.
152
+ * New get_restriction_levels method.
153
+ * New get_restriction_types method.
154
+ * New get_restrictions_data method for the above methods.
155
+ * New get_allowed_file_extensions method, and refactored #upload to only allow files with those extensions.
156
+ * New get_all_usergroups method.
157
+ * New get_magic_words method.
158
+ * New get_special_page_aliases method.
159
+ * New get_namespace_aliases method.
160
+ * New get_namespaces method.
161
+ * New get_filerepo_favicons method.
162
+ * New get_filerepo_thumburls method.
163
+ * New get_nonlocal_filerepos method.
164
+ * New get_local_filerepos method.
165
+ * New get_filerepo_urls method.
166
+ * New get_filerepo_rooturls method.
167
+ * Refactor get_filerepo_names to use new get_filerepoinfo method.
168
+ * New get_filerepoinfo method, in a similar style to get_userlists.
169
+ * New get_current_user_options for getting a hash containing all of the currently logged in user's preferences.
170
+ * New get_email_address method for getting the currently logged in user's email address.
171
+ * New get_realname method for getting the currently logged in user's real name.
172
+ * New get_changeable_groups method for getting the currently logged in user's groups that they can change (add/remove people from)
173
+ * New current_user_hasmsg? method for checking if the user has any unread messages.
174
+ * check_login no longer returns false, ever, because any code after a fail is unreachable.
175
+ * prop parameter in get_current_user_meta is now optional, for get_current_user_name.
176
+ * New get_current_user_name method, for getting the currently logged in user's username.
177
+ * New get_siteinfo method, in a similar style to get_userlists.
178
+ * New get_statistics method, for getting a hash of the wiki's statistics.
179
+ * New get_general method, for getting hash of the 'general' wiki information.
180
+ * New get_extensions method, for getting an array of all extension names installed.
181
+ * New get_languages method, for getting a hash of all the languages, formatted as code => name.
182
+ * User-Agent header is now set for each post. It defaults to 'NotLoggedIn/MediaWiki::Butt', or "#{name}/MediaWiki::Butt" if logged in. This might cause some slight performance issues ([#5](https://github.com/FTB-Gamepedia/MediaWiki-Butt-Ruby/issues/5))
183
+
184
+ ### Version 0.5.0
185
+ * New Administration module for administrative methods.
186
+ * New block and unblock methods, for (un)blocking users.
187
+ * Refactor token stuff. It still doesn't work exactly how I'd like yet, but it's better than it was before. Ideally I'd like to have it get the login-specific tokens on login and set them to some well-named instance variables. Then clear those on logout.
188
+ * Single-line each `do end` loops have been converted into `{...}` style loops.
189
+ * New delete method for deleting pages.
190
+ * New move method for moving pages.
191
+
192
+ ### Version 0.4.1
193
+ * params[:format] is now automatically set to 'json', so it no longer needs to be defined in each method.
194
+ * Fixed a lot of styling issues thanks to Rubocop.
195
+ * check_login and check_create now use case/when statements instead of elsifs.
196
+ * check_create no longer returns anything.
197
+ * Update minimum Ruby version to 2.1, for refinements.
198
+ * Fix $namespaces hash syntax.
199
+ * Generally improved if statement syntax.
200
+ * Generally shortened a lot of code by using better syntax.
201
+
202
+ ### Version 0.4.0
203
+ * New get_userrights method for getting an array of all user rights that user has.
204
+ * New get_user_gender method for getting the gender of the provided user.
205
+ * New get_current_user_meta for getting userlists about the currently logged in user. Essentially the equivalent of get_userlists for logged in users.
206
+ * Fix all userlist methods to work without supplying a username.
207
+ * New get_registration_time method to get when the user registered.
208
+ * Update to work with latest version of string-utility.
209
+ * Namespaces are now in a hash instead of a bunch of variables.
210
+ * 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.
211
+ * get_random_pages no longer wrongly sets the rnlimit to the namespaces argument rather than the namespace argument.
212
+
213
+ ### Version 0.3.1
214
+ * Fix edit and create_page NoMethodErrors.
215
+ * Remove dependency for JSON as the version we use is included in the Ruby standard library.
216
+
217
+ ### Version 0.3.0
218
+ * New upload method to upload by URL.
219
+ * New create_page method.
220
+ * New get_userlists method.
221
+ * New get_usergroups method.
222
+ * New get_contrib_count method.
223
+ * Refactor get_usergroups and is_current_user_bot? to use new get_userinfo method.
224
+ * Minor refactors to make optional arguments more Ruby-like with splat arguments.
225
+ * #edit no longer prints the edit token, because that's stupid.
226
+ * #edit no longer sets the summary if it is nil.
227
+
228
+ ### Version 0.2.1
229
+ * Fix gemspec. You should actually have the new stuff now.
230
+
231
+ ### Version 0.2.0
232
+ * New get_id method to get the pageid from the title.
233
+ * New get_random_pages method to get an array of random articles.
234
+ * New Namespace module full of constants.
235
+ * is_current_user_bot is now called as is_current_user_bot?.
236
+ * New get_edit_token method for obtaining an edit token based on the page title.
237
+ * New edit method and module for editing pages.
238
+ * Fix logout parsing error
239
+
240
+ ### Version 0.1.1
241
+ * Got rid of pointless array in is_current_user_bot
242
+ * Potentially fixed docs
243
+ * Raise errors on unsuccessful account creation
244
+ * #login properly returns true if the login is successful on the first try
245
+ * #logout returns true/false if it logs the user out. Basically returns true if @logged_in is true, and false if not, because the logout action has no errors.
246
+ * Account creation stuff actually returns true/false on success/fail. It also handles errors now.
247
+ * Better Category title regex in get_category_members
248
+
249
+ ### Version 0.1.0
250
+ * Initial version.
@@ -177,14 +177,14 @@ module MediaWiki
177
177
  # Creation Docs
178
178
  # @since 0.1.0
179
179
  # @return [Boolean] True if successful, false if not.
180
- def create_account(username, password, language = 'en', *reason)
180
+ def create_account(username, password, language = 'en', reason = nil)
181
181
  params = {
182
182
  name: username,
183
183
  password: password,
184
- reason: reason,
185
184
  language: language,
186
185
  token: ''
187
186
  }
187
+ params[:reason] = reason unless reason.nil?
188
188
 
189
189
  result = post(params)
190
190
  unless result['error'].nil?
@@ -229,15 +229,15 @@ module MediaWiki
229
229
  # Creation Docs
230
230
  # @since 0.1.0
231
231
  # @return [Boolean] True if successful, false if not.
232
- def create_account_email(username, email, language = 'en', *reason)
232
+ def create_account_email(username, email, language = 'en', reason = nil)
233
233
  params = {
234
234
  name: username,
235
235
  email: email,
236
236
  mailpassword: 'value',
237
- reason: reason,
238
237
  language: language,
239
238
  token: ''
240
239
  }
240
+ params[:reason] = reason unless reason.nil?
241
241
 
242
242
  result = post(params)
243
243
  unless result['error'].nil?
@@ -217,5 +217,8 @@ module MediaWiki
217
217
  # Extension:Flow
218
218
  'FLW_TOPIC' => 2600
219
219
  }
220
+
221
+ # This is the most common time format that MediaWiki uses.
222
+ TIME_FORMAT = '%Y-%m-%dT%H:%M:%SZ'
220
223
  end
221
224
  end
@@ -13,7 +13,7 @@ module MediaWiki
13
13
  # @see https://www.mediawiki.org/wiki/API:Edit MediaWiki Edit API Docs
14
14
  # @since 0.2.0
15
15
  # @return [String] The new revision ID, or if it failed, the error code.
16
- def edit(title, text, minor = false, bot = true, *summary)
16
+ def edit(title, text, minor = false, bot = true, summary = nil)
17
17
  params = {
18
18
  action: 'edit',
19
19
  title: title,
@@ -24,7 +24,7 @@ module MediaWiki
24
24
 
25
25
  token = get_token('edit', title)
26
26
 
27
- params[:summary] = summary if defined? summary
27
+ params[:summary] = summary unless summary.nil?
28
28
  params[:minor] = '1' if minor
29
29
  params[:bot] = '1' if bot
30
30
  params[:token] = token
@@ -0,0 +1,188 @@
1
+ module MediaWiki
2
+ module Query
3
+ module Lists
4
+ module All
5
+ # Gets all categories on the entire wiki.
6
+ # @param limit [Int] The maximum number of categories to get. Defaults
7
+ # to 500. Cannot be greater than 500 for normal users, or 5000 for
8
+ # bots.
9
+ # @see https://www.mediawiki.org/wiki/API:Allcategories MediaWiki
10
+ # Allcategories API Docs
11
+ # @since 0.7.0
12
+ # @return [Array] An array of all categories.
13
+ def get_all_categories(limit = 500)
14
+ params = {
15
+ action: 'query',
16
+ list: 'allcategories',
17
+ aclimit: get_limited(limit)
18
+ }
19
+
20
+ response = post(params)
21
+
22
+ ret = []
23
+ response['query']['allcategories'].each { |c| ret << c['*'] }
24
+
25
+ ret
26
+ end
27
+
28
+ # Gets all the images on the wiki.
29
+ # @param limit [Int] The maximum number of images to get. Defaults to
30
+ # 500. Cannot be greater than 500 for normal users, or 5000 for bots.
31
+ # @see https://www.mediawiki.org/wiki/API:Allimages MediaWiki Allimages
32
+ # API Docs
33
+ # @since 0.7.0
34
+ # @return [Array] An array of all images.
35
+ def get_all_images(limit = 500)
36
+ params = {
37
+ action: 'query',
38
+ list: 'allimages',
39
+ ailimit: get_limited(limit)
40
+ }
41
+
42
+ response = post(params)
43
+
44
+ ret = []
45
+ response['query']['allimages'].each { |i| ret << i['name'] }
46
+
47
+ ret
48
+ end
49
+
50
+ # Gets all pages within a namespace integer.
51
+ # @param namespace [Int] The namespace ID.
52
+ # @param limit [Int] See #get_all_images
53
+ # @see https://www.mediawiki.org/wiki/API:Allpages MediaWiki Allpages
54
+ # API Docs
55
+ # @since 0.8.0
56
+ # @return [Array] An array of all page titles.
57
+ def get_all_pages_in_namespace(namespace, limit = 500)
58
+ params = {
59
+ action: 'query',
60
+ list: 'allpages',
61
+ apnamespace: namespace,
62
+ aplimit: get_limited(limit)
63
+ }
64
+
65
+ response = post(params)
66
+
67
+ ret = []
68
+ response['query']['allpages'].each { |p| ret << p['title'] }
69
+
70
+ ret
71
+ end
72
+
73
+ # Gets all users, or all users in a group.
74
+ # @param group [String] The group to limit this query to.
75
+ # @param limit [Int] See #get_all_images.
76
+ # @see https://www.mediawiki.org/wiki/API:Allusers MediaWiki Allusers
77
+ # API Docs
78
+ # @since 0.8.0
79
+ # @return [Hash] A hash of all users, names are keys, IDs are values.
80
+ def get_all_users(group = nil, limit = 500)
81
+ params = {
82
+ action: 'query',
83
+ list: 'allusers',
84
+ aulimit: get_limited(limit)
85
+ }
86
+ params[:augroup] = group unless group.nil?
87
+
88
+ response = post(params)
89
+
90
+ ret = {}
91
+ response['query']['allusers'].each { |u| ret[u['name']] = u['userid'] }
92
+
93
+ ret
94
+ end
95
+
96
+ # Gets all block IDs on the wiki. It seems like this only gets non-IP
97
+ # blocks, but the MediaWiki docs are a bit unclear.
98
+ # @param limit [Int] See #get_all_images.
99
+ # @see https://www.mediawiki.org/wiki/API:Blocks MediaWiki Blocks API Docs
100
+ # @since 0.8.0
101
+ # @return [Array] All block IDs as strings.
102
+ def get_all_blocks(limit = 500)
103
+ params = {
104
+ action: 'query',
105
+ list: 'blocks',
106
+ bklimit: get_limited(limit),
107
+ bkprop: 'id'
108
+ }
109
+
110
+ response = post(params)
111
+
112
+ ret = []
113
+ response['query']['blocks'].each { |b| ret.push(b['id']) }
114
+
115
+ ret
116
+ end
117
+
118
+ # Gets all page titles that transclude a given page.
119
+ # @param page [String] The page name.
120
+ # @param limit [Int] See #get_all_images.
121
+ # @see https://www.mediawiki.org/wiki/API:Embeddedin MediaWiki Embeddedin
122
+ # API Docs
123
+ # @since 0.8.0
124
+ # @return [Array] All transcluder page titles.
125
+ def get_all_transcluders(page, limit = 500)
126
+ params = {
127
+ action: 'query',
128
+ list: 'embeddedin',
129
+ eititle: page,
130
+ eilimit: get_limited(limit)
131
+ }
132
+
133
+ response = post(params)
134
+
135
+ ret = []
136
+ response['query']['embeddedin'].each { |e| ret << e['title'] }
137
+
138
+ ret
139
+ end
140
+
141
+ # Gets an array of all deleted or archived files on the wiki.
142
+ # @param limit [Int] See #get_all_images
143
+ # @see https://www.mediawiki.org/wiki/API:Filearchive MediaWiki
144
+ # Filearchive API Docs
145
+ # @since 0.8.0
146
+ # @return [Array] All deleted file names. These are not titles, so they do
147
+ # not include "File:".
148
+ def get_all_deleted_files(limit = 500)
149
+ params = {
150
+ action: 'query',
151
+ list: 'filearchive',
152
+ falimit: get_limited(limit)
153
+ }
154
+
155
+ response = post(params)
156
+
157
+ ret = []
158
+ response['query']['filearchive'].each { |f| ret.push(f['name']) }
159
+
160
+ ret
161
+ end
162
+
163
+ # Gets a list of all protected pages, by protection level if provided.
164
+ # @param protection_level [String] The protection level, e.g., sysop
165
+ # @param limit [Int] See #get_all_images.
166
+ # @see https://www.mediawiki.org/wiki/API:Protectedtitles MediaWiki
167
+ # Protectedtitles API Docs
168
+ # @since 0.8.0
169
+ # @return [Array] All protected page titles.
170
+ def get_all_protected_titles(protection_level = nil, limit = 500)
171
+ params = {
172
+ action: 'query',
173
+ list: 'protectedtitles',
174
+ ptlimit: get_limited(limit)
175
+ }
176
+ params[:ptlevel] = protection_level unless protection_level.nil?
177
+
178
+ response = post(params)
179
+
180
+ ret = []
181
+ response['query']['protectedtitles'].each { |t| ret << t['title'] }
182
+
183
+ ret
184
+ end
185
+ end
186
+ end
187
+ end
188
+ end