phi 1.0.6 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fc5b80eec01076e27957545b9c28aef657a88610
4
- data.tar.gz: a6275b29ab48fcbc8b914d090e9e5366fcdc4916
3
+ metadata.gz: 67472b5ea068074087a0459cecd0d51ea0266d64
4
+ data.tar.gz: a3584eeae79e4ab9ac6fb92401e531c83b6e4358
5
5
  SHA512:
6
- metadata.gz: e9f10750166283b46a4c8467bfc252ceabe7415bbec4b768814a5e56cc300ed62eae56cef6dbb1e7578ea12ebdeda6a29c2ba01b9cd3cd832049930caab1a859
7
- data.tar.gz: 6d196f84282ba0779c842f5a526a8aaff4b6675b922c3f749943e3e2471906975e1cf3501f8cb76989c842ea754732b3c151c363920a3628cb3e51fbb1acd509
6
+ metadata.gz: 9e267801a9bf28ae83927da2cfc59dac9b53659b661df3751c7620fbd01cea6aa8369e8f1b259cd3191836f7bc7c3350a0d58dd67ec11c46be815d00fcd1a751
7
+ data.tar.gz: 3f3b51b719297a05949107661bda2a15143b3dd108fc0b445bc910464f9cd0e57dd5270a92c323cb152075e147369a53745c146529e88fc3243cfc9f977c4155
data/.gitignore CHANGED
@@ -2,6 +2,8 @@
2
2
  *.rbc
3
3
  .bundle
4
4
  .config
5
+ .ruby-gemset
6
+ .ruby-version
5
7
  .yardoc
6
8
  Gemfile.lock
7
9
  InstalledFiles
data/lib/phi.rb CHANGED
@@ -8,6 +8,7 @@ module Phi
8
8
  end
9
9
 
10
10
  require 'phi/losophy'
11
+ require 'phi/losophy/logger'
11
12
  require 'phi/losophy/page'
12
13
  require 'phi/losophy/page/node'
13
14
  require 'phi/losophy/pages'
@@ -12,8 +12,9 @@ module Phi
12
12
  end
13
13
 
14
14
  def run
15
- i = Phi::Losophy.new(term).index
16
- puts "The Philosophy Index of #{term} is #{i}."
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
@@ -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
@@ -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
- browsed << current_page.term
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 guard_max_pages!
56
- return if pages.count <= Phi.max
57
- raise MaximumPages.new("max pages (#{pages.count}) have been crawled")
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
@@ -1,3 +1,3 @@
1
1
  module Phi
2
- VERSION = "1.0.6"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -9,7 +9,7 @@ describe Phi::Losophy do
9
9
  end
10
10
 
11
11
  it "can calculate the index" do
12
- expect(instance.index).to eq 19
12
+ expect(instance.index).to eq 18
13
13
  end
14
14
 
15
15
  it "injects the term correctly" do
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.6
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-03-30 00:00:00.000000000 Z
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.0
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.