module SmartInit
Constants
- VERSION
Public Instance Methods
initialize_with_hash(*required_attrs, **attributes_and_options)
click to toggle source
# File lib/smart_init/main.rb, line 16 def initialize_with_hash(*required_attrs, **attributes_and_options) public_readers = attributes_and_options.delete(:public_readers) || [] public_accessors = attributes_and_options.delete(:public_accessors) || [] if public_readers == true || public_accessors == true public_readers = required_attrs + attributes_and_options.keys public_accessors = required_attrs + attributes_and_options.keys if public_accessors == true else public_readers += public_accessors end define_method :initialize do |**parameters| required_attrs.each do |required_attr| unless parameters.has_key?(required_attr) raise ArgumentError, "missing required attribute #{required_attr}" end end (required_attrs + attributes_and_options.keys).each do |attribute| value = if parameters.has_key?(attribute) parameters.fetch(attribute) else attributes_and_options[attribute] end instance_variable_set("@#{attribute}", value) end end instance_eval do all_readers = (required_attrs + attributes_and_options.keys) attr_reader(*all_readers) (all_readers - public_readers).each do |reader| private reader end attr_writer(*public_accessors) end end
Also aliased as: initialize_with
is_callable(opts={})
click to toggle source
# File lib/smart_init/main.rb, line 4 def is_callable(opts={}) method_name = if name_from_opts = opts[:method_name] name_from_opts.to_sym else :call end define_singleton_method method_name do |**parameters| new(**parameters).public_send(method_name) end end