sla 0.0.4 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 40e98d12594ea7a28b2dc3d13bc739052d94e5b6
4
- data.tar.gz: 7e3cfcd96379993df956f848ada469bd51d60680
3
+ metadata.gz: 50ec41399fd977f97a9987ff148f9846f1aecae2
4
+ data.tar.gz: 93d2d55e73f5f812a5615a324af9b41031a183cd
5
5
  SHA512:
6
- metadata.gz: 1097f835963ed1be41a4b71fa14aace3a9d3ea03398d182125a96bdd6c893fe9d98fd604514184b8d727590376964d26641cb97d0b03b7f5ddafbe22523920f9
7
- data.tar.gz: e2a63d7e2210d7f78863cb8032dd2128276d7ba8417bb12076f7beba40a373d93e9f85f43daeb69c43d5ab3ee9e15ca80956ba21e6a153a170d7bb0c6ff203c0
6
+ metadata.gz: eb27195220e441b517b7eac34466479117c1a4e4f195f39fe753abb1348b9270833c00278834921b80f1af92cf17cf70da51330516e339d53b28ce11d30d72a1
7
+ data.tar.gz: 465e9965dddb77655299f70d04f79694746ca81af7333052fa43f2748a3e4e397c5a9f869f5bdd6f802c278bc0662b8e37655f87c7bad58ea6e140aa3e995433
data/lib/sla.rb CHANGED
@@ -6,7 +6,6 @@ require 'docopt'
6
6
  require 'uri'
7
7
 
8
8
  require 'sla/version'
9
- require 'sla/page'
10
9
  require 'sla/link'
11
10
  require 'sla/checker'
12
11
  require 'sla/command_line'
data/lib/sla/checker.rb CHANGED
@@ -2,43 +2,30 @@ module SLA
2
2
  class Checker
3
3
  include Colsole
4
4
 
5
- attr_accessor :checked_links, :max_depth, :next_check
5
+ attr_accessor :max_depth, :checked_links
6
6
 
7
7
  def initialize
8
8
  @max_depth = 10
9
9
  @checked_links = []
10
- @next_check ||= []
11
10
  end
12
11
 
13
12
  def count
14
13
  checked_links.count
15
14
  end
16
15
 
17
- def on_check(urls, depth=1, &block)
18
- urls = [urls] if urls.is_a? String
16
+ def check(link, depth=1, &block)
17
+ link = Link.new link, depth: depth if link.is_a? String
18
+ link.validate
19
+ yield link if block_given?
19
20
 
20
- self.next_check = []
21
+ return if checked_links.include? link.url
22
+ checked_links.push link.url
21
23
 
22
- urls.each do |url|
23
- check_url url, depth, &block
24
- if depth < max_depth && !next_check.empty?
25
- on_check next_check, depth+1, &block
26
- end
27
- end
28
- end
29
-
30
- def check_url(url, depth, &_block)
31
- page = Page.new url, depth: depth
32
- page.validate
33
-
34
- yield page if block_given?
24
+ return unless link.valid?
35
25
  return if depth >= max_depth
36
- return if checked_links.include? url
37
-
38
- checked_links.push url
39
-
40
- page.links.each do |link|
41
- next_check.push link.url unless next_check.include? link.url
26
+
27
+ link.sublinks.each do |sublink|
28
+ check sublink, depth+1, &block
42
29
  end
43
30
  end
44
31
  end
@@ -40,15 +40,15 @@ module SLA
40
40
 
41
41
  log = []
42
42
 
43
- checker.on_check start_url do |page|
44
- indent = '-' * page.depth
43
+ checker.check start_url do |link|
44
+ indent = '-' * link.depth
45
45
 
46
- status = page.status
46
+ status = link.status
47
47
  colored_status = color_status status
48
48
  failed +=1 if status != '200'
49
49
 
50
- say "#{count} #{colored_status} #{indent} #{page.name}"
51
- log.push "#{count} #{status} #{indent} #{page.name}" unless @no_log
50
+ say "#{count} #{colored_status} #{indent} #{link.ident}"
51
+ log.push "#{count} #{status} #{indent} #{link.ident}" unless @no_log
52
52
  count += 1
