gemsi 0.0.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.
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: []