rhack 0.3.0 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/Gemfile.lock +23 -0
- data/History.txt +22 -0
- data/Manifest.txt +1 -0
- data/README.txt +2 -2
- data/Rakefile +3 -2
- data/ext/curb/curb_easy.c +0 -4
- data/ext/curb/curb_macros.h +8 -5
- data/ext/curb/curb_multi.c +17 -22
- data/lib/frame.rb +15 -10
- data/lib/init.rb +6 -4
- data/lib/rhack/services.rb +13 -2
- data/lib/scout.rb +14 -14
- data/lib/words.rb +3 -15
- metadata +95 -88
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activesupport (3.2.7)
|
5
|
+
i18n (~> 0.6)
|
6
|
+
multi_json (~> 1.0)
|
7
|
+
hoe (3.0.6)
|
8
|
+
rake (~> 0.8)
|
9
|
+
i18n (0.6.0)
|
10
|
+
libxml-ruby (2.3.3)
|
11
|
+
multi_json (1.3.6)
|
12
|
+
rake (0.9.2.2)
|
13
|
+
rmtools (1.2.10)
|
14
|
+
activesupport (>= 2.3.8)
|
15
|
+
rake (>= 0.8.7)
|
16
|
+
|
17
|
+
PLATFORMS
|
18
|
+
ruby
|
19
|
+
|
20
|
+
DEPENDENCIES
|
21
|
+
hoe
|
22
|
+
libxml-ruby
|
23
|
+
rmtools
|
data/History.txt
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
== CHANGES
|
2
|
+
|
3
|
+
== Version 0.3
|
4
|
+
|
5
|
+
* Adjusted cookie processor in accordance with web-servers and entrust redirection process to ::Scout
|
6
|
+
* Added some shortcuts to ::Frame and Curl module
|
7
|
+
* Сonfig defaults are now taken from rails
|
8
|
+
* Removed crappy database usage from lib/words.rb
|
9
|
+
* curb_multi.c: Moved callbacks out of rb_rescue so that I could know wtf was happen there
|
10
|
+
|
11
|
+
== Version 0.2
|
12
|
+
|
13
|
+
* Nastily pulled down curb-0.8.1 extension sources and harshly patched by changes made long before, so that the core will be as modern as possible and with necessary features
|
14
|
+
* Fixed syntax for Ruby 1.9
|
15
|
+
|
16
|
+
== Version 0.1
|
17
|
+
|
18
|
+
* A long time ago in a galaxy far, far away...
|
19
|
+
* A library had been created based on Net::HTTP
|
20
|
+
* In a few months its base had been changed by curb-0.4.4 because of poorness and incovinience of Net::HTTP
|
21
|
+
* Had been made background-mode for Curl::Multi and multipart body setting for Curl::Easy so that Curl could be both sync and async
|
22
|
+
* Had been added a couple of wrappers for Curl::Easy and its results, proxy lists processor, scrapers for a few web-services, and plugin for libxml-ruby that lives at rmtools gem now
|
data/Manifest.txt
CHANGED
data/README.txt
CHANGED
data/Rakefile
CHANGED
@@ -8,7 +8,7 @@ rescue LoadError
|
|
8
8
|
end
|
9
9
|
|
10
10
|
compile_manifest
|
11
|
-
RHACK_VERSION = '0.3.
|
11
|
+
RHACK_VERSION = '0.3.3'
|
12
12
|
begin
|
13
13
|
require 'hoe'
|
14
14
|
config = Hoe.spec "rhack" do |h|
|
@@ -25,8 +25,9 @@ begin
|
|
25
25
|
#h.extra_deps << ['curb','> 0.4']
|
26
26
|
end
|
27
27
|
config.spec.extensions << 'ext/curb/extconf.rb'
|
28
|
-
rescue LoadError
|
28
|
+
rescue LoadError => e
|
29
29
|
STDERR.puts "cannot load the Hoe gem. Distribution is disabled"
|
30
|
+
raise e
|
30
31
|
rescue Exception => e
|
31
32
|
STDERR.puts "cannot load the Hoe gem, or Hoe fails. Distribution is disabled"
|
32
33
|
STDERR.puts "error message is: #{e.message}"
|
data/ext/curb/curb_easy.c
CHANGED
@@ -1832,9 +1832,6 @@ static VALUE ruby_curl_easy_on_redirect_set(int argc, VALUE *argv, VALUE self) {
|
|
1832
1832
|
static VALUE ruby_curl_easy_on_complete_set(int argc, VALUE *argv, VALUE self) {
|
1833
1833
|
CURB_HANDLER_PROC_HSETTER(ruby_curl_easy, complete_proc);
|
1834
1834
|
}
|
1835
|
-
static VALUE ruby_curl_easy_optional_callback_set(int argc, VALUE *argv, VALUE self) {
|
1836
|
-
CURB_HANDLER_PROC_HSETTER(ruby_curl_easy, callback);
|
1837
|
-
}
|
1838
1835
|
|
1839
1836
|
/*
|
1840
1837
|
* call-seq:
|
@@ -3378,7 +3375,6 @@ void init_curb_easy() {
|
|
3378
3375
|
rb_define_method(cCurlEasy, "on_missing", ruby_curl_easy_on_missing_set, -1);
|
3379
3376
|
rb_define_method(cCurlEasy, "on_redirect", ruby_curl_easy_on_redirect_set, -1);
|
3380
3377
|
rb_define_method(cCurlEasy, "on_complete", ruby_curl_easy_on_complete_set, -1);
|
3381
|
-
rb_define_method(cCurlEasy, "callback", ruby_curl_easy_optional_callback_set, -1);
|
3382
3378
|
|
3383
3379
|
rb_define_method(cCurlEasy, "http", ruby_curl_easy_perform_verb, 1);
|
3384
3380
|
rb_define_method(cCurlEasy, "http_post", ruby_curl_easy_perform_post, -1);
|
data/ext/curb/curb_macros.h
CHANGED
@@ -85,18 +85,21 @@
|
|
85
85
|
\
|
86
86
|
return oldproc; \
|
87
87
|
|
88
|
-
/* special setter for on_event handlers that take a block, same as above but stores int he opts hash
|
88
|
+
/* special setter for on_event handlers that take a block, same as above but stores int he opts hash
|
89
|
+
set proc to nil if handler == Proc::NULL; just return current proc if handler is not given
|
90
|
+
*/
|
89
91
|
#define CURB_HANDLER_PROC_HSETTER(type, handler) \
|
90
92
|
type *ptr; \
|
91
93
|
VALUE oldproc, newproc; \
|
92
94
|
\
|
93
95
|
Data_Get_Struct(self, type, ptr); \
|
94
96
|
\
|
95
|
-
oldproc = rb_hash_aref(ptr->opts, rb_easy_hkey(#handler));
|
97
|
+
oldproc = rb_hash_aref(ptr->opts, rb_easy_hkey(#handler)); \
|
96
98
|
rb_scan_args(argc, argv, "0&", &newproc); \
|
97
|
-
|
98
|
-
|
99
|
-
|
99
|
+
if ( RTEST(rb_funcall(newproc, rb_intern("b"), 0)) ) \
|
100
|
+
rb_hash_aset(ptr->opts, rb_easy_hkey(#handler), newproc); \
|
101
|
+
else if (newproc != Qnil) \
|
102
|
+
rb_hash_aset(ptr->opts, rb_easy_hkey(#handler), Qnil); \
|
100
103
|
return oldproc;
|
101
104
|
|
102
105
|
/* setter for numerics that are kept in c ints */
|
data/ext/curb/curb_multi.c
CHANGED
@@ -370,8 +370,8 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
|
|
370
370
|
|
371
371
|
if (result != 0) {
|
372
372
|
if (!rb_easy_nil("failure_proc")) {
|
373
|
-
rbce->callback_active = 1;
|
374
373
|
//callargs = rb_ary_new3(3, rb_easy_get("failure_proc"), easy, rb_curl_easy_error(result));
|
374
|
+
rbce->callback_active = 1;
|
375
375
|
//val = rb_rescue(call_status_handler2, callargs, callback_exception, Qnil);
|
376
376
|
rb_funcall( rb_easy_get("failure_proc"), idCall, 2, easy, rb_curl_easy_error(result) );
|
377
377
|
rbce->callback_active = 0;
|
@@ -380,47 +380,42 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
|
|
380
380
|
else if (!rb_easy_nil("success_proc") &&
|
381
381
|
((response_code >= 200 && response_code < 300) || response_code == 0)) {
|
382
382
|
/* NOTE: we allow response_code == 0, in the case of non http requests e.g. reading from disk */
|
383
|
-
rbce->callback_active = 1;
|
384
383
|
//callargs = rb_ary_new3(2, rb_easy_get("success_proc"), easy);
|
384
|
+
rbce->callback_active = 1;
|
385
385
|
//val = rb_rescue(call_status_handler1, callargs, callback_exception, Qnil);
|
386
386
|
rb_funcall( rb_easy_get("success_proc"), idCall, 1, easy );
|
387
387
|
rbce->callback_active = 0;
|
388
388
|
}
|
389
389
|
else if (!rb_easy_nil("redirect_proc") &&
|
390
390
|
(response_code >= 300 && response_code < 400)) {
|
391
|
+
//callargs = rb_ary_new3(3, rb_easy_get("redirect_proc"), easy, rb_curl_easy_error(result));
|
391
392
|
rbce->callback_active = 1;
|
392
|
-
|
393
|
+
//val = rb_rescue(call_status_handler2, callargs, callback_exception, Qnil);
|
394
|
+
rb_funcall( rb_easy_get("redirect_proc"), idCall, 2, easy, rb_curl_easy_error(result) );
|
393
395
|
rbce->callback_active = 0;
|
394
|
-
val = rb_rescue(call_status_handler2, callargs, callback_exception, Qnil);
|
395
396
|
}
|
396
397
|
else if (!rb_easy_nil("missing_proc") &&
|
397
398
|
(response_code >= 400 && response_code < 500)) {
|
399
|
+
//callargs = rb_ary_new3(3, rb_easy_get("missing_proc"), easy, rb_curl_easy_error(result));
|
398
400
|
rbce->callback_active = 1;
|
399
|
-
callargs = rb_ary_new3(3, rb_easy_get("missing_proc"), easy, rb_curl_easy_error(result));
|
400
|
-
rbce->callback_active = 0;
|
401
401
|
val = rb_rescue(call_status_handler2, callargs, callback_exception, Qnil);
|
402
|
-
|
402
|
+
rb_funcall( rb_easy_get("missing_proc"), idCall, 2, easy, rb_curl_easy_error(result) );
|
403
|
+
rbce->callback_active = 0;
|
404
|
+
}
|
403
405
|
else if (!rb_easy_nil("failure_proc") &&
|
404
406
|
(response_code >= 500 && response_code <= 999)) {
|
405
|
-
callargs = rb_ary_new3(3, rb_easy_get("failure_proc"), easy, rb_curl_easy_error(result));
|
407
|
+
//callargs = rb_ary_new3(3, rb_easy_get("failure_proc"), easy, rb_curl_easy_error(result));
|
406
408
|
rbce->callback_active = 1;
|
407
|
-
val = rb_rescue(call_status_handler2, callargs, callback_exception, Qnil);
|
409
|
+
//val = rb_rescue(call_status_handler2, callargs, callback_exception, Qnil);
|
410
|
+
rb_funcall( rb_easy_get("failure_proc"), idCall, 2, easy, rb_curl_easy_error(result) );
|
408
411
|
rbce->callback_active = 0;
|
409
|
-
|
410
|
-
}*/
|
412
|
+
}
|
411
413
|
|
412
|
-
if (!rb_easy_nil("complete_proc")
|
414
|
+
if (!rb_easy_nil("complete_proc")) {
|
413
415
|
rbce->callback_active = 1;
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
rb_funcall( rb_easy_get("complete_proc"), idCall, 1, easy );
|
418
|
-
}
|
419
|
-
if (!rb_easy_nil("callback")) {
|
420
|
-
//callargs = rb_ary_new3(2, rb_easy_get("callback"), easy);
|
421
|
-
//val = rb_rescue(call_status_handler1, callargs, callback_exception, Qnil);
|
422
|
-
rb_funcall( rb_easy_get("callback"), idCall, 1, easy );
|
423
|
-
}
|
416
|
+
//callargs = rb_ary_new3(2, rb_easy_get("complete_proc"), easy);
|
417
|
+
//val = rb_rescue(call_status_handler1, callargs, callback_exception, Qnil);
|
418
|
+
rb_funcall( rb_easy_get("complete_proc"), idCall, 1, easy );
|
424
419
|
rbce->callback_active = 0;
|
425
420
|
}
|
426
421
|
|
data/lib/frame.rb
CHANGED
@@ -25,7 +25,9 @@ module HTTPAccessKit
|
|
25
25
|
|
26
26
|
def initialize *args
|
27
27
|
args << 10 unless args[-1].is Fixnum
|
28
|
-
|
28
|
+
args[-2] = {} unless args[-2].is Hash
|
29
|
+
@opts = {:eval => Johnson::Enabled, :redir => true, :cp => true, :result => Page}.merge!(args[-2].kinda(Hash) ? args[-2] : {})
|
30
|
+
args[-2] = @opts
|
29
31
|
if args[0].is String
|
30
32
|
uri = args[0]
|
31
33
|
'http://' >> uri if uri !~ /^\w+:\/\//
|
@@ -61,7 +63,7 @@ module HTTPAccessKit
|
|
61
63
|
end
|
62
64
|
|
63
65
|
# opts are :eval, :json, :hash, :wait, :proc_result, :save_result, :load_scripts,
|
64
|
-
# :zip, :thread_safe, :result, :stream, :raw + any opts for Scouts in one hash
|
66
|
+
# :zip, :thread_safe, :result, :stream, :raw, :xhr + any opts for Scouts in one hash
|
65
67
|
def get *args, &callback
|
66
68
|
many, order, orders, with_opts = interpret_request *args
|
67
69
|
L.log({:many => many, :order => order, :orders => orders, :with_opts => with_opts})
|
@@ -133,15 +135,16 @@ module HTTPAccessKit
|
|
133
135
|
if !order.b and !orders.b
|
134
136
|
raise ArgumentError, "failed to run blank request#{'s' if many}, params was
|
135
137
|
(#{args.inspect[1..-2]})"
|
136
|
-
else
|
137
|
-
opts[:wait] = opts[:sync] if :sync.in opts
|
138
|
-
opts[:wait] = true if !:wait.in(opts) and
|
139
|
-
:proc_result.in(opts) ? !opts[:proc_result] : opts[:save_result]
|
140
|
-
opts[:eval] = false if opts[:json] or opts[:hash] or opts[:raw]
|
141
|
-
opts[:load_scripts] = self if opts[:load_scripts]
|
142
|
-
opts[:stream] = true if opts[:raw]
|
143
|
-
[many, order, orders, opts]
|
144
138
|
end
|
139
|
+
|
140
|
+
opts[:wait] = opts[:sync] if :sync.in opts
|
141
|
+
opts[:wait] = true if !:wait.in(opts) and
|
142
|
+
:proc_result.in(opts) ? !opts[:proc_result] : opts[:save_result]
|
143
|
+
opts[:eval] = false if opts[:json] or opts[:hash] or opts[:raw]
|
144
|
+
opts[:load_scripts] = self if opts[:load_scripts]
|
145
|
+
opts[:stream] = true if opts[:raw]
|
146
|
+
(opts[:headers] ||= {})['X-Requested-With'] = 'XMLHttpRequest' if opts[:xhr]
|
147
|
+
[many, order, orders, opts]
|
145
148
|
end
|
146
149
|
|
147
150
|
def get_cached(*links)
|
@@ -684,6 +687,8 @@ module HTTPAccessKit
|
|
684
687
|
alias :links :get_links
|
685
688
|
alias :get_href :get_link
|
686
689
|
alias :link :get_link
|
690
|
+
alias :srcs :get_srcs
|
691
|
+
alias :src :get_src
|
687
692
|
|
688
693
|
def expand_link(link)
|
689
694
|
case link
|
data/lib/init.rb
CHANGED
@@ -3,8 +3,10 @@ module HTTPAccessKit
|
|
3
3
|
include RMTools
|
4
4
|
extend RMTools
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
Dir.chdir ENV['APP_ROOT'] if ENV['APP_ROOT']
|
7
|
+
|
8
|
+
CONFIG = if defined? Rails
|
9
|
+
YAML.load(read('config/rhack.yml') || '') || {}
|
8
10
|
else
|
9
11
|
YAML.load(read(%W(config/rhack.yml rhack.yml #{File.join(ENV['HOME'], 'rhack.yml')})) || '') || {}
|
10
12
|
end
|
@@ -15,8 +17,8 @@ module HTTPAccessKit
|
|
15
17
|
|
16
18
|
L = RMLogger.new(CONFIG.logger || {})
|
17
19
|
|
18
|
-
db_config = if
|
19
|
-
YAML.load(read(
|
20
|
+
db_config = if defined? Rails
|
21
|
+
YAML.load(read('config/database.yml'))[ENV["RAILS_ENV"]]
|
20
22
|
else
|
21
23
|
CONFIG.db || File.join(ENV['HOME'], 'db.yml')
|
22
24
|
end
|
data/lib/rhack/services.rb
CHANGED
@@ -10,11 +10,22 @@ module HTTPAccessKit
|
|
10
10
|
|
11
11
|
def initialize(service, frame, *args)
|
12
12
|
@service = service
|
13
|
-
|
13
|
+
# first argument should be a string so that frame won't be static
|
14
|
+
@f = frame || Frame(self.class::URI[service] || self.class::URI[:login], *args)
|
14
15
|
end
|
15
16
|
|
16
17
|
def go(*args, &block)
|
17
|
-
__send__(@service, *args, &block)
|
18
|
+
__send__(@service, *args, &block)
|
19
|
+
rescue
|
20
|
+
L < $!
|
21
|
+
Curl.reload
|
22
|
+
end
|
23
|
+
|
24
|
+
def scrape!(page)
|
25
|
+
__send__(:"scrape_#{@service}", page)
|
26
|
+
if url = next_url(page)
|
27
|
+
@f.get(url) {|next_page| scrape!(next_page)}
|
28
|
+
end
|
18
29
|
end
|
19
30
|
|
20
31
|
def inspect
|
data/lib/scout.rb
CHANGED
@@ -337,8 +337,8 @@ module HTTPAccessKit
|
|
337
337
|
# exc = ['0chan.ru', '2-ch.ru', 'www.nomer.org', 'nomer.org'].select_in('http://www.nomer.org') = ['www.nomer.org', 'nomer.org']
|
338
338
|
exc = (@@retry.keys + @retry.keys).select_in @root
|
339
339
|
return false if !exc.b
|
340
|
-
# ['www.nomer.org', 'nomer.org'].every |www| '
|
341
|
-
|
340
|
+
# ['www.nomer.org', 'nomer.org'].every |www| 'TimeoutError'.in({'nomer.org' => 'TimeoutError'}[www])} ?
|
341
|
+
exc.no? {|e| err[0].self_name.in((@@retry[e] || []) + @retry[e])}
|
342
342
|
end
|
343
343
|
|
344
344
|
def loaded?
|
@@ -356,25 +356,25 @@ module HTTPAccessKit
|
|
356
356
|
raise e
|
357
357
|
end
|
358
358
|
|
359
|
-
def load(path=@path, headers={}, not_redir=1, relvl=10)
|
359
|
+
def load(path=@path, headers={}, not_redir=1, relvl=10, &callback)
|
360
360
|
@http.path = path = fix(path)
|
361
361
|
@http.headers = mkHeader(path).merge!(headers)
|
362
|
-
if not_redir.b
|
363
|
-
@http.follow_location = false
|
364
|
-
else
|
365
|
-
@http.follow_location = true
|
366
|
-
@http.max_redirects = relvl
|
367
|
-
end
|
368
362
|
@http.timeout = @timeout
|
369
363
|
|
370
364
|
@http.on_complete {|c|
|
371
365
|
@error = nil
|
372
366
|
@outdated = true
|
373
367
|
ProcCookies c.res if @cookieProc
|
374
|
-
|
368
|
+
# We cannot just cancel on_complete in on_redirect block
|
369
|
+
# because loadGet will immediately reset on_complete back
|
370
|
+
if c.res.code.in(300..399) and !not_redir.b and (relvl -= 1) > -1 and loc = c.res.hash.location
|
371
|
+
loadGet(loc, headers: headers, relvl: relvl, redir: true, &callback)
|
372
|
+
elsif block_given?
|
373
|
+
yield c
|
374
|
+
end
|
375
375
|
}
|
376
376
|
@http.on_failure {|c, e|
|
377
|
-
@http.on_complete
|
377
|
+
@http.on_complete &Proc::NULL
|
378
378
|
@outdated = true
|
379
379
|
@error = e
|
380
380
|
if retry? e
|
@@ -397,7 +397,7 @@ module HTTPAccessKit
|
|
397
397
|
@last_method = :post
|
398
398
|
if block_given?
|
399
399
|
@post_proc = callback
|
400
|
-
|
400
|
+
else#if @http.callback != @post_proc
|
401
401
|
callback = @post_proc
|
402
402
|
end
|
403
403
|
load(uri, opts[:headers], !opts[:redir], opts[:relvl], &callback)
|
@@ -410,7 +410,7 @@ module HTTPAccessKit
|
|
410
410
|
@last_method = :get
|
411
411
|
if block_given?
|
412
412
|
@get_proc = callback
|
413
|
-
|
413
|
+
else#if @http.callback != @get_proc
|
414
414
|
callback = @get_proc
|
415
415
|
end
|
416
416
|
load(uri, opts[:headers], !opts[:redir], opts[:relvl], &callback)
|
@@ -422,7 +422,7 @@ module HTTPAccessKit
|
|
422
422
|
@last_method = :head
|
423
423
|
if block_given?
|
424
424
|
@head_proc = callback
|
425
|
-
|
425
|
+
else#if @http.callback != @head_proc
|
426
426
|
callback = @head_proc
|
427
427
|
end
|
428
428
|
emu = lambda {
|
data/lib/words.rb
CHANGED
@@ -1,20 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
if !defined? RuDict and !defined? String::RuDict
|
3
3
|
|
4
|
-
if d = RHACK::CONFIG['rudict']
|
5
|
-
|
6
|
-
String::RuDict = d
|
7
|
-
end
|
8
|
-
elsif RHACK::DB
|
9
|
-
class RuDictionary < ActiveRecord::Base
|
10
|
-
declare :rudictionary, :id => false do |t|
|
11
|
-
t.string :word
|
12
|
-
t.string :form0
|
13
|
-
t.string :form1
|
14
|
-
t.string :form2
|
15
|
-
end
|
16
|
-
String::RuDict = Hash[all.map{|w| [w.word, [w.form0, w.form1, w.form2]]}]
|
17
|
-
end
|
4
|
+
if d = RHACK::CONFIG['rudict'] and File.file? d and (d = YAML.load(read d)).is Hash
|
5
|
+
String::RuDict = d
|
18
6
|
end
|
19
7
|
|
20
8
|
end
|
@@ -30,7 +18,7 @@ class String
|
|
30
18
|
else self end
|
31
19
|
else
|
32
20
|
mod = int%10
|
33
|
-
|
21
|
+
int == 1 ? self : pluralize
|
34
22
|
end}"
|
35
23
|
end
|
36
24
|
|
metadata
CHANGED
@@ -1,97 +1,108 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rhack
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.3
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
- 0
|
10
|
-
version: 0.3.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Sergey Baev
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-08-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: rmtools
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 23
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 0
|
32
|
-
- 0
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 1.0.0
|
34
22
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: rake
|
38
23
|
prerelease: false
|
39
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.0.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
40
33
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
hash: 49
|
45
|
-
segments:
|
46
|
-
- 0
|
47
|
-
- 8
|
48
|
-
- 7
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
49
37
|
version: 0.8.7
|
50
38
|
type: :runtime
|
51
|
-
version_requirements: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
name: libxml-ruby
|
54
39
|
prerelease: false
|
55
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
56
41
|
none: false
|
57
|
-
requirements:
|
58
|
-
- -
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.8.7
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: libxml-ruby
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
65
53
|
version: 1.1.3
|
66
54
|
type: :runtime
|
67
|
-
version_requirements: *id003
|
68
|
-
- !ruby/object:Gem::Dependency
|
69
|
-
name: hoe
|
70
55
|
prerelease: false
|
71
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.1.3
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rdoc
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
72
65
|
none: false
|
73
|
-
requirements:
|
66
|
+
requirements:
|
74
67
|
- - ~>
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
|
77
|
-
segments:
|
78
|
-
- 2
|
79
|
-
- 12
|
80
|
-
version: "2.12"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '3.10'
|
81
70
|
type: :development
|
82
|
-
|
83
|
-
|
84
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '3.10'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: hoe
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '3.0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '3.0'
|
94
|
+
description: Webscraping library based on curb gem extension and libxml-ruby (and
|
95
|
+
optionally Johnson and ActiveRecord)
|
96
|
+
email:
|
85
97
|
- tinbka@gmail.com
|
86
98
|
executables: []
|
87
|
-
|
88
|
-
extensions:
|
99
|
+
extensions:
|
89
100
|
- ext/curb/extconf.rb
|
90
|
-
extra_rdoc_files:
|
101
|
+
extra_rdoc_files:
|
91
102
|
- ./Manifest.txt
|
92
103
|
- ./README.txt
|
93
104
|
- ./History.txt
|
94
|
-
files:
|
105
|
+
files:
|
95
106
|
- ext/curb/curb_errors.c
|
96
107
|
- ext/curb/curb_errors.h
|
97
108
|
- ext/curb/Makefile
|
@@ -145,6 +156,7 @@ files:
|
|
145
156
|
- test/test_rhack.rb
|
146
157
|
- test/test_scout.rb
|
147
158
|
- test/test_frame.rb
|
159
|
+
- ./Gemfile.lock
|
148
160
|
- ./LICENSE
|
149
161
|
- ./Rakefile
|
150
162
|
- ./Manifest.txt
|
@@ -153,41 +165,36 @@ files:
|
|
153
165
|
- ./Gemfile
|
154
166
|
- ./History.txt
|
155
167
|
- .gemtest
|
156
|
-
homepage: http://
|
168
|
+
homepage: http://2ch.ru
|
157
169
|
licenses: []
|
158
|
-
|
159
170
|
post_install_message:
|
160
|
-
rdoc_options:
|
171
|
+
rdoc_options:
|
161
172
|
- --main
|
162
173
|
- README.txt
|
163
|
-
require_paths:
|
174
|
+
require_paths:
|
164
175
|
- lib
|
165
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
176
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
166
177
|
none: false
|
167
|
-
requirements:
|
168
|
-
- -
|
169
|
-
- !ruby/object:Gem::Version
|
170
|
-
|
171
|
-
segments:
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
segments:
|
172
183
|
- 0
|
173
|
-
|
174
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
184
|
+
hash: -702291569
|
185
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
186
|
none: false
|
176
|
-
requirements:
|
177
|
-
- -
|
178
|
-
- !ruby/object:Gem::Version
|
179
|
-
|
180
|
-
segments:
|
181
|
-
- 0
|
182
|
-
version: "0"
|
187
|
+
requirements:
|
188
|
+
- - ! '>='
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: '0'
|
183
191
|
requirements: []
|
184
|
-
|
185
192
|
rubyforge_project: rhack
|
186
|
-
rubygems_version: 1.8.
|
193
|
+
rubygems_version: 1.8.24
|
187
194
|
signing_key:
|
188
195
|
specification_version: 3
|
189
|
-
summary:
|
190
|
-
test_files:
|
196
|
+
summary: ''
|
197
|
+
test_files:
|
191
198
|
- test/test_rhack.rb
|
192
199
|
- test/test_scout.rb
|
193
200
|
- test/test_frame.rb
|