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
@@ -9,38 +9,33 @@ module MediaWiki
9
9
  include MediaWiki::Query::Properties::Pages
10
10
  include MediaWiki::Query::Properties::Files
11
11
 
12
- # Gets the token for the given type. This method should rarely be
13
- # used by normal users.
12
+ # Gets the token for the given type. This method should rarely be used by normal users.
14
13
  # @param type [String] The type of token.
15
14
  # @param title [String] The page title for the token. Optional.
16
15
  # @see https://www.mediawiki.org/wiki/API:Info MediaWiki Info API Docs
17
16
  # @since 0.5.0
18
- # @return [String] The token. If the butt isn't logged in, it returns
19
- # with '+\\'.
17
+ # @return [String] The token. If the butt isn't logged in, it returns with '+\\'.
20
18
  def get_token(type, title = nil)
21
- if @logged_in
22
- # There is some weird thing with MediaWiki where you must pass a valid
23
- # inprop parameter in order to get any response at all. This is why
24
- # there is a displaytitle inprop as well as gibberish in the titles
25
- # parameter. And to avoid normalization, it's capitalized.
26
- params = {
27
- action: 'query',
28
- prop: 'info',
29
- inprop: 'displaytitle',
30
- intoken: type
31
- }
19
+ return '+\\' unless @logged_in
32
20
 
33
- title = 'Somegibberish' if title.nil?
34
- params[:titles] = title
35
- response = post(params)
36
- revid = nil
37
- response['query']['pages'].each { |r, _| revid = r }
21
+ # There is some weird thing with MediaWiki where you must pass a valid inprop parameter in order to get any
22
+ # response at all. This is why there is a displaytitle inprop as well as gibberish in the titles parameter.
23
+ # And to avoid normalization, it's capitalized.
24
+ params = {
25
+ action: 'query',
26
+ prop: 'info',
27
+ inprop: 'displaytitle',
28
+ intoken: type
29
+ }
38
30
 
39
- # URL encoding is not needed for some reason.
40
- return response['query']['pages'][revid]["#{type}token"]
41
- else
42
- return '+\\'
43
- end
31
+ title = 'Somegibberish' if title.nil?
32
+ params[:titles] = title
33
+ response = post(params)
34
+ revid = nil
35
+ response['query']['pages'].each { |r, _| revid = r }
36
+
37
+ # URL encoding is not needed for some reason.
38
+ response['query']['pages'][revid]["#{type}token"]
44
39
  end
45
40
  end
46
41
  end
@@ -7,30 +7,5 @@ module MediaWiki
7
7
  include MediaWiki::Query::Meta
8
8
  include MediaWiki::Query::Lists
9
9
  include MediaWiki::Query::Properties
10
-
11
- protected
12
-
13
- # Gets the limited version of the integer, to ensure nobody provides an int
14
- # that is too large.
15
- # @param integer [Int] The number to limit.
16
- # @param max_user [Int] The maximum limit for normal users.
17
- # @param max_bot [Int] The maximum limit for bot users.
18
- # @since 0.8.0
19
- # @return [Int] The capped number.
20
- def get_limited(integer, max_user = 500, max_bot = 5000)
21
- if integer > max_user
22
- if user_bot?
23
- if integer > max_bot
24
- return max_bot
25
- else
26
- return integer
27
- end
28
- else
29
- return max_user
30
- end
31
- else
32
- return integer
33
- end
34
- end
35
10
  end
36
11
  end
@@ -3,17 +3,18 @@ module MediaWiki
3
3
  # requiring 'mediawiki-butt' or 'mediawiki/butt'; you must require it explicitly.
4
4
  class Utils
5
5
  # Encodes the URL like mw.util.rawurlencode JS.
6
- # @todo Perhaps write a StringUtility method for better gsubs?
6
+ # @todo Require StringUtility and use its safely_gsub method.
7
7
  # @param str [String] The string to replace (typically a page title).
8
8
  # @return [String] The encoded string.
9
9
  def self.encode_url(str)
