Sha256: 3e480b4c6a3cea96a059104ed34069d82188f87e2a239a5974a649bd730e54d4

Contents?: true

Size: 1.28 KB

Versions: 10

Compression:

Stored size: 1.28 KB

Contents

# frozen_string_literal: true

require "active_support/core_ext/hash/deep_merge"

module ActiveSupport
  class OptionMerger #:nodoc:
    instance_methods.each do |method|
      undef_method(method) if !/^(__|instance_eval|class|object_id)/.match?(method)
    end

    def initialize(context, options)
      @context, @options = context, options
    end

    private
      def method_missing(method, *arguments, &block)
        options = nil
        if arguments.first.is_a?(Proc)
          proc = arguments.pop
          arguments << lambda { |*args| @options.deep_merge(proc.call(*args)) }
        elsif arguments.last.respond_to?(:to_hash)
          options = @options.deep_merge(arguments.pop)
        else
          options = @options
        end

        invoke_method(method, arguments, options, &block)
      end

      if RUBY_VERSION >= "2.7"
        def invoke_method(method, arguments, options, &block)
          if options
            @context.__send__(method, *arguments, **options, &block)
          else
            @context.__send__(method, *arguments, &block)
          end
        end
      else
        def invoke_method(method, arguments, options, &block)
          arguments << options if options
          @context.__send__(method, *arguments, &block)
        end
      end
  end
end

Version data entries

10 entries across 10 versions & 2 rubygems

Version Path
activesupport-6.0.3.7 lib/active_support/option_merger.rb
activesupport-6.0.3.6 lib/active_support/option_merger.rb
activesupport-6.0.3.5 lib/active_support/option_merger.rb
activesupport-6.0.3.4 lib/active_support/option_merger.rb
grape-extra_validators-2.0.0 vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.2/lib/active_support/option_merger.rb
activesupport-6.0.3.3 lib/active_support/option_merger.rb
activesupport-6.0.3.2 lib/active_support/option_merger.rb
activesupport-6.0.3.1 lib/active_support/option_merger.rb
activesupport-6.0.3 lib/active_support/option_merger.rb
activesupport-6.0.3.rc1 lib/active_support/option_merger.rb