Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • 08:22

    solnic on release-0.15

    (compare)

  • 08:21

    solnic on release-0.13

    (compare)

  • 08:21

    solnic on master

    Add docsite for version 0.12 Merge branch 'release-0.12' (compare)

  • 08:21

    solnic on release-0.12

    (compare)

  • 08:19

    solnic on master

    Add docsite for version 1.0 [docsite] fix links Merge pull request #109 from sk… and 1 more (compare)

  • 08:19

    solnic on release-1.0

    (compare)

  • 08:19

    solnic on release-0.4

    (compare)

  • 08:18

    solnic on master

    Add docsite for version 0.8 Merge branch 'release-0.8' (compare)

  • 08:18

    solnic on release-0.8

    (compare)

  • 08:18

    solnic on release-0.7

    (compare)

  • 08:18

    solnic on master

    Add bytesize docs Merge pull request #64 from skr… Merge branch 'release-1.0' (compare)

  • 08:17

    solnic on release-1.0

    (compare)

  • 08:17

    solnic on release-3.0

    (compare)

  • 08:15
    Travis dry-rb/dry-effects (master) fixed (339)
  • 08:14
    Travis dry-rb/dry-equalizer (master) errored (65)
  • 08:14

    solnic on master

    Add docsite for version 0.2 Merge branch 'release-0.2' (compare)

  • 08:13

    solnic on release-0.2

    (compare)

  • 08:12

    solnic on master

    Add docsite for version 0.8 Merge branch 'release-0.8' (compare)

  • 08:11

    solnic on release-0.8

    (compare)

  • 08:09

    solnic on master

    Add docsite for version 0.8 Merge branch 'release-0.8' (compare)

