Skip to content

Instantly share code, notes, and snippets.

@nathan-appere
Created September 11, 2019 12:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nathan-appere/1093cf971cfa9d785a17a2ff1c00cbe4 to your computer and use it in GitHub Desktop.
Save nathan-appere/1093cf971cfa9d785a17a2ff1c00cbe4 to your computer and use it in GitHub Desktop.
dry-types test
require 'dry-types'
require 'pry'
module Types
include Dry.Types
end
ProtocolType = Types::Symbol.enum(:http, :async, :websockets)
HttpVerb = Types::Symbol.enum(:get, :post)
MountpointHttp = Types::Hash.schema(verb: HttpVerb, path: Types::Strict::String)
MountpointAsync = Types::Hash.schema(id: Types::Strict::String)
EntryHttp = Types::Hash.schema(procotol: ProtocolType.constrained(eql: :http), mountpoint: MountpointHttp)
EntryAsync = Types::Hash.schema(procotol: ProtocolType.constrained(eql: :async), mountpoint: MountpointAsync)
Entry = EntryHttp | EntryAsync
test1 = Entry[procotol: :http, mountpoint: { verb: :get, path: '/users/sign-in' }]
test2 = Entry[procotol: :async, mountpoint: { id: '/users/sign-in' }]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment