gemat 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 6505a5cf71ca84a7cef9f7584f1acc48af9199c184afe8bb9ba3cc84b4ff13e0
4
+ data.tar.gz: 9a35db86cdf9275fac5091674d360337f8dc16a2284c0decbecda003f7803d00
5
+ SHA512:
6
+ metadata.gz: c1d6d1be9948bf32493dee022278db5cbabf47b23c59bd488d019cdb8b986ef62ea44959d6442714fd76bd4a1c5e99d63462c78baf1ad7459fb1f7b9e912e168
7
+ data.tar.gz: 37c66b7bc88beb96b05dc0962afcee34197f01bed68d98a0fe22954b27ccaf37f87988976d975ec19587ec5b32ce512fcd5c576c6f424add40a3262241264ac9
data/exe/gemat ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'gemat'
4
+
5
+ Gemat::Cli.start
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'csv'
4
+
5
+ module Gemat
6
+ class CsvFormatter
7
+ def initialize(url)
8
+ @url = url
9
+ end
10
+
11
+ def to_csv
12
+ CSV.open('test.csv', 'w') do |csv|
13
+ @url.urls.each do |k, v|
14
+ csv << [k, v]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
data/lib/dsl.rb ADDED
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
4
+
5
+ module Gemat
6
+ class Dsl
7
+ attr_accessor :dependencies, :sources, :git_sources, :groups, :gemspecs
8
+
9
+ # rubocop:disable Metrics/MethodLength
10
+ def initialize(gemfile = nil)
11
+ gemfile ||= Bundler.default_gemfile.to_s
12
+ dsl = Bundler::Dsl.new
13
+ dsl.eval_gemfile(gemfile)
14
+
15
+ class << dsl
16
+ attr_accessor :sources, :git_sources, :groups, :gemspecs
17
+ end
18
+
19
+ @dependencies = dsl.dependencies
20
+ @sources = dsl.sources
21
+ @git_sources = dsl.git_sources
22
+ @groups = dsl.groups
23
+ @gemspecs = dsl.gemspecs
24
+ end
25
+ # rubocop:enable Metrics/MethodLength
26
+ end
27
+ end
data/lib/gemat/cli.rb ADDED
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'thor'
4
+
5
+ module Gemat
6
+ class Cli < Thor
7
+ desc 'export Gemfile to CSV', 'test'
8
+ def csv
9
+ dsl = Gemat::Dsl.new
10
+ url = Gemat::GetUrl.new(dsl)
11
+ url.run
12
+ Gemat::CsvFormatter.new(url).to_csv
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gemat
4
+ VERSION = '0.1.0'
5
+ end
data/lib/gemat.rb ADDED
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'httpclient'
4
+ require 'json'
5
+
6
+ require_relative 'csv_formatter'
7
+ require_relative 'dsl'
8
+ require_relative 'gemat/version'
9
+ require_relative 'gemat/cli'
10
+ require_relative 'get_url'
11
+
12
+ module Gemat
13
+ class Error < StandardError; end
14
+ end
data/lib/get_url.rb ADDED
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gemat
4
+ class GetUrl
5
+ attr_accessor :urls
6
+
7
+ def initialize(dsl)
8
+ @dsl = dsl
9
+ @urls = {}
10
+ end
11
+
12
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
13
+ def run
14
+ @dsl.dependencies.each do |gem|
15
+ # break unless gem == @dsl.dependencies.first
16
+
17
+ sleep 0.1
18
+ p "start #{gem.name}..."
19
+
20
+ client = HTTPClient.new
21
+ request = client.get(rubygems_api(gem))
22
+ response = JSON.parse(request.body)
23
+ # puts JSON.pretty_generate(response)
24
+
25
+ github_gem = github_url(response.dig('metadata', 'homepage_uri')) ||
26
+ github_url(response['homepage_uri']) ||
27
+ github_url(response['bug_tracker_uri']) ||
28
+ github_url(response['source_code_uri'])
29
+ next if github_gem.nil?
30
+
31
+ user = github_gem[1]
32
+ repo = github_gem[2]
33
+ gh_url = "https://github.com/#{user}/#{repo}"
34
+ @urls[gem.name] = gh_url
35
+ end
36
+ end
37
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
38
+
39
+ def github_url(url)
40
+ reg = %r{https://github.com/([\w\-]+)/([\w\-]+)}
41
+ reg.match(url)
42
+ end
43
+
44
+ def rubygems_api(gem)
45
+ "https://rubygems.org/api/v1/gems/#{gem.name}.json"
46
+ end
47
+ end
48
+ end
data/lib/main.rb ADDED
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'httpclient'
4
+ require 'json'
5
+
6
+ require_relative 'dsl'
7
+ require_relative 'get_url'
8
+ require_relative 'csv_formatter'
9
+
10
+ def main
11
+ dsl = Gemat::Dsl.new
12
+ url = Gemat::GetUrl.new(dsl)
13
+ url.run
14
+ Gemat::CsvFormatter.new(url).to_csv
15
+ end
16
+
17
+ main
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gemat
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - kijimaD
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-11-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Export Gemfile several formats. CSV, Markdown etc.
28
+ email:
29
+ - norimaking777@gmail.com
30
+ executables:
31
+ - gemat
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - exe/gemat
36
+ - lib/csv_formatter.rb
37
+ - lib/dsl.rb
38
+ - lib/gemat.rb
39
+ - lib/gemat/cli.rb
40
+ - lib/gemat/version.rb
41
+ - lib/get_url.rb
42
+ - lib/main.rb
43
+ homepage: https://github.com/kijimaD/gemat
44
+ licenses:
45
+ - GPL3
46
+ metadata:
47
+ homepage_uri: https://github.com/kijimaD/gemat
48
+ source_code_uri: https://github.com/kijimaD/gemat
49
+ changelog_uri: https://github.com/kijimaD/gemat
50
+ post_install_message:
51
+ rdoc_options: []
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: 2.5.0
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ requirements: []
65
+ rubygems_version: 3.1.4
66
+ signing_key:
67
+ specification_version: 4
68
+ summary: Export Gemfile several formats.
69
+ test_files: []