Sha256: b1b0ae22b45b0548e01d6963e21bd968ef36e93c3eeb36b5e73f95df962a56af
Contents?: true
Size: 1.58 KB
Versions: 1
Compression:
Stored size: 1.58 KB
Contents
# frozen_string_literal: true module ConvenientService module Support module Copyable ## # @example # person = Person.new('John', 'Doe', age: 42, gender: :male) do |p| # puts p # end # # copy = person.copy # copy = person.copy(overrides: {args: ['Jane']}) # copy = person.copy(overrides: {args: {0 => 'Jane'}}) # copy = person.copy(overrides: {kwargs: {age: 18}}) # copy = person.copy(overrides: {block: proc { |p| print p }}) # # NOTE: Inline logic instead of private methods is used intentionally in order to NOT pollute the public interface. # NOTE: This method is NOT likely to be ever changed, that is why inline logic is preferred over command classes in this particular case. # def copy(overrides: {}) overrides[:args] ||= {} overrides[:kwargs] ||= {} ## # TODO: Refactor runtime `respond_to?`. Investigate before refactoring. # args = if respond_to?(:to_args) case overrides[:args] when ::Array overrides[:args] when ::Hash Utils::Array.merge(to_args, overrides[:args]) end else [] end kwargs = if respond_to?(:to_kwargs) to_kwargs.merge(overrides[:kwargs]) else {} end block = if respond_to?(:to_block) overrides[:block] || to_block end self.class.new(*args, **kwargs, &block) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
convenient_service-0.1.0 | lib/convenient_service/support/copyable.rb |