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
ric-0.14.2 vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/option_merger.rb
ric-0.14.1 vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/option_merger.rb
phillipug-foodie-0.1.0 .vendor/ruby/3.0.0/gems/activesupport-6.1.4.4/lib/active_support/option_merger.rb
ric-0.14.0 vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/option_merger.rb
activesupport-6.1.4.4 lib/active_support/option_merger.rb
activesupport-6.1.4.3 lib/active_support/option_merger.rb
activesupport-6.1.4.2 lib/active_support/option_merger.rb
date_n_time_picker_activeadmin-0.1.2 vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.4.1/lib/active_support/option_merger.rb
date_n_time_picker_activeadmin-0.1.1 vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.4.1/lib/active_support/option_merger.rb
activesupport-6.1.4.1 lib/active_support/option_merger.rb
rails_mini_profiler-0.2.0 vendor/bundle/ruby/3.0.0/gems/activesupport-6.1.4/lib/active_support/option_merger.rb
activesupport-6.1.4 lib/active_support/option_merger.rb
tdiary-5.1.6 vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.3.1/lib/active_support/option_merger.rb
activesupport-6.1.3.2 lib/active_support/option_merger.rb
activesupport-6.1.3.1 lib/active_support/option_merger.rb
activesupport-6.1.3 lib/active_support/option_merger.rb
activesupport-6.1.2.1 lib/active_support/option_merger.rb
activesupport-6.1.2 lib/active_support/option_merger.rb
activesupport-6.1.1 lib/active_support/option_merger.rb
activesupport-6.1.0 lib/active_support/option_merger.rb