Ethan Turkeltaub
@ethnt
Transproc and Reform look very promising, thank you though! Maybe a combination is what we're looking for
Sean Winner
@swinner2
is there a solution to dry-rb/dry-validation#343 yet?
The ability to reuse a schema in a flat / non-nested manner (issue #204) following conventions already established, like so:
schema(EmailAddress::Schema::Create)
required(:email_address_id, Types::String).value(:str?)
Brice Sanchez
@bricesanchez
Hi all! I'm currently creating my first app with dry-transaction, How could i skip a step? How could i create reusable methods like helpers?
To skip a step, should i only use a guard condition at the beginning of the step ?
Tim Riley
@timriley
@bricesanchez good question! Would you mind posting on discourse.dry-rb.org? I’m not at a computer today but should be able to answer tonight.
Kris Leech
@krisleech
Is it not possible to override #initialize for dry-struct's. Unless I've got some typo it doesn't appear to be called:
  class Form < Dry::Struct
    attribute :name, Types::String

    def initialize(attrs = {})
      binding.pry # not called
      super.symbolize_keys
    end
  end
Okay I'm guessing transform_keys(&:to_sym) is the way to go.
Artemiy Solopov
@art-solopov
Hello everyone.
Is there any kind of guide to using dry-struct with dry-validation in a, well, DRY way?
As of now, it looks like I'll have to define the attribute names (and possibly types) twice, in the validation schema and in the struct itself...
Piotr Solnica
@solnic
@art-solopov hey, what's your use case?
Sean Winner
@swinner2
@art-solopov I am also interested in your question. I’ve been co-locating the schema and the struct since the key names need to be duplicated. I validate the params then use the output to instantiate the struct.
schema = Form::Schema.call(params)
Form.new(schema.output)
Piotr Solnica
@solnic
@swinner2 minor but : Form.new(schema.output) => Form.new(schema) because schema's result are coercible to a hash
Sean Winner
@swinner2
:thumbsup: @solnic thanks. I’m assuming the new dry-schema will help pull these pieces together, right?
usually I have to use schema.output.merge(errors: schema.errors) to get the errors on the form object to cooperate with simple_form
Piotr Solnica
@solnic
@swinner2 integrations with "form" helpers libs is a different topic actually
Artemiy Solopov
@art-solopov
@solnic I'm working on my web app (you can see the half-baked code at https://gitlab.com/art-solopov/billy-bones-2/tree/refactoring/)
I want to use Dry-Validation to validate stuff and to use Dry-Struct as intermediate form objects (mostly because it's easier to integrate with Rails helpers than hash-like validation results).
Currently I have to duplicate quite a lot of data (attribute names and types).
For example, here's app/schemas/bill_basic_schema.rb:
BillBasicSchema = Dry::Validation::Schema(build: false) do
  required(:period_month) { filled? & int? & included_in?(1..12) }
  required(:period_year) { filled? & int? & gt?(2010) }
  required(:cost) { filled? & float? & gt?(0) }
  optional(:paid_at) { filled? > date? }
  optional(:state) { filled? > included_in?(Bill.state.values) }
  optional(:payment_method_id) { filled? > int? }
  optional(:tags) { array? }
end
And here's the app/forms/bill_form.rb:
class BillForm < ApplicationForm
  attribute :period_month, Types::Params::Integer.default { Time.zone.today.month }
  attribute :period_year, Types::Params::Integer.default { Time.zone.today.year }
  attribute :cost, Types::Params::Float.default(0.0)
  attribute :paid_at, Types::Params::Date.optional.default(nil)
  attribute :state, Types::Coercible::String.default('init')
  attribute :payment_method_id, Types::Params::Integer.optional.default(nil)
  attribute :tags, Types::Coercible::Array.of(Types::Coercible::String).default([])

  SCHEMA = Dry::Validation.Params(BillBasicSchema)

  attr_accessor :errors

  def self.from_model(model)
    period = model.period || Time.zone.today
    attrs = model.values.slice(:cost, :state, :paid_at,
                               :payment_method_id, :tags)
              .merge(period_month: period.month, period_year: period.year)
    new(attrs)
  end

  def self.new_attrs(overrides = {})
    period = Time.zone.today
    overrides.reverse_merge(state: :init,
                            period_month: period.month,
                            period_year: period.year)
  end
end
choallin
@choallin
Hey guys! I have a strange problem with dry-validations... . I have a validate block in my scheme and, if I have an error in it I get the message that it fails.
But when I want to access the errors, I get the error TypeError (no implicit conversion of Hash into String)
I tried to access the errors with the errors and the messages methods but I get the same error everytime...
Kacper Pucek
@KacperPucek

Is it possible to use validate in combination with each? Let me show the example:

Dry::Validation.Params do
  required(:tickets).each do
    validate(allowed_quantity: %i(selling_strategy quantity)) do |selling_strategy, quantity|
      # Some logic for checking if quantity can be used
    end

    required(:price).filled(:int?)
    required(:quantity).filled(:int?)
    required(:selling_strategy).filled(:str?)
  end
end

While required checks are nicely nested under tickets, allowed_quantity always bubbles to the top. It would look like this:

{:tickets => { 0 => {:price => ["is missing"]}, :allowed_quantity => ["some msg]}

Any ideas how to nest this custom validation block as well? Cheers!

Kacper Pucek
@KacperPucek
For anyone interested: dry-rb/dry-validation#305
Chris Richards
@cmrichards

Hi, is it possible to validate the keys and values of a hash like this? These are the posted params.

{
 "sample_tests"=>{
   "1"=>{"sample_id"=>149, "lod"=>"200.0", "lod_top_unit_id"=>2, "lod_bottom_unit_id"=>1, "top_unit_id"=>2}, 
   "2"=>{"sample_id"=>149, "lod"=>"101.0", "lod_top_unit_id"=>2, "lod_bottom_unit_id"=>1, "top_unit_id"=>2}, 
   "3"=>{"sample_id"=>149, "lod"=>"101.0", "lod_top_unit_id"=>2, "lod_bottom_unit_id"=>1, "top_unit_id"=>2},
   ..... repeated
  }
}

This is all I have right now. :

      Schema = Dry::Validation.Params do
        required(:sample_tests).filled
      end

I need to validate the part that goes {"sample_id"=>149, "lod"=>"200.0", "lod_top_unit_id"=>2.....

There is no mention of a repeated key like this in the dry-types docs. Maybe I need to convert the hash into a simple array before validating?
Piotr Solnica
@solnic
@cmrichards not possible yet, it'll be supported in dry-schema
Chris Richards
@cmrichards
Sweet :-) . must. resist. urge. to. ask. when. is. it. ready.
Jeff Dickey
@jdickey
"Resistance is futile", sayeth the Borg. Locutus 1:1
Brice Sanchez
@bricesanchez
Hi ! Is input preprocessing works on Dry::Validation.Schema ? I would like to convert string id to integer before validating it
@timriley Thanks for your previous answer, for now i use Module include for resuable methods and i use guard style for conditional steps
Brice Sanchez
@bricesanchez
Ok I've seen this dry-rb/dry-validation#357
So i've created a Dry::Validation::Params
Piotr Solnica
@solnic
@cmrichards not sure
Ethan Turkeltaub
@ethnt
Hey again 👋 is it possible to have optional nested hashes within dry-struct?
Nikita Shilnikov
@flash-gordon
@ethnt hashes or structs? Regardless the answer, yes, it's possible
you can use recently added method for this https://github.com/dry-rb/dry-struct/blob/master/CHANGELOG.md#added
Mikhail Slyusarev
@mikhailvs
hey, is there a way to easily reuse procs for calls to validate() within schemas? when i assign procs to variables (and call as validate(validation_key: %I[param1 param2], &stored_proc)), I get "+proc+ is not a valid predicate name"
it does however seem to work if instead of doing stored_proc = proc { |a, b| a <= b } I do stored_proc = Proc.new { |a, b| a<= b }, but that way makes rubocop unhappy. why does doing the proc {} syntax not work?
Nikita Shilnikov
@flash-gordon
because proc isn't defined within schema's DSL
you can use ::Kernel.proc
Alexander
@cutalion
hi there! is it possible to translate keys in dry-v errors?
Tonni Tølbøll Lund Aagesen
@ta
require "dry-struct"

module Types
  include Dry::Types.module
end

class User < Dry::Struct
  attr_writer :name

  attribute :name, Types::Strict::String.optional.default(nil)
end

u = User.new
puts u.inspect
u.name = "Steve"
puts u.inspect
The attr_writer statement used to work in dry-struct v0.4 but it doesn't work in v0.6 - is this by design?
Chris Richards
@cmrichards
I thought dry-struct was immutable by design so I'm surprised this ever worked as intented
Nikita Shilnikov
@flash-gordon
it never worked like this, using writers will ignore type checks
Chris Richards
@cmrichards
yeah that's what I guessed
Nikita Shilnikov
@flash-gordon
as for storing values in attributes, this was changes and mentioned in the changelog
since I foresaw this could break "someone's workflow" :)
Chris Richards
@cmrichards
haha brutal
Tonni Tølbøll Lund Aagesen
@ta
Oh, silly me :)
what is the right way of writing storing values in attributes - or is dry-struct not meant for that?