Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
Christopher Dennl-Ortega Arrieta
@cdennl
@twillis you can now define arbitrary validation rules, check the changelog on 0.10. some stuff changed
@twillis and you put in 4 arguments to a predicate which takes 3
@twillis you can omit the npi_number argument at the function call
npi_number.unique_npi_number?(org_uid, id) should do the trick
Tom Willis
@twillis
ah ok I'll check the change log, i'd rather re-write the stuff if it's a cleaner syntax than the above. thanks so much @cdennl
Ricardo Bernardeli
@bernardeli
Hi guys! Hope you're all well. Playing with dry-struct and dry-types, and wanted to have an array with members of two types, where both types have same attribute BUT different type. Example below:
require "dry-struct"
require "dry-types"

module Types
  include Dry::Types.module
end

class Answer < Dry::Struct
  attribute :question_id, Types::String

  class Select < self
    attribute :value, Types::Hash.schema(id: Types::Int)
  end

  class Text < self
    attribute :value, Types::String
  end
end

class Survey < Dry::Struct
  attribute :answers, Types::Array.member(Answer::Text | Answer::Select)
end

Survey.new(
  answers: [
    Answer::Select.new(question_id: 1, value: {id: 10}),
    Answer::Text.new(question_id: 1, value: "foo")
  ]
)

#<Survey answers=[#<Answer::Text question_id=1 value={:id=>10}>, #<Answer::Text question_id=1 value="foo">]>
Problem here is, both answers came back as Answer::Text.
If I invert the order of the members to .member(Answer::Select | Answer::Text), things blow up.
The other thing I tried too is to have .member(Answer) since Select and Text are subclasses of Answer.
It doesn't blow up but turns Answer::Select into an Answer, getting rid of attribute :value.
Ricardo Bernardeli
@bernardeli
How can I achieve members of an array to accepting subclasses of a type?
Appreciate if someone can shed some light for me! :)
Tim Riley
@timriley
If you could both post these up to https://discuss.dry-rb.org, we’ll see if we can get some answers for you - this is where we’re trying to handle support questions like this.
Ricardo Bernardeli
@bernardeli
Cool - will do!
Thanks Tim!
Tim Riley
@timriley
:pray:
Nick Sutterer
@apotonick
hey @timriley i have a question about dry-auto_inject (again), because i decided we're not using dry-initializer (we don't need coercion, types, etc. at this point), but we simply have two arguments initialize(params, options) where options are all the dependencies injected
now i have two things
  1. how would i extend Ai to "eat" the two-arg version params, options? (i think you hinted this twice already)
  2. can we change Ai to not add any readers but only merge the auto-injected parameters into the options hash? that would all happen on the class-level
Nick Sutterer
@apotonick
@timriley i see that i might have to write my own strategy. fine with that, but you gotta help me!!! :tea:
Yurii Danyliak
@yuriidanyliak
Hey guys! Just a quick question: is there some ability to use dry-validation output with form_for or deliver the results of validation to front-end in some elegant way?
Nick Sutterer
@apotonick
@yuriidanyliak yes, with reform!
Yurii Danyliak
@yuriidanyliak
Hello @apotonick ! Yes, already read about reform-rails. Is there any way to use schema output with reform?
Nick Sutterer
@apotonick
schema "output", what is that?
you can use reform with dry-validation, it's pretty amazing
Yurii Danyliak
@yuriidanyliak
Sorry, going to clarify.
Nick Sutterer
@apotonick
;)
Yurii Danyliak
@yuriidanyliak
UserSchema.call({}).output :)

you can use reform with dry-validation, it's pretty amazing

Great, OK then!

Will try, thanks Nick! BTW: you had great presentation at #pivorak!
Nick Sutterer
@apotonick
oh thanks :blush: it was a fantastic audience, really!
Yurii Danyliak
@yuriidanyliak
:blush: have a nice weekend
Nick Sutterer
@apotonick
go try reform, i can help you with everything, but @fran-worley is our pro
Yurii Danyliak
@yuriidanyliak
Ok )
Tim Riley
@timriley
@apotonick if I don't have a new baby at start of the work, I'll see if I can take a quick stab at a strategy for you
Nick Sutterer
@apotonick
@timriley :heart_eyes: so, i would basically not implement define_initializer, right?
my initializer looks like
def initialize(params, options)
  @options = options #this is the dependency hash
end
so i kinda want to avoid the overriding from Ai
because we don't need separate instance variables per dependency, i store them all in one hash
@yuriidanyliak what does Schema#output do?
Yurii Danyliak
@yuriidanyliak
output's result of validation, those data that passed the validation of schema
@apotonick, usually using like
validation = schema.call(params)
validation.success? ? validation.output : validation.messages
Tim Riley
@timriley
Yeah, looks like you could skip defining the initializer, @apotonick
Nick Sutterer
@apotonick
@timriley i'll play with it now and let ya know
@yuriidanyliak ok, but what's the meaning of "output" in this specific case?
Fran Worley
@fran-worley
@apotonick output gives you pack your params
Nick Sutterer
@apotonick
i see
so basically form.sync
Fran Worley
@fran-worley
Not its used after validation and just literally returns params. More like form.to_nested_hash
Nick Sutterer
@apotonick
here we go