mediawiki-butt 0.11.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +28 -5
  3. data/lib/mediawiki/administration.rb +18 -17
  4. data/lib/mediawiki/auth.rb +52 -193
  5. data/lib/mediawiki/butt.rb +51 -32
  6. data/lib/mediawiki/constants.rb +127 -130
  7. data/lib/mediawiki/edit.rb +58 -71
  8. data/lib/mediawiki/exceptions.rb +2 -123
  9. data/lib/mediawiki/query/lists/all.rb +35 -45
  10. data/lib/mediawiki/query/lists/backlinks.rb +23 -34
  11. data/lib/mediawiki/query/lists/categories.rb +17 -28
  12. data/lib/mediawiki/query/lists/log/block.rb +17 -33
  13. data/lib/mediawiki/query/lists/log/delete.rb +8 -24
  14. data/lib/mediawiki/query/lists/log/import.rb +9 -24
  15. data/lib/mediawiki/query/lists/log/log.rb +36 -63
  16. data/lib/mediawiki/query/lists/log/merge.rb +5 -12
  17. data/lib/mediawiki/query/lists/log/move.rb +6 -20
  18. data/lib/mediawiki/query/lists/log/newusers.rb +13 -36
  19. data/lib/mediawiki/query/lists/log/patrol.rb +5 -13
  20. data/lib/mediawiki/query/lists/log/protect.rb +20 -50
  21. data/lib/mediawiki/query/lists/log/rights.rb +10 -24
  22. data/lib/mediawiki/query/lists/log/upload.rb +10 -24
  23. data/lib/mediawiki/query/lists/miscellaneous.rb +10 -19
  24. data/lib/mediawiki/query/lists/querypage.rb +60 -62
  25. data/lib/mediawiki/query/lists/recent_changes.rb +18 -30
  26. data/lib/mediawiki/query/lists/search.rb +14 -29
  27. data/lib/mediawiki/query/lists/users.rb +43 -61
  28. data/lib/mediawiki/query/meta/filerepoinfo.rb +18 -20
  29. data/lib/mediawiki/query/meta/siteinfo.rb +30 -33
  30. data/lib/mediawiki/query/meta/userinfo.rb +48 -66
  31. data/lib/mediawiki/query/properties/contributors.rb +18 -22
  32. data/lib/mediawiki/query/properties/files.rb +18 -20
  33. data/lib/mediawiki/query/properties/pages.rb +129 -211
  34. data/lib/mediawiki/query/properties/properties.rb +20 -25
  35. data/lib/mediawiki/query/query.rb +0 -25
  36. data/lib/mediawiki/utils.rb +9 -8
  37. data/lib/mediawiki/watch.rb +52 -0
  38. metadata +6 -4
@@ -3,6 +3,7 @@ require_relative 'query/query'
3
3
  require_relative 'constants'
4
4
  require_relative 'edit'
5
5
  require_relative 'administration'
6
+ require_relative 'watch'
6
7
  require 'httpclient'
7
8
  require 'json'
8
9
 
@@ -18,35 +19,37 @@ module MediaWiki
18
19
  include MediaWiki::Constants
19
20
  include MediaWiki::Edit
20
21
  include MediaWiki::Administration
22
+ include MediaWiki::Watch
21
23
 
22
- # Creates a new instance of MediaWiki::Butt. To work with any
23
- # MediaWiki::Butt methods, you must first create an instance of it.
24
- # @param url [String] The FULL wiki URL. api.php can be omitted, but it
25
- # will make harsh assumptions about your wiki configuration.
26
- # @param use_ssl [Boolean] Whether or not to use SSL. Will default to true.
27
- # @param custom_agent [String] A custom User-Agent to use. Optional.
28
- # @since 0.1.0
29
- def initialize(url, use_ssl = true, custom_agent = nil)
24
+ attr_accessor :query_limit_default
25
+
26
+ # Creates a new instance of MediaWiki::Butt.
27
+ # @param url [String] The FULL wiki URL. api.php can be omitted, but it will make harsh assumptions about
28
+ # your wiki configuration.
29
+ # @param opts [Hash<Symbol, Any>] The options hash for configuring this instance of Butt.
30
+ # @option opts [String] :custom_agent A custom User-Agent to use. Optional.
31
+ # @option opts [Fixnum] :query_limit_default The query limit to use if no limit parameter is explicitly given to
32
+ # the various query methods. In other words, if you pass a limit parameter to the valid query methods, it will
33
+ # use that, otherwise, it will use this. Defaults to 500. It can be set to 'max' to use MW's default max for
34
+ # each API.
35
+ def initialize(url, opts = {})
30
36
  @url = url =~ /api.php$/ ? url : "#{url}/api.php"