10
- str.gsub!(/!/,'%21') || str
11
- str.gsub!(/'/,'%27') || str
12
- str.gsub!(/\(/,'%28') || str
13
- str.gsub!(/\)/,'%29') || str
14
- str.gsub!(/\*/,'%2A') || str
15
- str.gsub!(/~/,'%7E') || str
16
- return str
10
+ str.gsub!(/!/, '%21') || str
11
+ str.gsub!(/'/, '%27') || str
12
+ str.gsub!(/\(/, '%28') || str
13
+ str.gsub!(/\)/, '%29') || str
14
+ str.gsub!(/\*/, '%2A') || str
15
+ str.gsub!(/~/, '%7E') || str
16
+
17
+ str
17
18
  end
18
19
  end
19
20
  end
@@ -0,0 +1,52 @@
1
+ module MediaWiki
2
+ module Watch
3
+ # Adds a page or an array of pages to the current user's watchlist.
4
+ # @param titles [Array<String>, String] An array of page titles, or a page title as a string.
5
+ # @return [Hash{String => Nil, Boolean}] Keys are page titles. Nil value means the page was missing, but it
6
+ # was watched anyway. True means the page was watched and it exists. False means the page was not watched.
7
+ # @see https://www.mediawiki.org/wiki/API:Watch MediaWiki Watch API
8
+ def watch(titles)
9
+ watch_request(titles)
10
+ end
11
+
12
+ # Removes a page or an array of pages from the current user's watchlist.
13
+ # @param (see #watch)
14
+ # @return (see #watch)
15
+ # @see https://www.mediawiki.org/wiki/API:Watch MediaWiki Watch API
16
+ def unwatch(titles)
17
+ watch_request(titles, true)
18
+ end
19
+
20
+ private
21
+
22
+ # Submits a watch action request.
23
+ # @param (see #watch)
24
+ # @param unwatch [Boolean] Whether the request should unwatch the pages or not.
25
+ # @return (see #watch)
26
+ def watch_request(titles, unwatch = false)
27
+ titles = titles.is_a?(Array) ? titles : [titles]
28
+ params = {
29
+ action: 'watch',
30
+ titles: titles.shift(get_limited(titles.length, 50, 500)).join('|'),
31
+ token: get_token('watch')
32
+ }
33
+ success_key = 'watched'
34
+ if unwatch
35
+ params[:unwatch] = 1
36
+ success_key = 'unwatched'
37
+ end
38
+
39
+ response = post(params)
40
+ ret = {}
41
+ response['watch'].each do |entry|
42
+ title = entry['title']
43
+ if entry.key?(success_key)
44
+ ret[title] = entry.key?('missing') ? nil : true
45
+ else
46
+ ret[title] = false
47
+ end
48
+ end
49
+ ret
50
+ end
51
+ end
52
+ 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.11.1
4
+ version: 1.0.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: 2016-05-02 00:00:00.000000000 Z
12
+ date: 2016-07-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httpclient
@@ -72,6 +72,7 @@ files:
72
72
  - lib/mediawiki/query/properties/properties.rb
73
73
  - lib/mediawiki/query/query.rb
74
74
  - lib/mediawiki/utils.rb
75
+ - lib/mediawiki/watch.rb
75
76
  homepage: https://github.com/ftb-gamepedia/mediawiki-butt-ruby
76
77
  licenses:
77
78
  - MIT
@@ -85,7 +86,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
85
86
  requirements:
86
87
  - - ">="
87
88
  - !ruby/object:Gem::Version
88
- version: '2.1'
89
+ version: '2.3'
89
90
  required_rubygems_version: !ruby/object:Gem::Requirement
90
91
  requirements:
91
92
  - - ">="
@@ -93,8 +94,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
94
  version: '0'
94
95
  requirements: []
95
96
  rubyforge_project:
96
- rubygems_version: 2.5.1
97
+ rubygems_version: 2.6.4
97
98
  signing_key:
98
99
  specification_version: 4
99
100
  summary: Interacting with the MediaWiki API
100
101
  test_files: []
102
+ has_rdoc: