by

Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
Loïc Guitaut
@Flink
nvm found a way to do something similar with another approach
Ben Moskovitz
@moskyb
Hey all, I'm having some trouble with dry-validation

I've found that, at least in my specific case,

each do
  schema do
    #some schema here
  end
end

is not equivalent to

FunSchema = Dry::Validation.Schema do
  # some schema here
end

# ... another schema
each do
  schema(FunSchema)
end
Philip Arndt
@parndt
This message was deleted
Ben Moskovitz
@moskyb
For reference, what I currently have is
PredefinedSchema = Dry::Validation.Schema do
  required(:audience).filled(:str?)
end

ComparisonSchema = Dry::Validation.Schema do
  %i(lt gt lte gte).each do |key|
    optional(key).maybe { int? | float? | time? }
  end
end

ParamSchema = Dry::Validation.Schema do
  required(:to) do
    str? & eql?('*') | schema(PredefinedSchema) | each do
      schema do
        required(:name).filled(:str?)
        required(:criteria).each do
          str? | int? | float? | time? | schema(ComparisonSchema)
        end
      end
    end
  end
end
And what I'd like to have is
CriterionSchema = Dry::Validation.Schema do
  required(:name).filled(:str?)
  required(:criteria).each do
    str? | int? | float? | time? | schema(ComparisonSchema)
  end
end

ParamSchema = Dry::Validation.Schema do
  required(:to) do
    str? & eql?('*') | schema(PredefinedSchema) | each do
      schema(CriterionSchema)
    end
  end
end
I understand that my use case here is kinda complex
Refactoring is fun
Nicolas Cavigneaux
@Bounga
Hi! I'm reading the doc for custom error messages and found something not working: Dry::Validation::Messages.load('/path/to/our/errors.yml') doesn't work since load is a private method
Nikita Shilnikov
@flash-gordon
@Bounga try Dry::Validation::Messages::YAML.load, looks like a mistake in docs
Nicolas Cavigneaux
@Bounga
Yes it works that what I've used but I just wanted to let you know about this mistake
Nikita Shilnikov
@flash-gordon
kk, I'll fix that, thanks
Nicolas Cavigneaux
@Bounga
BTW the YAML.load expect an array
Nicolas Cavigneaux
@Bounga
@flash-gordon You're fast!
Now there's another issue. user_messages[:filled?, rule: :address] returns nil not the provided custom message
I do think that nested rules are broken
Nicolas Cavigneaux
@Bounga

oh no, the example is wrong. It should no be nested in another rules.

en:
  errors:
    rules:

      user:
        filled?: "name cannot be blank"

        rules:
          address:
            filled?: "You gotta tell us where you live"

should be

en:
  errors:

    rules:

      user:
        filled?: "name cannot be blank"
        address:
            filled?: "You gotta tell us where you live"
Nicolas Cavigneaux
@Bounga
I already noticed that the doc is pretty outdated and contains many mistakes. Would you need some help to update it?
Nikita Shilnikov
@flash-gordon
@Bounga ohh, help is always welcome :) Though I can since 1.0 is coming I'm not sure how the docs should look like, better wait for @solnic to comment on this
re rules, I'm not sure about this, I'll have a look a bit later, busy atm
Nicolas Cavigneaux
@Bounga
np
Nikita Shilnikov
@flash-gordon
@Bounga current example works for me
messages = Dry::Validation::Messages::YAML.load(['/tmp/errors.yml'])
user_messages = messages.namespaced(:user)
user_messages[:filled?, rule: :address] # => "You gotta tell us where you live"
Pablo Herrero
@pabloh
Hey guys, I was wondering if there was some draft for the new dry-v 1.0 API?
Tim Riley
@timriley
Nothing yet apart from the message on the discussion forum, @pabloh
Alex Heeton
@heeton
Why is there no Form::String type in dry-types? What's the logic behind that? (I'm guessing everything is a string already, and Form seems to be for coercion? Is that correct?)
Was also hoping someone could give some info behind error messages in dry-validation. Similar to @Bounga's post above, I hit some issues with high-level rule messages. Background here - https://discuss.dry-rb.org/t/difficulty-creating-error-messages-for-high-level-rules/238 - specifically I'm wondering about intended naming conventions for rules, and if this is just a case of the docs being out of sync.
Sergey Kukunin
@Kukunin
@flash-gordon do you know, that new dry-monads transforms dry-structs into hashes?
Nikita Shilnikov
@flash-gordon
Yep, I'll push a kinda fix later today, you can check out the branch in dry-monads meanwhile
Sergey Kukunin
@Kukunin
btw, those are really cool changes to API of monads
Nikita Shilnikov
@flash-gordon
Thanks, it took me a while :)
Sam Stickland
@samstickland
Is Types::Form::DateTime supposed to be able to parse multipart form values? i.e start_time(1i), start_time(2i) etc
Adam Davies
@adz
Not sure but I
Juanma Cervera
@jmcervera
G
Joe Van Dyk
@joevandyk
i have Status = Types::String.enum('draft', 'published', 'deleted'). What's the best way to use that in a validation rule?
i tried required(:status, Status) but that didn't seem to work
(i tried enabling type_specs as well)
Nikita Shilnikov
@flash-gordon
@joevandyk this what works for me
        Action = Types::Strict::String.enum(*%w[publish update])

        Schema = Dry::Validation.Form do
          configure do
            config.type_specs = true
          end

          required(:action, :string).filled(Action)
        end
Joe Van Dyk
@joevandyk
@flash-gordon thanks, that works
@flash-gordon say action is allowed to be nil or empty string, and if it is you want to default to 'publish'. how would you do that?
Nikita Shilnikov
@flash-gordon
dry-v doesn't handle defaults because it only validates data, so would go with { **defaults, **data }
Joe Van Dyk
@joevandyk
@flash-gordon i'm not familiar with that syntax :)
Nikita Shilnikov
@flash-gordon
ahh, yes, this time plain merge will work better
Joe Van Dyk
@joevandyk
i'm assuming there's a way to get dry-v to pre-process that sort of thing and set a default?
Nikita Shilnikov
@flash-gordon
well, didn't see that :) you can then check for nil in a constructor block, right?
Piotr Macuk
@macuk

Hi. First of all thank you for great dry-rb gems. Dry-v is awesome! :) I have a problem. I would like to build form schema where some fields are known and some other fields should be dynamically created. I thought that I use Form.with(custom_struct: custom_struct).(params) with option within configure block [like here: http://dry-rb.org/gems/dry-validation/custom-validation-blocks/] but it doesn't work. I cannot use custom_struct inside the schema definition:

Form = Dry::Validation.Form do
  configure do
    option :custom_struct
  end

  required(:name).filled(:str?)
  required(:surname).filled(:str?)

  optional(:custom).schema do
    # error: "undefined method `each' for #<UnboundMethod:0x007f91b9978608> (NoMethodError)"
    custom_struct.each do |element|
      required(element.name)
    end
  end
end

I've found this topic [https://discuss.dry-rb.org/t/build-dry-validations-dynamically/164] in the forum but need some examples. Could you help me somehow? Thanks!

Sergey Kukunin
@Kukunin
is there a way to inherit form schema? I found I can pass basic schema via constructor Dry::Validation.Form(BaseSchema), but it requires a class there
John Backus
@backus
I've been working on a tool for checking the correctness of YARD docs and I've been using Dry::Types as my sample library. Figured I would share here :P https://github.com/backus/yardcheck
I also use Dry::Types as an example in the readme