53
53
  end
54
54
 
data/lib/sla/link.rb CHANGED
@@ -1,12 +1,59 @@
1
1
  module SLA
2
2
  class Link
3
- attr_accessor :text, :href
3
+ attr_accessor :text, :href, :status, :depth, :real_uri
4
4
  attr_reader :parent
5
5
 
6
6
  def initialize(href, opts={})
7
- @href = href
8
- @text = opts[:text]
9
- self.parent = opts[:parent] || @href
7
+ @href = href
8
+ @text = opts[:text]
9
+ @depth = opts[:depth] || 1
10
+ self.parent = opts[:parent] || @href
11
+ end
12
+
13
+ def valid?
14
+ validate
15
+ status == '200'
16
+ end
17
+
18
+ def validate
19
+ content
20
+ end
21
+
22
+ def content
23
+ @content ||= content!
24
+ end
25
+
26
+ def content!
27
+ response = Cache.get url
28
+ self.status = response.error ? '404' : '200'
29
+ self.real_uri = response.base_uri
30
+ response.content
31
+ end
32
+
33
+ def ident
34
+ full_uri.request_uri
35
+ end
36
+
37
+ def url
38
+ full_uri.to_s
39
+ end
40
+
41
+ def doc
42
+ @doc ||= Nokogiri::HTML content
43
+ end
44
+
45
+ def sublinks
46
+ @sublinks ||= sublinks!
47
+ end
48
+
49
+ def sublinks!
50
+ anchors = doc.css('a')
51
+ result = []
52
+ anchors.each do |a|
53
+ link = Link.new a['href'], text: a.text, parent: real_uri, depth: depth+1
54
+ result.push link if link.interesting?
55
+ end
56
+ result
10
57
  end
11
58
 
12
59
  def uri
@@ -26,10 +73,6 @@ module SLA
26
73
  URI.join parent, href
27
74
  end
28
75
 
29
- def url
30
- full_uri.to_s
31
- end
32
-
33
76
  def external?
34
77
  parent.host != full_uri.host
35
78
  end
data/lib/sla/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module SLA
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sla
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
@@ -165,7 +165,6 @@ files:
165
165
  - lib/sla/command_line.rb
166
166
  - lib/sla/docopt.txt
167
167
  - lib/sla/link.rb
168
- - lib/sla/page.rb
169
168
  - lib/sla/version.rb
170
169
  homepage: https://github.com/DannyBen/sla
171
170
  licenses:
data/lib/sla/page.rb DELETED
@@ -1,65 +0,0 @@
1
- module SLA
2
- class Page
3
- attr_accessor :depth, :status, :base_uri
4
- attr_reader :url
5
-
6
- def initialize(url, opts={})
7
- @url = url
8
- @base_uri = url
9
- @status = '000'
10
- self.depth = opts[:depth] if opts[:depth]
11
- end
12
-
13
- def valid?
14
- validate
15
- status == '200'
16
- end
17
-
18
- def validate
19
- content
20
- end
21
-
22
- def name
23
- @name ||= name!
24
- end
25
-
26
- def name!
27
- uri = URI.parse url
28
- if uri.request_uri.empty? || uri.request_uri == '/'
29
- url
30
- else
31
- uri.request_uri
32
- end
33
- end
34
-
35
- def content
36
- @content ||= content!
37
- end
38
-
39
- def content!
40
- response = Cache.get url
41
- self.status = response.error ? '404' : '200'
42
- self.base_uri = response.base_uri
43
- response.content
44
- end
45
-
46
- def doc
47
- @doc ||= Nokogiri::HTML content
48
- end
49
-
50
- def links
51
- @links ||= links!
52
- end
53
-
54
- def links!
55
- anchors = doc.css('a')
56
- result = []
57
- anchors.each do |a|
58
- link = Link.new a['href'], text: a.text, parent: base_uri
59
- result.push link if link.interesting?
60
- end
61
- result
62
- end
63
- end
64
-
65
- end