cobweb 1.0.12 → 1.0.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -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=
@@ -1,5 +1,5 @@
1
1
 
2
- h1. Cobweb v1.0.12
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
@@ -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
@@ -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
 
@@ -3,7 +3,7 @@ class CobwebVersion
3
3
 
4
4
  # Returns a string of the current version
5
5
  def self.version
6
- "1.0.12"
6
+ "1.0.15"
7
7
  end
8
8
 
9
9
  end
@@ -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
- (1..30).each do |minutes|
67
- date = (DateTime.now.new_offset(0) - (minutes/1440.0)).strftime("%Y-%m-%d %H:%M").to_sym
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
 
@@ -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
 
@@ -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: null, // null or "time"
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: null, // format string to use
80
+ timeformat: "%H:%M", // format string to use
81
81
  twelveHourClock: false // 12 or 24 time in time mode
82
82
  },
83
83
  yaxis: {
@@ -21,75 +21,75 @@ module HttpStubs
21
21
  :"X-XSS-Protection" => "1; mode=block"}
22
22
 
23
23
 
24
- @mock_http_client = mock(Net::HTTP)
25
- @mock_http_request = mock(Net::HTTPRequest)
26
- @mock_http_robot_request = mock(Net::HTTPRequest)
27
- @mock_http_redirect_request = mock(Net::HTTPRequest)
28
- @mock_http_redirect_request2 = mock(Net::HTTPRequest)
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 = mock(Net::HTTPResponse)
31
- @mock_http_robot_response = mock(Net::HTTPResponse)
32
- @mock_http_redirect_response = mock(Net::HTTPRedirection)
33
- @mock_http_redirect_response2 = mock(Net::HTTPRedirection)
34
- @mock_http_get = mock(Net::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!(: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)
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!(:new).and_return(@mock_http_request)
43
+ Net::HTTP::Head.stub(:new).and_return(@mock_http_request)
44
44
 
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")
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!(: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)
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!(: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)
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!(: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)
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!(: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)
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
@@ -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
- - (1..30).each do |minutes|
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.new_offset(0) - (minutes/1440.0)).strftime("%Y-%m-%d %H:%M").to_sym
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.new_offset(0) - (minutes/1440.0)).strftime("%Y-%m-%d %H:%M").to_sym
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.12
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-15 00:00:00.000000000 Z
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: 1.8.25
559
+ rubygems_version: 2.0.3
584
560
  signing_key:
585
- specification_version: 3
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