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 CHANGED
@@ -1,4 +1,5 @@
1
1
  source "http://rubygems.org"
2
2
 
3
+ gem 'hoe'
3
4
  gem 'libxml-ruby'
4
5
  gem 'rmtools'
@@ -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
@@ -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
@@ -51,6 +51,7 @@ lib/init.rb
51
51
  test/test_rhack.rb
52
52
  test/test_scout.rb
53
53
  test/test_frame.rb
54
+ ./Gemfile.lock
54
55
  ./LICENSE
55
56
  ./Rakefile
56
57
  ./Manifest.txt
data/README.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  ## RHACK
2
2
 
3
- Rhack is Ruby Http ACcess Kit -- curl-based web-client for developing web-clients
4
- applications.
3
+ http://2ch.ru
4
+ Rhack is Ruby Http ACcess Kit -- curl-based web-client for developing web-clients applications.
5
5
 
6
6
  ## License
7
7
 
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ rescue LoadError
8
8
  end
9
9
 
10
10
  compile_manifest
11
- RHACK_VERSION = '0.3.0'
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}"
@@ -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);
@@ -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
- rb_hash_aset(ptr->opts, rb_easy_hkey(#handler), newproc); \
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 */
@@ -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
- callargs = rb_ary_new3(3, rb_easy_get("redirect_proc"), easy, rb_curl_easy_error(result));
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
- //rb_funcall( rb_easy_get("failure_proc"), idCall, 2, easy, rb_curl_easy_error(result) );
410
- }*/
412
+ }
411
413
 
412
- if (!rb_easy_nil("complete_proc") || !rb_easy_nil("callback")) {
414
+ if (!rb_easy_nil("complete_proc")) {
413
415
  rbce->callback_active = 1;
414
- if (!rb_easy_nil("complete_proc")) {
415
- //callargs = rb_ary_new3(2, rb_easy_get("complete_proc"), easy);
416
- //val = rb_rescue(call_status_handler1, callargs, callback_exception, Qnil);
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
 
@@ -25,7 +25,9 @@ module HTTPAccessKit
25
25
 
26
26
  def initialize *args
27
27
  args << 10 unless args[-1].is Fixnum
28
- @opts = {:eval => Johnson::Enabled, :redir => true, :cp => true, :result => Page}.merge!(args[-2].is(Hash) ? args[-2] : {})
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
@@ -3,8 +3,10 @@ module HTTPAccessKit
3
3
  include RMTools
4
4
  extend RMTools
5
5
 
6
- CONFIG = if ENV["APP_ROOT"]
7
- YAML.load(read(File.join ENV["APP_ROOT"], 'config/rhack.yml') || '') || {}
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 ENV["APP_ROOT"] and ENV["RAILS_ENV"] and File.file?(dbyml = File.join(ENV["APP_ROOT"], 'config/database.yml'))
19
- YAML.load(read(dbyml))[ENV["RAILS_ENV"]]
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
@@ -10,11 +10,22 @@ module HTTPAccessKit
10
10
 
11
11
  def initialize(service, frame, *args)
12
12
  @service = service
13
- @f = frame || Frame(self.class::URI[service], *args)
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) rescue(Curl.reload)
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
@@ -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| 'TiemoutError'.in({'nomer.org' => 'TimeoutError'}[www])} ?
341
- !exc.find {|e| !err[0].self_name.in((@@retry[e] || []) + @retry[e])}
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
- yield c if block_given?
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
- elsif @http.callback != @post_proc
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
- elsif @http.callback != @get_proc
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
- elsif @http.callback != @head_proc
425
+ else#if @http.callback != @head_proc
426
426
  callback = @head_proc
427
427
  end
428
428
  emu = lambda {
@@ -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
- if File.file? d and (d = YAML.load(read d)).is Hash
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
- mod == 1 ? self : pluralize
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
- hash: 19
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
- date: 2012-08-02 00:00:00 Z
19
- dependencies:
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
- prerelease: false
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
- requirement: &id002 !ruby/object:Gem::Requirement
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
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
56
41
  none: false
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- hash: 21
61
- segments:
62
- - 1
63
- - 1
64
- - 3
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
- requirement: &id004 !ruby/object:Gem::Requirement
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
- hash: 27
77
- segments:
78
- - 2
79
- - 12
80
- version: "2.12"
68
+ - !ruby/object:Gem::Version
69
+ version: '3.10'
81
70
  type: :development
82
- version_requirements: *id004
83
- description: Webscraping library based on curb gem extension and libxml-ruby (and optionally Johnson and ActiveRecord)
84
- email:
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://github.com/tinbka
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
- hash: 3
171
- segments:
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ segments:
172
183
  - 0
173
- version: "0"
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
- hash: 3
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.17
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