eddieroger-rwikibot 2.0.3 → 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +11 -0
- data/lib/pages.rb +28 -2
- data/lib/rwikibot.rb +7 -7
- data/lib/utilities.rb +10 -4
- metadata +1 -1
data/CHANGELOG
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
RWikiBot ChangeLog
|
2
2
|
|
3
|
+
2.0.4
|
4
|
+
- I get it - I just suck at keeping versions consistent. And Github requires incremental gemspecs.
|
5
|
+
|
6
|
+
2.0.3
|
7
|
+
- Removed an extra puts. Oops.
|
8
|
+
- Added Page::protect
|
9
|
+
- Reimplemented meets_version_requirement and references to it
|
10
|
+
|
11
|
+
2.0.2
|
12
|
+
- Random little changes. Forgot to document. Sorry.
|
13
|
+
|
3
14
|
2.0.1
|
4
15
|
- Changing gemspec so MAYBE it will be included in github gems.
|
5
16
|
|
data/lib/pages.rb
CHANGED
@@ -12,7 +12,7 @@ module Pages
|
|
12
12
|
# Creates a new Page object.
|
13
13
|
def initialize(bot, title='')
|
14
14
|
@bot = bot
|
15
|
-
puts @bot.config
|
15
|
+
#puts @bot.config
|
16
16
|
|
17
17
|
info = info(title)
|
18
18
|
@title = info['title']
|
@@ -95,6 +95,8 @@ module Pages
|
|
95
95
|
# I decided to split this up since I wanted to normalize the bot framework as much as possible, or in other words, make it as easy to use as possible. I think the sacrifice of more methods is worth having more English looking code. Its the Ruby way.
|
96
96
|
# Info will return information about the page, from namespace to normalized title, last touched, etc.
|
97
97
|
def info(titles)
|
98
|
+
raise RWBErrors::VersionTooLowError unless @bot.meets_version_requirement(1,9)
|
99
|
+
|
98
100
|
post_me = {"prop" => "info", 'titles' => titles}
|
99
101
|
info_result = @bot.make_request('query', post_me)
|
100
102
|
info_result.fetch('pages').fetch('page')
|
@@ -118,12 +120,34 @@ module Pages
|
|
118
120
|
post_me['noredirect'] = '' if noredirect
|
119
121
|
|
120
122
|
@bot.make_request('move', post_me)
|
121
|
-
end
|
123
|
+
end # move
|
124
|
+
|
125
|
+
# This method is used to protect (and unprotect!) pages. See the API for
|
126
|
+
# possible values. By default, it will lock a page to require sysop level
|
127
|
+
# privledge and never expire.
|
128
|
+
def protect(protections='edit=sysop', expiry='infinite', reason='', cascade=true)
|
129
|
+
raise RWBErrors::VersionTooLowError unless @bot.meets_version_requirement(1,12)
|
130
|
+
raise RWBErrors::NotLoggedInError unless @bot.logged_in?
|
131
|
+
|
132
|
+
post_me = {
|
133
|
+
'title' => @title ,
|
134
|
+
'token' => get_token('protect') ,
|
135
|
+
'protections' => protections ,
|
136
|
+
'expiry' => expiry ,
|
137
|
+
'reason' => reason ,
|
138
|
+
}
|
139
|
+
|
140
|
+
post_me['cascade'] = '' if cascade
|
141
|
+
@bot.make_request('protect', post_me)
|
142
|
+
end # protect
|
122
143
|
|
123
144
|
# Rollback does what it says - rolls back an article one version in the
|
124
145
|
# wiki. This is a function that requires not only a token, but a previous
|
125
146
|
# user.
|
126
147
|
def rollback(summary="", markbot=true)
|
148
|
+
raise RWBErrors::VersionTooLowError unless @bot.meets_version_requirement(1,12)
|
149
|
+
raise RWBErrors::NotLoggedInError unless @bot.logged_in?
|
150
|
+
|
127
151
|
temp_token = get_token("rollback") # special for rollback. Stupid rollback.
|
128
152
|
post_me = {
|
129
153
|
'title' => @title,
|
@@ -140,6 +164,8 @@ module Pages
|
|
140
164
|
# sure you're logged in and got a token (get_token). Options is an array
|
141
165
|
# (or hash) of extra values allowed by the API.
|
142
166
|
def save(content, summary=nil, options=nil)
|
167
|
+
raise RWBErrors::VersionTooLowError unless @bot.meets_version_requirement(1,13)
|
168
|
+
raise RWBErrors::NotLoggedInError unless @bot.logged_in?
|
143
169
|
|
144
170
|
post_me = {
|
145
171
|
'text' => "#{content}" ,
|
data/lib/rwikibot.rb
CHANGED
@@ -58,7 +58,7 @@ class RWikiBot
|
|
58
58
|
# always necessary, but bots need to log in to save changes or retrieve
|
59
59
|
# watchlists.
|
60
60
|
def login
|
61
|
-
|
61
|
+
raise VersionTooLowError unless meets_version_requirement(0,0)
|
62
62
|
|
63
63
|
post_me = {'lgname'=>@config.fetch('username'),'lgpassword'=>@config.fetch('password')}
|
64
64
|
if @config.has_key?('domain') && (@config.fetch('domain') != nil)
|
@@ -99,7 +99,7 @@ class RWikiBot
|
|
99
99
|
# elsewhere. Accepts all parameters from the API in Hash form. Default is
|
100
100
|
# namespace => 0, which is just plain pages. Nothing 'special'.
|
101
101
|
def all_pages(options = nil)
|
102
|
-
|
102
|
+
raise VersionTooLowError unless meets_version_requirement(1,9)
|
103
103
|
# This will get all pages. Limits vary based on user rights of the Bot. Set to bot.
|
104
104
|
post_me = {'list' => 'allpages', 'apnamespace' => '0', 'aplimit' => '5000'}
|
105
105
|
post_me.merge!(options) if options
|
@@ -112,7 +112,7 @@ class RWikiBot
|
|
112
112
|
# pages, and would require the bot maintainer to login to the wiki as the
|
113
113
|
# bot to set the watchlist.
|
114
114
|
def watchlist(options=nil)
|
115
|
-
|
115
|
+
raise VersionTooLowError unless meets_version_requirement(1,10)
|
116
116
|
raise NotLoggedInError unless logged_in?
|
117
117
|
post_me = {'list'=>'watchlist'}
|
118
118
|
post_me.merge!(options) if options
|
@@ -121,7 +121,7 @@ class RWikiBot
|
|
121
121
|
|
122
122
|
# This method will return Wiki-wide recent changes, almost as if looking at the Special page Recent Changes. But, in this format, a bot can handle it. Also we're using the API. And bots can't read.
|
123
123
|
def recent_changes(options=nil)
|
124
|
-
|
124
|
+
raise VersionTooLowError unless meets_version_requirement(1,10)
|
125
125
|
post_me = {"list" => "recentchanges", 'rclimit' => '5000'}
|
126
126
|
post_me.merge!(options) if options
|
127
127
|
make_request('query' , post_me).fetch('recentchanges').fetch('rc')
|
@@ -131,7 +131,7 @@ class RWikiBot
|
|
131
131
|
# want to validate log events, or even just a notify bot that checks for
|
132
132
|
# events and sends them off.
|
133
133
|
def log_events(options=nil)
|
134
|
-
|
134
|
+
raise VersionTooLowError unless meets_version_requirement(1,11)
|
135
135
|
post_me = {"list" => "logevents"}
|
136
136
|
post_me.merge!(options) if options
|
137
137
|
make_request('query', post_me).fetch('logevents').fetch('item')
|
@@ -140,7 +140,7 @@ class RWikiBot
|
|
140
140
|
# This is the only meta method. It will return site information. I chose not
|
141
141
|
# to allow it to specify, and it will only return all known properties.
|
142
142
|
def site_info(siprop='general')
|
143
|
-
|
143
|
+
raise VersionTooLowError unless meets_version_requirement(1,9)
|
144
144
|
post_me = {"meta" => "siteinfo" , "siprop" => siprop}
|
145
145
|
siteinfo_result = make_request('query', post_me)
|
146
146
|
siprop == 'general' ?
|
@@ -150,7 +150,7 @@ class RWikiBot
|
|
150
150
|
|
151
151
|
# Get information about the current user
|
152
152
|
def user_info(uiprop=nil)
|
153
|
-
|
153
|
+
raise VersionTooLowError unless meets_version_requirement(1,11)
|
154
154
|
post_me = {"meta" => "userinfo" }
|
155
155
|
post_me['uiprop'] = uiprop unless uiprop.nil?
|
156
156
|
|
data/lib/utilities.rb
CHANGED
@@ -1,8 +1,16 @@
|
|
1
1
|
module RWBUtilities
|
2
2
|
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
def meets_version_requirement(maj, min)
|
5
|
+
major, minor = @config['api_version'].to_s.split('.')
|
6
|
+
puts "#{major} > #{maj}"
|
7
|
+
if ( major.to_i > maj.to_i ) || ( (major.to_i == maj.to_i) && (minor.to_i > min.to_i) )
|
8
|
+
return true
|
9
|
+
else
|
10
|
+
return false
|
11
|
+
end
|
12
|
+
end # meets_version_requirement
|
13
|
+
|
6
14
|
# Tests to see if a given page title is redirected to another page. Very Ruby.
|
7
15
|
def is_redirect?(title)
|
8
16
|
post_me = {'titles' => title, 'redirects'=>'', 'prop' => 'info'}
|
@@ -10,8 +18,6 @@ module RWBUtilities
|
|
10
18
|
(result['result'] == "Success") && result.has_key?("redirects")
|
11
19
|
end
|
12
20
|
|
13
|
-
# logged_in?
|
14
|
-
#
|
15
21
|
# A quick (and public) method of checking whether or not we're logged in, since I don't want @config exposed
|
16
22
|
def logged_in?
|
17
23
|
@config['logged_in']
|