phi 1.0.6 → 1.1.0
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 +4 -4
- data/.gitignore +2 -0
- data/lib/phi.rb +1 -0
- data/lib/phi/cli.rb +3 -2
- data/lib/phi/losophy/logger.rb +27 -0
- data/lib/phi/losophy/page.rb +2 -2
- data/lib/phi/losophy/pages.rb +15 -23
- data/lib/phi/version.rb +1 -1
- data/spec/phi/losophy_spec.rb +1 -1
- metadata +20 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67472b5ea068074087a0459cecd0d51ea0266d64
|
4
|
+
data.tar.gz: a3584eeae79e4ab9ac6fb92401e531c83b6e4358
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e267801a9bf28ae83927da2cfc59dac9b53659b661df3751c7620fbd01cea6aa8369e8f1b259cd3191836f7bc7c3350a0d58dd67ec11c46be815d00fcd1a751
|
7
|
+
data.tar.gz: 3f3b51b719297a05949107661bda2a15143b3dd108fc0b445bc910464f9cd0e57dd5270a92c323cb152075e147369a53745c146529e88fc3243cfc9f977c4155
|
data/.gitignore
CHANGED
data/lib/phi.rb
CHANGED
data/lib/phi/cli.rb
CHANGED
@@ -12,8 +12,9 @@ module Phi
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def run
|
15
|
-
|
16
|
-
|
15
|
+
Phi::Losophy.new(term).tap { |phi| puts "The Philosophy Index of #{term} is #{phi.index}." }
|
16
|
+
rescue
|
17
|
+
puts "Philosophy index cannot be calculated"
|
17
18
|
end
|
18
19
|
|
19
20
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Phi
|
2
|
+
class Losophy
|
3
|
+
module Logger
|
4
|
+
|
5
|
+
def each
|
6
|
+
super
|
7
|
+
log "Found Philosophy"
|
8
|
+
rescue Pages::MaximumPages, Pages::InfiniteLoop => e
|
9
|
+
log e.message
|
10
|
+
raise e
|
11
|
+
rescue => e
|
12
|
+
log "An unexpected error has occurred: #{e.message}"
|
13
|
+
raise e
|
14
|
+
end
|
15
|
+
|
16
|
+
def current_page=(*)
|
17
|
+
super
|
18
|
+
log "Now browsing #{current_page.term}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def log(message)
|
22
|
+
puts message
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/phi/losophy/page.rb
CHANGED
@@ -21,12 +21,12 @@ module Phi
|
|
21
21
|
"#<#{self.class.name}:#{term}>"
|
22
22
|
end
|
23
23
|
|
24
|
-
private
|
25
|
-
|
26
24
|
def next_term
|
27
25
|
Node.new(html.css(selector)).anchor.attr("href")[6..-1]
|
28
26
|
end
|
29
27
|
|
28
|
+
private
|
29
|
+
|
30
30
|
def selector
|
31
31
|
%q{#mw-content-text > p:first}# > a:first[href^='/wiki']}
|
32
32
|
end
|
data/lib/phi/losophy/pages.rb
CHANGED
@@ -3,32 +3,17 @@ module Phi
|
|
3
3
|
class Pages
|
4
4
|
include Enumerable
|
5
5
|
extend Forwardable
|
6
|
-
|
6
|
+
prepend Logger
|
7
|
+
|
7
8
|
attr_reader :losophy, :pages, :browsed
|
8
9
|
|
9
10
|
def initialize(losophy)
|
10
11
|
@losophy = losophy
|
11
12
|
@pages = []
|
12
|
-
@browsed = []
|
13
13
|
end
|
14
14
|
|
15
15
|
def each
|
16
|
-
until current_page.philosophy?
|
17
|
-
if browsed?
|
18
|
-
puts "#{current_page.term} has entered ani infinite loop and will not hit philosophy"
|
19
|
-
puts "The Philosophy Index in this case will reflect the pages from #{term} to the loop causing #{current_page.term}"
|
20
|
-
break
|
21
|
-
else
|
22
|
-
puts "Now browsing #{current_page.term}"
|
23
|
-
yield self.next
|
24
|
-
guard_max_pages!
|
25
|
-
end
|
26
|
-
end
|
27
|
-
puts "Found Philosophy" unless browsed?
|
28
|
-
end
|
29
|
-
|
30
|
-
def browsed?
|
31
|
-
browsed.include? current_page.term
|
16
|
+
yield self.next until current_page.philosophy?
|
32
17
|
end
|
33
18
|
|
34
19
|
def current_page
|
@@ -36,12 +21,13 @@ module Phi
|
|
36
21
|
end
|
37
22
|
|
38
23
|
def next
|
39
|
-
|
24
|
+
infinite_loop!
|
25
|
+
max_pages!
|
40
26
|
self.current_page = current_page.next
|
41
27
|
end
|
42
28
|
|
43
29
|
private
|
44
|
-
|
30
|
+
|
45
31
|
def_delegators :losophy, :term, :connection
|
46
32
|
|
47
33
|
def first_page
|
@@ -52,12 +38,18 @@ module Phi
|
|
52
38
|
pages << @current_page = page
|
53
39
|
end
|
54
40
|
|
55
|
-
def
|
56
|
-
return if pages.count
|
57
|
-
raise MaximumPages.new("
|
41
|
+
def max_pages!
|
42
|
+
return if pages.count < Phi.max
|
43
|
+
raise MaximumPages.new("Max pages (#{pages.count}) have been crawled")
|
44
|
+
end
|
45
|
+
|
46
|
+
def infinite_loop!
|
47
|
+
return unless pages.map(&:term).include? current_page.next_term
|
48
|
+
raise InfiniteLoop.new("#{current_page.next_term} would enter an infinite loop and will not hit philosophy")
|
58
49
|
end
|
59
50
|
|
60
51
|
MaximumPages = Class.new(StandardError)
|
52
|
+
InfiniteLoop = Class.new(StandardError)
|
61
53
|
end
|
62
54
|
end
|
63
55
|
end
|
data/lib/phi/version.rb
CHANGED
data/spec/phi/losophy_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lee Wangenheim
|
@@ -10,90 +10,90 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-04-25 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: excon
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- - ~>
|
19
|
+
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '0.32'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- - ~>
|
26
|
+
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: '0.32'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: nokogiri
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- - ~>
|
33
|
+
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: 1.6.1
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
|
-
- - ~>
|
40
|
+
- - "~>"
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: 1.6.1
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: bundler
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- - ~>
|
47
|
+
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: '1.5'
|
50
50
|
type: :development
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- - ~>
|
54
|
+
- - "~>"
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '1.5'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: pry
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - ~>
|
61
|
+
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: '0.9'
|
64
64
|
type: :development
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- - ~>
|
68
|
+
- - "~>"
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '0.9'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: rake
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - ">="
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
|
-
- -
|
82
|
+
- - ">="
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '0'
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
86
|
name: rspec
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
|
-
- -
|
89
|
+
- - ">="
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: '0'
|
92
92
|
type: :development
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
|
-
- -
|
96
|
+
- - ">="
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: '0'
|
99
99
|
description:
|
@@ -106,8 +106,8 @@ executables:
|
|
106
106
|
extensions: []
|
107
107
|
extra_rdoc_files: []
|
108
108
|
files:
|
109
|
-
- .gitignore
|
110
|
-
- .rspec
|
109
|
+
- ".gitignore"
|
110
|
+
- ".rspec"
|
111
111
|
- Gemfile
|
112
112
|
- LICENSE.txt
|
113
113
|
- README.md
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- lib/phi.rb
|
117
117
|
- lib/phi/cli.rb
|
118
118
|
- lib/phi/losophy.rb
|
119
|
+
- lib/phi/losophy/logger.rb
|
119
120
|
- lib/phi/losophy/page.rb
|
120
121
|
- lib/phi/losophy/page/node.rb
|
121
122
|
- lib/phi/losophy/pages.rb
|
@@ -135,17 +136,17 @@ require_paths:
|
|
135
136
|
- lib
|
136
137
|
required_ruby_version: !ruby/object:Gem::Requirement
|
137
138
|
requirements:
|
138
|
-
- -
|
139
|
+
- - ">="
|
139
140
|
- !ruby/object:Gem::Version
|
140
141
|
version: '0'
|
141
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
143
|
requirements:
|
143
|
-
- -
|
144
|
+
- - ">="
|
144
145
|
- !ruby/object:Gem::Version
|
145
146
|
version: '0'
|
146
147
|
requirements: []
|
147
148
|
rubyforge_project:
|
148
|
-
rubygems_version: 2.2.
|
149
|
+
rubygems_version: 2.2.2
|
149
150
|
signing_key:
|
150
151
|
specification_version: 4
|
151
152
|
summary: Command line function to output the Philosophy Index of a Wikipedia article.
|