0.0
The project is in a healthy, maintained state
Lambda powered processing of hash values
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

~> 0.0.3
 Project Readme

param_param

Lambda powered pipelines. Define pipelines transforming hash values.

Inspired by Martin Chabot's Simple Functional Strong Parameters In Ruby article.

Examples

Validate and transform a user provided data in a web application.

require 'param_param'
require 'param_param/std'

class MyParams
  include ParamParam
  include ParamParam::Std

  # You can add your own actions
  CAPITALIZED = ->(option) { Success.new(Optiomist.some(option.value.capitalize)) }
end

user_params = MyParams.define do |p|
  {
    name: p::REQUIRED.(p::ALL_OF.([p::STRING, p::MIN_SIZE.(1), p::MAX_SIZE.(50), p::CAPITALIZED])),
    admin: p::REQUIRED.(p::BOOL),
    age: p::OPTIONAL.(p::ALL_OF.([p::INTEGER, p::GT.(0)])),
  }
end

params, errors = user_params.(
  name: 'JOHN',
  admin: '0',
  age: '30',
  race: 'It is not important',
)

params # {:name=>"John", :admin=>false, :age=>30}
errors # {}

params, errors = UserParams.new.process(admin: 'no', age: 'very old')
params # {:admin=>false}
errors # {:name=>:missing, :age=>:not_integer}

Perform some chain of operations on provided data.

require 'param_param'

require 'param_param'

module Mather
  include ParamParam

  ADD = ->(value, option) { Success.new(Optiomist.some(option.value + value)) }.curry
  MUL = ->(value, option) { Success.new(Optiomist.some(option.value * value)) }.curry
  SUB = ->(value, option) { Success.new(Optiomist.some(option.value - value)) }.curry
end

rules = Mather.define do |m|
  {
    a: m::ADD.(2),
    b: m::MUL.(2),
    c: m::SUB.(2),
    d: m::ALL_OF.([m::ADD.(2), m::MUL.(2), m::SUB.(2)]),
  }
end

params, errors = rules.(
  a: 10,
  b: 10,
  c: 10,
  d: 10,
)

params # {:a=>12, :b=>20, :c=>8, :d=>22}
errors # {}