hacker_term 0.0.6 → 0.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 +7 -0
- data/.gitignore +0 -0
- data/.ruby-version +1 -0
- data/.travis.yml +0 -5
- data/Gemfile +0 -0
- data/LICENSE.txt +0 -0
- data/README.md +0 -0
- data/Rakefile +0 -0
- data/data/comments.json +0 -0
- data/data/data.json +0 -0
- data/data/lorem.txt +0 -0
- data/hacker_term.gemspec +7 -5
- data/lib/hacker_term.rb +18 -10
- data/lib/hacker_term/comments_data.rb +0 -0
- data/lib/hacker_term/page_data.rb +4 -4
- data/lib/hacker_term/ui.rb +12 -12
- data/lib/hacker_term/version.rb +1 -1
- data/spec/comments_data_spec.rb +3 -4
- data/spec/page_data_spec.rb +31 -32
- metadata +100 -67
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c47a1dd8c8aca3cccdae227fe501dbae9bf4d075
|
4
|
+
data.tar.gz: ab1f6f819c18b7e7053f43886262b35bd6fa24dc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 42fd5b2cec0517e572e19a3fe4c2ec0049d23d6030c284ea1d310b1d217ad674577f288e29d6770b7428af1faf2dd7e81bb35af6ade50a4366a3f43eebcef38e
|
7
|
+
data.tar.gz: 7164dbac8303353e6c8a26323573dd297c4f7300db7cbe81f02ae75a46d2f38b0c3b003861c92eb8a44bdc3f1489b97e6e488654691241457b74dc27cc66d5ba
|
data/.gitignore
CHANGED
File without changes
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.3.1
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
File without changes
|
data/LICENSE.txt
CHANGED
File without changes
|
data/README.md
CHANGED
File without changes
|
data/Rakefile
CHANGED
File without changes
|
data/data/comments.json
CHANGED
File without changes
|
data/data/data.json
CHANGED
File without changes
|
data/data/lorem.txt
CHANGED
File without changes
|
data/hacker_term.gemspec
CHANGED
@@ -11,11 +11,13 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.description = %q{Read Hacker News on the Terminal}
|
12
12
|
gem.summary = %q{Allows the reading, sorting and opening of HN articles from the terminal.}
|
13
13
|
gem.homepage = "https://github.com/ciaranarcher/hacker_term"
|
14
|
-
gem.add_dependency('
|
15
|
-
gem.add_dependency('
|
16
|
-
gem.add_dependency('
|
17
|
-
gem.
|
18
|
-
|
14
|
+
gem.add_dependency('curses', '~> 1.0')
|
15
|
+
gem.add_dependency('rest-client', '~> 1.7')
|
16
|
+
gem.add_dependency('launchy', '~> 2.4')
|
17
|
+
gem.add_dependency('clipboard', '~> 1.0')
|
18
|
+
gem.add_development_dependency('rspec', '~> 2.12')
|
19
|
+
gem.add_development_dependency('bump', '~> 0.1')
|
20
|
+
|
19
21
|
gem.files = `git ls-files`.split($/)
|
20
22
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
21
23
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
data/lib/hacker_term.rb
CHANGED
@@ -21,13 +21,13 @@ module HackerTerm
|
|
21
21
|
when "Q"
|
22
22
|
@ui.close
|
23
23
|
exit
|
24
|
-
|
24
|
+
|
25
25
|
when "UP"
|
26
26
|
@page.change_line_pos :down
|
27
|
-
|
27
|
+
|
28
28
|
when "DOWN"
|
29
29
|
@page.change_line_pos :up
|
30
|
-
|
30
|
+
|
31
31
|
when "K"
|
32
32
|
@page.change_line_pos :down
|
33
33
|
|
@@ -36,23 +36,23 @@ module HackerTerm
|
|
36
36
|
|
37
37
|
when "O"
|
38
38
|
open_link(@page.selected_url)
|
39
|
-
|
39
|
+
|
40
40
|
when "D"
|
41
41
|
open_link(@page.selected_comments_url)
|
42
|
-
|
42
|
+
|
43
43
|
when "A"
|
44
44
|
load
|
45
45
|
@page.change_line_pos :reset
|
46
|
-
|
46
|
+
|
47
47
|
when "S"
|
48
48
|
@page.sort_on!(:score)
|
49
|
-
|
49
|
+
|
50
50
|
when "R"
|
51
51
|
@page.sort_on!(:rank)
|
52
|
-
|
52
|
+
|
53
53
|
when "T"
|
54
54
|
@page.sort_on!(:title)
|
55
|
-
|
55
|
+
|
56
56
|
when "C"
|
57
57
|
@page.sort_on!(:comments)
|
58
58
|
end
|
@@ -84,7 +84,15 @@ module HackerTerm
|
|
84
84
|
def read_json
|
85
85
|
local_proxy = get_local_proxy
|
86
86
|
RestClient.proxy = local_proxy unless local_proxy.nil?
|
87
|
-
RestClient.get
|
87
|
+
RestClient.get "http://hndroidapi.appspot.com/news/format/json/page/?appid=#{app_id}&guid=#{token}"
|
88
|
+
end
|
89
|
+
|
90
|
+
def app_id
|
91
|
+
"hacker_term"
|
92
|
+
end
|
93
|
+
|
94
|
+
def token
|
95
|
+
"98c64825ecc442a6b4d95a419f0f323b"
|
88
96
|
end
|
89
97
|
|
90
98
|
def get_local_proxy
|
File without changes
|
@@ -13,17 +13,17 @@ module HackerTerm
|
|
13
13
|
attr_reader :data, :mean_score, :median_score, :mode_score, :sorted_by, :line_pos
|
14
14
|
|
15
15
|
def initialize(data)
|
16
|
-
begin
|
16
|
+
begin
|
17
17
|
@data = JSON.parse(data)['items']
|
18
18
|
rescue JSON::ParserError
|
19
19
|
raise "JSON appears to be malformed: #{unescaped}" # Bomb out for now...
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
add_missing_keys!
|
23
23
|
format_numbers!
|
24
24
|
format_urls!
|
25
25
|
unescape_titles!
|
26
|
-
|
26
|
+
|
27
27
|
calculate_mean_score
|
28
28
|
calculate_median_score
|
29
29
|
calculate_mode_score
|
@@ -66,7 +66,7 @@ module HackerTerm
|
|
66
66
|
def selected_url
|
67
67
|
@data[@line_pos - 1]['url']
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
def selected_comments_url
|
71
71
|
"http://news.ycombinator.com/item?id=" + @data[@line_pos - 1]['item_id']
|
72
72
|
end
|
data/lib/hacker_term/ui.rb
CHANGED
@@ -38,7 +38,7 @@ module HackerTerm
|
|
38
38
|
def output_line(line_num, data)
|
39
39
|
setpos(line_num, 0)
|
40
40
|
padding_right = @total_width - data.length - @padding_left
|
41
|
-
padding_right = 0 if padding_right < 0
|
41
|
+
padding_right = 0 if padding_right < 0
|
42
42
|
addstr((" " * @padding_left) + data + (" " * padding_right))
|
43
43
|
end
|
44
44
|
|
@@ -50,11 +50,11 @@ module HackerTerm
|
|
50
50
|
|
51
51
|
def <<(str)
|
52
52
|
throw 'invalid type' unless str.is_a? String
|
53
|
-
output_line(next_line_num, str)
|
53
|
+
output_line(next_line_num, str)
|
54
54
|
end
|
55
55
|
|
56
56
|
def divider
|
57
|
-
output_divider(next_line_num)
|
57
|
+
output_divider(next_line_num)
|
58
58
|
end
|
59
59
|
|
60
60
|
def output(&blk)
|
@@ -75,7 +75,7 @@ module HackerTerm
|
|
75
75
|
# A nicer way to do this is always put the title last, and assume last column gets
|
76
76
|
# remaining width. That way we can just loop through our cols, rather than hardcoding
|
77
77
|
# them as per example below. I'm sticking to this because I want the title listed second.
|
78
|
-
width_excl_title = @cols.inject(0) do |width, col|
|
78
|
+
width_excl_title = @cols.inject(0) do |width, col|
|
79
79
|
width += (3 + col.length)
|
80
80
|
end
|
81
81
|
attrset color_pair(2)
|
@@ -89,7 +89,7 @@ module HackerTerm
|
|
89
89
|
output do |buff|
|
90
90
|
buff.divider
|
91
91
|
attrset color_pair(1)
|
92
|
-
buff << sprintf("Sorted by: %7s | Scores: Mean: %4.2f | Median: %4.2f | Mode: %4.2f",
|
92
|
+
buff << sprintf("Sorted by: %7s | Scores: Mean: %4.2f | Median: %4.2f | Mode: %4.2f",
|
93
93
|
sorted_by, mean, median, mode)
|
94
94
|
buff.divider
|
95
95
|
end
|
@@ -107,7 +107,7 @@ module HackerTerm
|
|
107
107
|
attrset color_pair(0)
|
108
108
|
end
|
109
109
|
|
110
|
-
self << sprintf("%4s | %-#{@title_width}s | %5s | %8s",
|
110
|
+
self << sprintf("%4s | %-#{@title_width}s | %5s | %8s",
|
111
111
|
rank, title, data['score'], data['comments'])
|
112
112
|
end
|
113
113
|
|
@@ -119,14 +119,14 @@ module HackerTerm
|
|
119
119
|
def show(page_data)
|
120
120
|
draw_header
|
121
121
|
|
122
|
-
page_data.data.each_index do |i|
|
122
|
+
page_data.data.each_index do |i|
|
123
123
|
line_data = page_data.data.fetch(i)
|
124
|
-
draw_item_line(line_data['rank'], line_data, page_data.line_pos == i + 1)
|
124
|
+
draw_item_line(line_data['rank'], line_data, page_data.line_pos == i + 1)
|
125
125
|
end
|
126
126
|
|
127
|
-
draw_footer(page_data.sorted_by,
|
128
|
-
page_data.mean_score,
|
129
|
-
page_data.median_score,
|
127
|
+
draw_footer(page_data.sorted_by,
|
128
|
+
page_data.mean_score,
|
129
|
+
page_data.median_score,
|
130
130
|
page_data.mode_score
|
131
131
|
)
|
132
132
|
end
|
@@ -161,4 +161,4 @@ module HackerTerm
|
|
161
161
|
@options ||= {}
|
162
162
|
end
|
163
163
|
end
|
164
|
-
end
|
164
|
+
end
|
data/lib/hacker_term/version.rb
CHANGED
data/spec/comments_data_spec.rb
CHANGED
@@ -8,7 +8,7 @@ module HackerTerm
|
|
8
8
|
|
9
9
|
it 'creates an array of comments' do
|
10
10
|
comments = CommentsData.new many_comments
|
11
|
-
comments.data.
|
11
|
+
expect(comments.data).to be_instance_of Array
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'removes HTML entities' do
|
@@ -29,7 +29,7 @@ module HackerTerm
|
|
29
29
|
}'
|
30
30
|
|
31
31
|
comments = CommentsData.new data
|
32
|
-
comments.data.first['comment'].
|
32
|
+
expect(comments.data.first['comment']).to_not match /&/
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'splits a long line into fixed width lines preserving words' do
|
@@ -51,8 +51,7 @@ module HackerTerm
|
|
51
51
|
}
|
52
52
|
}
|
53
53
|
comments = CommentsData.new data
|
54
|
-
p comments.data
|
55
54
|
end
|
56
55
|
end
|
57
56
|
end
|
58
|
-
end
|
57
|
+
end
|
data/spec/page_data_spec.rb
CHANGED
@@ -4,7 +4,7 @@ module HackerTerm
|
|
4
4
|
describe PageData do
|
5
5
|
describe 'formatting JSON' do
|
6
6
|
before(:each) do
|
7
|
-
@data =
|
7
|
+
@data =
|
8
8
|
'{"items":[
|
9
9
|
{
|
10
10
|
"title":"NextId",
|
@@ -26,74 +26,73 @@ module HackerTerm
|
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'adds score node' do
|
29
|
-
@pd.data.first.
|
29
|
+
expect(@pd.data.first).to have_key 'score'
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'adds comments node' do
|
33
|
-
@pd.data.first.
|
33
|
+
expect(@pd.data.first).to have_key 'comments'
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'formats score node as a number when the node didn\'t exist' do
|
37
|
-
@pd.data.first['score'].
|
37
|
+
expect(@pd.data.first['score']).to be == '0'
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'formats score node as a number when text is present' do
|
41
|
-
@pd.data.last['score'].
|
41
|
+
expect(@pd.data.last['score']).to be == '260'
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'formats comments node as a number when the node didn\'t exist' do
|
45
|
-
@pd.data.first['comments'].
|
45
|
+
expect(@pd.data.first['comments']).to be == '0'
|
46
46
|
end
|
47
47
|
|
48
48
|
it 'formats comments node as a number when text is present' do
|
49
|
-
@pd.data.last['comments'].
|
49
|
+
expect(@pd.data.last['comments']).to be == '122'
|
50
50
|
end
|
51
51
|
|
52
52
|
it 'unescapes HTML entities in title where present' do
|
53
|
-
@pd.data.last['title'].
|
53
|
+
expect(@pd.data.last['title']).to_not match /&/
|
54
54
|
end
|
55
|
-
|
56
55
|
end
|
57
56
|
|
58
57
|
describe 'calculating stats' do
|
59
58
|
before(:each) do
|
60
|
-
@page_data = PageData.new File.read './data/data.json'
|
59
|
+
@page_data = PageData.new File.read './data/data.json'
|
61
60
|
end
|
62
61
|
|
63
62
|
it 'provides a mean' do
|
64
|
-
@page_data.mean_score.
|
63
|
+
expect(@page_data.mean_score).to be == 193.59375
|
65
64
|
end
|
66
65
|
|
67
66
|
it 'provides a median' do
|
68
|
-
@page_data.median_score.
|
67
|
+
expect(@page_data.median_score).to be == 135.0
|
69
68
|
end
|
70
69
|
|
71
70
|
it 'provides a mode' do
|
72
|
-
@page_data.mode_score.
|
71
|
+
expect(@page_data.mode_score).to be == 0
|
73
72
|
end
|
74
73
|
end
|
75
|
-
|
74
|
+
|
76
75
|
describe 'formatting URLs' do
|
77
76
|
before(:each) do
|
78
77
|
@pg = PageData.new File.read './data/data.json'
|
79
78
|
end
|
80
|
-
|
79
|
+
|
81
80
|
it 'provides a URL for actual article' do
|
82
|
-
@pg.selected_url.
|
81
|
+
expect(@pg.selected_url).to be == "http://powwow.cc/"
|
83
82
|
end
|
84
|
-
|
83
|
+
|
85
84
|
it 'provides a URL for article comments' do
|
86
|
-
@pg.selected_comments_url.
|
85
|
+
expect(@pg.selected_comments_url).to be == "http://news.ycombinator.com/item?id=4924763"
|
87
86
|
end
|
88
87
|
|
89
88
|
it 'links to HN directly if URL is not absolute' do
|
90
|
-
@pg.data.last['url'].
|
89
|
+
expect(@pg.data.last['url']).to be == 'http://news.ycombinator.com/item?id=4992617'
|
91
90
|
end
|
92
91
|
end
|
93
92
|
|
94
93
|
describe 'sorting' do
|
95
94
|
before(:each) do
|
96
|
-
@data =
|
95
|
+
@data =
|
97
96
|
'{"items":[
|
98
97
|
{
|
99
98
|
"title":"First Article",
|
@@ -130,39 +129,39 @@ module HackerTerm
|
|
130
129
|
end
|
131
130
|
|
132
131
|
it 'preserves natural ordering as default' do
|
133
|
-
@pd.data.first['title'].
|
134
|
-
@pd.data.last['title'].
|
132
|
+
expect(@pd.data.first['title']).to be == 'First Article'
|
133
|
+
expect(@pd.data.last['title']).to be == 'Third Article'
|
135
134
|
end
|
136
135
|
|
137
136
|
it 'sorts by score when requested' do
|
138
137
|
@pd.sort_on!(:score)
|
139
|
-
@pd.data.first['title'].
|
140
|
-
@pd.data.last['title'].
|
138
|
+
expect(@pd.data.first['title']).to be == 'Second Article'
|
139
|
+
expect(@pd.data.last['title']).to be == 'First Article'
|
141
140
|
end
|
142
141
|
|
143
142
|
it 'sorts by number of comments when requested' do
|
144
143
|
@pd.sort_on!(:comments)
|
145
|
-
@pd.data.first['title'].
|
146
|
-
@pd.data.last['title'].
|
144
|
+
expect(@pd.data.first['title']).to be == 'First Article'
|
145
|
+
expect(@pd.data.last['title']).to be == 'Third Article'
|
147
146
|
end
|
148
147
|
|
149
148
|
it 'sorts by rank when requested' do
|
150
149
|
@pd.sort_on!(:rank)
|
151
|
-
@pd.data.first['title'].
|
152
|
-
@pd.data.last['title'].
|
150
|
+
expect(@pd.data.first['title']).to be == 'First Article'
|
151
|
+
expect(@pd.data.last['title']).to be == 'Third Article'
|
153
152
|
end
|
154
153
|
|
155
154
|
it 'sorts by title when requested' do
|
156
155
|
@pd.sort_on!(:title)
|
157
|
-
@pd.data.first['title'].
|
158
|
-
@pd.data.last['title'].
|
156
|
+
expect(@pd.data.first['title']).to be == 'First Article'
|
157
|
+
expect(@pd.data.last['title']).to be == 'Third Article'
|
159
158
|
end
|
160
159
|
|
161
160
|
it 're-sorts by rank when requested' do
|
162
161
|
@pd.sort_on!(:comments)
|
163
162
|
@pd.sort_on!(:rank)
|
164
|
-
@pd.data.first['title'].
|
165
|
-
@pd.data.last['title'].
|
163
|
+
expect(@pd.data.first['title']).to be == 'First Article'
|
164
|
+
expect(@pd.data.last['title']).to be == 'Third Article'
|
166
165
|
end
|
167
166
|
end
|
168
167
|
end
|
metadata
CHANGED
@@ -1,73 +1,110 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: hacker_term
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.0.6
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
|
-
authors:
|
6
|
+
authors:
|
8
7
|
- Ciaran Archer
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
date: 2016-07-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: curses
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
17
21
|
prerelease: false
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rest-client
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.7'
|
24
34
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: launchy
|
28
35
|
prerelease: false
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.7'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: launchy
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.4'
|
35
48
|
type: :runtime
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: clipboard
|
39
49
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.4'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: clipboard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.0'
|
46
62
|
type: :runtime
|
47
|
-
|
48
|
-
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
49
70
|
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.12'
|
76
|
+
type: :development
|
50
77
|
prerelease: false
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.12'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bump
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.1'
|
57
90
|
type: :development
|
58
|
-
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.1'
|
59
97
|
description: Read Hacker News on the Terminal
|
60
|
-
email:
|
98
|
+
email:
|
61
99
|
- ciaran.archer@gmail.com
|
62
|
-
executables:
|
100
|
+
executables:
|
63
101
|
- hacker_term
|
64
102
|
extensions: []
|
65
|
-
|
66
103
|
extra_rdoc_files: []
|
67
|
-
|
68
|
-
|
69
|
-
- .
|
70
|
-
- .travis.yml
|
104
|
+
files:
|
105
|
+
- ".gitignore"
|
106
|
+
- ".ruby-version"
|
107
|
+
- ".travis.yml"
|
71
108
|
- Gemfile
|
72
109
|
- Gemfile.lock
|
73
110
|
- LICENSE.txt
|
@@ -87,31 +124,27 @@ files:
|
|
87
124
|
- spec/page_data_spec.rb
|
88
125
|
homepage: https://github.com/ciaranarcher/hacker_term
|
89
126
|
licenses: []
|
90
|
-
|
127
|
+
metadata: {}
|
91
128
|
post_install_message:
|
92
129
|
rdoc_options: []
|
93
|
-
|
94
|
-
require_paths:
|
130
|
+
require_paths:
|
95
131
|
- lib
|
96
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
-
|
98
|
-
requirements:
|
132
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
99
134
|
- - ">="
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version:
|
102
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
-
|
104
|
-
requirements:
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
105
139
|
- - ">="
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
version:
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
108
142
|
requirements: []
|
109
|
-
|
110
143
|
rubyforge_project:
|
111
|
-
rubygems_version:
|
144
|
+
rubygems_version: 2.5.1
|
112
145
|
signing_key:
|
113
|
-
specification_version:
|
146
|
+
specification_version: 4
|
114
147
|
summary: Allows the reading, sorting and opening of HN articles from the terminal.
|
115
|
-
test_files:
|
148
|
+
test_files:
|
116
149
|
- spec/comments_data_spec.rb
|
117
150
|
- spec/page_data_spec.rb
|