git-trend 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/git-trend.gemspec +2 -2
- data/lib/git_trend/ext/string.rb +1 -2
- data/lib/git_trend/rendering.rb +56 -56
- data/lib/git_trend/scraper.rb +12 -14
- data/lib/git_trend/version.rb +1 -1
- data/spec/git_trend/cli_spec.rb +59 -58
- data/spec/git_trend/scraper_spec.rb +3 -3
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f57110a790f167885bd1f37c5d6ab482e26f223b
|
4
|
+
data.tar.gz: 5b5dc73682fb47665d72651800df82270d45884a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35bcff208b8e7939bba39db0a4550d1c0577dcdd9a719fe6310df5745af195c483f3f5727ea3e826e41ac9ef8bcde1ee593f4b98de27e405ef4e03a26bb69ff2
|
7
|
+
data.tar.gz: 63d649e9d633ccc5878a25cbd17c1c27ffb5433cf6bf035999f749a76da7a32750e7779b738b3b76cd4fef18ff5a0bc4c2e3747e35e62cbab6143d8e342bf885
|
data/CHANGELOG.md
CHANGED
data/git-trend.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.email = ['terasawan@gmail.com']
|
25
25
|
spec.summary = 'cli based; show Trending repository on github'
|
26
26
|
spec.description = spec.summary
|
27
|
-
spec.homepage = 'https://github.com/rochefort/
|
27
|
+
spec.homepage = 'https://github.com/rochefort/git-trend'
|
28
28
|
spec.license = 'MIT'
|
29
29
|
|
30
30
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -43,7 +43,7 @@ Gem::Specification.new do |spec|
|
|
43
43
|
|
44
44
|
spec.add_development_dependency 'rspec', '~> 3.0.0'
|
45
45
|
spec.add_development_dependency 'rspec-its', '~> 1.0.1'
|
46
|
-
spec.add_development_dependency 'simplecov', '~> 0.
|
46
|
+
spec.add_development_dependency 'simplecov', '~> 0.9.0'
|
47
47
|
spec.add_development_dependency 'webmock', '~> 1.18.0'
|
48
48
|
|
49
49
|
spec.add_development_dependency 'coveralls'
|
data/lib/git_trend/ext/string.rb
CHANGED
data/lib/git_trend/rendering.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module GitTrend
|
2
2
|
module Rendering
|
3
|
-
|
4
3
|
def self.included(base)
|
5
4
|
base.extend(self)
|
6
5
|
end
|
@@ -10,9 +9,9 @@ module GitTrend
|
|
10
9
|
DEFAULT_RULED_LINE_SIZE = [3, 40, 10, 6, 5]
|
11
10
|
DESCRIPTION_MIN_SIZE = 20
|
12
11
|
|
13
|
-
def render(projects, describable=false)
|
12
|
+
def render(projects, describable = false)
|
14
13
|
@describable = describable
|
15
|
-
|
14
|
+
ruled_line_size(projects)
|
16
15
|
render_to_header
|
17
16
|
render_to_body(projects)
|
18
17
|
end
|
@@ -27,74 +26,75 @@ module GitTrend
|
|
27
26
|
end
|
28
27
|
|
29
28
|
private
|
30
|
-
def max_size_of(projects, attr)
|
31
|
-
projects.max_by { |project| project.send(attr).size }.send(attr).size
|
32
|
-
end
|
33
29
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
if max_name_size > @ruled_line_size[1]
|
38
|
-
@ruled_line_size[1] = max_name_size
|
39
|
-
end
|
30
|
+
def max_size_of(projects, attr)
|
31
|
+
projects.max_by { |project| project.send(attr).size }.send(attr).size
|
32
|
+
end
|
40
33
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
34
|
+
def ruled_line_size(projects)
|
35
|
+
@ruled_line_size = DEFAULT_RULED_LINE_SIZE.dup
|
36
|
+
max_name_size = max_size_of(projects, :name)
|
37
|
+
if max_name_size > @ruled_line_size[1]
|
38
|
+
@ruled_line_size[1] = max_name_size
|
39
|
+
end
|
45
40
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
description_width = terminal_width - @ruled_line_size.inject(&:+) - @ruled_line_size.size
|
50
|
-
if description_width >= DESCRIPTION_MIN_SIZE
|
51
|
-
@ruled_line_size << description_width
|
52
|
-
else
|
53
|
-
@describable = false
|
54
|
-
end
|
55
|
-
end
|
41
|
+
max_lang_size = max_size_of(projects, :lang)
|
42
|
+
if max_lang_size > @ruled_line_size[2]
|
43
|
+
@ruled_line_size[2] = max_lang_size
|
56
44
|
end
|
57
45
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
46
|
+
# setting description size
|
47
|
+
if @describable
|
48
|
+
terminal_width, _terminal_height = detect_terminal_size
|
49
|
+
description_width = terminal_width - @ruled_line_size.inject(&:+) - @ruled_line_size.size
|
50
|
+
if description_width >= DESCRIPTION_MIN_SIZE
|
51
|
+
@ruled_line_size << description_width
|
62
52
|
else
|
63
|
-
|
53
|
+
@describable = false
|
64
54
|
end
|
65
|
-
header = ['No.', 'Name', 'Lang', 'Star', 'Fork']
|
66
|
-
header << 'Description' if @describable
|
67
|
-
puts fmt % header
|
68
|
-
puts fmt % @ruled_line_size.map{ |field| '-'*field }
|
69
55
|
end
|
56
|
+
end
|
70
57
|
|
71
|
-
|
72
|
-
|
58
|
+
def render_to_header
|
59
|
+
f = @ruled_line_size
|
60
|
+
if @describable
|
61
|
+
fmt = "%#{f[0]}s %-#{f[1]}s %-#{f[2]}s %#{f[3]}s %#{f[4]}s %-#{f[5]}s"
|
62
|
+
else
|
73
63
|
fmt = "%#{f[0]}s %-#{f[1]}s %-#{f[2]}s %#{f[3]}s %#{f[4]}s"
|
74
|
-
projects.each_with_index do |project, i|
|
75
|
-
result = fmt % [i+1, project.to_a].flatten
|
76
|
-
result << " " + project.description.mb_slice(f.last).mb_ljust(f.last) if @describable
|
77
|
-
puts result
|
78
|
-
end
|
79
64
|
end
|
65
|
+
header = ['No.', 'Name', 'Lang', 'Star', 'Fork']
|
66
|
+
header << 'Description' if @describable
|
67
|
+
puts fmt % header
|
68
|
+
puts fmt % @ruled_line_size.map { |field| '-'*field }
|
69
|
+
end
|
80
70
|
|
81
|
-
|
82
|
-
|
71
|
+
def render_to_body(projects)
|
72
|
+
f = @ruled_line_size
|
73
|
+
fmt = "%#{f[0]}s %-#{f[1]}s %-#{f[2]}s %#{f[3]}s %#{f[4]}s"
|
74
|
+
projects.each_with_index do |project, i|
|
75
|
+
result = fmt % [i + 1, project.to_a].flatten
|
76
|
+
result << ' ' + project.description.mb_slice(f.last).mb_ljust(f.last) if @describable
|
77
|
+
puts result
|
83
78
|
end
|
79
|
+
end
|
84
80
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
81
|
+
def command_exists?(command)
|
82
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).any? { |d| File.exist? File.join(d, command) }
|
83
|
+
end
|
84
|
+
|
85
|
+
# https://github.com/cldwalker/hirb/blob/master/lib/hirb/util.rb#L61-71
|
86
|
+
def detect_terminal_size
|
87
|
+
if (ENV['COLUMNS'] =~ /^\d+$/) && (ENV['LINES'] =~ /^\d+$/)
|
88
|
+
[ENV['COLUMNS'].to_i, ENV['LINES'].to_i]
|
89
|
+
elsif (RUBY_PLATFORM =~ /java/ || (!STDIN.tty? && ENV['TERM'])) && command_exists?('tput')
|
90
|
+
[`tput cols`.to_i, `tput lines`.to_i]
|
91
|
+
elsif STDIN.tty? && command_exists?('stty')
|
92
|
+
`stty size`.scan(/\d+/).map { |s| s.to_i }.reverse
|
93
|
+
else
|
97
94
|
nil
|
98
95
|
end
|
96
|
+
rescue
|
97
|
+
nil
|
98
|
+
end
|
99
99
|
end
|
100
100
|
end
|
data/lib/git_trend/scraper.rb
CHANGED
@@ -3,19 +3,16 @@ require 'addressable/uri'
|
|
3
3
|
|
4
4
|
module GitTrend
|
5
5
|
class Scraper
|
6
|
-
|
7
6
|
BASE_HOST = 'https://github.com'
|
8
7
|
BASE_URL = "#{BASE_HOST}/trending"
|
9
8
|
|
10
9
|
def initialize
|
11
10
|
@agent = Mechanize.new
|
12
11
|
proxy = URI.parse(ENV['http_proxy']) if ENV['http_proxy']
|
13
|
-
if proxy
|
14
|
-
@agent.set_proxy(proxy.host, proxy.port, proxy.user, proxy.password)
|
15
|
-
end
|
12
|
+
@agent.set_proxy(proxy.host, proxy.port, proxy.user, proxy.password) if proxy
|
16
13
|
end
|
17
14
|
|
18
|
-
def get(language=nil, since=nil)
|
15
|
+
def get(language = nil, since = nil)
|
19
16
|
projects = []
|
20
17
|
page = @agent.get(generate_url_for_get(language, since))
|
21
18
|
|
@@ -46,16 +43,17 @@ module GitTrend
|
|
46
43
|
end
|
47
44
|
|
48
45
|
private
|
49
|
-
def generate_url_for_get(language, since)
|
50
|
-
uri = Addressable::URI.parse(BASE_URL)
|
51
|
-
if language or since
|
52
|
-
uri.query_values = { l: language, since: since}.delete_if{ |k,v| v.nil? }
|
53
|
-
end
|
54
|
-
uri.to_s
|
55
|
-
end
|
56
46
|
|
57
|
-
|
58
|
-
|
47
|
+
def generate_url_for_get(language, since)
|
48
|
+
uri = Addressable::URI.parse(BASE_URL)
|
49
|
+
if language || since
|
50
|
+
uri.query_values = { l: language, since: since }.delete_if { |_k, v| v.nil? }
|
59
51
|
end
|
52
|
+
uri.to_s
|
53
|
+
end
|
54
|
+
|
55
|
+
def meta_count(elm)
|
56
|
+
elm.empty? ? 0 : elm[0].parent.text.strip.gsub(',', '').to_i
|
57
|
+
end
|
60
58
|
end
|
61
59
|
end
|
data/lib/git_trend/version.rb
CHANGED
data/spec/git_trend/cli_spec.rb
CHANGED
@@ -24,7 +24,7 @@ RSpec.describe GitTrend::CLI do
|
|
24
24
|
before do
|
25
25
|
stub_request_get("trending?l=#{language}")
|
26
26
|
end
|
27
|
-
let(:language) {'ruby'}
|
27
|
+
let(:language) { 'ruby' }
|
28
28
|
|
29
29
|
it 'display daily ranking by language' do
|
30
30
|
res = <<-'EOS'.unindent
|
@@ -56,15 +56,15 @@ RSpec.describe GitTrend::CLI do
|
|
56
56
|
| 24 sferik/twitter Ruby 0 1
|
57
57
|
| 25 rightscale/rightscale_cookbooks Ruby 0 1
|
58
58
|
EOS
|
59
|
-
expect { @cli.invoke(:list, [],
|
59
|
+
expect { @cli.invoke(:list, [], language: language) }.to output(res).to_stdout
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
63
|
context 'with objective-c++ (including + sign)' do
|
64
64
|
before do
|
65
|
-
stub_request_get(
|
65
|
+
stub_request_get('trending?l=objective-c%2B%2B')
|
66
66
|
end
|
67
|
-
let(:language) {'objective-c++'}
|
67
|
+
let(:language) { 'objective-c++' }
|
68
68
|
|
69
69
|
it 'display daily ranking by language' do
|
70
70
|
res = <<-'EOS'.unindent
|
@@ -96,7 +96,7 @@ RSpec.describe GitTrend::CLI do
|
|
96
96
|
| 24 Yonsm/CeleWare Objective-C++ 0 0
|
97
97
|
| 25 ccrma/miniAudicle Objective-C++ 0 0
|
98
98
|
EOS
|
99
|
-
expect { @cli.invoke(:list, [],
|
99
|
+
expect { @cli.invoke(:list, [], language: language) }.to output(res).to_stdout
|
100
100
|
end
|
101
101
|
end
|
102
102
|
end
|
@@ -106,7 +106,7 @@ RSpec.describe GitTrend::CLI do
|
|
106
106
|
before do
|
107
107
|
stub_request_get("trending?since=#{since}")
|
108
108
|
end
|
109
|
-
let(:since) {'weekly'}
|
109
|
+
let(:since) { 'weekly' }
|
110
110
|
|
111
111
|
it 'display daily ranking since weekly' do
|
112
112
|
res = <<-'EOS'.unindent
|
@@ -138,7 +138,7 @@ RSpec.describe GitTrend::CLI do
|
|
138
138
|
| 24 mbostock/d3 JavaScript 307 113
|
139
139
|
| 25 maxpow4h/swiftz Swift 350 20
|
140
140
|
EOS
|
141
|
-
expect { @cli.invoke(:list, [],
|
141
|
+
expect { @cli.invoke(:list, [], since: since) }.to output(res).to_stdout
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
@@ -146,7 +146,7 @@ RSpec.describe GitTrend::CLI do
|
|
146
146
|
before do
|
147
147
|
stub_request_get("trending?since=#{since}")
|
148
148
|
end
|
149
|
-
let(:since) {'monthly'}
|
149
|
+
let(:since) { 'monthly' }
|
150
150
|
|
151
151
|
it 'display daily ranking since monthly' do
|
152
152
|
res = <<-'EOS'.unindent
|
@@ -178,7 +178,7 @@ RSpec.describe GitTrend::CLI do
|
|
178
178
|
| 24 julianshapiro/velocity JavaScript 1081 71
|
179
179
|
| 25 babun/babun Shell 1068 46
|
180
180
|
EOS
|
181
|
-
expect { @cli.invoke(:list, [],
|
181
|
+
expect { @cli.invoke(:list, [], since: since) }.to output(res).to_stdout
|
182
182
|
end
|
183
183
|
end
|
184
184
|
end
|
@@ -192,7 +192,7 @@ RSpec.describe GitTrend::CLI do
|
|
192
192
|
|
193
193
|
context 'terminal width is enough' do
|
194
194
|
before do
|
195
|
-
stub_request_get(
|
195
|
+
stub_request_get('trending')
|
196
196
|
ENV['COLUMNS'] = '140'
|
197
197
|
ENV['LINES'] = '40'
|
198
198
|
end
|
@@ -227,19 +227,19 @@ RSpec.describe GitTrend::CLI do
|
|
227
227
|
| 24 PistonDevelopers/piston-workspace Shell 45 0 Git submodules of Piston projects
|
228
228
|
| 25 maxpow4h/swiftz Swift 43 1 Functional programming in Swift
|
229
229
|
EOS
|
230
|
-
expect { @cli.invoke(:list, [],
|
230
|
+
expect { @cli.invoke(:list, [], description: 'description') }.to output(res).to_stdout
|
231
231
|
end
|
232
232
|
end
|
233
|
-
|
233
|
+
|
234
234
|
context 'terminal width is tiny' do
|
235
235
|
before do
|
236
|
-
stub_request_get(
|
236
|
+
stub_request_get('trending')
|
237
237
|
ENV['COLUMNS'] = '100' # it is not enough for description.
|
238
238
|
ENV['LINES'] = '40'
|
239
239
|
end
|
240
240
|
|
241
241
|
it 'display daily ranking about the same as no option' do
|
242
|
-
expect { @cli.invoke(:list, [],
|
242
|
+
expect { @cli.invoke(:list, [], description: 'description') }.to output(dummy_result_no_options).to_stdout
|
243
243
|
end
|
244
244
|
end
|
245
245
|
end
|
@@ -249,8 +249,8 @@ RSpec.describe GitTrend::CLI do
|
|
249
249
|
before do
|
250
250
|
stub_request_get("trending?l=#{language}&since=#{since}")
|
251
251
|
end
|
252
|
-
let(:language) {'ruby'}
|
253
|
-
let(:since) {'weekly'}
|
252
|
+
let(:language) { 'ruby' }
|
253
|
+
let(:since) { 'weekly' }
|
254
254
|
|
255
255
|
it 'display daily ranking since weekly' do
|
256
256
|
res = <<-'EOS'.unindent
|
@@ -282,7 +282,7 @@ RSpec.describe GitTrend::CLI do
|
|
282
282
|
| 24 chloerei/campo Ruby 35 9
|
283
283
|
| 25 jordansissel/fpm Ruby 35 4
|
284
284
|
EOS
|
285
|
-
expect { @cli.invoke(:list, [],
|
285
|
+
expect { @cli.invoke(:list, [], language: language, since: since) }.to output(res).to_stdout
|
286
286
|
end
|
287
287
|
end
|
288
288
|
end
|
@@ -492,47 +492,48 @@ RSpec.describe GitTrend::CLI do
|
|
492
492
|
end
|
493
493
|
|
494
494
|
private
|
495
|
-
def stub_request_get(stub_url)
|
496
|
-
url = Scraper::BASE_HOST.dup
|
497
|
-
url << "/#{stub_url}" if stub_url
|
498
|
-
uri = URI.parse(url)
|
499
495
|
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
:body => load_http_stub(stub_url))
|
505
|
-
end
|
496
|
+
def stub_request_get(stub_url)
|
497
|
+
url = Scraper::BASE_HOST.dup
|
498
|
+
url << "/#{stub_url}" if stub_url
|
499
|
+
uri = URI.parse(url)
|
506
500
|
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
501
|
+
stub_request(:get, uri)
|
502
|
+
.to_return(
|
503
|
+
status: 200,
|
504
|
+
headers: { content_type: 'text/html' },
|
505
|
+
body: load_http_stub(stub_url))
|
506
|
+
end
|
507
|
+
|
508
|
+
def dummy_result_no_options
|
509
|
+
<<-'EOS'.unindent
|
510
|
+
|No. Name Lang Star Fork
|
511
|
+
|--- -------------------------------------------------- ------------ ------ -----
|
512
|
+
| 1 prat0318/json_resume Ruby 264 15
|
513
|
+
| 2 andlabs/ui Go 185 8
|
514
|
+
| 3 jessepollak/card CSS 174 9
|
515
|
+
| 4 fullstackio/FlappySwift Swift 148 44
|
516
|
+
| 5 grant/swift-cheat-sheet 153 13
|
517
|
+
| 6 Flolagale/mailin Python 155 3
|
518
|
+
| 7 numbbbbb/the-swift-programming-language-in-chinese JavaScript 120 31
|
519
|
+
| 8 hippyvm/hippyvm PHP 113 1
|
520
|
+
| 9 neovim/neovim C 83 8
|
521
|
+
| 10 hiphopapp/hiphop CoffeeScript 77 8
|
522
|
+
| 11 interagent/http-api-design 78 4
|
523
|
+
| 12 austinzheng/swift-2048 Swift 69 16
|
524
|
+
| 13 mdznr/What-s-New Objective-C 72 2
|
525
|
+
| 14 daneden/animate.css CSS 65 6
|
526
|
+
| 15 davidmerfield/randomColor JavaScript 66 3
|
527
|
+
| 16 dawn/dawn Ruby 62 2
|
528
|
+
| 17 greatfire/wiki 54 9
|
529
|
+
| 18 swift-jp/swift-guide CSS 45 9
|
530
|
+
| 19 addyosmani/psi JavaScript 49 0
|
531
|
+
| 20 mtford90/silk Python 47 0
|
532
|
+
| 21 agaue/agaue Go 47 0
|
533
|
+
| 22 mentionapp/mntpulltoreact Objective-C 46 1
|
534
|
+
| 23 mikepenz/AboutLibraries Java 45 0
|
535
|
+
| 24 PistonDevelopers/piston-workspace Shell 45 0
|
536
|
+
| 25 maxpow4h/swiftz Swift 43 1
|
537
|
+
EOS
|
538
|
+
end
|
538
539
|
end
|
@@ -19,10 +19,10 @@ RSpec.describe GitTrend::Scraper do
|
|
19
19
|
context 'when a network error occurred' do
|
20
20
|
before do
|
21
21
|
@scraper = Scraper.new
|
22
|
-
stub_request(:get, Scraper::BASE_URL)
|
23
|
-
to_return(:
|
22
|
+
stub_request(:get, Scraper::BASE_URL)
|
23
|
+
.to_return(status: 500, body: '[]')
|
24
24
|
end
|
25
|
-
it { expect{ @scraper.get }.to raise_error(Exception) }
|
25
|
+
it { expect { @scraper.get }.to raise_error(Exception) }
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-trend
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- rochefort
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.
|
117
|
+
version: 0.9.0
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
124
|
+
version: 0.9.0
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: webmock
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -185,7 +185,7 @@ files:
|
|
185
185
|
- spec/git_trend/cli_spec.rb
|
186
186
|
- spec/git_trend/scraper_spec.rb
|
187
187
|
- spec/spec_helper.rb
|
188
|
-
homepage: https://github.com/rochefort/
|
188
|
+
homepage: https://github.com/rochefort/git-trend
|
189
189
|
licenses:
|
190
190
|
- MIT
|
191
191
|
metadata: {}
|