diff --git a/lib/dry/initializer/builders/attribute.rb b/lib/dry/initializer/builders/attribute.rb index 9c7c4eb..bd6f434 100644 --- a/lib/dry/initializer/builders/attribute.rb +++ b/lib/dry/initializer/builders/attribute.rb @@ -11,7 +11,7 @@ def call private - # rubocop: disable Style/MethodLength + # rubocop: disable Metrics/MethodLength def initialize(definition) @definition = definition @option = definition.option @@ -26,7 +26,7 @@ def initialize(definition) @item = "__dry_initializer_definition__" @val = @option ? "__dry_initializer_value__" : @source end - # rubocop: enable Style/MethodLength + # rubocop: enable Metrics/MethodLength def lines [ diff --git a/lib/dry/initializer/config.rb b/lib/dry/initializer/config.rb index 3638f80..452fdcd 100644 --- a/lib/dry/initializer/config.rb +++ b/lib/dry/initializer/config.rb @@ -111,6 +111,18 @@ def finalize self end + # Human-readable representation of configured params and options + # @return [String] + def inch + line = Builders::Signature[self] + line = line.gsub("__dry_initializer_options__", "options") + lines = ["@!method initialize(#{line})"] + lines += ["Initializes an instance of #{extended_class}"] + lines += definitions.values.map(&:inch) + lines += ["@return [#{extended_class}]"] + lines.join("\n") + end + private def initialize(extended_class = nil, null: UNDEFINED) diff --git a/lib/dry/initializer/definition.rb b/lib/dry/initializer/definition.rb index 79195d2..6788791 100644 --- a/lib/dry/initializer/definition.rb +++ b/lib/dry/initializer/definition.rb @@ -38,6 +38,15 @@ def code Builders::Reader[self] end + def inch + @inch ||= (option ? "@option" : "@param ").tap do |text| + text << " [Object]" + text << (option ? " :#{source}" : " #{source}") + text << (optional ? " (optional)" : " (required)") + text << " #{desc}" if desc + end + end + private def initialize(option, null, source, coercer = nil, **options)