ruby-hackernews 1.3.0 → 1.3.1
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.
- data/README.rdoc +7 -1
- data/Rakefile +1 -1
- data/lib/ruby-hackernews/domain/entry/entry.rb +9 -1
- data/lib/ruby-hackernews/domain/user.rb +5 -5
- data/lib/ruby-hackernews/services/comment_service.rb +19 -11
- data/lib/ruby-hackernews/services/page_fetcher.rb +20 -0
- data/lib/ruby-hackernews/services/parsers/text_parser.rb +15 -0
- data/lib/ruby-hackernews/services/text_service.rb +11 -0
- metadata +36 -23
data/README.rdoc
CHANGED
@@ -15,7 +15,13 @@ then, in your script:
|
|
15
15
|
|
16
16
|
require 'ruby-hackernews'
|
17
17
|
|
18
|
-
before using it.
|
18
|
+
before using it. If you want to include the namespace (RubyHackernews), add
|
19
|
+
|
20
|
+
include RubyHackernews
|
21
|
+
|
22
|
+
otherwise, you'll have to access the gem's classes adding the module, like this:
|
23
|
+
|
24
|
+
RubyHackernews::Entry.all
|
19
25
|
|
20
26
|
== Entries
|
21
27
|
|
data/Rakefile
CHANGED
@@ -14,11 +14,19 @@ module RubyHackernews
|
|
14
14
|
@user = user
|
15
15
|
@time = time
|
16
16
|
@comments_info = comments
|
17
|
+
@cache = PageFetcher.new(@comments_info.page)
|
18
|
+
end
|
19
|
+
|
20
|
+
def text
|
21
|
+
unless @text
|
22
|
+
@text = TextService.new.get_text(@cache.page)
|
23
|
+
end
|
24
|
+
return @text
|
17
25
|
end
|
18
26
|
|
19
27
|
def comments
|
20
28
|
unless @comments
|
21
|
-
@comments = CommentService.new.get_comments(@
|
29
|
+
@comments = CommentService.new.get_comments(@cache.page)
|
22
30
|
end
|
23
31
|
return @comments
|
24
32
|
end
|
@@ -13,10 +13,6 @@ module RubyHackernews
|
|
13
13
|
return LoginService.new.login(@name, password)
|
14
14
|
end
|
15
15
|
|
16
|
-
def logout
|
17
|
-
return LoginService.new.logout
|
18
|
-
end
|
19
|
-
|
20
16
|
def signup(password)
|
21
17
|
return SignupService.new.signup(@name, password)
|
22
18
|
end
|
@@ -28,7 +24,11 @@ module RubyHackernews
|
|
28
24
|
def saved(pages = 1)
|
29
25
|
return UserInfoService.new.saved(@name, pages)
|
30
26
|
end
|
31
|
-
|
27
|
+
|
28
|
+
def logout
|
29
|
+
return LoginService.new.logout
|
30
|
+
end
|
31
|
+
|
32
32
|
def comments(pages = 1)
|
33
33
|
return UserInfoService.new.comments(@name, pages)
|
34
34
|
end
|
@@ -3,24 +3,33 @@ module RubyHackernews
|
|
3
3
|
class CommentService
|
4
4
|
include MechanizeContext
|
5
5
|
|
6
|
-
def get_comments(
|
6
|
+
def get_comments(page)
|
7
|
+
table = page.search("table")[3]
|
8
|
+
return get_comments_entities(table)
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_user_comments(user)
|
12
|
+
page = agent.get(ConfigurationService.base_url + "threads?id=#{user.name}")
|
13
|
+
table = page.search("table")[2]
|
14
|
+
return get_comments_entities(table)
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_comments_entities(table)
|
7
18
|
comments = []
|
8
|
-
|
9
|
-
current_level =
|
10
|
-
|
11
|
-
page.search("//table")[3].search("table/tr").select do |tr|
|
19
|
+
target = comments
|
20
|
+
current_level = 0
|
21
|
+
table.search("table/tr").select do |tr|
|
12
22
|
tr.search("span.comment").inner_html != "[deleted]"
|
13
23
|
end.each do |tr|
|
14
24
|
comment = parse_comment(tr)
|
15
25
|
level = tr.search("img[@src='http://ycombinator.com/images/s.gif']").first['width'].to_i / 40
|
16
26
|
difference = current_level - level
|
17
|
-
target = last
|
18
27
|
(difference + 1).times do
|
19
|
-
target = target.parent
|
28
|
+
target = target.kind_of?(Comment) && target.parent ? target.parent : comments
|
20
29
|
end
|
21
|
-
target << comment
|
22
|
-
last = comment
|
23
30
|
current_level = level
|
31
|
+
target << comment
|
32
|
+
target = comment
|
24
33
|
end
|
25
34
|
return comments
|
26
35
|
end
|
@@ -59,7 +68,6 @@ module RubyHackernews
|
|
59
68
|
form.submit
|
60
69
|
return true
|
61
70
|
end
|
62
|
-
|
63
|
-
end
|
64
71
|
|
72
|
+
end
|
65
73
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
module RubyHackernews
|
3
|
+
|
4
|
+
#acts as a cache
|
5
|
+
class PageFetcher
|
6
|
+
include MechanizeContext
|
7
|
+
|
8
|
+
def initialize(page_url)
|
9
|
+
@url = page_url
|
10
|
+
end
|
11
|
+
|
12
|
+
def page
|
13
|
+
unless @page
|
14
|
+
@page = agent.get(@url)
|
15
|
+
end
|
16
|
+
return @page
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-hackernews
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: require_all
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: 1.1.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.1.0
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: mechanize
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,7 +37,12 @@ dependencies:
|
|
32
37
|
version: 1.0.0
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.0.0
|
36
46
|
description: An interface to Hacker News
|
37
47
|
email: andrea@andreadallera.com
|
38
48
|
executables: []
|
@@ -41,31 +51,34 @@ extra_rdoc_files: []
|
|
41
51
|
files:
|
42
52
|
- README.rdoc
|
43
53
|
- Rakefile
|
44
|
-
- lib/ruby-hackernews
|
45
|
-
- lib/ruby-hackernews/services/
|
46
|
-
- lib/ruby-hackernews/services/
|
54
|
+
- lib/ruby-hackernews.rb
|
55
|
+
- lib/ruby-hackernews/services/comment_service.rb
|
56
|
+
- lib/ruby-hackernews/services/entry_service.rb
|
57
|
+
- lib/ruby-hackernews/services/voting_service.rb
|
58
|
+
- lib/ruby-hackernews/services/text_service.rb
|
47
59
|
- lib/ruby-hackernews/services/parsers/entry_page_parser.rb
|
48
|
-
- lib/ruby-hackernews/services/parsers/
|
49
|
-
- lib/ruby-hackernews/services/parsers/time_info_parser.rb
|
60
|
+
- lib/ruby-hackernews/services/parsers/comments_info_parser.rb
|
50
61
|
- lib/ruby-hackernews/services/parsers/voting_info_parser.rb
|
51
62
|
- lib/ruby-hackernews/services/parsers/entry_parser.rb
|
52
|
-
- lib/ruby-hackernews/services/
|
53
|
-
- lib/ruby-hackernews/services/
|
54
|
-
- lib/ruby-hackernews/services/
|
63
|
+
- lib/ruby-hackernews/services/parsers/user_info_parser.rb
|
64
|
+
- lib/ruby-hackernews/services/parsers/link_info_parser.rb
|
65
|
+
- lib/ruby-hackernews/services/parsers/text_parser.rb
|
66
|
+
- lib/ruby-hackernews/services/parsers/time_info_parser.rb
|
55
67
|
- lib/ruby-hackernews/services/login_service.rb
|
56
|
-
- lib/ruby-hackernews/services/
|
68
|
+
- lib/ruby-hackernews/services/signup_service.rb
|
69
|
+
- lib/ruby-hackernews/services/not_authenticated_error.rb
|
70
|
+
- lib/ruby-hackernews/services/user_info_service.rb
|
57
71
|
- lib/ruby-hackernews/services/mechanize_context.rb
|
58
|
-
- lib/ruby-hackernews/services/
|
59
|
-
- lib/ruby-hackernews/services/
|
60
|
-
- lib/ruby-hackernews/domain/
|
72
|
+
- lib/ruby-hackernews/services/page_fetcher.rb
|
73
|
+
- lib/ruby-hackernews/services/configuration_service.rb
|
74
|
+
- lib/ruby-hackernews/domain/user.rb
|
61
75
|
- lib/ruby-hackernews/domain/entry/time_info.rb
|
62
|
-
- lib/ruby-hackernews/domain/entry/
|
76
|
+
- lib/ruby-hackernews/domain/entry/link_info.rb
|
63
77
|
- lib/ruby-hackernews/domain/entry/user_info.rb
|
64
|
-
- lib/ruby-hackernews/domain/entry/comments_info.rb
|
65
78
|
- lib/ruby-hackernews/domain/entry/voting_info.rb
|
66
|
-
- lib/ruby-hackernews/domain/
|
79
|
+
- lib/ruby-hackernews/domain/entry/comments_info.rb
|
80
|
+
- lib/ruby-hackernews/domain/entry/entry.rb
|
67
81
|
- lib/ruby-hackernews/domain/comment/comment.rb
|
68
|
-
- lib/ruby-hackernews.rb
|
69
82
|
homepage: http://github.com/bolthar/ruby-hackernews
|
70
83
|
licenses: []
|
71
84
|
post_install_message:
|
@@ -86,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
99
|
version: '0'
|
87
100
|
requirements: []
|
88
101
|
rubyforge_project:
|
89
|
-
rubygems_version: 1.8.
|
102
|
+
rubygems_version: 1.8.24
|
90
103
|
signing_key:
|
91
104
|
specification_version: 3
|
92
105
|
summary: An interface to Hacker News
|