|
1 | | -require 'openssl' |
2 | | -source 'https://rubygems.org' |
3 | | -gemspec |
| 1 | +# frozen_string_literal: true |
4 | 2 |
|
5 | | -if ENV['RAILS_SOURCE'] |
6 | | - gemspec path: ENV['RAILS_SOURCE'] |
7 | | -else |
8 | | - def get_version_from_gemspec |
9 | | - gemspec = eval(File.read('activerecord-cockroachdb-adapter.gemspec')) |
| 3 | +source "https://rubygems.org" |
10 | 4 |
|
11 | | - gem_version = gemspec.dependencies. |
12 | | - find { |dep| dep.name == 'activerecord' }. |
13 | | - requirement. |
14 | | - requirements. |
15 | | - first. |
16 | | - last |
| 5 | +gemspec |
17 | 6 |
|
18 | | - major, minor, tiny, pre = gem_version.segments |
19 | 7 |
|
20 | | - if pre |
21 | | - gem_version.to_s |
22 | | - else |
23 | | - find_latest_matching_version(major, minor) |
| 8 | +module RailsTag |
| 9 | + class << self |
| 10 | + def call |
| 11 | + req = gemspec_requirement |
| 12 | + "v" + all_activerecord_versions.find { req.satisfied_by?(_1) }.version |
24 | 13 | end |
25 | | - end |
26 | 14 |
|
27 | | - def find_latest_matching_version(gemspec_major, gemspec_minor) |
28 | | - all_activerecord_versions. |
29 | | - reject { |version| version["prerelease"] }. |
30 | | - map { |version| version["number"].split(".").map(&:to_i) }. |
31 | | - find { |major, minor| |
32 | | - major == gemspec_major && (minor == gemspec_minor || gemspec_minor.nil?) |
33 | | - }.join(".") |
34 | | - end |
| 15 | + def gemspec_requirement |
| 16 | + File |
| 17 | + .foreach("activerecord-cockroachdb-adapter.gemspec", chomp: true) |
| 18 | + .find { _1[/add_dependency\s.activerecord.,\s.(.*)./] } |
| 19 | + |
| 20 | + Gem::Requirement.new(Regexp.last_match(1)) |
| 21 | + end |
35 | 22 |
|
36 | | - def all_activerecord_versions |
37 | | - require 'net/http' |
38 | | - require 'yaml' |
| 23 | + def all_activerecord_versions |
| 24 | + require 'net/http' |
| 25 | + require 'yaml' |
39 | 26 |
|
40 | | - uri = URI.parse "https://rubygems.org/api/v1/versions/activerecord.yaml" |
41 | | - http = Net::HTTP.new(uri.host, uri.port) |
42 | | - http.use_ssl = true |
43 | | - http.verify_mode = OpenSSL::SSL::VERIFY_NONE |
| 27 | + uri = URI.parse "https://rubygems.org/api/v1/versions/activerecord.yaml" |
| 28 | + http = Net::HTTP.new(uri.host, uri.port) |
| 29 | + http.use_ssl = true |
| 30 | + http.verify_mode = OpenSSL::SSL::VERIFY_NONE |
44 | 31 |
|
45 | | - YAML.load( |
46 | | - http.request(Net::HTTP::Get.new(uri.request_uri)).body |
47 | | - ) |
| 32 | + YAML.load( |
| 33 | + http.request(Net::HTTP::Get.new(uri.request_uri)).body |
| 34 | + ).map { Gem::Version.new(_1["number"]) } |
| 35 | + end |
48 | 36 | end |
49 | | - |
50 | | - # Get Rails from source because the gem doesn't include tests |
51 | | - version = ENV['RAILS_VERSION'] || get_version_from_gemspec |
52 | | - gem 'rails', git: "https://github.com/rails/rails.git", tag: "v#{version}" |
53 | 37 | end |
54 | 38 |
|
55 | | -group :development do |
| 39 | + |
| 40 | +group :development, :test do |
| 41 | + # We need to load the gem from git to have access to activerecord's test files. |
| 42 | + # You can use `path: "some/local/rails"` if you want to test the gem against |
| 43 | + # a specific rails codebase. |
| 44 | + gem "rails", github: "rails/rails", tag: RailsTag.call |
| 45 | + |
| 46 | + gem "rake" |
56 | 47 | gem "byebug" |
57 | 48 | gem "minitest-excludes", "~> 2.0.1" |
58 | 49 |
|
|
0 commit comments