killsite 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,16 +1,17 @@
1
1
  = killsite
2
2
 
3
- Description goes here.
4
-
5
- == Contributing to killsite
6
-
7
- * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
8
- * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
9
- * Fork the project
10
- * Start a feature/bugfix branch
11
- * Commit and push until you are happy with your contribution
12
- * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
- * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
3
+ Recursively GET all the pages of a given site through hyperlinks.
4
+ The tool is for the usage of testing and profiling.
5
+
6
+ == Installation
7
+
8
+ Simply `gem install killsite`.
9
+
10
+ == Usage
11
+
12
+ killsite [website] [# of GET for each pages]
13
+
14
+ The second argument can be omitted.
14
15
 
15
16
  == Copyright
16
17
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/bin/killsite CHANGED
@@ -10,6 +10,6 @@ end
10
10
  prefix = ARGV[0]
11
11
  limit = (ARGV[1] || 1).to_i
12
12
 
13
- ks = KillSite.new(prefix, limit, true)
13
+ killer = SiteKiller.new(prefix, limit, true)
14
14
 
15
- EM.run { ks.run }
15
+ EM.run { limit.times { killer.run } }
data/killsite.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{killsite}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Andrew Liu"]
12
- s.date = %q{2011-07-15}
12
+ s.date = %q{2011-07-16}
13
13
  s.default_executable = %q{killsite}
14
14
  s.description = %q{Recursively GET the site by links, try to kill the site}
15
15
  s.email = %q{andrewliu33@gmail.com}
@@ -29,8 +29,7 @@ Gem::Specification.new do |s|
29
29
  "bin/killsite",
30
30
  "killsite.gemspec",
31
31
  "lib/killsite.rb",
32
- "test/helper.rb",
33
- "test/test_killsite.rb"
32
+ "test/helper.rb"
34
33
  ]
35
34
  s.homepage = %q{http://github.com/eggegg/killsite}
36
35
  s.licenses = ["MIT"]
data/lib/killsite.rb CHANGED
@@ -2,46 +2,48 @@ require 'bundler'
2
2
  require 'uri'
3
3
  Bundler.require
4
4
 
5
- class KillSite
5
+ class SiteKiller
6
6
  def initialize(prefix, limit = 1, verbose = false)
7
7
  @count = 1
8
- @prefix = prefix
9
- @visited = [prefix]
10
- @queue = [prefix]
8
+ @prefix = URI.parse(prefix)
9
+ @visited = { @prefix => 0 }
11
10
  @verbose = verbose
12
11
  @limit = limit
13
12
  end
14
13
 
15
- def run
16
- EM.stop if @count == 0
17
- return if @queue.empty?
18
-
19
- url = @queue.shift
14
+ def run url = nil
15
+ url ||= @prefix
20
16
 
21
17
  http = EventMachine::HttpRequest.new(url).get
22
18
  http.callback do
23
- puts "Processing '#{url}'" if @verbose
24
-
25
- Nokogiri::HTML.parse(http.response).xpath("//a[@href]").each do |link|
26
- next_url = process_url link['href']
27
- if next_url and !@visited.include? next_url
28
- puts " Queueing '#{next_url}'" if @verbose
19
+ if @visited[url] == 0
20
+ puts "Processing '#{url}'" if @verbose
21
+ Nokogiri::HTML.parse(http.response).xpath("//a[@href]").each do |link|
22
+ next_url = process_url link['href']
23
+ if next_url and !@visited.include?(next_url)
24
+ puts " Queueing '#{next_url}'" if @verbose
29
25
 
30
- @limit.times { @queue << next_url }
31
- @visited << next_url
32
- @count += @limit
33
- end
26
+ @visited[next_url] = 0
27
+ @count += @limit
28
+ @limit.times { run next_url }
29
+ end
30
+ end
31
+ print " Progress " if @verbose
32
+ else
33
+ print '*' if @verbose
34
34
  end
35
+
36
+ @visited[url] += 1
37
+ puts if @verbose and @visited[url] == @limit
35
38
  @count -= 1
36
- EM.next_tick { run }
39
+ EM.stop if @count == 0
37
40
  end
38
41
  end
39
42
 
40
- private
43
+ private
41
44
  def process_url url
42
- return nil if url =~ /^http/ and URI.parse(@prefix).host != URI.parse(url).host
43
- return nil if url =~ /^javascript/
44
- return nil if url =~ /^#/
45
- URI.join @prefix, url
45
+ return nil if url =~ /^http/ and URI.parse(@prefix.to_s).host != URI.parse(url).host
46
+ return nil if url =~ /^javascript/ or url =~ /^#/
47
+ URI.join @prefix.to_s, url
46
48
  end
47
49
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: killsite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-07-15 00:00:00.000000000 +08:00
12
+ date: 2011-07-16 00:00:00.000000000 +08:00
13
13
  default_executable: killsite
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: em-http-request
17
- requirement: &2154293760 !ruby/object:Gem::Requirement
17
+ requirement: &2157593620 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2154293760
25
+ version_requirements: *2157593620
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: nokogiri
28
- requirement: &2154293280 !ruby/object:Gem::Requirement
28
+ requirement: &2157593140 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2154293280
36
+ version_requirements: *2157593140
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: shoulda
39
- requirement: &2154292800 !ruby/object:Gem::Requirement
39
+ requirement: &2157592660 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *2154292800
47
+ version_requirements: *2157592660
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: bundler
50
- requirement: &2154292320 !ruby/object:Gem::Requirement
50
+ requirement: &2157592180 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 1.0.0
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *2154292320
58
+ version_requirements: *2157592180
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: jeweler
61
- requirement: &2154291840 !ruby/object:Gem::Requirement
61
+ requirement: &2157591700 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 1.6.4
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *2154291840
69
+ version_requirements: *2157591700
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rcov
72
- requirement: &2154291360 !ruby/object:Gem::Requirement
72
+ requirement: &2157591220 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,7 +77,7 @@ dependencies:
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *2154291360
80
+ version_requirements: *2157591220
81
81
  description: Recursively GET the site by links, try to kill the site
82
82
  email: andrewliu33@gmail.com
83
83
  executables:
@@ -98,7 +98,6 @@ files:
98
98
  - killsite.gemspec
99
99
  - lib/killsite.rb
100
100
  - test/helper.rb
101
- - test/test_killsite.rb
102
101
  has_rdoc: true
103
102
  homepage: http://github.com/eggegg/killsite
104
103
  licenses:
@@ -115,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
114
  version: '0'
116
115
  segments:
117
116
  - 0
118
- hash: 4297911674037475226
117
+ hash: -2909793090681244207
119
118
  required_rubygems_version: !ruby/object:Gem::Requirement
120
119
  none: false
121
120
  requirements:
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestKillsite < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end