Where communities thrive


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

    flash-gordon on master

    Remove unreachable method (compare)

  • 18:11

    flash-gordon on master

    Remove Dry::Types.type_keys It… (compare)

  • 18:09

    flash-gordon on master

    Remove unreachable code (compare)

  • 18:04

    flash-gordon on master

    Coverage for function.rb (compare)

  • 17:15

    flash-gordon on fix-maybe-call-safe

    (compare)

  • 17:15

    flash-gordon on master

    Fix behavior of Maybe#call_safe… Merge pull request #380 from dr… (compare)

  • 17:15
    flash-gordon closed #380
  • 17:13
    flash-gordon synchronize #380
  • 17:13

    flash-gordon on fix-maybe-call-safe

    Fix behavior of Maybe#call_safe… (compare)

  • 17:12
    flash-gordon opened #380
  • 17:11

    flash-gordon on fix-maybe-call-safe

    Fix behavior of Maybe#call_safe… (compare)

  • 17:00

    flash-gordon on fix-maybe-try

    (compare)

  • 17:00

    flash-gordon on master

    Fix behavior of Types::Maybe#try Merge pull request #379 from dr… (compare)

  • 17:00
    flash-gordon closed #379
  • 15:09

    flash-gordon on master

    Fix typo Merge pull request #67 from gru… (compare)

  • 15:09
    flash-gordon closed #67
  • 14:43
    flash-gordon opened #379
  • 14:43

    flash-gordon on fix-maybe-try

    Fix behavior of Types::Maybe#try (compare)

  • 14:30

    flash-gordon on master

    Lax coverage (compare)

  • 14:27
    gruz0 opened #67
Piotr Solnica
@solnic
sounds good
John Backus
@backus
Finally getting around to commenting on #99
Simon Schmid
@sled
is it possible to "wrap" a validation schema inside Dry::Validation.Form only for the coercions? Otherwise I'd have to do everything twice, i.e for Form and JSON
Joe Van Dyk
@joevandyk
@solnic submitting issue. should that code work in the first place?
Ngan Pham
@ngan
Hi, is there a way to validate that an attribute is of a certain class? (using dry-validation). I tried doing key(:user).required(type?: User) and it works, but as soon as I add config.input_processor = :sanitizer to the config block, I get this error: Dry::Container::Error: Nothing registered with the key "user"
Sorry, just to be clear: "of a certain class", meaning "is an instance of a certain class"
Piotr Solnica
@solnic
@ngan at the moment type?: Foo requires a corresponding dry type because we use it for potential coercions. We could make it skip it gracefuly though when a type is not found
@sled could you clarify? you can set up a base schema with rules and infer Form and JSON schemas from it w/o duplication of rule definitions
Simon Schmid
@sled
ah cool
@solnic like defining the rules once, and use a different pre-processor when needed
stigchristian
@stigchristian
  article_schema_base = -> {
    key(:id).required(:str?)
    key(:proquint).required(:str?)
    key(:_links).schema do
      key(:self).schema do
        key(:href).required(:str?)
      end
    end
    key(:type).required(:str?)
    key(:sub_type).required(:str?)
    key(:title).required(:str?)
    key(:byline).required(:str?)
    key(:live_from).required(:date_time?)
    key(:live_to).required(:date_time?)
    key(:featured_image).required(:str?)
  }

  ArticleSchema = Dry::Validation.JSON do
    instance_exec(&article_schema_base)
    key(:text).required(:str?)
    key(:published).required(:bool?)
    key(:created_at).required(:date_time?)
    key(:updated_at).required(:date_time?)
    key(:last_saved_by).required(:hash?)
  end

  ArticleSchemaWithStack = Dry::Validation.JSON do
    instance_exec(&article_schema_base)
    key(:stack).required(:array?)
    key(:text_text).required(:str?)
    key(:text_ale).each(:hash?)
  end
