gemat 0.1.5 → 0.1.6

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: 8f982912f3b03995a2abde75b03a47ec9102608968aac18984961dcc0eeec294
4
- data.tar.gz: b424b233d91a30b3343a72423899f03bdd646bea95ab04b3e5db35877952188f
3
+ metadata.gz: 422b5c9ef99e71ec0193e7748adff36049c26b88478cdc494c3f5178720f5e70
4
+ data.tar.gz: 386d6d07fb0e91e762f1846cc2395a77748351579e2fa0f277e2da5e115af049
5
5
  SHA512:
6
- metadata.gz: cfae4ee42d415f01228e91e7579d4f3426af3cc66c856355bbc543097f43f11f03112fb231995e1ae603a2f9fbd151db28a5654592602c4e83a68ac8ebc72596
7
- data.tar.gz: bd65e8888a6ebb972621da6ad8eb2fa5e2f66658621908a950e7463ad60282f8dc1de100ee30d4966c040f741b5b8d5c9aec5783f756d2c0d7feddd4d22aab9c
6
+ metadata.gz: e79ee792b7f9e98ef3bb7d39f3865410aa3958d2e8d6a394914bcac012db41ff641df84e73c1fcc62e050dc9363a810083792a55346c24da073490d2c3f9d809
7
+ data.tar.gz: febf34bccfadc363376033573ce0fbd1bf43ffae2bcdbe83d9cfc7ccdd112976b81c869dbe3b8407d1f6d9988455296caf483e9dc8d35b95de08333c4323a15b
data/lib/fetcher.rb CHANGED
@@ -11,27 +11,42 @@ module Gemat
11
11
 
12
12
  def run
13
13
  pb = ProgressBar.create(total: @dsl.dependencies.length)
14
- @dsl.dependencies.each_with_index do |gem, idx|
14
+ @dsl.dependencies.each_with_index do |dependency, idx|
15
15
  pb.increment
16
16
 
17
- response = fetch(gem)
18
- sleep 0.2
17
+ response = fetch_rubygems(dependency)
19
18
  next unless response
20
19
 
21
- gem = Gem.new(response)
22
- gem.index = idx
23
- @gems << gem
20
+ create_gem(response, idx)
21
+ sleep 0.2
24
22
  end
25
23
  end
26
24
 
27
25
  private
28
26
 
27
+ def create_gem(rubygems, idx)
28
+ gem = Gem.new(rubygems)
29
+ gem.github = fetch_github(gem)
30
+ gem.index = idx
31
+ @gems << gem
32
+ end
33
+
34
+ def fetch_rubygems(gem)
35
+ fetch(rubygems_api(gem.name))
36
+ end
37
+
38
+ def fetch_github(gem, uri = nil)
39
+ uri ||= gem.repo_uri.gsub(/github.com/, 'api.github.com/repos')
40
+ response = fetch(uri)
41
+ response = fetch_github(gem, response['url']) if response['message'] == 'Moved Permanently'
42
+ response
43
+ end
44
+
29
45
  # rubocop:disable Metrics/MethodLength
30
- def fetch(gem)
46
+ def fetch(uri)
31
47
  failed = []
32
-
33
48
  client = HTTPClient.new
34
- request = client.get(rubygems_api(gem.name))
49
+ request = client.get(uri)
35
50
  begin
36
51
  response = JSON.parse(request.body)
37
52
  rescue JSON::ParserError
@@ -39,7 +54,7 @@ module Gemat
39
54
  return
40
55
  end
41
56
 
42
- print "#{failed.join(',')}: failed fetcing gem info." unless failed.empty?
57
+ print "#{failed.join(',')}: failed fetcing info." unless failed.empty?
43
58
  response
44
59
  end
45
60
  # rubocop:enable Metrics/MethodLength
data/lib/gem.rb CHANGED
@@ -2,18 +2,18 @@
2
2
 
3
3
  module Gemat
4
4
  class Gem
5
- attr_accessor :index, :response
5
+ attr_accessor :index, :rubygems, :github
6
6
 
7
- def initialize(response)
8
- @response = response
7
+ def initialize(rubygems)
8
+ @rubygems = rubygems
9
9
  @index = 0
10
10
  end
11
11
 
12
12
  def repo_uri
13
- match = github_uri_match([@response.dig('metadata', 'homepage_uri'),
14
- @response['homepage_uri'],
15
- @response['bug_tracker_uri'],
16
- @response['source_code_uri']])
13
+ match = github_uri_match([@rubygems.dig('metadata', 'homepage_uri'),
14
+ @rubygems['homepage_uri'],
15
+ @rubygems['bug_tracker_uri'],
16
+ @rubygems['source_code_uri']])
17
17
  return if match.nil?
18
18
 
19
19
  user = match[1]
@@ -24,7 +24,7 @@ module Gemat
24
24
  private
25
25
 
26
26
  def github_uri_match(uris)