37
+ @query_limit_default = opts[:query_limit_default] || 500
31
38
  @client = HTTPClient.new
32
39
  @uri = URI.parse(@url)
33
- @ssl = use_ssl
34
40
  @logged_in = false
35
- @custom_agent = custom_agent unless custom_agent.nil?
36
- @tokens = {}
41
+ @custom_agent = opts[:custom_agent]
37
42
  end
38
43
 
39
- # Performs a generic HTTP POST action and provides the response. This
40
- # method generally should not be used by the user, unless there is not a
41
- # method provided by the Butt developers for a particular action.
42
- # @param params [Hash] A basic hash containing MediaWiki API parameters.
43
- # Please see the MediaWiki API for more information.
44
- # @param autoparse [Boolean] Whether or not to provide a parsed version
45
- # of the response's JSON. Will default to true.
44
+ # Performs a generic HTTP POST request and provides the response. This method generally should not be used by the
45
+ # user, unless there is not a helper method provided by Butt for a particular action.
46
+ # @param params [Hash] A basic hash containing MediaWiki API parameters. Please see the MediaWiki API for more
47
+ # information.
48
+ # @param autoparse [Boolean] Whether or not to provide a parsed version of the response's JSON.
46
49
  # @param header [Hash] The header hash. Optional.
47
50
  # @since 0.1.0
48
- # @return [JSON/HTTPMessage] Parsed JSON if autoparse is true.
49
- # @return [HTTPMessage] Raw HTTP response.
51
+ # @return [Hash] Parsed JSON if autoparse is true.
52
+ # @return [HTTPMessage] Raw HTTP response if autoparse is not true.
50
53
  def post(params, autoparse = true, header = nil)
51
54
  params[:format] = 'json'
52
55
  header = {} if header.nil?
@@ -56,11 +59,7 @@ module MediaWiki
56
59
 
57
60
  res = @client.post(@uri, params, header)
58
61
 
59
- if autoparse
60
- return JSON.parse(res.body)
61
- else
62
- return res
63
- end
62
+ autoparse ? JSON.parse(res.body) : res
64
63
  end
65
64
 
66
65
  # Gets whether the currently logged in user is a bot.
@@ -73,18 +72,38 @@ module MediaWiki
73
72
  # @since 0.4.1 as user_bot?
74
73
  def user_bot?(username = nil)
75
74
  groups = false
75
+ name = username || @name
76
+ groups = get_usergroups(name) if name
77
+ groups && groups.include?('bot')
78
+ end
76
79
 
77
- if !username.nil?
78
- groups = get_usergroups(username)
79
- else
80
- groups = get_usergroups if @logged_in
80
+ protected
81
+
82
+ # Gets the limited version of the integer, to ensure nobody provides an int that is too large.
83
+ # @param integer [Fixnum] The number to limit.
84
+ # @param max_user [Fixnum] The maximum limit for normal users.
85
+ # @param max_bot [Fixnum] The maximum limit for bot users.
86
+ # @since 0.8.0
87
+ # @return [Fixnum] The capped number.
88
+ def get_limited(integer, max_user = 500, max_bot = 5000)
89
+ if integer.is_a?(String)
90
+ return integer if integer == 'max'
91
+ return 500
81
92
  end
93
+ return integer if integer <= max_user
82
94
 
83
- if groups != false
84
- return groups.include?('bot')
95
+ if user_bot?
96
+ integer > max_bot ? max_bot : integer
85
97
  else
86
- return false
98
+ max_user
87
99
  end
88
100
  end
101
+
102
+ # Safely validates the given namespace ID, and returns 0 for the main namespace if invalid.
103
+ # @param namespace [Fixnum] The namespace ID.
104
+ # @return [Fixnum] Either the given namespace, if valid, or the main namespace ID 0 if invalid.
105
+ def validate_namespace(namespace)
106
+ MediaWiki::Constants::NAMESPACES.value?(namespace) ? namespace : 0
107
+ end
89
108
  end
