gemat 0.1.2 → 0.1.3
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/lib/csv_formatter.rb +6 -6
- data/lib/fetcher.rb +44 -0
- data/lib/gem.rb +34 -0
- data/lib/gemat/cli.rb +4 -2
- data/lib/gemat/version.rb +1 -1
- data/lib/gemat.rb +8 -7
- data/lib/{dsl.rb → in_dsl.rb} +4 -4
- data/lib/md_formatter.rb +27 -7
- metadata +5 -4
- data/lib/get_url.rb +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fff413b0bfd43a7b693a244946e15ede730a479ec4be7260605e71d4001cc72a
|
4
|
+
data.tar.gz: 325d18312000d035eda2c45c96feeab44245515e75de9ff6139e7f72661114e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bfff75358ea7333d62a15ea928c3d2e4e65742097cde1282ae2f8e1c3113e7480773d0f51dfc9b4619fd75f5c4d332d945313b6b170144be6444a9d3ac23dc86
|
7
|
+
data.tar.gz: ae0556e9407890301bcd97692aad4008da235ea943a45e5bb9de28768e9ac5de2628b42498e7f46fe3cf2e0d982f16d212331a30e4c74e622084694f8f17b992
|
data/lib/csv_formatter.rb
CHANGED
@@ -4,11 +4,11 @@ require 'csv'
|
|
4
4
|
|
5
5
|
module Gemat
|
6
6
|
class CsvFormatter
|
7
|
-
def initialize(
|
8
|
-
@
|
7
|
+
def initialize(gems, output = nil)
|
8
|
+
@gems = gems
|
9
9
|
@output = output
|
10
10
|
@rows = []
|
11
|
-
|
11
|
+
gen_rows
|
12
12
|
end
|
13
13
|
|
14
14
|
def to_csv
|
@@ -24,10 +24,10 @@ module Gemat
|
|
24
24
|
|
25
25
|
private
|
26
26
|
|
27
|
-
def
|
27
|
+
def gen_rows
|
28
28
|
@rows << ['gem', 'Repo URL']
|
29
|
-
@
|
30
|
-
@rows << [
|
29
|
+
@gems.each do |gem|
|
30
|
+
@rows << [gem.name, gem.repo_url]
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
data/lib/fetcher.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Gemat
|
4
|
+
class Fetcher
|
5
|
+
attr_accessor :gems
|
6
|
+
|
7
|
+
def initialize(dsl)
|
8
|
+
@dsl = dsl
|
9
|
+
@gems = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def run
|
13
|
+
pb = ProgressBar.create(total: @dsl.dependencies.length)
|
14
|
+
@dsl.dependencies.each do |gem|
|
15
|
+
sleep 0.1
|
16
|
+
pb.increment
|
17
|
+
|
18
|
+
response = fetch(gem)
|
19
|
+
next unless response
|
20
|
+
|
21
|
+
@gems << Gem.new(response)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def fetch(gem)
|
28
|
+
client = HTTPClient.new
|
29
|
+
request = client.get(rubygems_api(gem.name))
|
30
|
+
begin
|
31
|
+
response = JSON.parse(request.body)
|
32
|
+
rescue JSON::ParserError
|
33
|
+
print "\n#{gem.name} is not found on Rubygems..."
|
34
|
+
return
|
35
|
+
end
|
36
|
+
# puts JSON.pretty_generate(response)
|
37
|
+
response
|
38
|
+
end
|
39
|
+
|
40
|
+
def rubygems_api(name)
|
41
|
+
"https://rubygems.org/api/v1/gems/#{name}.json"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/gem.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Gemat
|
4
|
+
class Gem
|
5
|
+
def initialize(response)
|
6
|
+
@response = response
|
7
|
+
end
|
8
|
+
|
9
|
+
def name
|
10
|
+
@response['name']
|
11
|
+
end
|
12
|
+
|
13
|
+
def repo_url
|
14
|
+
match = github_url_match([@response.dig('metadata', 'homepage_uri'),
|
15
|
+
@response['homepage_uri'],
|
16
|
+
@response['bug_tracker_uri'],
|
17
|
+
@response['source_code_uri']])
|
18
|
+
return if match.nil?
|
19
|
+
|
20
|
+
user = match[1]
|
21
|
+
repo = match[2]
|
22
|
+
"https://github.com/#{user}/#{repo}"
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def github_url_match(urls)
|
28
|
+
reg = %r{https://github.com/([\w\-]+)/([\w\-]+)}
|
29
|
+
urls.each do |url|
|
30
|
+
return reg.match(url) if reg.match(url)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/gemat/cli.rb
CHANGED
@@ -5,13 +5,15 @@ require 'thor'
|
|
5
5
|
module Gemat
|
6
6
|
class Cli < Thor
|
7
7
|
desc 'csv', 'export Gemfile to CSV file'
|
8
|
+
method_options input: :string, output: :string
|
8
9
|
def csv
|
9
|
-
Gemat.run { |
|
10
|
+
Gemat.run(options) { |gems| CsvFormatter.new(gems, options[:output]).to_csv }
|
10
11
|
end
|
11
12
|
|
12
13
|
desc 'md', 'export Gemfile to markdown'
|
14
|
+
method_options input: :string, output: :string
|
13
15
|
def md
|
14
|
-
Gemat.run { |
|
16
|
+
Gemat.run(options) { |gems| MdFormatter.new(gems, options[:output]).to_md }
|
15
17
|
end
|
16
18
|
end
|
17
19
|
end
|
data/lib/gemat/version.rb
CHANGED
data/lib/gemat.rb
CHANGED
@@ -4,22 +4,23 @@ require 'httpclient'
|
|
4
4
|
require 'json'
|
5
5
|
require 'ruby-progressbar'
|
6
6
|
|
7
|
+
require_relative 'in_dsl'
|
8
|
+
require_relative 'fetcher'
|
9
|
+
require_relative 'gem'
|
7
10
|
require_relative 'csv_formatter'
|
8
11
|
require_relative 'md_formatter'
|
9
|
-
require_relative 'dsl'
|
10
12
|
require_relative 'gemat/version'
|
11
13
|
require_relative 'gemat/cli'
|
12
|
-
require_relative 'get_url'
|
13
14
|
|
14
15
|
module Gemat
|
15
16
|
class Error < StandardError; end
|
16
17
|
|
17
18
|
class Gemat
|
18
|
-
def self.run(&block)
|
19
|
-
dsl =
|
20
|
-
|
21
|
-
|
22
|
-
block.call(
|
19
|
+
def self.run(options = {}, &block)
|
20
|
+
dsl = InDsl.new(options[:input])
|
21
|
+
fetcher = Fetcher.new(dsl)
|
22
|
+
fetcher.run
|
23
|
+
block.call(fetcher.gems)
|
23
24
|
end
|
24
25
|
end
|
25
26
|
end
|
data/lib/{dsl.rb → in_dsl.rb}
RENAMED
@@ -3,8 +3,8 @@
|
|
3
3
|
require 'bundler'
|
4
4
|
|
5
5
|
module Gemat
|
6
|
-
class
|
7
|
-
attr_accessor :dependencies, :sources, :git_sources, :groups, :
|
6
|
+
class InDsl
|
7
|
+
attr_accessor :dependencies, :sources, :git_sources, :groups, :gemfiles
|
8
8
|
|
9
9
|
# rubocop:disable Metrics/MethodLength
|
10
10
|
def initialize(gemfile = nil)
|
@@ -13,14 +13,14 @@ module Gemat
|
|
13
13
|
dsl.eval_gemfile(gemfile)
|
14
14
|
|
15
15
|
class << dsl
|
16
|
-
attr_accessor :sources, :git_sources, :groups, :
|
16
|
+
attr_accessor :sources, :git_sources, :groups, :gemfiles
|
17
17
|
end
|
18
18
|
|
19
19
|
@dependencies = dsl.dependencies
|
20
20
|
@sources = dsl.sources
|
21
21
|
@git_sources = dsl.git_sources
|
22
22
|
@groups = dsl.groups
|
23
|
-
@
|
23
|
+
@gemfiles = dsl.gemfiles
|
24
24
|
end
|
25
25
|
# rubocop:enable Metrics/MethodLength
|
26
26
|
end
|
data/lib/md_formatter.rb
CHANGED
@@ -4,16 +4,36 @@ require 'logger'
|
|
4
4
|
|
5
5
|
module Gemat
|
6
6
|
class MdFormatter
|
7
|
-
def initialize(
|
8
|
-
@
|
7
|
+
def initialize(gems, output = nil)
|
8
|
+
@gems = gems
|
9
|
+
@output = output
|
10
|
+
@rows = []
|
11
|
+
gen_rows
|
9
12
|
end
|
10
13
|
|
11
14
|
def to_md
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
if @output
|
16
|
+
File.open(@output, 'w') { |file| each_write(@rows) { |string| file.<< string } }
|
17
|
+
else
|
18
|
+
print "\n\n"
|
19
|
+
each_write(@rows) { |string| print string }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def gen_rows
|
26
|
+
@rows << '| gem | Repo URL |'
|
27
|
+
@rows << '| ---- | ---- |'
|
28
|
+
@gems.each do |gem|
|
29
|
+
@rows << "| #{gem.name} | #{gem.repo_url} |"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def each_write(rows, &proc)
|
34
|
+
rows.each do |row|
|
35
|
+
proc.call(row)
|
36
|
+
proc.call("\n")
|
17
37
|
end
|
18
38
|
end
|
19
39
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gemat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kijimaD
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-11-
|
11
|
+
date: 2021-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httpclient
|
@@ -62,11 +62,12 @@ extra_rdoc_files: []
|
|
62
62
|
files:
|
63
63
|
- exe/gemat
|
64
64
|
- lib/csv_formatter.rb
|
65
|
-
- lib/
|
65
|
+
- lib/fetcher.rb
|
66
|
+
- lib/gem.rb
|
66
67
|
- lib/gemat.rb
|
67
68
|
- lib/gemat/cli.rb
|
68
69
|
- lib/gemat/version.rb
|
69
|
-
- lib/
|
70
|
+
- lib/in_dsl.rb
|
70
71
|
- lib/md_formatter.rb
|
71
72
|
homepage: https://github.com/kijimaD/gemat
|
72
73
|
licenses:
|
data/lib/get_url.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Gemat
|
4
|
-
class GetUrl
|
5
|
-
def initialize(dsl)
|
6
|
-
@dsl = dsl
|
7
|
-
@urls = {}
|
8
|
-
end
|
9
|
-
|
10
|
-
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
11
|
-
def run
|
12
|
-
pb = ProgressBar.create(total: @dsl.dependencies.length)
|
13
|
-
@dsl.dependencies.each do |gem|
|
14
|
-
sleep 0.1
|
15
|
-
|
16
|
-
client = HTTPClient.new
|
17
|
-
request = client.get(rubygems_api(gem))
|
18
|
-
begin
|
19
|
-
response = JSON.parse(request.body)
|
20
|
-
rescue JSON::ParserError
|
21
|
-
print "not found\n"
|
22
|
-
next
|
23
|
-
end
|
24
|
-
# puts JSON.pretty_generate(response)
|
25
|
-
|
26
|
-
match = github_url_match(response.dig('metadata', 'homepage_uri')) ||
|
27
|
-
github_url_match(response['homepage_uri']) ||
|
28
|
-
github_url_match(response['bug_tracker_uri']) ||
|
29
|
-
github_url_match(response['source_code_uri'])
|
30
|
-
next if match.nil?
|
31
|
-
|
32
|
-
user = match[1]
|
33
|
-
repo = match[2]
|
34
|
-
gh_url = "https://github.com/#{user}/#{repo}"
|
35
|
-
@urls[gem.name] = gh_url
|
36
|
-
|
37
|
-
pb.increment
|
38
|
-
end
|
39
|
-
end
|
40
|
-
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
41
|
-
|
42
|
-
def github_url_match(url)
|
43
|
-
reg = %r{https://github.com/([\w\-]+)/([\w\-]+)}
|
44
|
-
reg.match(url)
|
45
|
-
end
|
46
|
-
|
47
|
-
def rubygems_api(gem)
|
48
|
-
"https://rubygems.org/api/v1/gems/#{gem.name}.json"
|
49
|
-
end
|
50
|
-
|
51
|
-
def urls
|
52
|
-
@urls.sort.to_h
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|