mediawiki-butt 0.11.1 → 1.0.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.
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