Skip to content

Commit

Permalink
Refactor gemfile_helper by using the latest Ruby features
Browse files Browse the repository at this point in the history
  • Loading branch information
knu committed Apr 28, 2024
1 parent 43ec343 commit 85451b6
Showing 1 changed file with 24 additions and 23 deletions.
47 changes: 24 additions & 23 deletions lib/gemfile_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,36 +6,37 @@ def rails_env
when 'rspec'
'test'
when 'rake'
'test' if ARGV.any? { |arg| /\Aspec(?:\z|:)/ === arg }
'test' if ARGV.any?(/\Aspec(?:\z|:)/)
end || 'development'
end

def load_dotenv
dotenv_dir = Dir[File.join(File.dirname(__FILE__), '../vendor/gems/dotenv-[0-9]*')].sort.last
root = Pathname.new(__dir__).parent
dotenv_dir = (root / 'vendor/gems').glob('dotenv-[0-9]*').last

yield dotenv_dir if block_given?
yield dotenv_dir.to_s if block_given?

return if ENV['ON_HEROKU'] == 'true'

$:.unshift File.join(dotenv_dir, 'lib')
$:.unshift dotenv_dir.join('lib').to_s
require "dotenv"
$:.shift

root = Pathname.new(File.join(File.dirname(__FILE__), '..'))
sanity_check Dotenv.load(
root.join(".env.local"),
root.join(".env.#{rails_env}"),
root.join(".env")
)
root.join(".env.local"),
root.join(".env.#{rails_env}"),
root.join(".env")
)
end

GEM_NAME = '[A-Za-z0-9\.\-\_]+'.freeze
GEM_OPTIONS = '(.+?)\s*(?:,\s*(.+?)){0,1}'.freeze
GEM_SEPARATOR = '\s*(?:,|\z)'.freeze
GEM_REGULAR_EXPRESSION = /(#{GEM_NAME})(?:\(#{GEM_OPTIONS}\)){0,1}#{GEM_SEPARATOR}/
GEM_NAME = /[A-Za-z0-9.\-_]+/
GEM_OPTIONS = /(.+?)\s*(?:,\s*(.+?))?/
GEM_SEPARATOR = /\s*(?:,|\z)/
GEM_REGULAR_EXPRESSION = /(#{GEM_NAME})(?:\(#{GEM_OPTIONS}\))?#{GEM_SEPARATOR}/

def parse_each_agent_gem(string)
return unless string

string.scan(GEM_REGULAR_EXPRESSION).each do |name, version, args|
if version =~ /\w+:/
args = "#{version},#{args}"
Expand All @@ -49,31 +50,31 @@ def parse_each_agent_gem(string)

def parse_gem_args(args)
return nil unless args
options = {}
args.scan(/(\w+):\s*(.+?)#{GEM_SEPARATOR}/).each do |key, value|
options[key.to_sym] = value
end
options

args.scan(/(\w+):\s*(.+?)#{GEM_SEPARATOR}/).to_h { |key, value|
[key.to_sym, value]
}
end

def sanity_check(env)
return if ENV['CI'] == 'true' || ENV['APP_SECRET_TOKEN'] || !env.empty?
# .env is not necessary in bundle update/lock; this helps Renovate
return if (File.basename($0) in 'bundle' | 'bundler') && (ARGV.first in 'lock' | 'update')

puts warning
require "shellwords"
puts "command: #{[$0, *ARGV].shelljoin}"
raise "Could not load huginn settings from .env file."
end

def warning
<<-EOF
Could not load huginn settings from .env file.
<<~EOF
Could not load huginn settings from .env file.
Make sure to copy the .env.example to .env and change it to match your configuration.
Make sure to copy the .env.example to .env and change it to match your configuration.
Capistrano 2 users: Make sure shared files are symlinked before bundle runs: before 'bundle:install', 'deploy:symlink_configs'
EOF
Capistrano 2 users: Make sure shared files are symlinked before bundle runs: before 'bundle:install', 'deploy:symlink_configs'
EOF
end
end
end

0 comments on commit 85451b6

Please sign in to comment.