gemsi 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/gemsi +5 -0
  3. data/lib/gemsi.rb +88 -0
  4. metadata +46 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a59184618f5ba48e8ea5ec878c66289015d69cf7f8a10c753bbfb81a0a4a84fa
4
+ data.tar.gz: 2a7123c90c18a29aece52c5cf6b1c82720b3492b6b6afffee3ad245e68be80d1
5
+ SHA512:
6
+ metadata.gz: 3a1c57441bbfaccb68e08ba416c3f61d07d977919ff4cbf3106270d4983992eeed411bf37d00dc205986450a3efbc3e85a0b0c2aa6d453e778e043d3623c77d2
7
+ data.tar.gz: 5018be326080a72de5b158e4a801fdceaa798f5cd7219f7e16da71ee42859ac4083cd527a8ed89602564f67daeeaf1a4951073fb132780a80fc5ea73b4320fe9
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'gemsi'
4
+
5
+ Gemsi.main(ARGV[0])
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Gemsi
4
+ GEM_LINE_PATTERN = /^\s*(gem|group|ruby)/.freeze
5
+ GEM_NAME_PATTERN = /^\s*gem\s*[\'\"]([-_\w\d]*)[\'\"]/.freeze
6
+ GEMFILE = 'Gemfile'
7
+ TAB_SIZE = 20
8
+
9
+ class << self
10
+ def main(path = nil)
11
+ gems = parsed_gems(path)
12
+ gem_names_arr = []
13
+ gems.each do |gem|
14
+ next if !gem[:is_parsed] || gem[:name].nil?
15
+
16
+ gem_names_arr << gem[:name]
17
+ gem[:spec] = gems_descriptions.detect { |description| description[:name] == gem[:name] }
18
+ end
19
+ name_size = gem_names_arr.max_by(&:length).size
20
+ print_descriptions(gems, name_size)
21
+ end
22
+
23
+ private
24
+
25
+ def parsed_gems(path = nil)
26
+ gemfile = path || GEMFILE
27
+ IO.read(gemfile).split("\n").map do |string|
28
+ is_parsed = string.match(GEM_LINE_PATTERN) ? true : false
29
+ name = is_parsed ? string.match(GEM_NAME_PATTERN)&.send(:[], 1) : nil
30
+ { text: string, name: name, is_parsed: true }
31
+ end
32
+ end
33
+
34
+ def gems_descriptions
35
+ @gems_descriptions ||= Gem::Specification.all.map { |spec| build_description(spec) }
36
+ end
37
+
38
+ def build_description(spec)
39
+ result = {
40
+ name: spec.name,
41
+ version: spec.version.to_s,
42
+ summary: spec.summary,
43
+ description: spec.description,
44
+ homepage: spec.homepage,
45
+ github_search: "https://github.com/search?q=#{spec.name}&ref=cmdform"
46
+ }
47
+
48
+ result[:full_description] = if result[:description] == result[:summary]
49
+ result[:description]
50
+ else
51
+ "#{result[:description]} #{result[:summary]}"
52
+ end
53
+ result[:github_search] = result[:homepage]&.match(/github/) ? ' ' : "https://github.com/search?q=#{spec.name}&ref=cmdform"
54
+ result
55
+ end
56
+
57
+ def print_descriptions(gems, name_size = TAB_SIZE)
58
+ tab = ' ' * name_size
59
+
60
+ gems.each do |gem|
61
+ next unless gem[:is_parsed]
62
+
63
+ puts gem[:name].ljust(name_size).to_s if gem[:name]
64
+
65
+ if gem[:spec].nil?
66
+ gem[:text].scan(/.{0,80}/).each do |part|
67
+ prn(part, tab)
68
+ end
69
+ else
70
+ prn(gem[:spec][:version], tab)
71
+
72
+ gem[:spec][:full_description].scan(/.{0,80}/).each do |part|
73
+ prn(part, tab)
74
+ end
75
+
76
+ if gem[:spec][:homepage]
77
+ prn("#{gem[:spec][:homepage]}\n", tab)
78
+ prn("#{gem[:spec][:github_search]}\n", tab)
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ def prn(text, tab = ' ' * TAB_SIZE)
85
+ puts "#{tab}#{text}"
86
+ end
87
+ end
88
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gemsi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - PhlowerTeam
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-01-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A command-line tool that shows in a convenient way the descriptions of
14
+ every gem from the Gemfile
15
+ email: phlowerteam@gmail.com
16
+ executables:
17
+ - gemsi
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - bin/gemsi
22
+ - lib/gemsi.rb
23
+ homepage: https://github.com/phlowerteam/gemsi
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubygems_version: 3.2.4
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: gemsi
46
+ test_files: []