ronin-rb / ronin-core

A core library for all ronin libraries.
https://ronin-rb.dev
GNU Lesser General Public License v3.0
3 stars 3 forks source link

Add `Ronin::Core::Params` API #26

Closed postmodern closed 2 years ago

postmodern commented 2 years ago

Add a params API for defining configurable params in a class. Must support defining the param type (defaults to String), a default value, and a description. Support basic param types: String, Integer, Boolean, Float, Enum, URI.

Example Code

class BaseClass

  include Ronin::Core::Params::Mixin

end

class MyModule < BaseClass

  param :str, desc: 'A basic param'

  param :feature_flag, Boolean, desc: 'A boolean param'

  param :num1, Integer, desc: 'A param with a type'

  param :num2, Integer, default: 42,
                       desc: 'A param with a default value'

  param :num3, Integer, default: ->{ rand(42) },
                        desc: 'A param with a dynamic default value'

  param :enum, Enum[:one, :two, :three],
               desc: 'An enum param'

end

mod = MyModule.new(params: {num1: 1, enum: :two})
mod.params
# => {:num2=>42, :num3=>25, :num1=>1, :enum=>:two}