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 =
" select\n gems.repository_id, gems.path, gems.name, gems.version\n , cume_dist() over (partition by gems.name order by regexp_split_to_array(regexp_replace(version, '\\.[^0-9.]+$', ''), '[^0-9]+') :: bigint[]) as version_point\n from\n \#{GemCollector::RepositoryGem.table_name} gems\n".strip_heredoc
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
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'app/models/gem_collector/repository.rb', line 36 def self.all_with_version_point # points_for_gems: gem ごとにバージョンでソートして、どれくらい上位にいるか # points_for_repos: そのリポジトリが依存している gem について、↑の平均値 # 大きければ大きいほど最新の gem を使っていることになりそう find_by_sql(" select\n repos.*, points_for_repos.path, points_for_repos.point\n from (\n select\n repository_id, path, avg(version_point) as point\n from (\#{POINTS_FOR_GEMS_SQL}) points_for_gems\n group by repository_id, path\n ) points_for_repos\n inner join \#{table_name} repos on repos.id = points_for_repos.repository_id\n order by\n point desc\n SQL\nend\n".strip_heredoc) |
.find_by_dependent_gem(gem_name, from_version: nil, to_version: nil) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'app/models/gem_collector/repository.rb', line 58 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([" select\n repos.id\n , site\n , full_name\n , gems.version as gem_version\n , gems.path as gem_path\n from\n \#{table_name} repos\n inner join \#{GemCollector::RepositoryGem.table_name} gems on gems.repository_id = repos.id\n where gems.name = :gem_name\n and \#{build_version_exp('version')} >= \#{build_version_exp(':from_version')}\n \#{to_version.blank? ? '' : \"and \#{build_version_exp('version')} < \#{build_version_exp(':to_version')}\"}\n order by\n \#{build_version_exp('version')} desc\n , site\n , full_name\n , gems.path\n SQL\nend\n".strip_heredoc, gem_name: gem_name, from_version: from_version, to_version: to_version]) |
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
25 26 27 28 29 30 31 32 33 34 |
# File 'app/models/gem_collector/repository.rb', line 25 def gems_with_version_point GemCollector::RepositoryGem.find_by_sql([" select *\n from (\#{POINTS_FOR_GEMS_SQL}) points_for_gems\n where\n repository_id = :repository_id\n order by\n path, name\n SQL\nend\n".strip_heredoc, repository_id: id]) |
#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 |