git-trend 0.1.6 → 0.1.7
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 +4 -4
- data/README.md +6 -12
- data/git-trend.gemspec +8 -7
- data/lib/git_trend/cli.rb +1 -1
- data/lib/git_trend/ext/string.rb +3 -10
- data/lib/git_trend/rendering.rb +48 -51
- data/lib/git_trend/scraper.rb +16 -14
- data/lib/git_trend/version.rb +1 -1
- metadata +31 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a9c3b0583d0d6b10a7d9599f831de86d5c2bf45e
|
4
|
+
data.tar.gz: c969011d88502cb5776ce8269642e1ee87de2615
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f7f47ea2d4c6f1b8587ded201212c0e0feb41d7b7fcc185c275320ecbbbed5cca46a12eb762c5e9b92f1511da402f97b27b022800e16c7bbd4f2116690abb21
|
7
|
+
data.tar.gz: 7550677c7a327d551e557afa4cec41ecaf0c4d5a86a4ad9bd19c6ac0067ac8a85ba46c16ef808556bf218aeee5dbe0bb9b9c9e45b117f26c93f4807ec932d534
|
data/README.md
CHANGED
@@ -7,21 +7,11 @@
|
|
7
7
|
|
8
8
|
# git-trend
|
9
9
|
|
10
|
-
git-trend is a command line
|
10
|
+
git-trend is a command line utility to show [Trending repositories on GitHub](https://github.com/trending).
|
11
11
|
|
12
12
|
|
13
13
|
## Installation
|
14
14
|
|
15
|
-
Add this line to your application's Gemfile:
|
16
|
-
|
17
|
-
gem 'git-trend'
|
18
|
-
|
19
|
-
And then execute:
|
20
|
-
|
21
|
-
$ bundle
|
22
|
-
|
23
|
-
Or install it yourself as:
|
24
|
-
|
25
15
|
$ gem install git-trend
|
26
16
|
|
27
17
|
## Usage
|
@@ -63,6 +53,7 @@ No. Name Lang Star Description
|
|
63
53
|
23 google/cadvisor Go 48 Analyzes resource usage and performance characteristics of running containers.
|
64
54
|
24 vladikoff/chromeos-apk JavaScript 46 Run Android APKs in Chrome OS OR Chrome in OS X, Linux and Windows.
|
65
55
|
25 nhanaswigs/htmljs JavaScript 47 HTML render engine and data binding (MVVM)
|
56
|
+
|
66
57
|
```
|
67
58
|
|
68
59
|
### daily trending without description
|
@@ -100,6 +91,7 @@ No. Name Lang Star
|
|
100
91
|
23 google/cadvisor Go 48
|
101
92
|
24 vladikoff/chromeos-apk JavaScript 46
|
102
93
|
25 nhanaswigs/htmljs JavaScript 47
|
94
|
+
|
103
95
|
```
|
104
96
|
|
105
97
|
### daily trending by language
|
@@ -137,6 +129,7 @@ No. Name Lang Star Description
|
|
137
129
|
23 fluent/fluentd Ruby 6 Fluentd data collector
|
138
130
|
24 caskroom/homebrew-cask Ruby 5 A CLI workflow for the administration of Mac applications distributed as binaries
|
139
131
|
25 cantino/huginn Ruby 5 Build agents that monitor and act on your behalf. Your agents are standing by!
|
132
|
+
|
140
133
|
```
|
141
134
|
|
142
135
|
### weekly/monthly trending
|
@@ -180,9 +173,10 @@ No. Name Lang Star Description
|
|
180
173
|
23 mechio/takana CoffeeScript 341 Takana lets you see your SCSS and CSS style changes live, in the browser, as you type them
|
181
174
|
24 davidtheclark/scalable-css-reading-list 331 Collected dispatches from The Quest for Scalable CSS
|
182
175
|
25 addyosmani/timing.js JavaScript 335 Navigation Timing API measurement helpers
|
176
|
+
|
183
177
|
```
|
184
178
|
|
185
|
-
### number of
|
179
|
+
### number of trending
|
186
180
|
|
187
181
|
git trend -n <number>
|
188
182
|
|
data/git-trend.gemspec
CHANGED
@@ -14,7 +14,7 @@ def or_over_mac_os_lion?
|
|
14
14
|
|
15
15
|
macos_full_version = `/usr/bin/sw_vers -productVersion`.chomp
|
16
16
|
macos_version = macos_full_version[/10\.\d+/]
|
17
|
-
|
17
|
+
macos_version >= '10.7' # 10.7 is lion
|
18
18
|
end
|
19
19
|
|
20
20
|
Gem::Specification.new do |spec|
|
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.version = GitTrend::VERSION
|
23
23
|
spec.authors = ['rochefort']
|
24
24
|
spec.email = ['terasawan@gmail.com']
|
25
|
-
spec.summary = '
|
25
|
+
spec.summary = 'CLI-Based tool that show Trending repository on github'
|
26
26
|
spec.description = spec.summary
|
27
27
|
spec.homepage = 'https://github.com/rochefort/git-trend'
|
28
28
|
spec.license = 'MIT'
|
@@ -34,18 +34,19 @@ Gem::Specification.new do |spec|
|
|
34
34
|
|
35
35
|
spec.post_install_message = install_message
|
36
36
|
|
37
|
-
spec.add_dependency '
|
37
|
+
spec.add_dependency 'addressable', '~> 2.3.8'
|
38
38
|
spec.add_dependency 'mechanize', '~> 2.7.3'
|
39
|
-
spec.add_dependency '
|
39
|
+
spec.add_dependency 'thor', '~> 0.19.1'
|
40
|
+
spec.add_dependency 'unicode-display_width', '~> 0.2.0'
|
40
41
|
|
41
42
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
42
43
|
spec.add_development_dependency 'rake'
|
43
44
|
|
44
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
45
|
+
spec.add_development_dependency 'rspec', '~> 3.4.0'
|
45
46
|
spec.add_development_dependency 'rspec-its', '~> 1.2.0'
|
46
|
-
spec.add_development_dependency 'simplecov', '~> 0.
|
47
|
+
spec.add_development_dependency 'simplecov', '~> 0.10.0'
|
47
48
|
spec.add_development_dependency 'safe_yaml', '~> 1.0.4' # for Ruby2.2.0
|
48
|
-
spec.add_development_dependency 'webmock', '~> 1.
|
49
|
+
spec.add_development_dependency 'webmock', '~> 1.22.3'
|
49
50
|
|
50
51
|
spec.add_development_dependency 'coveralls'
|
51
52
|
end
|
data/lib/git_trend/cli.rb
CHANGED
@@ -21,7 +21,7 @@ module GitTrend
|
|
21
21
|
option :number, aliases: '-n', required: false, type: :numeric, desc: 'Number of lines'
|
22
22
|
option :help, aliases: '-h', required: false, type: :boolean
|
23
23
|
def list
|
24
|
-
help(:list) and return if
|
24
|
+
help(:list) and return if options[:help]
|
25
25
|
scraper = Scraper.new
|
26
26
|
projects = scraper.get(options[:language], options[:since], options[:number])
|
27
27
|
render(projects, !!options[:description])
|
data/lib/git_trend/ext/string.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
|
2
|
-
def mb_width
|
3
|
-
each_char.inject(0) { |sum, c| sum += c.ascii_only? ? 1 : 2 }
|
4
|
-
end
|
1
|
+
require 'unicode/display_width'
|
5
2
|
|
3
|
+
class String
|
6
4
|
def mb_slice(width)
|
7
5
|
return '' if empty?
|
8
6
|
|
@@ -10,7 +8,7 @@ class String
|
|
10
8
|
extraction_size = 0
|
11
9
|
extraction = ''
|
12
10
|
each_char do |c|
|
13
|
-
char_size = c.
|
11
|
+
char_size = c.display_width
|
14
12
|
if extraction_size + char_size > max_size
|
15
13
|
extraction << '...'
|
16
14
|
break
|
@@ -20,9 +18,4 @@ class String
|
|
20
18
|
end
|
21
19
|
extraction
|
22
20
|
end
|
23
|
-
|
24
|
-
def mb_ljust(width, padding = ' ')
|
25
|
-
padding_size = [0, width - mb_width].max
|
26
|
-
self + padding * padding_size
|
27
|
-
end
|
28
21
|
end
|
data/lib/git_trend/rendering.rb
CHANGED
@@ -3,18 +3,15 @@ module GitTrend
|
|
3
3
|
def self.included(base)
|
4
4
|
base.extend(self)
|
5
5
|
end
|
6
|
+
HEADER_COLUMNS = %w(no. name lang star description)
|
7
|
+
DEFAULT_COLUMNS_SIZES = [3, 40, 10, 6, 20]
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
@describable = describable
|
14
|
-
ruled_line_size(projects)
|
15
|
-
render_to_header
|
16
|
-
render_to_body(projects)
|
17
|
-
render_to_footer
|
9
|
+
def render(projects, enable_description = false)
|
10
|
+
@enable_description = enable_description
|
11
|
+
rule_columns_sizes(projects)
|
12
|
+
render_header
|
13
|
+
render_body(projects)
|
14
|
+
render_footer
|
18
15
|
end
|
19
16
|
|
20
17
|
def render_languages(languages)
|
@@ -28,65 +25,61 @@ module GitTrend
|
|
28
25
|
|
29
26
|
private
|
30
27
|
|
31
|
-
def
|
32
|
-
|
28
|
+
def rule_columns_sizes(projects)
|
29
|
+
@columns_sizes = DEFAULT_COLUMNS_SIZES.dup
|
30
|
+
rule_max_column_size(projects, :name)
|
31
|
+
rule_max_column_size(projects, :lang)
|
32
|
+
rule_max_description_size if @enable_description
|
33
|
+
@columns_sizes.pop unless @enable_description
|
33
34
|
end
|
34
35
|
|
35
|
-
def
|
36
|
-
|
37
|
-
|
38
|
-
if
|
39
|
-
@
|
36
|
+
def rule_max_description_size
|
37
|
+
terminal_width, _terminal_height = detect_terminal_size
|
38
|
+
description_width = terminal_width - @columns_sizes[0..-2].inject(&:+) - (@columns_sizes.size - 1)
|
39
|
+
if description_width >= DEFAULT_COLUMNS_SIZES.last
|
40
|
+
@columns_sizes[-1] = description_width
|
41
|
+
else
|
42
|
+
@enable_description = false
|
40
43
|
end
|
44
|
+
end
|
41
45
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
+
def rule_max_column_size(projects, attr)
|
47
|
+
index = HEADER_COLUMNS.index(attr.to_s)
|
48
|
+
max_size = max_size_of(projects, attr)
|
49
|
+
@columns_sizes[index] = max_size if max_size > @columns_sizes[index]
|
50
|
+
end
|
46
51
|
|
47
|
-
|
48
|
-
|
49
|
-
terminal_width, _terminal_height = detect_terminal_size
|
50
|
-
description_width = terminal_width - @ruled_line_size.inject(&:+) - @ruled_line_size.size
|
51
|
-
if description_width >= DESCRIPTION_MIN_SIZE
|
52
|
-
@ruled_line_size << description_width
|
53
|
-
else
|
54
|
-
@describable = false
|
55
|
-
end
|
56
|
-
end
|
52
|
+
def max_size_of(projects, attr)
|
53
|
+
projects.max_by { |project| project.send(attr).size }.send(attr).size
|
57
54
|
end
|
58
55
|
|
59
|
-
def
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
header = ['No.', 'Name', 'Lang', 'Star']
|
67
|
-
header << 'Description' if @describable
|
56
|
+
def render_header
|
57
|
+
header = HEADER_COLUMNS.map(&:capitalize)
|
58
|
+
header.pop unless @enable_description
|
59
|
+
f = @columns_sizes
|
60
|
+
fmt = "%#{f[0]}s %-#{f[1]}s %-#{f[2]}s %#{f[3]}s"
|
61
|
+
fmt << " %-#{f[4]}s" if @enable_description
|
62
|
+
|
68
63
|
puts fmt % header
|
69
|
-
puts fmt % @
|
64
|
+
puts fmt % @columns_sizes.map { |column| '-' * column }
|
70
65
|
end
|
71
66
|
|
72
|
-
def
|
73
|
-
f = @
|
67
|
+
def render_body(projects)
|
68
|
+
f = @columns_sizes
|
74
69
|
fmt = "%#{f[0]}s %-#{f[1]}s %-#{f[2]}s %#{f[3]}s"
|
70
|
+
fmt << " %-#{f[4]}s" if @enable_description
|
75
71
|
projects.each_with_index do |project, i|
|
76
|
-
|
77
|
-
|
72
|
+
data = [i + 1, project.to_a].flatten
|
73
|
+
data << project.description.mb_slice(f.last) if @enable_description
|
74
|
+
result = fmt % data
|
78
75
|
puts result
|
79
76
|
end
|
80
77
|
end
|
81
78
|
|
82
|
-
def
|
79
|
+
def render_footer
|
83
80
|
puts
|
84
81
|
end
|
85
82
|
|
86
|
-
def command_exists?(command)
|
87
|
-
ENV['PATH'].split(File::PATH_SEPARATOR).any? { |d| File.exist? File.join(d, command) }
|
88
|
-
end
|
89
|
-
|
90
83
|
# https://github.com/cldwalker/hirb/blob/master/lib/hirb/util.rb#L61-71
|
91
84
|
def detect_terminal_size
|
92
85
|
if (ENV['COLUMNS'] =~ /^\d+$/) && (ENV['LINES'] =~ /^\d+$/)
|
@@ -101,5 +94,9 @@ module GitTrend
|
|
101
94
|
rescue
|
102
95
|
nil
|
103
96
|
end
|
97
|
+
|
98
|
+
def command_exists?(command)
|
99
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).any? { |d| File.exist? File.join(d, command) }
|
100
|
+
end
|
104
101
|
end
|
105
102
|
end
|
data/lib/git_trend/scraper.rb
CHANGED
@@ -15,17 +15,8 @@ module GitTrend
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def get(language = nil, since = nil, number = nil)
|
18
|
-
projects = []
|
19
18
|
page = @agent.get(generate_url_for_get(language, since))
|
20
|
-
|
21
|
-
page.search('.repo-list-item').each do |content|
|
22
|
-
project = Project.new
|
23
|
-
meta_data = content.search('.repo-list-meta').text
|
24
|
-
project.lang, project.star_count = extract_lang_and_star_from_meta(meta_data)
|
25
|
-
project.name = content.search('.repo-list-name a').text.split.join
|
26
|
-
project.description = content.search('.repo-list-description').text.gsub("\n", '').strip
|
27
|
-
projects << project
|
28
|
-
end
|
19
|
+
projects = generate_project(page)
|
29
20
|
fail ScrapeException if projects.empty?
|
30
21
|
number ? projects[0...number] : projects
|
31
22
|
end
|
@@ -36,7 +27,7 @@ module GitTrend
|
|
36
27
|
page.search('div.select-menu-item a').each do |content|
|
37
28
|
href = content.attributes['href'].value
|
38
29
|
# objective-c++ =>
|
39
|
-
language = href.match(
|
30
|
+
language = href.match(%r{github.com/trending\?l=(.+)}).to_a[1]
|
40
31
|
languages << CGI.unescape(language) if language
|
41
32
|
end
|
42
33
|
languages
|
@@ -53,15 +44,26 @@ module GitTrend
|
|
53
44
|
end
|
54
45
|
|
55
46
|
def extract_lang_and_star_from_meta(text)
|
56
|
-
meta_data = text.split('•').map { |x| x.
|
47
|
+
meta_data = text.split('•').map { |x| x.delete("\n").strip }
|
57
48
|
if meta_data.size == 3
|
58
49
|
lang = meta_data[0]
|
59
|
-
star_count = meta_data[1].
|
50
|
+
star_count = meta_data[1].delete(',').to_i
|
60
51
|
[lang, star_count]
|
61
52
|
else
|
62
|
-
star_count = meta_data[0].
|
53
|
+
star_count = meta_data[0].delete(',').to_i
|
63
54
|
['', star_count]
|
64
55
|
end
|
65
56
|
end
|
57
|
+
|
58
|
+
def generate_project(page)
|
59
|
+
page.search('.repo-list-item').map do |content|
|
60
|
+
project = Project.new
|
61
|
+
meta_data = content.search('.repo-list-meta').text
|
62
|
+
project.lang, project.star_count = extract_lang_and_star_from_meta(meta_data)
|
63
|
+
project.name = content.search('.repo-list-name a').text.split.join
|
64
|
+
project.description = content.search('.repo-list-description').text.delete("\n").strip
|
65
|
+
project
|
66
|
+
end
|
67
|
+
end
|
66
68
|
end
|
67
69
|
end
|
data/lib/git_trend/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-trend
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- rochefort
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: addressable
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 2.3.8
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 2.3.8
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: mechanize
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,19 +39,33 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 2.7.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: thor
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.19.1
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.19.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: unicode-display_width
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: 2.
|
61
|
+
version: 0.2.0
|
48
62
|
type: :runtime
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: 2.
|
68
|
+
version: 0.2.0
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +100,14 @@ dependencies:
|
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: 3.
|
103
|
+
version: 3.4.0
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: 3.
|
110
|
+
version: 3.4.0
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: rspec-its
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,14 +128,14 @@ dependencies:
|
|
114
128
|
requirements:
|
115
129
|
- - "~>"
|
116
130
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.
|
131
|
+
version: 0.10.0
|
118
132
|
type: :development
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
136
|
- - "~>"
|
123
137
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
138
|
+
version: 0.10.0
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: safe_yaml
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,14 +156,14 @@ dependencies:
|
|
142
156
|
requirements:
|
143
157
|
- - "~>"
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version: 1.
|
159
|
+
version: 1.22.3
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
164
|
- - "~>"
|
151
165
|
- !ruby/object:Gem::Version
|
152
|
-
version: 1.
|
166
|
+
version: 1.22.3
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: coveralls
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,7 +178,7 @@ dependencies:
|
|
164
178
|
- - ">="
|
165
179
|
- !ruby/object:Gem::Version
|
166
180
|
version: '0'
|
167
|
-
description:
|
181
|
+
description: CLI-Based tool that show Trending repository on github
|
168
182
|
email:
|
169
183
|
- terasawan@gmail.com
|
170
184
|
executables:
|
@@ -221,10 +235,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
221
235
|
version: '0'
|
222
236
|
requirements: []
|
223
237
|
rubyforge_project:
|
224
|
-
rubygems_version: 2.4.5
|
238
|
+
rubygems_version: 2.4.5.1
|
225
239
|
signing_key:
|
226
240
|
specification_version: 4
|
227
|
-
summary:
|
241
|
+
summary: CLI-Based tool that show Trending repository on github
|
228
242
|
test_files:
|
229
243
|
- spec/fixtures/trending
|
230
244
|
- spec/fixtures/trending?l=objective-c%2B%2B
|