From 2b327ade0f0c8ca1be4769d6813a48903987e3db Mon Sep 17 00:00:00 2001 From: Ulysse Buonomo Date: Wed, 20 Apr 2022 20:18:56 +0200 Subject: [PATCH 1/3] dry-validation only as a runtime dependency --- .ruby-version | 2 +- config.gemspec | 5 +++-- lib/config/dry_validation_requirements.rb | 5 +++++ lib/config/error.rb | 4 ++++ lib/config/validation/error.rb | 4 +++- lib/config/validation/schema.rb | 13 +++++++++++++ 6 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 lib/config/dry_validation_requirements.rb create mode 100644 lib/config/error.rb diff --git a/.ruby-version b/.ruby-version index 7872401a..a603bb50 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -ruby-2.6 +2.7.5 diff --git a/config.gemspec b/config.gemspec index 4c9d1eef..5900b488 100644 --- a/config.gemspec +++ b/config.gemspec @@ -1,6 +1,7 @@ -$:.push File.expand_path('../lib', __FILE__) +$:.push File.expand_path('lib', __dir__) require 'config/version' +require 'config/dry_validation_requirements' Gem::Specification.new do |s| s.name = 'config' @@ -27,8 +28,8 @@ Donate: \e[34mhttps://opencollective.com/rubyconfig/donate\e[0m\n" s.required_ruby_version = '>= 2.6.0' s.add_dependency 'deep_merge', '~> 1.2', '>= 1.2.1' - s.add_dependency 'dry-validation', '~> 1.0', '>= 1.0.0' + s.add_development_dependency 'dry-validation', *Config::DRY_VALIDATION_REQUIREMENTS s.add_development_dependency 'rake', '~> 12.0', '>= 12.0.0' # Testing diff --git a/lib/config/dry_validation_requirements.rb b/lib/config/dry_validation_requirements.rb new file mode 100644 index 00000000..b1a1287a --- /dev/null +++ b/lib/config/dry_validation_requirements.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +module Config + DRY_VALIDATION_REQUIREMENTS = ['~> 1.0', '>= 1.0.0'].freeze +end diff --git a/lib/config/error.rb b/lib/config/error.rb new file mode 100644 index 00000000..88906fe7 --- /dev/null +++ b/lib/config/error.rb @@ -0,0 +1,4 @@ +module Config + class Error < StandardError + end +end diff --git a/lib/config/validation/error.rb b/lib/config/validation/error.rb index 31bac93a..cc523c43 100644 --- a/lib/config/validation/error.rb +++ b/lib/config/validation/error.rb @@ -1,6 +1,8 @@ +require_relative "../error" + module Config module Validation - class Error < StandardError + class Error < ::Config::Error def self.format(v_res) v_res.errors.group_by(&:path).map do |path, messages| diff --git a/lib/config/validation/schema.rb b/lib/config/validation/schema.rb index 841b3df8..4216445a 100644 --- a/lib/config/validation/schema.rb +++ b/lib/config/validation/schema.rb @@ -1,3 +1,6 @@ +require_relative '../dry_validation_requirements' +require_relative '../error' + module Config module Validation module Schema @@ -8,6 +11,16 @@ def schema=(value) def schema(&block) if block_given? + begin + require 'dry/validation/version' + version = Gem::Version.new(Dry::Validation::VERSION) + unless ::Config::DRY_VALIDATION_REQUIREMENTS.all? { |req| Gem::Requirement.new(req).satisfied_by?(version) } + raise LoadError + end + rescue LoadError + raise ::Config::Error, 'Could not find a dry-validation version matching requirements' \ + " (#{::Config::DRY_VALIDATION_REQUIREMENTS.map(&:inspect) * ','})" + end # Delay require until optional schema validation is requested require 'dry-validation' @schema = Dry::Schema.define(&block) From 2bea3ec58d7bf2ff6f158cc4c0e23cd991cea0d8 Mon Sep 17 00:00:00 2001 From: Ulysse Buonomo Date: Tue, 26 Apr 2022 16:25:00 +0200 Subject: [PATCH 2/3] Fix config requirement --- lib/config.rb | 2 +- lib/config/compatibility.rb | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 lib/config/compatibility.rb diff --git a/lib/config.rb b/lib/config.rb index 4713f8ba..075c6b43 100644 --- a/lib/config.rb +++ b/lib/config.rb @@ -1,6 +1,6 @@ -require 'config/compatibility' require 'config/options' require 'config/configuration' +require 'config/dry_validation_requirements' require 'config/version' require 'config/sources/yaml_source' require 'config/sources/hash_source' diff --git a/lib/config/compatibility.rb b/lib/config/compatibility.rb deleted file mode 100644 index 57513ebb..00000000 --- a/lib/config/compatibility.rb +++ /dev/null @@ -1,3 +0,0 @@ -if defined?(RbConfig) && defined?(Config) - Object.send :remove_const, :Config -end From 672caae5fc9fbca3f85e8b8fb5deb2098efa2a2d Mon Sep 17 00:00:00 2001 From: Ulysse Buonomo Date: Tue, 26 Apr 2022 16:25:35 +0200 Subject: [PATCH 3/3] Various fixes --- .gitignore | 1 + .ruby-version | 1 - config.gemspec | 6 ++---- spec/spec_helper.rb | 8 ++++---- 4 files changed, 7 insertions(+), 9 deletions(-) delete mode 100644 .ruby-version diff --git a/.gitignore b/.gitignore index c44c98cb..4be21795 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ tmp .keep .rvmrc .rakeTasks +.ruby-version .sass-cache Gemfile.lock *.gem diff --git a/.ruby-version b/.ruby-version deleted file mode 100644 index a603bb50..00000000 --- a/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -2.7.5 diff --git a/config.gemspec b/config.gemspec index 5900b488..a49a2697 100644 --- a/config.gemspec +++ b/config.gemspec @@ -1,7 +1,5 @@ -$:.push File.expand_path('lib', __dir__) - -require 'config/version' -require 'config/dry_validation_requirements' +require_relative 'lib/config/version' +require_relative 'lib/config/dry_validation_requirements' Gem::Specification.new do |s| s.name = 'config' diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2f1c7075..aa214221 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -14,13 +14,13 @@ ## # Load Rspec supporting files # -Dir['./spec/support/**/*.rb'].each { |f| require f } +Dir['./spec/support/**/*.rb'].sort.each { |f| require f } ## # Detect Rails/Sinatra dummy application based on gemfile name substituted by Appraisal # if ENV['APPRAISAL_INITIALIZED'] || ENV['GITHUB_ACTIONS'] - app_name = Pathname.new(ENV['BUNDLE_GEMFILE']).basename.sub('.gemfile', '') + app_name = File.basename(ENV['BUNDLE_GEMFILE'], '.gemfile') else /.*?(?rails.*?)\.gemfile/ =~ Dir["gemfiles/rails*.gemfile"].sort.last end @@ -33,7 +33,7 @@ case app_framework when 'rails' # Load Rails - require File.expand_path("../app/#{app_name}/config/environment", __FILE__) + require_relative "app/#{app_name}/config/environment" APP_RAKEFILE = File.expand_path("../app/#{app_name}/Rakefile", __FILE__) @@ -47,7 +47,7 @@ when 'sinatra' # Load Sinatra - require File.expand_path("../app/#{app_name}/app", __FILE__) + require_relative "app/#{app_name}/app" # Load Rspec require 'rspec'