Is there a better way of doing this?
Artem Pyankov
@iBublik
@stigchristian try this one
  ArticleSchemaBase = Dry::Validation.JSON do
    key(:id).required(:str?)
    key(:proquint).required(:str?)
    key(:_links).schema do
      key(:self).schema do
        key(:href).required(:str?)
      end
    end
    key(:type).required(:str?)
    key(:sub_type).required(:str?)
    key(:title).required(:str?)
    key(:byline).required(:str?)
    key(:live_from).required(:date_time?)
    key(:live_to).required(:date_time?)
    key(:featured_image).required(:str?)
  end

  ArticleSchema = Dry::Validation.Schema(ArticleSchemaBase) do
    key(:text).required(:str?)
    key(:published).required(:bool?)
    key(:created_at).required(:date_time?)
    key(:updated_at).required(:date_time?)
    key(:last_saved_by).required(:hash?)
  end

  ArticleSchemaWithStack = Dry::Validation.Schema(ArticleSchemaBase) do
    key(:stack).required(:array?)
    key(:text_text).required(:str?)
    key(:text_ale).each(:hash?)
  end
Piotr Solnica
@solnic
yes, what @iBublik said ^
Simon Schmid
@sled
@solnic How can I infer a JSON schema from an existing (plain) schema? :)
like Dry::Validation.JSON(plain_schema)
ah I got it thanks :D
Artem Pyankov
@iBublik
@sled as far as I know this won't work, cause Form ans JSON method doesn't accept constant (class) as paramater (look at https://github.com/dry-rb/dry-validation/blob/master/lib/dry/validation.rb#L45-L47). But you can use Schema method and specify config.input_processor = :json in configure block.
Piotr Solnica
@solnic
gimme a sec
require 'dry-validation'

base = Dry::Validation.Schema do
  key(:name).required
  key(:email).required
end

json = Dry::Validation.Schema(base) do
  configure { config.input_processor = :json }
end

form = Dry::Validation.Schema(base) do
  configure { config.input_processor = :form }
end
Piotr Solnica
@solnic
@sled ^^ this will work
but I gotta say just using Dry::Validation.Form|JSON should work too, something to improve…
Simon Schmid
@sled
@solnic, yes I'm building a service object, and this can be fed from either form input or an API call (JSON)
so I'm basically injecting the input processor from the outside :)
stigchristian
@stigchristian
thanks @iBublik
Simon Schmid
@sled
I'm using dry-types + dry-validation as replacement for virtus to model JSON documents, is it overkill to both use dry-type and dry-validation?
I'm feeling like I'm writting a lot of things twice
e.g an Address type + a Schema for the address
Andy Holland
@AMHOL
@sled personally I think there's value in keeping coercion/type-safety logic separate from validation logic, having said that, Dry::Validation::Schema::JSON landed in dry-validation master branch recently, which uses a json input processor to infer coercions in the same way Dry::Validation::Schema::Form works
Piotr Solnica
@solnic
@sled how exactly do you use dry-types?
Simon Schmid
@sled
mh basically what our app does is porting paper forms to "digital" forms
so I want to use dry-types to describe the structure of these forms/documents
I just got confused whether I should use Types::Form::Int, Types::Coercible::Int in my document type definition
because the validation also does some coercion right?
Piotr Solnica
@solnic
no, you should not. your ‘models’ should not do any coercions
Simon Schmid
@sled
okay so I keep the models "pure and strict" types
Piotr Solnica
@solnic
yes, that’s the intention of structs in dry-types
should be as simple as possible
Simon Schmid
@sled
got it, thanks a lot! :)
Piotr Solnica
@solnic
JSON schemas are available in latest release btw
Simon Schmid
@sled
another dumb question why isn't there a Types::Maybe::Int ?
I see Types::Maybe::Strict::Int and Types::Maybe::Coercible::Int in the docs
Piotr Solnica
@solnic
because reasons :laughing:
I honestly don’t know, I probably didn’t have a use case for them yet so I didn’t add them
Simon Schmid
@sled
ah so Types::Int.optional would be equivalent to Types::Maybe::Int ?
Piotr Solnica
@solnic
btw Types::Int.optional would do it
yes
Simon Schmid
@sled
cool! :)
Piotr Solnica
@solnic
it’s basically Types::Strict::Nil | Types::Int
Simon Schmid
@sled
I'm really enjoying the dry-rb repository :)
Piotr Solnica
@solnic
awesome :)