@@ -52,7 +52,11 @@ def process_gemfile(gemfile_name, runtime)
52
52
definition . dependencies . each do |dependency |
53
53
gem_name = dependency . name
54
54
version = dependency . requirement . to_s
55
- update_gem_versions ( runtime , gem_name , version )
55
+ unspecified = version . strip == '' || version == ">= 0"
56
+ if unspecified
57
+ puts "#{ gem_name } uses latest"
58
+ end
59
+ update_gem_versions ( runtime , gem_name , version , unspecified )
56
60
end
57
61
rescue Bundler ::GemfileError => e
58
62
puts "Error reading Gemfile: #{ e . message } "
@@ -65,30 +69,36 @@ def process_lockfile(gemfile_name, runtime)
65
69
parser . specs . each do |spec |
66
70
gem_name = spec . name
67
71
version = spec . version . to_s
68
- update_gem_versions ( runtime , gem_name , version )
72
+ update_gem_versions ( runtime , gem_name , version , false )
69
73
end
70
74
end
71
75
72
- def update_gem_versions ( runtime , gem_name , version )
73
- return unless version_valid? ( version )
74
-
75
- gem_version = Gem ::Version . new ( version )
76
+ def update_gem_versions ( runtime , gem_name , version , unspecified )
77
+ return unless version_valid? ( version , unspecified )
76
78
79
+ gem_version = Gem ::Version . new ( version ) unless unspecified
77
80
# Update minimum gems
78
- if @min_gems [ runtime ] [ gem_name ] . nil? || gem_version < Gem ::Version . new ( @min_gems [ runtime ] [ gem_name ] )
79
- @min_gems [ runtime ] [ gem_name ] = version
81
+ if not unspecified
82
+ if @min_gems [ runtime ] [ gem_name ] . nil? || gem_version < Gem ::Version . new ( @min_gems [ runtime ] [ gem_name ] )
83
+ @min_gems [ runtime ] [ gem_name ] = version
84
+ end
80
85
end
81
86
82
87
# Update maximum gems
83
- if @max_gems [ runtime ] [ gem_name ] . nil? || gem_version > Gem ::Version . new ( @max_gems [ runtime ] [ gem_name ] )
84
- @max_gems [ runtime ] [ gem_name ] = version
88
+ if unspecified
89
+ puts "Setting gem #{ gem_name } to infinity"
90
+ @max_gems [ runtime ] [ gem_name ] = Float ::INFINITY
91
+ else
92
+ if @max_gems [ runtime ] [ gem_name ] . nil? || ( @max_gems [ runtime ] [ gem_name ] != Float ::INFINITY && gem_version > Gem ::Version . new ( @max_gems [ runtime ] [ gem_name ] ) )
93
+ @max_gems [ runtime ] [ gem_name ] = version
94
+ end
85
95
end
86
96
end
87
97
88
98
# Helper: Validate the version format
89
- def version_valid? ( version )
99
+ def version_valid? ( version , unspecified )
100
+ return true if unspecified
90
101
return false if version . nil? || version . strip . empty?
91
-
92
102
Gem ::Version . new ( version )
93
103
true
94
104
rescue ArgumentError
@@ -115,17 +125,17 @@ def process_integrations
115
125
def include_hardcoded_versions
116
126
# `httpx` is maintained externally
117
127
@integration_json_mapping [ 'httpx' ] = [
118
- '0.11' , # Min version Ruby
119
- '0.11' , # Max version Ruby
120
- nil , # Min version JRuby
128
+ '0.11' , # Min version Ruby
129
+ nil , # Max version Ruby
130
+ '0.11' , # Min version JRuby
121
131
nil # Max version JRuby
122
132
]
123
133
124
134
# `makara` is part of `activerecord`
125
135
@integration_json_mapping [ 'makara' ] = [
126
136
'0.3.5' , # Min version Ruby
127
- '0.3.5' , # Max version Ruby
128
- nil , # Min version JRuby
137
+ nil , # Max version Ruby
138
+ '0.3.5' , # Min version JRuby
129
139
nil # Max version JRuby
130
140
]
131
141
end
@@ -142,6 +152,9 @@ def resolve_integration_name(integration)
142
152
143
153
def write_output
144
154
@integration_json_mapping = @integration_json_mapping . sort . to_h
155
+ @integration_json_mapping . each do |integration , versions |
156
+ versions . map! { |v | v == Float ::INFINITY ? 'infinity' : v }
157
+ end
145
158
File . write ( "gem_output.json" , JSON . pretty_generate ( @integration_json_mapping ) )
146
159
end
147
160
end
0 commit comments