Skip to content

Commit b5f5271

Browse files
committed
Extract common regexp to constants and methods
This make sure we are not duplicating the same regexp in multiple places with slightly different variations.
1 parent ebed9bd commit b5f5271

File tree

4 files changed

+15
-5
lines changed

4 files changed

+15
-5
lines changed

lib/importmap/commands.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,12 @@ def npm
117117
end
118118

119119
def update_importmap_with_pin(package, pin)
120+
new_pin = "#{pin}\n"
121+
120122
if packager.packaged?(package)
121-
gsub_file("config/importmap.rb", /^pin "#{package}".*$/, pin, verbose: false)
123+
gsub_file("config/importmap.rb", Importmap::Map.pin_line_regexp_for(package), new_pin, verbose: false)
122124
else
123-
append_to_file("config/importmap.rb", "#{pin}\n", verbose: false)
125+
append_to_file("config/importmap.rb", new_pin, verbose: false)
124126
end
125127
end
126128

lib/importmap/map.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
class Importmap::Map
44
attr_reader :packages, :directories
55

6+
PIN_REGEX = /^pin\s+["']([^"']+)["']/.freeze # :nodoc:
7+
8+
def self.pin_line_regexp_for(package) # :nodoc:
9+
/^.*pin\s+["']#{Regexp.escape(package)}["'].*$/.freeze
10+
end
11+
612
class InvalidFile < StandardError; end
713

814
def initialize

lib/importmap/npm.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
require "json"
44

55
class Importmap::Npm
6-
PIN_REGEX = /^pin ["']([^["']]*)["'].*/
6+
PIN_REGEX = /#{Importmap::Map::PIN_REGEX}.*/.freeze # :nodoc:
77

88
Error = Class.new(StandardError)
99
HTTPError = Class.new(Error)

lib/importmap/packager.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
require "json"
44

55
class Importmap::Packager
6+
PIN_REGEX = /#{Importmap::Map::PIN_REGEX}(.*)/.freeze # :nodoc:
7+
68
Error = Class.new(StandardError)
79
HTTPError = Class.new(Error)
810
ServiceError = Error.new(Error)
@@ -51,7 +53,7 @@ def vendored_pin_for(package, url, preloads = nil)
5153
end
5254

5355
def packaged?(package)
54-
importmap.match(/^pin ["']#{package}["'].*$/)
56+
importmap.match(Importmap::Map.pin_line_regexp_for(package))
5557
end
5658

5759
def download(package, url)
@@ -129,7 +131,7 @@ def remove_existing_package_file(package)
129131

130132
def remove_package_from_importmap(package)
131133
all_lines = File.readlines(@importmap_path)
132-
with_lines_removed = all_lines.grep_v(/pin ["']#{package}["']/)
134+
with_lines_removed = all_lines.grep_v(Importmap::Map.pin_line_regexp_for(package))
133135

134136
File.open(@importmap_path, "w") do |file|
135137
with_lines_removed.each { |line| file.write(line) }

0 commit comments

Comments
 (0)