Sha256: 5727fb0b09ca5ffae329ab405e8bb0f6830e42ecf24cfce2d1f56c75201a36dc
Contents?: true
Size: 1.2 KB
Versions: 2
Compression:
Stored size: 1.2 KB
Contents
module AttrExtras class AttrInitialize class ParamsBuilder REQUIRED_SIGN = "!".freeze def initialize(names) @names = names end attr_reader :names private :names def positional_args @positional_args ||= names.take_while { |name| !name.is_a?(Array) } end def hash_args @hash_args ||= (names - positional_args).flatten.flat_map { |name| name.is_a?(Hash) ? name.keys : name } end def hash_args_names @hash_args_names ||= hash_args.map { |name| remove_required_sign(name) } end def hash_args_required @hash_args_required ||= hash_args.select { |name| name.to_s.end_with?(REQUIRED_SIGN) } .map { |name| remove_required_sign(name) } end def default_values @default_values ||= begin default_values_hash = names.flatten.select { |name| name.is_a?(Hash) }.reduce(:merge) || {} default_values_hash.map { |name, value| [ remove_required_sign(name), value ] }.to_h end end private def remove_required_sign(name) name.to_s.sub(/#{REQUIRED_SIGN}\z/, "").to_sym end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
attr_extras-7.1.0 | lib/attr_extras/params_builder.rb |
attr_extras-7.0.0 | lib/attr_extras/params_builder.rb |