lib/lite/ruby/enumerable.rb in lite-ruby-1.3.3 vs lib/lite/ruby/enumerable.rb in lite-ruby-2.0.0
- old
+ new
@@ -1,212 +1,210 @@
# frozen_string_literal: true
-if Lite::Ruby.configuration.monkey_patches.include?('enumerable')
- module Enumerable
+module Enumerable
- def cluster
- each_with_object([]) do |ele, results|
- last_res = results.last
+ def cluster
+ each_with_object([]) do |ele, results|
+ last_res = results.last
- if last_res && (yield(ele) == yield(last_res.last))
- last_res << ele
- else
- results << [ele]
- end
+ if last_res && (yield(ele) == yield(last_res.last))
+ last_res << ele
+ else
+ results << [ele]
end
end
+ end
- def cluster_by(&block)
- group_by(&block).sort.transpose.pop || []
- end
+ def cluster_by(&block)
+ group_by(&block).sort.transpose.pop || []
+ end
- def deduce(identity = 0, &block)
- if defined?(yield)
- map(&block).deduce(identity)
- else
- inject { |acc, val| acc - val } || identity
- end
+ def deduce(identity = 0, &block)
+ if defined?(yield)
+ map(&block).deduce(identity)
+ else
+ inject { |acc, val| acc - val } || identity
end
+ end
- def drop_last(num)
- collection_size = to_a.size
- return self if num > collection_size
+ def drop_last(num)
+ collection_size = to_a.size
+ return self if num > collection_size
- self[0...(collection_size - num)]
- end
+ self[0...(collection_size - num)]
+ end
- def drop_last_if
- dropping = true
- reverse_each.with_object([]) do |val, arr|
- next if dropping &&= yield(val)
+ def drop_last_if
+ dropping = true
+ reverse_each.with_object([]) do |val, arr|
+ next if dropping &&= yield(val)
- arr.unshift(val)
- end
+ arr.unshift(val)
end
+ end
- def exactly?(num)
- found_count = 0
+ def exactly?(num)
+ found_count = 0
- if defined?(yield)
- each { |*opt| found_count += 1 if yield(*opt) }
- else
- each { |opt| found_count += 1 if opt }
- end
-
- found_count > num ? false : num == found_count
+ if defined?(yield)
+ each { |*opt| found_count += 1 if yield(*opt) }
+ else
+ each { |opt| found_count += 1 if opt }
end
- def excase?(object)
- none?(object)
- end
+ found_count > num ? false : num == found_count
+ end
- def expand
- map { |val| val.is_a?(Enumerable) ? val.expand : val }
- end
+ def excase?(object)
+ none?(object)
+ end
- def exponential(identity = 0, &block)
- if defined?(yield)
- map(&block).exponential(identity)
- else
- inject { |acc, val| acc**val } || identity
- end
- end
+ def expand
+ map { |val| val.is_a?(Enumerable) ? val.expand : val }
+ end
- def frequency
- each_with_object(Hash.new(0)) { |val, hash| hash[val] += 1 }
+ def exponential(identity = 0, &block)
+ if defined?(yield)
+ map(&block).exponential(identity)
+ else
+ inject { |acc, val| acc**val } || identity
end
+ end
- def incase?(object)
- any?(object)
- end
+ def frequency
+ each_with_object(Hash.new(0)) { |val, hash| hash[val] += 1 }
+ end
- # rubocop:disable Metrics/MethodLength
- def interpose(sep, &block)
- enum = Enumerator.new do |val|
- items = each
+ def incase?(object)
+ any?(object)
+ end
- loop do
- begin
- val << items.next
- rescue StopIteration
- break
- end
+ # rubocop:disable Metrics/MethodLength
+ def interpose(sep, &block)
+ enum = Enumerator.new do |val|
+ items = each
- begin
- items.peek
- rescue StopIteration
- break
- else
- val << sep
- end
+ loop do
+ begin
+ val << items.next
+ rescue StopIteration
+ break
end
- end
- block ? enum.each(&block) : enum
- end
- # rubocop:enable Metrics/MethodLength
-
- def modulate(modulo)
- if modulo == 1
- to_a
- elsif size % modulo != 0
- raise ArgumentError, "Invalid modulo: #{modulo.inspect}"
- else
- (0...size).each_with_object(Array.new(modulo, [])) do |i, array|
- array[i % modulo] += [self[i]]
+ begin
+ items.peek
+ rescue StopIteration
+ break
+ else
+ val << sep
end
end
end
- # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
- # rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity
- def occur(amount = nil)
- result = Hash.new { |hash, key| hash[key] = [] }
+ block ? enum.each(&block) : enum
+ end
+ # rubocop:enable Metrics/MethodLength
- each do |item|
- key = item
- result[key] << item
+ def modulate(modulo)
+ if modulo == 1
+ to_a
+ elsif size % modulo != 0
+ raise ArgumentError, "Invalid modulo: #{modulo.inspect}"
+ else
+ (0...size).each_with_object(Array.new(modulo, [])) do |i, array|
+ array[i % modulo] += [self[i]]
end
+ end
+ end
- if defined?(yield)
- result.select! { |_key, values| yield(values.size) }
- else
- raise ArgumentError, 'Invalid occur amount' unless amount
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
+ # rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity
+ def occur(amount = nil)
+ result = Hash.new { |hash, key| hash[key] = [] }
- if amount.is_a?(Range)
- result.select! { |_key, values| amount.include?(values.size) }
- else
- result.select! { |_key, values| values.size == amount }
- end
- end
-
- result.values.flatten.uniq
+ each do |item|
+ key = item
+ result[key] << item
end
- # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
- # rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity
- def produce(identity = 0, &block)
- if defined?(yield)
- map(&block).produce(identity)
- else
- inject { |acc, val| acc * val } || identity
- end
- end
+ if defined?(yield)
+ result.select! { |_key, values| yield(values.size) }
+ else
+ raise ArgumentError, 'Invalid occur amount' unless amount
- def quotient(identity = 0, &block)
- if defined?(yield)
- map(&block).quotient(identity)
+ if amount.is_a?(Range)
+ result.select! { |_key, values| amount.include?(values.size) }
else
- inject { |acc, val| acc / val } || identity
+ result.select! { |_key, values| values.size == amount }
end
end
- def several?
- found_count = 0
+ result.values.flatten.uniq
+ end
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
+ # rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity
- if defined?(yield)
- each { |*opt| found_count += 1 if yield(*opt) }
- else
- each { |opt| found_count += 1 if opt }
- end
-
- found_count > 1
+ def produce(identity = 0, &block)
+ if defined?(yield)
+ map(&block).produce(identity)
+ else
+ inject { |acc, val| acc * val } || identity
end
+ end
- # rubocop:disable Metrics/MethodLength
- def squeeze(*limited_to)
- first = true
- current = nil
-
- each_with_object([]) do |val, array|
- if !limited_to.empty? && !limited_to.include?(val)
- array << val
- elsif first || current != val
- array << val
- first = false
- current = val
- end
- end
+ def quotient(identity = 0, &block)
+ if defined?(yield)
+ map(&block).quotient(identity)
+ else
+ inject { |acc, val| acc / val } || identity
end
- # rubocop:enable Metrics/MethodLength
+ end
- def take_last(num)
- collection_size = to_a.size
- return self if num > collection_size
+ def several?
+ found_count = 0
- self[(collection_size - num)..-1]
+ if defined?(yield)
+ each { |*opt| found_count += 1 if yield(*opt) }
+ else
+ each { |opt| found_count += 1 if opt }
end
- def take_last_if
- reverse_each.with_object([]) do |val, arr|
- break arr unless yield(val)
+ found_count > 1
+ end
- arr.unshift(val)
+ # rubocop:disable Metrics/MethodLength
+ def squeeze(*limited_to)
+ first = true
+ current = nil
+
+ each_with_object([]) do |val, array|
+ if !limited_to.empty? && !limited_to.include?(val)
+ array << val
+ elsif first || current != val
+ array << val
+ first = false
+ current = val
end
end
+ end
+ # rubocop:enable Metrics/MethodLength
- alias occurrences frequency
+ def take_last(num)
+ collection_size = to_a.size
+ return self if num > collection_size
+ self[(collection_size - num)..-1]
end
- require 'lite/ruby/safe/enumerable' unless defined?(ActiveSupport)
+ def take_last_if
+ reverse_each.with_object([]) do |val, arr|
+ break arr unless yield(val)
+
+ arr.unshift(val)
+ end
+ end
+
+ alias occurrences frequency
+
end
+
+require 'lite/ruby/safe/enumerable' unless defined?(ActiveSupport)