sunflower 0.5.4 → 0.5.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -1
- data/lib/sunflower/core.rb +38 -7
- metadata +2 -2
data/README
CHANGED
data/lib/sunflower/core.rb
CHANGED
@@ -3,6 +3,29 @@ require 'rest-client'
|
|
3
3
|
require 'json'
|
4
4
|
require 'cgi'
|
5
5
|
|
6
|
+
class Hash
|
7
|
+
# Recursively, destructively merges two hashes that might contain further hashes and arrays.
|
8
|
+
# Hashes are merged using #merge!; arrays are merged using #concat.
|
9
|
+
#
|
10
|
+
# Named like this to prevent monkey-patching conflicts; is a monkey-patch because it is convenient.
|
11
|
+
# Should be considered private to Sunflower and might disappear at any time.
|
12
|
+
# Used in Sunflower#API_continued.
|
13
|
+
#
|
14
|
+
# From http://stackoverflow.com/a/2277713 , slightly modified.
|
15
|
+
def sunflower_recursive_merge!(other)
|
16
|
+
other.keys.each do |k|
|
17
|
+
if self[k].is_a?(Array) && other[k].is_a?(Array)
|
18
|
+
self[k].concat(other[k])
|
19
|
+
elsif self[k].is_a?(Hash) && other[k].is_a?(Hash)
|
20
|
+
self[k].recursive_merge!(other[k])
|
21
|
+
else
|
22
|
+
self[k] = other[k]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
self
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
6
29
|
# Main class. To start working, you have to create new Sunflower:
|
7
30
|
# s = Sunflower.new('en.wikipedia.org')
|
8
31
|
# And then log in:
|
@@ -17,7 +40,7 @@ require 'cgi'
|
|
17
40
|
#
|
18
41
|
# You can use multiple Sunflowers at once, to work on multiple wikis.
|
19
42
|
class Sunflower
|
20
|
-
VERSION = '0.5.
|
43
|
+
VERSION = '0.5.5'
|
21
44
|
|
22
45
|
INVALID_CHARS = %w(# < > [ ] | { })
|
23
46
|
INVALID_CHARS_REGEX = Regexp.union *INVALID_CHARS
|
@@ -108,6 +131,9 @@ class Sunflower
|
|
108
131
|
return type_map[type].sub 'XX', lang
|
109
132
|
end
|
110
133
|
|
134
|
+
# Used by #initialize to cache siteinfo data.
|
135
|
+
@@siteinfo = {}
|
136
|
+
|
111
137
|
# Initialize a new Sunflower working on a wiki with given URL, for ex. "pl.wikipedia.org".
|
112
138
|
# url can also be a shorthand identifier such as "b:pl" - see Sunflower.resolve_wikimedia_id for details.
|
113
139
|
#
|
@@ -141,7 +167,8 @@ class Sunflower
|
|
141
167
|
@cookies = {}
|
142
168
|
|
143
169
|
siprop = 'general|namespaces|namespacealiases|specialpagealiases|magicwords|interwikimap|dbrepllag|statistics|usergroups|extensions|fileextensions|rightsinfo|languages|skins|extensiontags|functionhooks|showhooks|variables'
|
144
|
-
@
|
170
|
+
@@siteinfo[@api_endpoint] ||= self.API(action: 'query', meta: 'siteinfo', siprop: siprop)['query']
|
171
|
+
@siteinfo = @@siteinfo[@api_endpoint]
|
145
172
|
|
146
173
|
_build_ns_map
|
147
174
|
end
|
@@ -193,8 +220,9 @@ class Sunflower
|
|
193
220
|
# Assumes action=query.
|
194
221
|
#
|
195
222
|
# By default returns an array of all API responses. Attempts to merge the responses
|
196
|
-
# into a response that would have been returned if the limit was infinite
|
197
|
-
# the
|
223
|
+
# into a response that would have been returned if the limit was infinite
|
224
|
+
# (merges the response hashes recursively using Hash#sunflower_recursive_merge!).
|
225
|
+
# merge_on is the key of response["query-continue"] that contains the continuation data.
|
198
226
|
#
|
199
227
|
# If limit given, will perform no more than this many API calls before returning.
|
200
228
|
# If limit is 1, behaves exactly like #API.
|
@@ -221,15 +249,18 @@ class Sunflower
|
|
221
249
|
|
222
250
|
# merge
|
223
251
|
merged = out[0]
|
224
|
-
meth = (merged['query'][merge_on].is_a?(Hash) ? :merge! : :concat)
|
225
|
-
|
226
252
|
out.drop(1).each do |cur|
|
227
|
-
merged
|
253
|
+
merged.recursive_merge! cur
|
228
254
|
end
|
229
255
|
|
230
256
|
return merged
|
231
257
|
end
|
232
258
|
|
259
|
+
# Returns a Sunflower::Page with the given title belonging to this Sunflower.
|
260
|
+
def page title
|
261
|
+
Sunflower::Page.new title, self
|
262
|
+
end
|
263
|
+
|
233
264
|
# Log in using given info.
|
234
265
|
def login user='', password=''
|
235
266
|
if user=='' || password==''
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sunflower
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|