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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 39618b03f87eed4eb3200c82212940c320262f6518932a5df96973f10f204bb2
4
- data.tar.gz: c14fe77e39bec43590dc0c00c8e444e1ff7f6fc97e3d1cb0c1fe009955c75533
3
+ metadata.gz: fff413b0bfd43a7b693a244946e15ede730a479ec4be7260605e71d4001cc72a
4
+ data.tar.gz: 325d18312000d035eda2c45c96feeab44245515e75de9ff6139e7f72661114e8
5
5
  SHA512:
6
- metadata.gz: 379fbabf51a3abf620a46628501ec81596fcfcc93526a5b31657e4a0ffcfcfac468a27ff8e100b340f2781485b88fae8ee7030374985b82d7c2f1545100b1fdb
7
- data.tar.gz: 83b49c68fead8652d7492380fa3ad56b65ea93b8c64de8e9d575a187f7454c5456acfd404c5c409b6ba1fa873088a212365a82208d1581d836620e03e68de1b8
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(url, output = nil)
8
- @url = url
7
+ def initialize(gems, output = nil)
8
+ @gems = gems
9
9
  @output = output
10
10
  @rows = []
11
- gen_array
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 gen_array
27
+ def gen_rows
28
28
  @rows << ['gem', 'Repo URL']
29
- @url.urls.each do |k, v|
30
- @rows << [k, v]
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 { |url| CsvFormatter.new(url).to_csv }
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 { |url| MdFormatter.new(url).to_md }
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gemat
4
- VERSION = '0.1.2'
4
+ VERSION = '0.1.3'
5
5
  end
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 = Dsl.new
20
- url = GetUrl.new(dsl)
21
- url.run
22
- block.call(url)
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
@@ -3,8 +3,8 @@
3
3
  require 'bundler'
4
4
 
5
5
  module Gemat
6
- class Dsl
7
- attr_accessor :dependencies, :sources, :git_sources, :groups, :gemspecs
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, :gemspecs
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
- @gemspecs = dsl.gemspecs
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(url)
8
- @url = url
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
- print "\n\n"
13
- puts '| gem | Repo URL |'
14
- puts '| ---- | ---- |'
15
- @url.urls.each do |k, v|
16
- puts "| #{k} | #{v} |"
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.2
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-26 00:00:00.000000000 Z
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/dsl.rb
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/get_url.rb
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