rhack 0.3.0 → 0.3.3
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/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
|