90
109
  end
@@ -3,224 +3,221 @@ module MediaWiki
3
3
  # @since 0.2.0 as a module with individual global constants
4
4
  # @since 0.4.0 as a module with a single global hash identical to this.
5
5
  # @since 0.8.0 as its current state.
6
- # @see https://www.mediawiki.org/wiki/Extension_default_namespaces
7
- # MediaWiki's list of extension namespace IDs and names.
8
- # @return [Hash<String, Integer>] The upcased namespace names, and their according ID. The keys, values, and
6
+ # @see https://www.mediawiki.org/wiki/Extension_default_namespaces MediaWiki's list of extension namespace IDs
7
+ # and names.
8
+ # @return [Hash<String, Fixnum>] The upcased namespace names, and their according ID. The keys, values, and
9
9
  # return value itself are all immutable.
10
10
  NAMESPACES = {
11
- 'MAIN'.freeze => 0.freeze,
12
- 'TALK'.freeze => 1.freeze,
13
- 'USER'.freeze => 2.freeze,
14
- 'USER_TALK'.freeze => 3.freeze,
15
- 'PROJECT'.freeze => 4.freeze,
16
- 'PROJECT_TALK'.freeze => 5.freeze,
17
- 'FILE'.freeze => 6.freeze,
18
- 'FILE_TALK'.freeze => 7.freeze,
19
- 'MEDIAWIKI'.freeze => 8.freeze,
20
- 'MEDIAWIKI_TALK'.freeze => 9.freeze,
21
- 'TEMPLATE'.freeze => 10.freeze,
22
- 'TEMPLATE_TALK'.freeze => 11.freeze,
23
- 'HELP'.freeze => 12.freeze,
24
- 'HELP_TALK'.freeze => 13.freeze,
25
- 'CATEGORY'.freeze => 14.freeze,
26
- 'CATEGORY_TALK'.freeze => 15.freeze,
27
- 'SPECIAL'.freeze => -1.freeze,
28
- 'MEDIA'.freeze => -2.freeze,
11
+ 'MAIN'.freeze => 0,
12
+ 'TALK'.freeze => 1,
13
+ 'USER'.freeze => 2,
14
+ 'USER_TALK'.freeze => 3,
15
+ 'PROJECT'.freeze => 4,
16
+ 'PROJECT_TALK'.freeze => 5,
17
+ 'FILE'.freeze => 6,
18
+ 'FILE_TALK'.freeze => 7,
19
+ 'MEDIAWIKI'.freeze => 8,
20
+ 'MEDIAWIKI_TALK'.freeze => 9,
21
+ 'TEMPLATE'.freeze => 10,
22
+ 'TEMPLATE_TALK'.freeze => 11,
23
+ 'HELP'.freeze => 12,
24
+ 'HELP_TALK'.freeze => 13,
25
+ 'CATEGORY'.freeze => 14,
26
+ 'CATEGORY_TALK'.freeze => 15,
27
+ 'SPECIAL'.freeze => -1,
28
+ 'MEDIA'.freeze => -2,
29
29
 
30
30
  # Extension:LiquidThreads
31
- 'LQT_THREAD'.freeze => 90.freeze,
32
- 'LQT_THREAD_TALK'.freeze => 91.freeze,
33
- 'LQT_SUMMARY'.freeze => 92.freeze,
34
- 'LQT_SUMMARY_TALK'.freeze => 93.freeze,
31
+ 'LQT_THREAD'.freeze => 90,
32
+ 'LQT_THREAD_TALK'.freeze => 91,
33
+ 'LQT_SUMMARY'.freeze => 92,
34
+ 'LQT_SUMMARY_TALK'.freeze => 93,
35
35
 
36
36
  # Extension:Semantic MediaWiki / Extension:Semantic Forms
37
- 'SMW_RELATION'.freeze => 100.freeze,
38
- 'SMW_RELATION_TALK'.freeze => 101.freeze,
39
- 'SMW_PROPERTY'.freeze => 102.freeze,
40
- 'SMW_PROPERTY_TALK'.freeze => 103.freeze,
41
- 'SMW_TYPE'.freeze => 104.freeze,
42
- 'SMW_TYPE_TALK'.freeze => 105.freeze,
43
- 'SMW_FORM'.freeze => 106.freeze,
44
- 'SMW_FORM_TALK'.freeze => 107.freeze,
45
- 'SF_CONCEPT'.freeze => 108.freeze,
46
- 'SF_CONCEPT_TALK'.freeze => 109.freeze,
37
+ 'SMW_RELATION'.freeze => 100,
38
+ 'SMW_RELATION_TALK'.freeze => 101,
39
+ 'SMW_PROPERTY'.freeze => 102,
40
+ 'SMW_PROPERTY_TALK'.freeze => 103,
41
+ 'SMW_TYPE'.freeze => 104,
42
+ 'SMW_TYPE_TALK'.freeze => 105,
43
+ 'SMW_FORM'.freeze => 106,
44
+ 'SMW_FORM_TALK'.freeze => 107,
45
+ 'SF_CONCEPT'.freeze => 108,
46
+ 'SF_CONCEPT_TALK'.freeze => 109,
47
47
 
48
48
  # Extension:DPLforum
49
- 'DPLF_FORUM'.freeze => 110.freeze,
50
- 'DPLF_FORUM_TAlK'.freeze => 111.freeze,
49
+ 'DPLF_FORUM'.freeze => 110,
50
+ 'DPLF_FORUM_TAlK'.freeze => 111,
51
51
 
52
52
  # Extension:RefHelper
53
- 'RFH_CITE'.freeze => 120.freeze,
54
- 'RFH_CITE_TALK'.freeze => 121.freeze,
53
+ 'RFH_CITE'.freeze => 120,
54
+ 'RFH_CITE_TALK'.freeze => 121,
55
55
 
56
56
  # Extension:SemanticAccessControl
57
- 'ACL_USERGROUP'.freeze => 160.freeze,
58
- 'ACL_ACL'.freeze => 162.freeze,
57
+ 'ACL_USERGROUP'.freeze => 160,
58
+ 'ACL_ACL'.freeze => 162,
59
59
 
60
60
  # Extension:Semantic Drilldown
61
- 'SED_FILTER'.freeze => 170.freeze,
62
- 'SED_FILTER_TALK'.freeze => 171.freeze,
61
+ 'SED_FILTER'.freeze => 170,
62
+ 'SED_FILTER_TALK'.freeze => 171,
63
63
 
64
64
  # Extension:SocialProfile
65
- 'SCP_USERWIKI'.freeze => 200.freeze,
66
- 'SCP_USERWIKI_TALK'.freeze => 201.freeze,
67
- 'SCP_USERPROFILE'.freeze => 202.freeze,
68
- 'SCP_USERPROFILE_TALK'.freeze => 203.freeze,
65
+ 'SCP_USERWIKI'.freeze => 200,
66
+ 'SCP_USERWIKI_TALK'.freeze => 201,
67
+ 'SCP_USERPROFILE'.freeze => 202,
68
+ 'SCP_USERPROFILE_TALK'.freeze => 203,
69
69
 
70
70
  # Extension:Proofread Page
71
- 'PRP_PAGE'.freeze => 250.freeze,
72
- 'PRP_PAGE_TALK'.freeze => 251.freeze,
73
- 'PRP_INDEX'.freeze => 252.freeze,
74
- 'PRP_INDEX_TALK'.freeze => 253.freeze,
71
+ 'PRP_PAGE'.freeze => 250,
72
+ 'PRP_PAGE_TALK'.freeze => 251,
73
+ 'PRP_INDEX'.freeze => 252,
74
+ 'PRP_INDEX_TALK'.freeze => 253,
75
75
 
76
76
  # Extension:TrustedMath
77
- 'TRM_MATH'.freeze => 262.freeze,
78
- 'TRM_MATH_TALK'.freeze => 263.freeze,
77
+ 'TRM_MATH'.freeze => 262,
78
+ 'TRM_MATH_TALK'.freeze => 263,
79
79
 
80
80
  # Extension:Widgets
81
- 'WID_WIDGET'.freeze => 274.freeze,
82
- 'WID_WIDGET_TALK'.freeze => 275.freeze,
81
+ 'WID_WIDGET'.freeze => 274,
82
+ 'WID_WIDGET_TALK'.freeze => 275,
83
83
 
84
84
  # Extension:EmbedScript
85
- 'EMS_JSAPPLET'.freeze => 280.freeze,
86
- 'EMS_JSAPPLET_TALK'.freeze => 281.freeze,
85
+ 'EMS_JSAPPLET'.freeze => 280,
86
+ 'EMS_JSAPPLET_TALK'.freeze => 281,
87
87
 
88
88
  # Extension:PollNY
89
- 'PLN_POLL'.freeze => 300.freeze,
90
- 'PLN_POLL_TALK'.freeze => 301.freeze,
89
+ 'PLN_POLL'.freeze => 300,
90
+ 'PLN_POLL_TALK'.freeze => 301,
91
91
 
92
92
  # Extension:Semantic Image Annotator
93
- 'SIA_IMAGE_ANNOTATOR'.freeze => 380.freeze,
93
+ 'SIA_IMAGE_ANNOTATOR'.freeze => 380,
94
94
 
95
95
  # Extension:Wiki2LaTeX
96
- 'WTL_WIKI2LATEX'.freeze => 400.freeze,
97
- 'WTL_WIKI2LATEX_TALK'.freeze => 401.freeze,
96
+ 'WTL_WIKI2LATEX'.freeze => 400,
97
+ 'WTL_WIKI2LATEX_TALK'.freeze => 401,
98
98
 
99
99
  # Extension:Workflow
100
- 'WRF_WORKFLOW'.freeze => 410.freeze,
101
- 'WRF_WORKFLOW_TALK'.freeze => 411.freeze,
100
+ 'WRF_WORKFLOW'.freeze => 410,
101
+ 'WRF_WORKFLOW_TALK'.freeze => 411,
102
102
 
103
103
  # Extension:Maps
104
- 'MAP_LAYER'.freeze => 420.freeze,
105
- 'MAP_LAYER_TALK'.freeze => 421.freeze,
104
+ 'MAP_LAYER'.freeze => 420,
105
+ 'MAP_LAYER_TALK'.freeze => 421,
106
106
 
107
107
  # Extension:QuizTabulate
108
- 'QTB_QUIZ'.freeze => 430.freeze,
109
- 'QTB_QUIZ_TALK'.freeze => 431.freeze,
108
+ 'QTB_QUIZ'.freeze => 430,
109
+ 'QTB_QUIZ_TALK'.freeze => 431,
110
110
 
111
111
  # Extension:Education Program
112
- 'EDP_EDUCATION_PROGRAM'.freeze => 446.freeze,
113
- 'EDP_EDUCATION_PROGRAM_TALK'.freeze => 447.freeze,
112
+ 'EDP_EDUCATION_PROGRAM'.freeze => 446,
113
+ 'EDP_EDUCATION_PROGRAM_TALK'.freeze => 447,
114
114
 
115
115
  # Extension:BoilerRoom
116
- 'BLR_BOILERPLATE'.freeze => 450.freeze,
117
- 'BLR_BOILERPLATE_TALK'.freeze => 451.freeze,
116
+ 'BLR_BOILERPLATE'.freeze => 450,
117
+ 'BLR_BOILERPLATE_TALK'.freeze => 451,
118
118
 
119
119
  # Extension:UploadWizard
120
- 'UPW_CAMPAIGN'.freeze => 460.freeze,
121
- 'UPW_CAMPAIGN_TALK'.freeze => 461.freeze,
120
+ 'UPW_CAMPAIGN'.freeze => 460,
121
+ 'UPW_CAMPAIGN_TALK'.freeze => 461,
122
122
 
123
123
  # Extension:EventLogging
124
- 'ELG_SCHEMA'.freeze => 470.freeze,
125
- 'ELG_SCHEMA_TALK'.freeze => 471.freeze,
124
+ 'ELG_SCHEMA'.freeze => 470,
125
+ 'ELG_SCHEMA_TALK'.freeze => 471,
126
126
 
127
127
  # Extension:ZeroBanner
128
- 'ZRB_ZERO'.freeze => 480.freeze,
129
- 'ZRB_ZERO_TALK'.freeze => 481.freeze,
128
+ 'ZRB_ZERO'.freeze => 480,
129
+ 'ZRB_ZERO_TALK'.freeze => 481,
130
130
 
131
131
  # Extension:JsonConfig
132
- 'JSC_CONFIG'.freeze => 482.freeze,
133
- 'JSC_CONFIG_TALK'.freeze => 483.freeze,
134
- 'JSC_DATA'.freeze => 486.freeze,
135
- 'JSC_DATA_TALK'.freeze => 487.freeze,
132
+ 'JSC_CONFIG'.freeze => 482,
133
+ 'JSC_CONFIG_TALK'.freeze => 483,
134
+ 'JSC_DATA'.freeze => 486,
135
+ 'JSC_DATA_TALK'.freeze => 487,
136
136
 
137
137
  # Extension:Graph
138
- 'GRP_GRAPH'.freeze => 484.freeze,
139
- 'GRP_GRAPH_TALK'.freeze => 485.freeze,
138
+ 'GRP_GRAPH'.freeze => 484,
139
+ 'GRP_GRAPH_TALK'.freeze => 485,
140
140
 
141
141
  # Extension:OpenStackManager
142
- 'OSM_NOVA_RESOURCE'.freeze => 488.freeze,
143
- 'OSM_NOVA_RESOURCE_TALK'.freeze => 489.freeze,
142
+ 'OSM_NOVA_RESOURCE'.freeze => 488,
143
+ 'OSM_NOVA_RESOURCE_TALK'.freeze => 489,
144
144
 
145
145
  # Extension:GWToolset
146
- 'GWT_GWTOOLSET'.freeze => 490.freeze,
147
- 'GWT_GWTOOLSET_TALK'.freeze => 491.freeze,
146
+ 'GWT_GWTOOLSET'.freeze => 490,
147
+ 'GWT_GWTOOLSET_TALK'.freeze => 491,
148
148
 
149
149
  # Extension:BlogPage
150
- 'BLP_BLOG'.freeze => 500.freeze,
151
- 'BLP_BLOG_TALK'.freeze => 501.freeze,
150
+ 'BLP_BLOG'.freeze => 500,
151
+ 'BLP_BLOG_TALK'.freeze => 501,
152
152
 
153
153
  # Extension:XMLContentExtension
154
- 'XCE_XML'.freeze => 580.freeze,
155
- 'XCE_XML_TALK'.freeze => 581.freeze,
156
- 'XCE_SCHEMA'.freeze => 582.freeze,
157
- 'XCE_SCHEMA_TALK'.freeze => 583.freeze,
154
+ 'XCE_XML'.freeze => 580,
155
+ 'XCE_XML_TALK'.freeze => 581,
156
+ 'XCE_SCHEMA'.freeze => 582,
157
+ 'XCE_SCHEMA_TALK'.freeze => 583,
158
158
 
159
159
  # Extension:FanBoxes
160
- 'FNB_USERBOX'.freeze => 600.freeze,
161
- 'FNB_USERBOX_TALK'.freeze => 601.freeze,
160
+ 'FNB_USERBOX'.freeze => 600,
161
+ 'FNB_USERBOX_TALK'.freeze => 601,
162
162
 
163
163
  # Extension:LinkFilter
164
- 'LFT_LINK'.freeze => 700.freeze,
165
- 'LFT_LINK_TALK'.freeze => 701.freeze,
164
+ 'LFT_LINK'.freeze => 700,
165
+ 'LFT_LINK_TALK'.freeze => 701,
166
166
 
167
167
  # Extension:TimedMediaHandler
168
- 'TMH_TIMEDTEXT'.freeze => 710.freeze,
169
- 'TMH_TIMEDTEXT_TALK'.freeze => 711.freeze,
168
+ 'TMH_TIMEDTEXT'.freeze => 710,
169
+ 'TMH_TIMEDTEXT_TALK'.freeze => 711,
170
170
 
171
171
  # Extension:QPoll
172
- 'QPL_INTERPRETATION'.freeze => 800.freeze,
173
- 'QPL_INTERPRETATION_TALK'.freeze => 801.freeze,
172
+ 'QPL_INTERPRETATION'.freeze => 800,
173
+ 'QPL_INTERPRETATION_TALK'.freeze => 801,
174
174
 
175
175
  # Extension:SemanticMustacheFormat :3
176
- 'SMF_MUSTACHE'.freeze => 806.freeze,
177
- 'SMF_MUSTACHE_TALK'.freeze => 807.freeze,
176
+ 'SMF_MUSTACHE'.freeze => 806,
177
+ 'SMF_MUSTACHE_TALK'.freeze => 807,
178
178
 
179
179
  # Extension:R
180
- 'R_R'.freeze => 814.freeze,
181
- 'R_R_TALK'.freeze => 815.freeze,
180
+ 'R_R'.freeze => 814,
181
+ 'R_R_TALK'.freeze => 815,
182
182
 
183
183
  # Extension:Scribunto
184
- 'SCR_MODULE'.freeze => 828.freeze,
185
- 'SCR_MODULE_TALK'.freeze => 829.freeze,
184
+ 'SCR_MODULE'.freeze => 828,
185
+ 'SCR_MODULE_TALK'.freeze => 829,
186
186
 
187
187
  # Extension:SecurePoll
188
- 'SEP_SECUREPOLL'.freeze => 830.freeze,
189
- 'SEP_SECUREPOLL_TALK'.freeze => 831.freeze,
188
+ 'SEP_SECUREPOLL'.freeze => 830,
189
+ 'SEP_SECUREPOLL_TALK'.freeze => 831,
190
190
 
191
191
  # Extension:CentralNotice
192
- 'CNT_CNBANNER'.freeze => 866.freeze,
193
- 'CNT_CNBANNER_TALK'.freeze => 867.freeze,
192
+ 'CNT_CNBANNER'.freeze => 866,
193
+ 'CNT_CNBANNER_TALK'.freeze => 867,
194
194
 
195
195
  # Extension:Translate
196
- 'TRN_TRANSLATIONS'.freeze => 1198.freeze,
197
- 'TRN_TRANSLATIOTALK'.freeze => 1199.freeze,
196
+ 'TRN_TRANSLATIONS'.freeze => 1198,
197
+ 'TRN_TRANSLATIOTALK'.freeze => 1199,
198
198
 
199
199
  # Extension:PackageForce
200
- 'PKF_PACKAGEFORCE'.freeze => 1300.freeze,
201
- 'PKF_PACKAGEFORCE_TALK'.freeze => 1301.freeze,
200
+ 'PKF_PACKAGEFORCE'.freeze => 1300,
201
+ 'PKF_PACKAGEFORCE_TALK'.freeze => 1301,
202
202
 
203
203
  # Extension:BlueSpice
204
- 'BLS_BLOG'.freeze => 1502.freeze,
205
- 'BLS_BLOG_TALK'.freeze => 1503.freeze,
206
- 'BLS_BOOK'.freeze => 1504.freeze,
207
- 'BLS_BOOK_TALK'.freeze => 1505.freeze,
204
+ 'BLS_BLOG'.freeze => 1502,
205
+ 'BLS_BLOG_TALK'.freeze => 1503,
206
+ 'BLS_BOOK'.freeze => 1504,
207
+ 'BLS_BOOK_TALK'.freeze => 1505,
208
208
 
209
209
  # Extension:Gadgets
210
- 'GDG_GADGET'.freeze => 2300.freeze,
211
- 'GDG_GADGET_TALK'.freeze => 2301.freeze,
212
- 'GDG_GADGET_DEFININTION'.freeze => 2302.freeze,
213
- 'GDG_GADGET_DEFININTION_TALK'.freeze => 2303.freeze,
210
+ 'GDG_GADGET'.freeze => 2300,
211
+ 'GDG_GADGET_TALK'.freeze => 2301,
212
+ 'GDG_GADGET_DEFININTION'.freeze => 2302,
213
+ 'GDG_GADGET_DEFININTION_TALK'.freeze => 2303,
214
214
 
215
215
  # Extension:VisualEditor
216
- 'VSE_VISUALEDITOR'.freeze => 2500.freeze,
217
- 'VSE_VISUALEDITOR_TALK'.freeze => 2501.freeze,
216
+ 'VSE_VISUALEDITOR'.freeze => 2500,
217
+ 'VSE_VISUALEDITOR_TALK'.freeze => 2501,
218
218
 
219
219
  # Extension:Flow
220
- 'FLW_TOPIC'.freeze => 2600.freeze
220
+ 'FLW_TOPIC'.freeze => 2600
221
221
  }.freeze
222
-
223
- # @return [String] MediaWiki's timestamp format as an immutable string for DateTime uses.
224
- TIME_FORMAT = '%Y-%m-%dT%H:%M:%SZ'.freeze
225
222
  end
226
223
  end