Class: GemCollector::Repository
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- GemCollector::Repository
- Defined in:
- app/models/gem_collector/repository.rb
Constant Summary collapse
- POINTS_FOR_GEMS_SQL =
<<-SQL.strip_heredoc select gems.repository_id, gems.path, gems.name, gems.version , cume_dist() over (partition by gems.name order by #{build_version_exp('version')}) as version_point from #{GemCollector::RepositoryGem.table_name} gems SQL
Class Method Summary collapse
- .all_with_version_point ⇒ Object
- .find_by_dependent_gem(gem_name, from_version: nil, to_version: nil) ⇒ Object
Instance Method Summary collapse
Class Method Details
.all_with_version_point ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'app/models/gem_collector/repository.rb', line 40 def self.all_with_version_point # points_for_gems: gem ごとにバージョンでソートして、どれくらい上位にいるか # points_for_repos: そのリポジトリが依存している gem について、↑の平均値 # 大きければ大きいほど最新の gem を使っていることになりそう find_by_sql(<<-SQL.strip_heredoc) select repos.*, points_for_repos.path, points_for_repos.point from ( select repository_id, path, avg(version_point) as point from (#{POINTS_FOR_GEMS_SQL}) points_for_gems group by repository_id, path ) points_for_repos inner join #{table_name} repos on repos.id = points_for_repos.repository_id order by point desc SQL end |
.find_by_dependent_gem(gem_name, from_version: nil, to_version: nil) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'app/models/gem_collector/repository.rb', line 62 def self.find_by_dependent_gem(gem_name, from_version: nil, to_version: nil) from_version = '0.0.0' if from_version.blank? find_by_sql([<<-SQL.strip_heredoc, gem_name: gem_name, from_version: from_version, to_version: to_version]) select repos.id , site , full_name , gems.version as gem_version , gems.path as gem_path from #{table_name} repos inner join #{GemCollector::RepositoryGem.table_name} gems on gems.repository_id = repos.id where gems.name = :gem_name and #{build_version_exp('version')} >= #{build_version_exp(':from_version')} #{to_version.blank? ? '' : "and #{build_version_exp('version')} < #{build_version_exp(':to_version')}"} order by #{build_version_exp('version')} desc , site , full_name , gems.path SQL end |
Instance Method Details
#canonical_name ⇒ Object
13 14 15 |
# File 'app/models/gem_collector/repository.rb', line 13 def canonical_name "#{site}/#{full_name}" end |
#gems_with_version_point ⇒ Object
29 30 31 32 33 34 35 36 37 38 |
# File 'app/models/gem_collector/repository.rb', line 29 def gems_with_version_point GemCollector::RepositoryGem.find_by_sql([<<-SQL.strip_heredoc, repository_id: id]) select * from (#{POINTS_FOR_GEMS_SQL}) points_for_gems where repository_id = :repository_id order by path, name SQL end |
#url(path = nil) ⇒ Object
4 5 6 7 8 9 10 11 |
# File 'app/models/gem_collector/repository.rb', line 4 def url(path = nil) u = "https://#{site}/#{full_name}" if path "#{u}/blob/master/#{path}" else u end end |