diff --git a/Gemfile b/Gemfile index 07879a5..6660944 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + source "https://rubygems.org" eval_gemfile "Gemfile.devtools" diff --git a/Guardfile b/Guardfile index 6a5ea8b..f06eb0f 100644 --- a/Guardfile +++ b/Guardfile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + guard :rspec, cmd: "bundle exec rspec" do watch(%r{^spec/.+_spec\.rb$}) watch(%r{^spec/(spec_helper|support)}) { "spec" } diff --git a/Rakefile b/Rakefile index c6d919b..0e5891d 100644 --- a/Rakefile +++ b/Rakefile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require "bundler/setup" Bundler::GemHelper.install_tasks diff --git a/lib/dry-initializer.rb b/lib/dry-initializer.rb index 9b17aa8..64e4a2a 100644 --- a/lib/dry-initializer.rb +++ b/lib/dry-initializer.rb @@ -1 +1,3 @@ +# frozen_string_literal: true + require_relative "dry/initializer" diff --git a/lib/dry/initializer.rb b/lib/dry/initializer.rb index cb7da21..08b49cf 100644 --- a/lib/dry/initializer.rb +++ b/lib/dry/initializer.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require "set" # Namespace for gems in a dry-rb community diff --git a/lib/dry/initializer/builders.rb b/lib/dry/initializer/builders.rb index 77ba303..c9218f7 100644 --- a/lib/dry/initializer/builders.rb +++ b/lib/dry/initializer/builders.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Dry module Initializer # @private diff --git a/lib/dry/initializer/builders/attribute.rb b/lib/dry/initializer/builders/attribute.rb index b49227f..1e6f643 100644 --- a/lib/dry/initializer/builders/attribute.rb +++ b/lib/dry/initializer/builders/attribute.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Dry module Initializer module Builders diff --git a/lib/dry/initializer/builders/initializer.rb b/lib/dry/initializer/builders/initializer.rb index 4c3d82e..941c40d 100644 --- a/lib/dry/initializer/builders/initializer.rb +++ b/lib/dry/initializer/builders/initializer.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Dry module Initializer module Builders @@ -41,15 +43,11 @@ def define_line end def params_lines - @definitions.reject(&:option) - .flat_map { |item| Attribute[item] } - .map { |line| " " << line } + @definitions.reject(&:option).flat_map { Attribute[_1] }.map { " #{_1}" } end def options_lines - @definitions.select(&:option) - .flat_map { |item| Attribute[item] } - .map { |line| " " << line } + @definitions.select(&:option).flat_map { Attribute[_1] }.map { " #{_1}" } end def end_line diff --git a/lib/dry/initializer/builders/reader.rb b/lib/dry/initializer/builders/reader.rb index ab23d48..37846fa 100644 --- a/lib/dry/initializer/builders/reader.rb +++ b/lib/dry/initializer/builders/reader.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Dry module Initializer module Builders diff --git a/lib/dry/initializer/builders/signature.rb b/lib/dry/initializer/builders/signature.rb index c8c5fde..34f03cd 100644 --- a/lib/dry/initializer/builders/signature.rb +++ b/lib/dry/initializer/builders/signature.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Dry module Initializer module Builders diff --git a/lib/dry/initializer/config.rb b/lib/dry/initializer/config.rb index d97e882..b6d538a 100644 --- a/lib/dry/initializer/config.rb +++ b/lib/dry/initializer/config.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Dry module Initializer # @@ -23,10 +25,10 @@ class Config # @return [Module] reference to the module to be included into class def mixin @mixin ||= Module.new.tap do |mod| - __dry_initializer__ = self + initializer = self mod.extend(Mixin::Local) - mod.send :define_method, :__dry_initializer_config__ do - __dry_initializer__ + mod.define_method(:__dry_initializer_config__) do + initializer end mod.send :private, :__dry_initializer_config__ end diff --git a/lib/dry/initializer/definition.rb b/lib/dry/initializer/definition.rb index 768de7d..b1d803e 100644 --- a/lib/dry/initializer/definition.rb +++ b/lib/dry/initializer/definition.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Dry module Initializer # @@ -21,11 +23,11 @@ def options default: default, reader: reader, desc: desc - }.reject { |_, value| value.nil? } + }.compact end def name - @name ||= (option ? "option" : "parameter") << " '#{source}'" + @name ||= "#{option ? "option" : "parameter"} '#{source}'" end alias_method :to_s, :name alias_method :to_str, :name diff --git a/lib/dry/initializer/dispatchers.rb b/lib/dry/initializer/dispatchers.rb index c41092e..7e7952a 100644 --- a/lib/dry/initializer/dispatchers.rb +++ b/lib/dry/initializer/dispatchers.rb @@ -1,4 +1,5 @@ -# +# frozen_string_literal: true + # The module is responsible for __normalizing__ arguments # of `.param` and `.option`. # diff --git a/lib/dry/initializer/dispatchers/build_nested_type.rb b/lib/dry/initializer/dispatchers/build_nested_type.rb index d4e3170..da9f009 100644 --- a/lib/dry/initializer/dispatchers/build_nested_type.rb +++ b/lib/dry/initializer/dispatchers/build_nested_type.rb @@ -1,4 +1,5 @@ -# +# frozen_string_literal: true + # Prepare nested data type from a block # # @example @@ -56,8 +57,15 @@ def full_name(parent, name) end def build_struct(klass_name, block) - eval "class #{klass_name} < Dry::Initializer::Struct; end" - const_get(klass_name).tap { |klass| klass.class_eval(&block) } + # rubocop: disable Security/Eval + # rubocop: disable Style/DocumentDynamicEvalDefinition + eval <<~RUBY, TOPLEVEL_BINDING, __FILE__, __LINE__ + 1 + class #{klass_name} < Dry::Initializer::Struct + end + RUBY + # rubocop: enable Style/DocumentDynamicEvalDefinition + # rubocop: enable Security/Eval + const_get(klass_name).tap { _1.class_eval(&block) } end end end diff --git a/lib/dry/initializer/dispatchers/check_type.rb b/lib/dry/initializer/dispatchers/check_type.rb index 3ad1cd8..9ef0952 100644 --- a/lib/dry/initializer/dispatchers/check_type.rb +++ b/lib/dry/initializer/dispatchers/check_type.rb @@ -1,4 +1,5 @@ -# +# frozen_string_literal: true + # Checks whether an unwrapped type is valid # module Dry diff --git a/lib/dry/initializer/dispatchers/prepare_default.rb b/lib/dry/initializer/dispatchers/prepare_default.rb index ef473f4..c1b9f21 100644 --- a/lib/dry/initializer/dispatchers/prepare_default.rb +++ b/lib/dry/initializer/dispatchers/prepare_default.rb @@ -1,4 +1,5 @@ -# +# frozen_string_literal: true + # Prepares the `:default` option # # It must respond to `.call` without arguments diff --git a/lib/dry/initializer/dispatchers/prepare_ivar.rb b/lib/dry/initializer/dispatchers/prepare_ivar.rb index 62f1ced..eb0aa5a 100644 --- a/lib/dry/initializer/dispatchers/prepare_ivar.rb +++ b/lib/dry/initializer/dispatchers/prepare_ivar.rb @@ -1,4 +1,5 @@ -# +# frozen_string_literal: true + # Prepares the variable name of a parameter or an option. # module Dry diff --git a/lib/dry/initializer/dispatchers/prepare_optional.rb b/lib/dry/initializer/dispatchers/prepare_optional.rb index deb545e..1933694 100644 --- a/lib/dry/initializer/dispatchers/prepare_optional.rb +++ b/lib/dry/initializer/dispatchers/prepare_optional.rb @@ -1,4 +1,5 @@ -# +# frozen_string_literal: true + # Defines whether an argument is optional # module Dry diff --git a/lib/dry/initializer/dispatchers/prepare_reader.rb b/lib/dry/initializer/dispatchers/prepare_reader.rb index 8b09cc3..2a0f375 100644 --- a/lib/dry/initializer/dispatchers/prepare_reader.rb +++ b/lib/dry/initializer/dispatchers/prepare_reader.rb @@ -1,4 +1,5 @@ -# +# frozen_string_literal: true + # Checks the reader privacy # module Dry @@ -9,11 +10,11 @@ module PrepareReader def call(target: nil, reader: :public, **options) reader = case reader.to_s - when "false", "" then nil - when "true" then :public - when "public", "private", "protected" then reader.to_sym - else invalid_reader!(target, reader) - end + when "false", "" then nil + when "true" then :public + when "public", "private", "protected" then reader.to_sym + else invalid_reader!(target, reader) + end {target: target, reader: reader, **options} end diff --git a/lib/dry/initializer/dispatchers/prepare_source.rb b/lib/dry/initializer/dispatchers/prepare_source.rb index 460295f..fa6c778 100644 --- a/lib/dry/initializer/dispatchers/prepare_source.rb +++ b/lib/dry/initializer/dispatchers/prepare_source.rb @@ -1,4 +1,5 @@ -# +# frozen_string_literal: true + # The dispatcher verifies a correctness of the source name # of param or option, taken as a `:source` option. # diff --git a/lib/dry/initializer/dispatchers/prepare_target.rb b/lib/dry/initializer/dispatchers/prepare_target.rb index 9e8c67f..dcbe366 100644 --- a/lib/dry/initializer/dispatchers/prepare_target.rb +++ b/lib/dry/initializer/dispatchers/prepare_target.rb @@ -1,4 +1,5 @@ -# +# frozen_string_literal: true + # Prepares the target name of a parameter or an option. # # Unlike source, the target must satisfy requirements for Ruby variable names. diff --git a/lib/dry/initializer/dispatchers/unwrap_type.rb b/lib/dry/initializer/dispatchers/unwrap_type.rb index 8114823..4604ac8 100644 --- a/lib/dry/initializer/dispatchers/unwrap_type.rb +++ b/lib/dry/initializer/dispatchers/unwrap_type.rb @@ -1,4 +1,5 @@ -# +# frozen_string_literal: true + # Looks at the `:type` option and counts how many nested arrays # it contains around either nil or a callable value. # @@ -12,15 +13,19 @@ module UnwrapType extend self def call(type: nil, wrap: 0, **options) - type, wrap = unwrap(type, 0) + type, count = unwrap(type, wrap) - {type: type, wrap: wrap, **options} + {type: type, wrap: count, **options} end private def unwrap(type, count) - type.is_a?(Array) ? unwrap(type.first, count + 1) : [type, count] + if type.is_a?(::Array) + unwrap(type.first, count + 1) + else + [type, count] + end end end end diff --git a/lib/dry/initializer/dispatchers/wrap_type.rb b/lib/dry/initializer/dispatchers/wrap_type.rb index 56b31bb..b600928 100644 --- a/lib/dry/initializer/dispatchers/wrap_type.rb +++ b/lib/dry/initializer/dispatchers/wrap_type.rb @@ -1,4 +1,5 @@ -# +# frozen_string_literal: true + # Takes `:type` and `:wrap` to construct the final value coercer # module Dry diff --git a/lib/dry/initializer/dsl.rb b/lib/dry/initializer/dsl.rb index 0b403aa..592c802 100644 --- a/lib/dry/initializer/dsl.rb +++ b/lib/dry/initializer/dsl.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Dry module Initializer # Module-level DSL @@ -37,8 +39,12 @@ def extended(klass) klass.include Mixin::Root end - def self.extended(mod) - mod.instance_variable_set :@null, UNDEFINED + class << self + private + + def extended(mod) + mod.instance_variable_set :@null, UNDEFINED + end end end end diff --git a/lib/dry/initializer/mixin.rb b/lib/dry/initializer/mixin.rb index f54b00f..114bee5 100644 --- a/lib/dry/initializer/mixin.rb +++ b/lib/dry/initializer/mixin.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Dry module Initializer # @private diff --git a/lib/dry/initializer/mixin/local.rb b/lib/dry/initializer/mixin/local.rb index 3269727..30176f5 100644 --- a/lib/dry/initializer/mixin/local.rb +++ b/lib/dry/initializer/mixin/local.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Dry module Initializer module Mixin diff --git a/lib/dry/initializer/mixin/root.rb b/lib/dry/initializer/mixin/root.rb index 5e649c3..1a0cce1 100644 --- a/lib/dry/initializer/mixin/root.rb +++ b/lib/dry/initializer/mixin/root.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Dry module Initializer module Mixin diff --git a/lib/dry/initializer/struct.rb b/lib/dry/initializer/struct.rb index 39ff1b6..576948b 100644 --- a/lib/dry/initializer/struct.rb +++ b/lib/dry/initializer/struct.rb @@ -1,9 +1,10 @@ -# +# frozen_string_literal: true + # The nested structure that takes nested hashes with indifferent access # -class Dry +module Dry module Initializer - module Struct + class Struct extend ::Dry::Initializer class << self diff --git a/lib/dry/initializer/undefined.rb b/lib/dry/initializer/undefined.rb index 12ebb21..7a6b901 100644 --- a/lib/dry/initializer/undefined.rb +++ b/lib/dry/initializer/undefined.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Dry module Initializer module UNDEFINED diff --git a/lib/dry/initializer/version.rb b/lib/dry/initializer/version.rb index e68eee6..fc30664 100644 --- a/lib/dry/initializer/version.rb +++ b/lib/dry/initializer/version.rb @@ -1,5 +1,7 @@ +# frozen_string_literal: true + module Dry module Initializer - VERSION = "3.1.0".freeze + VERSION = "3.1.0" end end diff --git a/lib/tasks/benchmark.rake b/lib/tasks/benchmark.rake index 044469c..acf9935 100644 --- a/lib/tasks/benchmark.rake +++ b/lib/tasks/benchmark.rake @@ -1,3 +1,5 @@ +# frozen_string_literal: true + namespace :benchmark do desc "Runs benchmarks for plain params" task :plain_params do diff --git a/lib/tasks/profile.rake b/lib/tasks/profile.rake index 00c60a1..97ac766 100644 --- a/lib/tasks/profile.rake +++ b/lib/tasks/profile.rake @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # rubocop: disable Lint/ConstantDefinitionInBlock namespace :profile do def profile(name, execution, &definition)