gem_collector 1.1.1 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 36194b17fc2fa5c04f8ef352b3b5104eb3ddad6c092ada41cf345ce10c54beff
4
- data.tar.gz: 30e9448687f5d3590a1fcf8a3dbc81e9372be51fe0bb8ace5d1d74d0c01ee640
3
+ metadata.gz: 6afb659e925c065367ff3c53185de814607b263ce55dd4ad0fba5ce6e39e8f6c
4
+ data.tar.gz: a89dec3aea75dee230bbfaa6f67e9d4ba7f4682884d2542b84c4a53e0d139fdb
5
5
  SHA512:
6
- metadata.gz: 822ce5abdc809653d0a2de9bfdd28206c8abba90815095890fe7abf90f74b55379bc76da959722c8256acf1943ec6777c45a0073737126a87856c6b34a96fa2e
7
- data.tar.gz: 84582ae7409da59b2097ea1c9bd1adc72b770da216e82331bf37462a8ebf8b800996ce8d501e66338d2c6ac35c1bf57731b126a9ada603d0cefa156c9d71b078
6
+ metadata.gz: 9ff0620a29e877a8e30d8d6d2665a6ef01b4a34ee15d32ce6730d00e673976238fd5799eaf81bc2d51b54ab6f95a3a8136a9b656dec2dbea67b1668b462e909f
7
+ data.tar.gz: 5f71e8c975aabe8afcc266e532cc880451e581543d754c7b4d3dbc1e96d9e37adf22dd70367f70576bcd42131e3852771738e94fe0e73784f7753c69f874089b
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # GemCollector
2
2
  [![Gem Version](https://badge.fury.io/rb/gem_collector.svg)](https://badge.fury.io/rb/gem_collector)
3
- [![Build Status](https://travis-ci.org/cookpad/gem_collector.svg?branch=master)](https://travis-ci.org/cookpad/gem_collector)
3
+ [![Build Status](https://github.com/cookpad/gem_collector/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/cookpad/gem_collector/actions/workflows/ci.yml)
4
4
 
5
5
  Collect gems used by applications.
6
6
 
@@ -0,0 +1,23 @@
1
+ class GemCollector::Api::V1::RepositoriesController < ActionController::API
2
+ def index
3
+ render json: GemCollector::Repository.all.map(&:as_json)
4
+ end
5
+
6
+ def show
7
+ repository = GemCollector::Repository.find(params[:id])
8
+ render json: {
9
+ gemfiles: repository.gems_with_version_point.group_by(&:path).map { |path, gems|
10
+ {
11
+ path: path,
12
+ gems: gems.map { |gem|
13
+ {
14
+ name: gem.name,
15
+ version: gem.version,
16
+ version_point: gem.version_point,
17
+ }
18
+ },
19
+ }
20
+ },
21
+ }
22
+ end
23
+ end
@@ -61,7 +61,7 @@ class GemCollector::RepositoriesController < GemCollector::ApplicationController
61
61
 
62
62
  # https://developer.github.com/webhooks/securing/
63
63
  def has_valid_signature?(site)
64
- secret = Rails.application.config.octokit.fetch(site)['webhook_secret']
64
+ secret = Rails.application.config.octokit.fetch(site.to_sym)[:webhook_secret]
65
65
  if secret
66
66
  request.body.rewind
67
67
  payload_body = request.body.read
@@ -1,10 +1,11 @@
1
1
  module GemCollector::OctokitProvider
2
2
  def self.get(site)
3
- conf = Rails.application.config.octokit.fetch(site)
4
- Octokit::Client.new(
5
- api_endpoint: conf['api_endpoint'],
6
- web_endpoint: conf['web_endpoint'],
7
- access_token: conf['access_token'],
8
- )
3
+ conf = Rails.application.config.octokit.fetch(site.to_sym)
4
+ options = {
5
+ api_endpoint: conf[:api_endpoint],
6
+ web_endpoint: conf[:web_endpoint],
7
+ access_token: conf[:access_token],
8
+ }.compact
9
+ Octokit::Client.new(options)
9
10
  end
10
11
  end
@@ -14,10 +14,14 @@ class GemCollector::Repository < GemCollector::ApplicationRecord
14
14
  "#{site}/#{full_name}"
15
15
  end
16
16
 
17
+ private_class_method def self.build_version_exp(column_or_exp)
18
+ "(regexp_split_to_array(regexp_replace(#{column_or_exp}, '\\.?[^0-9.]+$', ''), '[^0-9]+') :: bigint[])"
19
+ end
20
+
17
21
  POINTS_FOR_GEMS_SQL = <<-SQL.strip_heredoc
18
22
  select
19
23
  gems.repository_id, gems.path, gems.name, gems.version
20
- , cume_dist() over (partition by gems.name order by regexp_split_to_array(regexp_replace(version, '\.[^0-9.]+$', ''), '[^0-9]+') :: bigint[]) as version_point
24
+ , cume_dist() over (partition by gems.name order by #{build_version_exp('version')}) as version_point
21
25
  from
22
26
  #{GemCollector::RepositoryGem.table_name} gems
23
27
  SQL
@@ -77,8 +81,4 @@ class GemCollector::Repository < GemCollector::ApplicationRecord
77
81
  , gems.path
78
82
  SQL
79
83
  end
80
-
81
- private_class_method def self.build_version_exp(column_or_exp)
82
- "(regexp_split_to_array(regexp_replace(#{column_or_exp}, '\.[^0-9.]+$', ''), '[^0-9]+') :: bigint[])"
83
- end
84
84
  end
@@ -55,10 +55,19 @@ class GemCollector::UpdateGemfile
55
55
  end
56
56
 
57
57
  def update_gemfile_lock(repository, dir, path)
58
- lockfile_parser = Bundler::LockfileParser.new(path.read)
58
+ content = path.read
59
+ lockfile_parser =
60
+ begin
61
+ Bundler::LockfileParser.new(content)
62
+ rescue Bundler::LockfileError
63
+ # Try to parse (possibly) incompatible lockfile
64
+ content.sub!(/(^BUNDLED WITH\n\s*)[0-9.]+$/) { "#{$1}#{Bundler::VERSION}" }
65
+ Bundler::LockfileParser.new(content)
66
+ end
59
67
  lock_path = path.relative_path_from(dir).to_s
60
- records = lockfile_parser.specs.map do |spec|
61
- repository.repository_gems.build(path: lock_path, name: spec.name, version: spec.version.to_s)
68
+ # uniq is required when spec.platforms is not ruby and contains multiple platforms like x86_64-darwin-20 and x86_64-linux.
69
+ records = lockfile_parser.specs.map { |spec| [spec.name, spec.version.to_s] }.uniq.map do |name, version|
70
+ repository.repository_gems.build(path: lock_path, name: name, version: version)
62
71
  end
63
72
  GemCollector::RepositoryGem.import(records)
64
73
  end
data/config/routes.rb CHANGED
@@ -6,4 +6,10 @@ GemCollector::Engine.routes.draw do
6
6
  get '/gems/:name' => 'repository_gems#show', as: :repository_gem
7
7
  get '/gems/:name/new_issue' => 'gem_news#new', as: :new_gem_news
8
8
  post '/gems/:name/new_issue' => 'gem_news#create', as: :create_gem_news
9
+
10
+ namespace :api do
11
+ namespace :v1 do
12
+ resources :repositories, only: %i[index show]
13
+ end
14
+ end
9
15
  end
@@ -1,3 +1,3 @@
1
1
  module GemCollector
2
- VERSION = '1.1.1'
2
+ VERSION = '1.4.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gem_collector
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kohei Suzuki
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-15 00:00:00.000000000 Z
11
+ date: 2021-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord-import
@@ -86,16 +86,16 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 5.1.3
89
+ version: 6.1.4
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 5.1.3
96
+ version: 6.1.4
97
97
  - !ruby/object:Gem::Dependency
98
- name: rspec-rails
98
+ name: autodoc
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -109,7 +109,21 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: factory_girl_rails
112
+ name: factory_bot_rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec-rails
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - ">="
@@ -132,9 +146,7 @@ files:
132
146
  - MIT-LICENSE
133
147
  - README.md
134
148
  - Rakefile
135
- - app/assets/config/gem_collector_manifest.js
136
- - app/assets/javascripts/gem_collector/application.js
137
- - app/assets/stylesheets/gem_collector/application.css
149
+ - app/controllers/gem_collector/api/v1/repositories_controller.rb
138
150
  - app/controllers/gem_collector/application_controller.rb
139
151
  - app/controllers/gem_collector/gem_news_controller.rb
140
152
  - app/controllers/gem_collector/repositories_controller.rb
@@ -142,7 +154,6 @@ files:
142
154
  - app/helpers/gem_collector/application_helper.rb
143
155
  - app/jobs/gem_collector/application_job.rb
144
156
  - app/jobs/gem_collector/update_gemfile_job.rb
145
- - app/mailers/gem_collector/application_mailer.rb
146
157
  - app/models/gem_collector/application_record.rb
147
158
  - app/models/gem_collector/octokit_provider.rb
148
159
  - app/models/gem_collector/repository.rb
@@ -171,7 +182,7 @@ homepage: https://github.com/cookpad/gem_collector
171
182
  licenses:
172
183
  - MIT
173
184
  metadata: {}
174
- post_install_message:
185
+ post_install_message:
175
186
  rdoc_options: []
176
187
  require_paths:
177
188
  - lib
@@ -186,8 +197,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
197
  - !ruby/object:Gem::Version
187
198
  version: '0'
188
199
  requirements: []
189
- rubygems_version: 3.0.3
190
- signing_key:
200
+ rubygems_version: 3.1.6
201
+ signing_key:
191
202
  specification_version: 4
192
203
  summary: Collect gems used by applications
193
204
  test_files: []
@@ -1,2 +0,0 @@
1
- //= link_directory ../javascripts/gem_collector .js
2
- //= link_directory ../stylesheets/gem_collector .css
@@ -1,13 +0,0 @@
1
- // This is a manifest file that'll be compiled into application.js, which will include all the files
2
- // listed below.
3
- //
4
- // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
- // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
- //
7
- // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
- // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
- //
10
- // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
- // about supported directives.
12
- //
13
- //= require_tree .
@@ -1,15 +0,0 @@
1
- /*
2
- * This is a manifest file that'll be compiled into application.css, which will include all the files
3
- * listed below.
4
- *
5
- * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
- * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
- *
8
- * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
- * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
- * files in this directory. Styles in this file should be added after the last require_* statement.
11
- * It is generally better to create a new file per style scope.
12
- *
13
- *= require_tree .
14
- *= require_self
15
- */
@@ -1,6 +0,0 @@
1
- module GemCollector
2
- class ApplicationMailer < ActionMailer::Base
3
- default from: 'from@example.com'
4
- layout 'mailer'
5
- end
6
- end