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