Sha256: 016eda38a7ecb53960883ff2fb6ebd17716150d816e5ad81efc19d4514f0d6d7

Contents?: true

Size: 1.58 KB

Versions: 28

Compression:

Stored size: 1.58 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/patches/object/debug'

module EacRubyUtils
  module EnumerablesMethods
    class << self
      WRITE_METHOD_PATTERNS = [/\A[a-z].*[\!\=]\z/i] +
                              %i[\[\]= <<].map { |m| /\A#{::Regexp.quote(m)}\z/ } +
                              %i[add clear delete divide keep reset shift subtract]
                                .map { |m| /\A#{::Regexp.quote(m)}.*\z/ }

      # @param klass [Klass]
      # @return [Enumerable<Symbol>]
      def self_methods_names(klass)
        (klass.public_instance_methods - klass.superclass.public_instance_methods).sort
      end

      # @param method_name [Symbol]
      # @return [Boolean]
      def write_method?(method_name)
        WRITE_METHOD_PATTERNS.any? { |pattern| pattern.match?(method_name.to_s) }
      end
    end

    ARRAY_METHODS = self_methods_names(::Array)
    ARRAY_WRITE_METHODS = ARRAY_METHODS.select { |m| write_method?(m) }
    ARRAY_READ_METHODS = ARRAY_METHODS - ARRAY_WRITE_METHODS

    ENUMERABLE_METHODS = ::Enumerable.public_instance_methods.sort
    ENUMERABLE_WRITE_METHODS = ENUMERABLE_METHODS.select { |m| write_method?(m) }
    ENUMERABLE_READ_METHODS = ENUMERABLE_METHODS - ENUMERABLE_WRITE_METHODS

    HASH_METHODS = self_methods_names(::Hash)
    HASH_WRITE_METHODS = HASH_METHODS.select { |m| write_method?(m) }
    HASH_READ_METHODS = HASH_METHODS - HASH_WRITE_METHODS

    SET_METHODS = self_methods_names(::Set)
    SET_WRITE_METHODS = SET_METHODS.select { |m| write_method?(m) } + [:merge]
    SET_READ_METHODS = SET_METHODS - SET_WRITE_METHODS
  end
end

Version data entries

28 entries across 28 versions & 2 rubygems

Version Path
eac_ruby_utils-0.124.0 lib/eac_ruby_utils/enumerables_methods.rb
eac_tools-0.97.2 sub/eac_ruby_utils/lib/eac_ruby_utils/enumerables_methods.rb
eac_ruby_utils-0.123.0 lib/eac_ruby_utils/enumerables_methods.rb
eac_ruby_utils-0.121.0 lib/eac_ruby_utils/enumerables_methods.rb
eac_ruby_utils-0.120.0 lib/eac_ruby_utils/enumerables_methods.rb
eac_tools-0.76.1 sub/eac_ruby_utils/lib/eac_ruby_utils/enumerables_methods.rb
eac_tools-0.76.0 sub/eac_ruby_utils/lib/eac_ruby_utils/enumerables_methods.rb
eac_tools-0.75.2 sub/eac_ruby_utils/lib/eac_ruby_utils/enumerables_methods.rb
eac_ruby_utils-0.119.2 lib/eac_ruby_utils/enumerables_methods.rb
eac_tools-0.75.1 sub/eac_ruby_utils/lib/eac_ruby_utils/enumerables_methods.rb
eac_tools-0.75.0 sub/eac_ruby_utils/lib/eac_ruby_utils/enumerables_methods.rb
eac_ruby_utils-0.119.1 lib/eac_ruby_utils/enumerables_methods.rb
eac_tools-0.74.1 sub/eac_ruby_utils/lib/eac_ruby_utils/enumerables_methods.rb
eac_tools-0.74.0 sub/eac_ruby_utils/lib/eac_ruby_utils/enumerables_methods.rb
eac_tools-0.73.0 sub/eac_ruby_utils/lib/eac_ruby_utils/enumerables_methods.rb
eac_ruby_utils-0.119.0 lib/eac_ruby_utils/enumerables_methods.rb
eac_tools-0.72.0 sub/eac_ruby_utils/lib/eac_ruby_utils/enumerables_methods.rb
eac_ruby_utils-0.118.1 lib/eac_ruby_utils/enumerables_methods.rb
eac_ruby_utils-0.118.0 lib/eac_ruby_utils/enumerables_methods.rb
eac_tools-0.70.1 sub/eac_ruby_utils/lib/eac_ruby_utils/enumerables_methods.rb