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 +4 -4
- data/README.md +1 -1
- data/app/controllers/gem_collector/api/v1/repositories_controller.rb +23 -0
- data/app/controllers/gem_collector/repositories_controller.rb +1 -1
- data/app/models/gem_collector/octokit_provider.rb +7 -6
- data/app/models/gem_collector/repository.rb +5 -5
- data/app/services/gem_collector/update_gemfile.rb +12 -3
- data/config/routes.rb +6 -0
- data/lib/gem_collector/version.rb +1 -1
- metadata +25 -14
- data/app/assets/config/gem_collector_manifest.js +0 -2
- data/app/assets/javascripts/gem_collector/application.js +0 -13
- data/app/assets/stylesheets/gem_collector/application.css +0 -15
- data/app/mailers/gem_collector/application_mailer.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6afb659e925c065367ff3c53185de814607b263ce55dd4ad0fba5ce6e39e8f6c
|
4
|
+
data.tar.gz: a89dec3aea75dee230bbfaa6f67e9d4ba7f4682884d2542b84c4a53e0d139fdb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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://
|
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)[
|
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
|
-
|
5
|
-
api_endpoint: conf[
|
6
|
-
web_endpoint: conf[
|
7
|
-
access_token: conf[
|
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
|
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
|
-
|
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
|
-
|
61
|
-
|
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
|
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.
|
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:
|
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:
|
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:
|
96
|
+
version: 6.1.4
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
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:
|
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/
|
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.
|
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,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
|
-
*/
|