cobweb 1.0.12 → 1.0.15
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.
- checksums.yaml +15 -0
- data/README.textile +2 -1
- data/lib/cobweb.rb +5 -2
- data/lib/cobweb_crawler.rb +2 -0
- data/lib/cobweb_version.rb +1 -1
- data/lib/server.rb +4 -4
- data/lib/stats.rb +2 -0
- data/public/js/jquery.flot.js +2 -2
- data/spec/http_stubs.rb +62 -62
- data/views/statistics.haml +4 -5
- metadata +5 -29
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ODVkZmRkYjU3NjVkN2U2NjEzYmNlZDQxYTI4MDc3N2Y5MzBjZjhkOA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MGU3M2EzNmJiMTk4NzdjZTY0MjJiY2M1YTQ5ZDcyOGY2ZjEzNzU0OQ==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MzI0NTc1YTM4ODYxNjVhZWE1ZDEwZjI5MWEzYzc3MmYwMzExNDdkM2U0OThl
|
10
|
+
MTRhOTA3ZGRmN2RjYWUzODlmYjgwM2U5Mzg1ZmU1OWY0YWFkMWU1ODYyMTU1
|
11
|
+
Y2ViYjNjZmZiOTExNWU0MDFiN2QzODExMzc3NTVhNjRmNGJjNmE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NTdkZWJhNTgzYzU5YjRjYzI4ZmYxMDE2NGNhZTkxZWFkMTBlZTU5MWQ0YjUw
|
14
|
+
YzAyOGQ0Y2Y1NjI1OGUyY2MxM2M0NGU0MTZhMWIzMDcwZTA3MmZhMTg4NmUx
|
15
|
+
YzE5NWZhZjljZTM5NzI5MWFhODQ1MDI1YjI3Zjc0MjlhODdhNjE=
|
data/README.textile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
h1. Cobweb v1.0.
|
2
|
+
h1. Cobweb v1.0.15
|
3
3
|
|
4
4
|
"@cobweb_gem":https://twitter.com/cobweb_gem
|
5
5
|
!https://badge.fury.io/rb/cobweb.png!:http://badge.fury.io/rb/cobweb
|
@@ -106,6 +106,7 @@ Creates a new crawler object based on a base_url
|
|
106
106
|
** :crawl_id - the id used internally for identifying the crawl. Can be used by the processing job to seperate crawls
|
107
107
|
** :internal_urls - an array of urls with * wildcards that represent urls internal to the site (ie pages within the same domain)
|
108
108
|
** :external_urls - an array of urls with * wildcards that represent urls external to the site (overrides internal_urls)
|
109
|
+
** :seed_urls - an array of urls that are put into the queue regardless of any other setting, combine with {:external_urls => "*"} to limit to seed urls
|
109
110
|
** :obey_robots - boolean determining if robots.txt should be honoured. (default: false)
|
110
111
|
** :user_agent - user agent string to match in robots.txt (not sent as user_agent of requests yet) (default: cobweb)
|
111
112
|
** :crawl_limit_by_page - sets the crawl counter to only use html page types when counting objects crawled
|
data/lib/cobweb.rb
CHANGED
@@ -49,6 +49,7 @@ class Cobweb
|
|
49
49
|
default_redis_options_to Hash.new
|
50
50
|
default_internal_urls_to []
|
51
51
|
default_external_urls_to []
|
52
|
+
default_seed_urls_to []
|
52
53
|
default_first_page_redirect_internal_to true
|
53
54
|
default_text_mime_types_to ["text/*", "application/xhtml+xml"]
|
54
55
|
default_obey_robots_to false
|
@@ -80,6 +81,8 @@ class Cobweb
|
|
80
81
|
@redis.hset "statistics", "queued_at", DateTime.now
|
81
82
|
@redis.set("crawl-counter", 0)
|
82
83
|
@redis.set("queue-counter", 1)
|
84
|
+
|
85
|
+
@options[:seed_urls].map{|link| @redis.sadd "queued", link }
|
83
86
|
|
84
87
|
@stats = Stats.new(request)
|
85
88
|
@stats.start_crawl(request)
|
@@ -138,10 +141,10 @@ class Cobweb
|
|
138
141
|
# check if it has already been cached
|
139
142
|
if ((@options[:cache_type] == :crawl_based && redis.get(unique_id)) || (@options[:cache_type] == :full && full_redis.get(unique_id))) && @options[:cache]
|
140
143
|
if @options[:cache_type] == :crawl_based
|
141
|
-
puts "Cache hit for #{url}" unless @options[:quiet]
|
144
|
+
puts "Cache hit in crawl for #{url}" #unless @options[:quiet]
|
142
145
|
content = HashUtil.deep_symbolize_keys(Marshal.load(redis.get(unique_id)))
|
143
146
|
else
|
144
|
-
puts "Cache hit for #{url}" unless @options[:quiet]
|
147
|
+
puts "Cache hit for #{url}" #unless @options[:quiet]
|
145
148
|
content = HashUtil.deep_symbolize_keys(Marshal.load(full_redis.get(unique_id)))
|
146
149
|
end
|
147
150
|
else
|
data/lib/cobweb_crawler.rb
CHANGED
@@ -23,6 +23,8 @@ class CobwebCrawler
|
|
23
23
|
@redis = Redis::Namespace.new("cobweb-#{Cobweb.version}-#{@crawl_id}", :redis => Redis.new(@options[:redis_options]))
|
24
24
|
@options[:internal_urls] = [] if @options[:internal_urls].nil?
|
25
25
|
@options[:internal_urls].map{|url| @redis.sadd("internal_urls", url)}
|
26
|
+
@options[:seed_urls] = [] if @options[:seed_urls].nil?
|
27
|
+
@options[:seed_urls].map{|link| @redis.sadd "queued", link }
|
26
28
|
|
27
29
|
@options[:crawl_linked_external] = false unless @options.has_key? :crawl_linked_external
|
28
30
|
|
data/lib/cobweb_version.rb
CHANGED
data/lib/server.rb
CHANGED
@@ -7,6 +7,7 @@ class Server < Sinatra::Base
|
|
7
7
|
set :root, File.dirname(__FILE__)
|
8
8
|
set :views, settings.root + '/../views'
|
9
9
|
set :public_folder, settings.root + '/../public'
|
10
|
+
set :bind, '0.0.0.0'
|
10
11
|
enable :static
|
11
12
|
|
12
13
|
# Sinatra Dashboard
|
@@ -26,6 +27,7 @@ class Server < Sinatra::Base
|
|
26
27
|
:minute_totals => redis.hgetall("minute_totals"),
|
27
28
|
})
|
28
29
|
@crawls << stats
|
30
|
+
@crawls.sort!{|a,b| b[:statistics][:crawl_started_at] <=> a[:statistics][:crawl_started_at]}
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
@@ -63,10 +65,8 @@ class Server < Sinatra::Base
|
|
63
65
|
:pages_count => HashUtil.deep_symbolize_keys(redis.hgetall("pages_count")),
|
64
66
|
:assets_count => HashUtil.deep_symbolize_keys(redis.hgetall("assets_count"))
|
65
67
|
}
|
66
|
-
|
67
|
-
|
68
|
-
end
|
69
|
-
|
68
|
+
|
69
|
+
@dates = (1..30).to_a.reverse.map{|minutes| [(DateTime.now - (minutes/1440.0)).strftime("%Y-%m-%d %H:%M").to_sym, minutes] }
|
70
70
|
haml :statistics
|
71
71
|
end
|
72
72
|
|
data/lib/stats.rb
CHANGED
@@ -20,6 +20,7 @@ class Stats
|
|
20
20
|
@redis.hset "crawl_details", key, options[key].to_s
|
21
21
|
end
|
22
22
|
end
|
23
|
+
@redis.hset "statistics", "crawl_started_at", DateTime.now
|
23
24
|
@redis.hset "statistics", "current_status", CobwebCrawlHelper::STARTING
|
24
25
|
end
|
25
26
|
|
@@ -31,6 +32,7 @@ class Stats
|
|
31
32
|
else
|
32
33
|
@redis.hset "statistics", "current_status", CobwebCrawlHelper::FINISHED
|
33
34
|
end
|
35
|
+
@redis.hset "statistics", "crawl_finished_at", DateTime.now
|
34
36
|
#@redis.del "crawl_details"
|
35
37
|
end
|
36
38
|
|
data/public/js/jquery.flot.js
CHANGED
@@ -56,7 +56,7 @@
|
|
56
56
|
xaxis: {
|
57
57
|
show: null, // null = auto-detect, true = always, false = never
|
58
58
|
position: "bottom", // or "top"
|
59
|
-
mode:
|
59
|
+
mode: "time", // null or "time"
|
60
60
|
color: null, // base color, labels, ticks
|
61
61
|
tickColor: null, // possibly different color of ticks, e.g. "rgba(0,0,0,0.15)"
|
62
62
|
transform: null, // null or f: number -> number to transform axis
|
@@ -77,7 +77,7 @@
|
|
77
77
|
tickSize: null, // number or [number, "unit"]
|
78
78
|
minTickSize: null, // number or [number, "unit"]
|
79
79
|
monthNames: null, // list of names of months
|
80
|
-
timeformat:
|
80
|
+
timeformat: "%H:%M", // format string to use
|
81
81
|
twelveHourClock: false // 12 or 24 time in time mode
|
82
82
|
},
|
83
83
|
yaxis: {
|
data/spec/http_stubs.rb
CHANGED
@@ -21,75 +21,75 @@ module HttpStubs
|
|
21
21
|
:"X-XSS-Protection" => "1; mode=block"}
|
22
22
|
|
23
23
|
|
24
|
-
@mock_http_client =
|
25
|
-
@mock_http_request =
|
26
|
-
@mock_http_robot_request =
|
27
|
-
@mock_http_redirect_request =
|
28
|
-
@mock_http_redirect_request2 =
|
24
|
+
@mock_http_client = double(Net::HTTP)
|
25
|
+
@mock_http_request = double(Net::HTTPRequest)
|
26
|
+
@mock_http_robot_request = double(Net::HTTPRequest)
|
27
|
+
@mock_http_redirect_request = double(Net::HTTPRequest)
|
28
|
+
@mock_http_redirect_request2 = double(Net::HTTPRequest)
|
29
29
|
|
30
|
-
@mock_http_response =
|
31
|
-
@mock_http_robot_response =
|
32
|
-
@mock_http_redirect_response =
|
33
|
-
@mock_http_redirect_response2 =
|
34
|
-
@mock_http_get =
|
30
|
+
@mock_http_response = double(Net::HTTPResponse)
|
31
|
+
@mock_http_robot_response = double(Net::HTTPResponse)
|
32
|
+
@mock_http_redirect_response = double(Net::HTTPRedirection)
|
33
|
+
@mock_http_redirect_response2 = double(Net::HTTPRedirection)
|
34
|
+
@mock_http_get = double(Net::HTTP::Get)
|
35
35
|
|
36
|
-
Net::HTTP.stub
|
37
|
-
Net::HTTP::Get.stub
|
38
|
-
Net::HTTP::Get.stub
|
39
|
-
Net::HTTP::Get.stub
|
40
|
-
Net::HTTP::Get.stub
|
41
|
-
Net::HTTP::Get.stub
|
36
|
+
Net::HTTP.stub(:new).and_return(@mock_http_client)
|
37
|
+
Net::HTTP::Get.stub(:new).and_return(@mock_http_request)
|
38
|
+
Net::HTTP::Get.stub(:new).with("/redirect.html", an_instance_of(Hash)).and_return(@mock_http_redirect_request)
|
39
|
+
Net::HTTP::Get.stub(:new).with("/robots.txt", an_instance_of(Hash)).and_return(@mock_http_robot_request)
|
40
|
+
Net::HTTP::Get.stub(:new).with("/redirect2.html", an_instance_of(Hash)).and_return(@mock_http_redirect_request2)
|
41
|
+
Net::HTTP::Get.stub(:new).with("/redirected.html", an_instance_of(Hash)).and_return(@mock_http_request)
|
42
42
|
|
43
|
-
Net::HTTP::Head.stub
|
43
|
+
Net::HTTP::Head.stub(:new).and_return(@mock_http_request)
|
44
44
|
|
45
|
-
@mock_http_client.stub
|
46
|
-
@mock_http_client.stub
|
47
|
-
@mock_http_client.stub
|
48
|
-
@mock_http_client.stub
|
49
|
-
@mock_http_client.stub
|
50
|
-
@mock_http_client.stub
|
51
|
-
@mock_http_client.stub
|
52
|
-
@mock_http_client.stub
|
53
|
-
@mock_http_client.stub
|
45
|
+
@mock_http_client.stub(:request).with(@mock_http_request).and_return(@mock_http_response)
|
46
|
+
@mock_http_client.stub(:request).with(@mock_http_robot_request).and_return(@mock_http_robot_response)
|
47
|
+
@mock_http_client.stub(:request).with(@mock_http_redirect_request).and_return(@mock_http_redirect_response)
|
48
|
+
@mock_http_client.stub(:request).with(@mock_http_redirect_request2).and_return(@mock_http_redirect_response2)
|
49
|
+
@mock_http_client.stub(:read_timeout=).and_return(nil)
|
50
|
+
@mock_http_client.stub(:open_timeout=).and_return(nil)
|
51
|
+
@mock_http_client.stub(:start).and_return(@mock_http_response)
|
52
|
+
@mock_http_client.stub(:address).and_return("www.baseurl.com")
|
53
|
+
@mock_http_client.stub(:port).and_return("80")
|
54
54
|
|
55
|
-
@mock_http_robot_response.stub
|
56
|
-
@mock_http_robot_response.stub
|
57
|
-
@mock_http_robot_response.stub
|
58
|
-
@mock_http_robot_response.stub
|
59
|
-
@mock_http_robot_response.stub
|
60
|
-
@mock_http_robot_response.stub
|
61
|
-
@mock_http_robot_response.stub
|
62
|
-
@mock_http_robot_response.stub
|
63
|
-
@mock_http_robot_response.stub
|
55
|
+
@mock_http_robot_response.stub(:code).and_return(200)
|
56
|
+
@mock_http_robot_response.stub(:body).and_return(File.open(File.dirname(__FILE__) + '/../spec/samples/robots.txt', "r").read)
|
57
|
+
@mock_http_robot_response.stub(:content_type).and_return("text/plain")
|
58
|
+
@mock_http_robot_response.stub(:[]).with("Content-Type").and_return(@default_headers["Content-Type"])
|
59
|
+
@mock_http_robot_response.stub(:[]).with("location").and_return(@default_headers["location"])
|
60
|
+
@mock_http_robot_response.stub(:[]).with("Content-Encoding").and_return(@default_headers["Content-Encoding"])
|
61
|
+
@mock_http_robot_response.stub(:content_length).and_return(1024)
|
62
|
+
@mock_http_robot_response.stub(:get_fields).with('set-cookie').and_return(["session=al98axx; expires=Fri, 31-Dec-1999 23:58:23", "query=rubyscript; expires=Fri, 31-Dec-1999 23:58:23"])
|
63
|
+
@mock_http_robot_response.stub(:to_hash).and_return(@default_headers)
|
64
64
|
|
65
|
-
@mock_http_response.stub
|
66
|
-
@mock_http_response.stub
|
67
|
-
@mock_http_response.stub
|
68
|
-
@mock_http_response.stub
|
69
|
-
@mock_http_response.stub
|
70
|
-
@mock_http_response.stub
|
71
|
-
@mock_http_response.stub
|
72
|
-
@mock_http_response.stub
|
73
|
-
@mock_http_response.stub
|
65
|
+
@mock_http_response.stub(:code).and_return(200)
|
66
|
+
@mock_http_response.stub(:content_type).and_return("text/html")
|
67
|
+
@mock_http_response.stub(:[]).with("Content-Type").and_return(@default_headers["Content-Type"])
|
68
|
+
@mock_http_response.stub(:[]).with("location").and_return(@default_headers["location"])
|
69
|
+
@mock_http_response.stub(:[]).with("Content-Encoding").and_return(@default_headers["Content-Encoding"])
|
70
|
+
@mock_http_response.stub(:content_length).and_return(1024)
|
71
|
+
@mock_http_response.stub(:body).and_return("asdf")
|
72
|
+
@mock_http_response.stub(:get_fields).with('set-cookie').and_return(["session=al98axx; expires=Fri, 31-Dec-1999 23:58:23", "query=rubyscript; expires=Fri, 31-Dec-1999 23:58:23"])
|
73
|
+
@mock_http_response.stub(:to_hash).and_return(@default_headers)
|
74
74
|
|
75
|
-
@mock_http_redirect_response.stub
|
76
|
-
@mock_http_redirect_response.stub
|
77
|
-
@mock_http_redirect_response.stub
|
78
|
-
@mock_http_redirect_response.stub
|
79
|
-
@mock_http_redirect_response.stub
|
80
|
-
@mock_http_redirect_response.stub
|
81
|
-
@mock_http_redirect_response.stub
|
82
|
-
@mock_http_redirect_response.stub
|
83
|
-
@mock_http_redirect_response.stub
|
75
|
+
@mock_http_redirect_response.stub(:code).and_return(301)
|
76
|
+
@mock_http_redirect_response.stub(:content_type).and_return("text/html")
|
77
|
+
@mock_http_redirect_response.stub(:[]).with("Content-Type").and_return(@default_headers["Content-Type"])
|
78
|
+
@mock_http_redirect_response.stub(:[]).with("location").and_return("http://redirected-to.com/redirect2.html")
|
79
|
+
@mock_http_redirect_response.stub(:[]).with("Content-Encoding").and_return(@default_headers["Content-Encoding"])
|
80
|
+
@mock_http_redirect_response.stub(:content_length).and_return(2048)
|
81
|
+
@mock_http_redirect_response.stub(:body).and_return("redirected body")
|
82
|
+
@mock_http_redirect_response.stub(:get_fields).with('set-cookie').and_return(["session=al98axx; expires=Fri, 31-Dec-1999 23:58:23", "query=rubyscript; expires=Fri, 31-Dec-1999 23:58:23"])
|
83
|
+
@mock_http_redirect_response.stub(:to_hash).and_return(@default_headers)
|
84
84
|
|
85
|
-
@mock_http_redirect_response2.stub
|
86
|
-
@mock_http_redirect_response2.stub
|
87
|
-
@mock_http_redirect_response2.stub
|
88
|
-
@mock_http_redirect_response2.stub
|
89
|
-
@mock_http_redirect_response2.stub
|
90
|
-
@mock_http_redirect_response2.stub
|
91
|
-
@mock_http_redirect_response2.stub
|
92
|
-
@mock_http_redirect_response2.stub
|
93
|
-
@mock_http_redirect_response2.stub
|
85
|
+
@mock_http_redirect_response2.stub(:code).and_return(301)
|
86
|
+
@mock_http_redirect_response2.stub(:content_type).and_return("text/html")
|
87
|
+
@mock_http_redirect_response2.stub(:[]).with("Content-Type").and_return(@default_headers["Content-Type"])
|
88
|
+
@mock_http_redirect_response2.stub(:[]).with("location").and_return("http://redirected-to.com/redirected.html")
|
89
|
+
@mock_http_redirect_response2.stub(:[]).with("Content-Encoding").and_return(@default_headers["Content-Encoding"])
|
90
|
+
@mock_http_redirect_response2.stub(:content_length).and_return(2048)
|
91
|
+
@mock_http_redirect_response2.stub(:body).and_return("redirected body")
|
92
|
+
@mock_http_redirect_response2.stub(:get_fields).with('set-cookie').and_return(["session=al98axx; expires=Fri, 31-Dec-1999 23:58:23", "query=rubyscript; expires=Fri, 31-Dec-1999 23:58:23"])
|
93
|
+
@mock_http_redirect_response2.stub(:to_hash).and_return(@default_headers)
|
94
94
|
end
|
95
95
|
end
|
data/views/statistics.haml
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
%h2 Pages and Assets
|
31
31
|
%span.hide
|
32
32
|
.content
|
33
|
-
.caption Counts of assets and pages that have been crawled
|
33
|
+
.caption Counts of assets and pages that have been crawled over the last 30 mins
|
34
34
|
%table.statics{:style => "width : 100%;"}
|
35
35
|
%thead
|
36
36
|
%tr
|
@@ -39,8 +39,7 @@
|
|
39
39
|
%th{:style => "color: #006ba0;"} Assets
|
40
40
|
|
41
41
|
%tbody
|
42
|
-
-
|
43
|
-
- date = (DateTime.now.new_offset(0) - (minutes/1440.0)).strftime("%Y-%m-%d %H:%M").to_sym
|
42
|
+
- @dates.each do |date, minutes|
|
44
43
|
%tr
|
45
44
|
%th= minutes
|
46
45
|
%td= @crawl[:pages_count][date]
|
@@ -88,7 +87,7 @@
|
|
88
87
|
|
89
88
|
%tbody
|
90
89
|
- (1..30).each do |minutes|
|
91
|
-
- date = (DateTime.now
|
90
|
+
- date = (DateTime.now - (minutes/1440.0)).strftime("%Y-%m-%d %H:%M").to_sym
|
92
91
|
%tr
|
93
92
|
%th= minutes
|
94
93
|
%td= @crawl[:status_200_count][date]
|
@@ -113,7 +112,7 @@
|
|
113
112
|
|
114
113
|
%tbody
|
115
114
|
- (1..30).each do |minutes|
|
116
|
-
- date = (DateTime.now
|
115
|
+
- date = (DateTime.now - (minutes/1440.0)).strftime("%Y-%m-%d %H:%M").to_sym
|
117
116
|
%tr
|
118
117
|
%th= minutes
|
119
118
|
%td= @crawl[:mime_text_count][date]
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cobweb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.15
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Stewart McKee
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-19 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: redis
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ! '>='
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: nokogiri
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ! '>='
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ! '>='
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: addressable
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ! '>='
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ! '>='
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rspec
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ! '>='
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ! '>='
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: awesome_print
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ! '>='
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :runtime
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ! '>='
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -94,7 +83,6 @@ dependencies:
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: sinatra
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - ! '>='
|
100
88
|
- !ruby/object:Gem::Version
|
@@ -102,7 +90,6 @@ dependencies:
|
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - ! '>='
|
108
95
|
- !ruby/object:Gem::Version
|
@@ -110,7 +97,6 @@ dependencies:
|
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: thin
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
101
|
- - ! '>='
|
116
102
|
- !ruby/object:Gem::Version
|
@@ -118,7 +104,6 @@ dependencies:
|
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
108
|
- - ! '>='
|
124
109
|
- !ruby/object:Gem::Version
|
@@ -126,7 +111,6 @@ dependencies:
|
|
126
111
|
- !ruby/object:Gem::Dependency
|
127
112
|
name: haml
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
114
|
requirements:
|
131
115
|
- - ! '>='
|
132
116
|
- !ruby/object:Gem::Version
|
@@ -134,7 +118,6 @@ dependencies:
|
|
134
118
|
type: :runtime
|
135
119
|
prerelease: false
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
121
|
requirements:
|
139
122
|
- - ! '>='
|
140
123
|
- !ruby/object:Gem::Version
|
@@ -142,7 +125,6 @@ dependencies:
|
|
142
125
|
- !ruby/object:Gem::Dependency
|
143
126
|
name: namespaced_redis
|
144
127
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
128
|
requirements:
|
147
129
|
- - ! '>='
|
148
130
|
- !ruby/object:Gem::Version
|
@@ -150,7 +132,6 @@ dependencies:
|
|
150
132
|
type: :runtime
|
151
133
|
prerelease: false
|
152
134
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
135
|
requirements:
|
155
136
|
- - ! '>='
|
156
137
|
- !ruby/object:Gem::Version
|
@@ -158,7 +139,6 @@ dependencies:
|
|
158
139
|
- !ruby/object:Gem::Dependency
|
159
140
|
name: json
|
160
141
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
142
|
requirements:
|
163
143
|
- - ! '>='
|
164
144
|
- !ruby/object:Gem::Version
|
@@ -166,7 +146,6 @@ dependencies:
|
|
166
146
|
type: :runtime
|
167
147
|
prerelease: false
|
168
148
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
149
|
requirements:
|
171
150
|
- - ! '>='
|
172
151
|
- !ruby/object:Gem::Version
|
@@ -174,7 +153,6 @@ dependencies:
|
|
174
153
|
- !ruby/object:Gem::Dependency
|
175
154
|
name: slop
|
176
155
|
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
156
|
requirements:
|
179
157
|
- - ! '>='
|
180
158
|
- !ruby/object:Gem::Version
|
@@ -182,7 +160,6 @@ dependencies:
|
|
182
160
|
type: :runtime
|
183
161
|
prerelease: false
|
184
162
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
163
|
requirements:
|
187
164
|
- - ! '>='
|
188
165
|
- !ruby/object:Gem::Version
|
@@ -562,27 +539,26 @@ files:
|
|
562
539
|
- README.textile
|
563
540
|
homepage: http://github.com/stewartmckee/cobweb
|
564
541
|
licenses: []
|
542
|
+
metadata: {}
|
565
543
|
post_install_message:
|
566
544
|
rdoc_options: []
|
567
545
|
require_paths:
|
568
546
|
- lib
|
569
547
|
required_ruby_version: !ruby/object:Gem::Requirement
|
570
|
-
none: false
|
571
548
|
requirements:
|
572
549
|
- - ! '>='
|
573
550
|
- !ruby/object:Gem::Version
|
574
551
|
version: '0'
|
575
552
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
576
|
-
none: false
|
577
553
|
requirements:
|
578
554
|
- - ! '>='
|
579
555
|
- !ruby/object:Gem::Version
|
580
556
|
version: '0'
|
581
557
|
requirements: []
|
582
558
|
rubyforge_project:
|
583
|
-
rubygems_version:
|
559
|
+
rubygems_version: 2.0.3
|
584
560
|
signing_key:
|
585
|
-
specification_version:
|
561
|
+
specification_version: 4
|
586
562
|
summary: Cobweb is a web crawler that can use resque to cluster crawls to quickly
|
587
563
|
crawl extremely large sites faster than multi-threaded crawlers. It is also a standalone
|
588
564
|
crawler that has a sophisticated statistics monitoring interface to monitor the
|