Sha256: 86e47465ca19b25b9e5effcb477dd06a1eaa195e1e8eb66dad07fb62e5ab94ef

Contents?: true

Size: 1.35 KB

Versions: 42

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

require "active_support/core_ext/hash/deep_merge"
require "active_support/core_ext/symbol/starts_ends_with"

module ActiveSupport
  class OptionMerger #:nodoc:
    instance_methods.each do |method|
      undef_method(method) unless method.start_with?("__", "instance_eval", "class", "object_id")
    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.dup if options
          @context.__send__(method, *arguments, &block)
        end
      end
  end
end

Version data entries

42 entries across 42 versions & 7 rubygems

Version Path
activesupport-6.1.7.10 lib/active_support/option_merger.rb
activesupport-6.1.7.9 lib/active_support/option_merger.rb
activesupport-6.1.7.8 lib/active_support/option_merger.rb
activesupport-6.1.7.7 lib/active_support/option_merger.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/activesupport-6.1.6.1/lib/active_support/option_merger.rb
activesupport-6.1.7.6 lib/active_support/option_merger.rb
activesupport-6.1.7.5 lib/active_support/option_merger.rb
activesupport-6.1.7.4 lib/active_support/option_merger.rb
scrapbook-0.3.1 vendor/ruby/2.7.0/gems/activesupport-6.1.6.1/lib/active_support/option_merger.rb
activesupport-6.1.7.3 lib/active_support/option_merger.rb
activesupport-6.1.7.2 lib/active_support/option_merger.rb
activesupport-6.1.7.1 lib/active_support/option_merger.rb
activesupport-6.1.7 lib/active_support/option_merger.rb
activesupport-6.1.6.1 lib/active_support/option_merger.rb
activesupport-6.1.6 lib/active_support/option_merger.rb
activesupport-6.1.5.1 lib/active_support/option_merger.rb
activesupport-6.1.5 lib/active_support/option_merger.rb
activesupport-6.1.4.7 lib/active_support/option_merger.rb
activesupport-6.1.4.6 lib/active_support/option_merger.rb
activesupport-6.1.4.5 lib/active_support/option_merger.rb