27
- reg = %r{https://github.com/([\w\-]+)/([\w\-]+)}
27
+ reg = %r{github.com/([\w\-]+)/([\w\-]+)}
28
28
  uris.each do |uri|
29
29
  return reg.match(uri) if reg.match(uri)
30
30
  end
data/lib/gemat/cli.rb CHANGED
@@ -3,13 +3,13 @@
3
3
  module Gemat
4
4
  class Cli < Thor
5
5
  desc 'csv', 'export Gemfile to CSV file'
6
- method_options input: :string, output: :string, columns: :array
6
+ method_options input: :string, output: :string, columns: :array, all: :boolean
7
7
  def csv
8
8
  command(options, __method__)
9
9
  end
10
10
 
11
11
  desc 'md', 'export Gemfile to markdown'
12
- method_options input: :string, output: :string, columns: :array
12
+ method_options input: :string, output: :string, columns: :array, all: :boolean
13
13
  def md
14
14
  command(options, __method__)
15
15
  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.5'
4
+ VERSION = '0.1.6'
5
5
  end
data/lib/gemat.rb CHANGED
@@ -22,7 +22,7 @@ module Gemat
22
22
  class Gemat
23
23
  def self.run(options = {}, &block)
24
24
  dsl = InDsl.new(options[:input])
25
- outdsls = OutDsl.create(options[:columns])
25
+ outdsls = OutDsl.create(options[:columns], all: options[:all])
26
26
  fetcher = Fetcher.new(dsl)
27
27
  fetcher.run
28
28
  block.call(fetcher.gems, outdsls)
data/lib/out_dsl.rb CHANGED
@@ -2,17 +2,40 @@
2
2
 
3
3
  module Gemat
4
4
  class OutDsl
5
+ # gem
5
6
  INDEX = 'index'
6
7
  NAME = 'name'
7
8
  REPO_URI = 'repo_uri'
8
9
  GEM_URI = 'gem_uri'
10
+
11
+ # Rubygems
9
12
  DOC_URI = 'documentation_uri'
10
13
  LATEST_VERSION = 'version'
11
14
  AUTHORS = 'authors'
12
- DEFAULT_COLUMNS = [INDEX, NAME, REPO_URI, DOC_URI].freeze
13
15
 
14
- RESPONSE_SOURCES = [NAME, DOC_URI, GEM_URI, LATEST_VERSION, AUTHORS].freeze
16
+ # GitHub
17
+ DESCRIPTION = 'description'
18
+ CREATED_AT = 'created_at'
19
+ UPDATED_AT = 'updated_at'
20
+ SIZE = 'size'
21
+ STAR = 'stargazers_count'
22
+ WATCH = 'watchers_count'
23
+ FORKS = 'forks'
24
+ LANGUAGE = 'language'
25
+ ARCHIVED = 'archived'
26
+ DISABLED = 'disabled'
27
+ OPEN_ISSUES_COUNT = 'open_issues_count'
28
+ NETWORK_COUNT = 'network_count'
29
+ SUBSCRIBERS = 'subscribers_count'
30
+
31
+ DEFAULT_COLUMNS = [INDEX, NAME, REPO_URI, DOC_URI, SIZE, STAR, CREATED_AT, UPDATED_AT].freeze
32
+
33
+ RUBYGEMS_RESPONSE_SOURCES = [NAME, DOC_URI, GEM_URI, LATEST_VERSION, AUTHORS].freeze
34
+ GITHUB_RESPONSE_SOURCES = [DESCRIPTION, CREATED_AT, UPDATED_AT, SIZE, STAR, WATCH,
35
+ FORKS, LANGUAGE, ARCHIVED, DISABLED, OPEN_ISSUES_COUNT,
36
+ NETWORK_COUNT, SUBSCRIBERS].freeze
15
37
  GEM_SOURCES = [INDEX, REPO_URI].freeze
38
+ ALL_SOURCES = [].concat(GEM_SOURCES, RUBYGEMS_RESPONSE_SOURCES, GITHUB_RESPONSE_SOURCES).freeze
16
39
 
17
40
  attr_accessor :column_name
18
41
 
@@ -20,9 +43,11 @@ module Gemat
20
43
  columns.map { |column| new(column) }
21
44
  end
22
45
 
23
- def self.create(columns)
46
+ def self.create(columns, all: nil)
24
47
  if columns
25
48
  new_by_array(columns)
49
+ elsif all
50
+ new_by_array(ALL_SOURCES)
26
51
  else
27
52
  new_by_array(DEFAULT_COLUMNS)
28
53
  end
@@ -41,14 +66,16 @@ module Gemat
41
66
  # rubocop:disable Metrics/MethodLength
42
67
  def set_lambda
43
68
  case @column_name
44
- when *RESPONSE_SOURCES
69
+ when *RUBYGEMS_RESPONSE_SOURCES
45
70
  @lambda = rubygems_response(@column_name)
71
+ when *GITHUB_RESPONSE_SOURCES
72
+ @lambda = github_response(@column_name)
46
73
  when *GEM_SOURCES
47
74
  @lambda = gem_method(@column_name)
48
75
  else
49
76
  msg = <<-ERROR.gsub(/^\s+/, '')
50
77
  Contain invalid column name `#{@column_name}`!
51
- valid columns hint: [#{GEM_SOURCES.join(', ')}, #{RESPONSE_SOURCES.join(', ')}]
78
+ valid columns hint: [#{ALL_SOURCES}]
52
79
  ERROR
53
80
  raise StandardError, msg
54
81
  end
@@ -56,7 +83,11 @@ module Gemat
56
83
  # rubocop:enable Metrics/MethodLength
57
84
 
58
85
  def rubygems_response(column)
59
- ->(gem) { gem.response[column] }
86
+ ->(gem) { gem.rubygems[column] }
87
+ end
88
+
89
+ def github_response(column)
90
+ ->(gem) { gem.github[column] }
60
91
  end
61
92
 
62
93
  def gem_method(column)
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
- - kijimaD
7
+ - Kijima Daigo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description: Export Gemfile several formats. CSV, Markdown etc.
55
+ description: Gemat is a Ruby gem for curating and exporing Gemfile to several formats!
56
56
  email:
57
57
  - norimaking777@gmail.com
58
58
  executables:
@@ -96,5 +96,5 @@ requirements: []
96
96
  rubygems_version: 3.1.4
97
97
  signing_key:
98
98
  specification_version: 4
99
- summary: Export Gemfile several formats.
99
+ summary: Gemat is a Ruby gem for curating and exporing Gemfile to several formats!
100
100
  test_files: []