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 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.