stackoverflow 0.1.3 → 0.1.4
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.
- data/lib/stackoverflow.rb +59 -24
- metadata +3 -3
data/lib/stackoverflow.rb
CHANGED
@@ -97,17 +97,17 @@ module StackOverflow
|
|
97
97
|
sub_sql << "id=#{question_id}"
|
98
98
|
end
|
99
99
|
sql += sub_sql.join(' OR ')
|
100
|
-
sql += ' ORDER BY score DESC'
|
100
|
+
sql += ' ORDER BY score DESC LIMIT 0,25'
|
101
101
|
|
102
102
|
questions = []
|
103
103
|
db_error_catching do
|
104
104
|
@db.execute(sql) do |row|
|
105
|
-
questions << {
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
105
|
+
questions << { 'id' => row[0],
|
106
|
+
'score' => row[1],
|
107
|
+
'body' => row[2],
|
108
|
+
'title' => row[3],
|
109
|
+
'link' => '',
|
110
|
+
'answers' => get_answers(row[0]) }
|
111
111
|
end
|
112
112
|
end
|
113
113
|
questions
|
@@ -136,9 +136,9 @@ module StackOverflow
|
|
136
136
|
answers = []
|
137
137
|
db_error_catching do
|
138
138
|
@db.execute(sql) do |row|
|
139
|
-
answers << {
|
140
|
-
|
141
|
-
|
139
|
+
answers << { 'id' => row[0],
|
140
|
+
'score' => row[1],
|
141
|
+
'body' => row[2] }
|
142
142
|
end
|
143
143
|
end
|
144
144
|
answers
|
@@ -178,32 +178,68 @@ module StackOverflow
|
|
178
178
|
end
|
179
179
|
end
|
180
180
|
|
181
|
+
def can_resume?(remote_db_version)
|
182
|
+
can_resume = false
|
183
|
+
last_download_db_version_flagpath = File.join(@dir_path, ".last_download_db_version")
|
184
|
+
if file_exists?(last_download_db_version_flagpath)
|
185
|
+
File.open(last_download_db_version_flagpath, 'r') do |f|
|
186
|
+
can_resume = true if remote_db_version == f.read().to_i
|
187
|
+
end
|
188
|
+
end
|
189
|
+
File.open(last_download_db_version_flagpath, 'w+') { |f| f.write(remote_db_version.to_s) }
|
190
|
+
can_resume
|
191
|
+
end
|
192
|
+
|
181
193
|
def update
|
182
194
|
check_local_dir
|
183
195
|
remote_db_version = get_remote_db_version
|
184
196
|
db_version = get_db_version
|
197
|
+
can_resume = can_resume?(remote_db_version)
|
185
198
|
if db_version < remote_db_version
|
186
199
|
puts "Database update found!"
|
187
200
|
puts "Updating from version #{db_version} to version #{remote_db_version} (several GB to download - this can take a while)..."
|
188
|
-
download_all
|
201
|
+
download_all(can_resume)
|
189
202
|
set_db_version(remote_db_version)
|
190
203
|
end
|
191
204
|
puts "The database is up to date (version #{get_db_version})."
|
192
205
|
end
|
193
206
|
|
194
|
-
def
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
207
|
+
def wget_available?
|
208
|
+
available = false
|
209
|
+
ENV['PATH'].split(':').each {|folder| available = true if File.exists?(folder+'/wget')}
|
210
|
+
available
|
211
|
+
end
|
212
|
+
|
213
|
+
def download_all(can_resume)
|
214
|
+
files_names = ["stackoverflow_idx.db.gz", "stackoverflow.db.gz"]
|
215
|
+
|
216
|
+
for file_name in files_names
|
217
|
+
file_path = File.join(@dir_path, file_name)
|
218
|
+
File.delete(file_path) if file_exists?(file_path) and not can_resume
|
219
|
+
|
220
|
+
puts "Downloading #{file_path}..."
|
221
|
+
if wget_available?
|
222
|
+
wget file_name
|
223
|
+
else
|
224
|
+
puts "Warning: 'wget' utility unavailable. Install it to be able to resume failed downloads."
|
225
|
+
internal_download file_name
|
226
|
+
end
|
227
|
+
|
228
|
+
puts "Unpacking #{file_path}..."
|
229
|
+
gunzip_file file_name
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
def wget(file_name)
|
234
|
+
download_url = "http://#{@remote_hostname}" + File.join(@remote_path, file_name)
|
235
|
+
`wget -P #{@dir_path} -c #{download_url}`
|
199
236
|
end
|
200
237
|
|
201
|
-
def
|
202
|
-
puts "Downloading #{filename}..."
|
238
|
+
def internal_download(file_name)
|
203
239
|
Net::HTTP.start(@remote_hostname) do |http|
|
204
|
-
f = open(File.join(@dir_path,
|
240
|
+
f = open(File.join(@dir_path, file_name), "wb")
|
205
241
|
begin
|
206
|
-
http.request_get(File.join(@remote_path,
|
242
|
+
http.request_get(File.join(@remote_path, file_name)) do |resp|
|
207
243
|
resp.read_body do |segment|
|
208
244
|
f.write(segment)
|
209
245
|
end
|
@@ -214,9 +250,8 @@ module StackOverflow
|
|
214
250
|
end
|
215
251
|
end
|
216
252
|
|
217
|
-
def gunzip_file(
|
218
|
-
|
219
|
-
gz_file_path = File.join(@dir_path, filename)
|
253
|
+
def gunzip_file(file_name)
|
254
|
+
gz_file_path = File.join(@dir_path, file_name)
|
220
255
|
z = Zlib::Inflate.new(16+Zlib::MAX_WBITS)
|
221
256
|
|
222
257
|
File.open(gz_file_path) do |f|
|
@@ -254,7 +289,7 @@ module StackOverflow
|
|
254
289
|
else
|
255
290
|
score = 0
|
256
291
|
end
|
257
|
-
t << ["[#{nb}]", "(#{score})", question['title']]
|
292
|
+
t << ["[#{nb}]", "(#{score})", question['title'][0..60]]
|
258
293
|
nb += 1
|
259
294
|
end
|
260
295
|
t.style = {:padding_left => 2, :border_x => " ", :border_i => " ", :border_y => " "}
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 4
|
9
|
+
version: 0.1.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Xavier Antoviaque
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2012-03-
|
17
|
+
date: 2012-03-26 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|