Git Product home page Git Product logo

compel's People

Contributors

joaquimadraz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

groyoh

compel's Issues

How to run custom validation against DB?

Hi @joaquimadraz ,

I was looking for hash validation library and even started building one from scratch. Coming from JS background I was looking for something that validate Hash, most of libraries I found only works with Class. This library looks great and thanks for that!

One question, as part of my validation I want to be able to validate unique fields in database.
For example I want to validate that param "email" is a valid email address and also is unique in "users" table/collection.

The reason I want it in the same library is because I want to return the validation errors to the client all in the same format of:

{
  "errors": {
    "name": [
      "name is required"
    ],
    "email": [
      "email must be valid email address",
      "email must be unique"
    ]
  }
}

Is it possible to add custom validation rules?

Thanks,
Ran.

[enhancement] shortcut request

@joaquimadraz first of all thanks for building this gem ;)

From the readme it seems that the only way to build a "schema" is through the deep method ".keys"

schema = Compel.hash.keys({
  first_name: Compel.string.required,
  last_name: Compel.string.required,
  birth_date: Compel.datetime,
  address: Compel.hash.keys({
    line_one: Compel.string.required,
    line_two: Compel.string.default('-'),
    post_code: Compel.string.format(/^\d{4}-\d{3}$/).required,
    country_code: Compel.string.in(['PT', 'GB']).default('PT')
  })
})

Because in the future I'll probably forget that to build a schema I'll have to access a ".hash" method that in turn has a ".keys" method, I propose a ".schema" shortcut method that does the same.

This is a bias proposal, in the future I will still remember that ".schema" builds a schema but this might not be true for other people.

Does the following proposal:

schema = Compel.schema({
  first_name: Compel.string.required,
  ...
})

makes sense to anyone else?

Edit: I'm not suggesting the removal of ".hash.keys", just a alias method that does the same.

requesting ruby 1.9.3 compatibility

I made RestMyCase start using Compel and now my tests brake when using ruby 1.9.3.

If this is a too big of a change, don't worry about it but if not, please consider supporting ruby 1.9.3

Validate individual elements of an array of hashes depending on another key of the hash

Hi! first of all, thanks for this amazing gem, it's the best gem I could find to validate params in Sinatra in a clear and succinct way.
I was wondering if it's possible to validate the hash elements of an array depending on the type of the element. It's similar to issue #6. Example:

[{
  type: 'A',
  attribute1: 'random1'
}, 
{
  type: 'A',
  attribute1: 'random1'
}, 
{
  type: 'A',
  attribute1: 'random1'
}, 
{
  type: 'B',
  attribute2: 'random2'
}, 
{
  type: 'B',
  attribute2: 'random2'
}]

I would like to validate the elements individually depending on the type:

  • keys of type A:
    • min_length(3).max_length(3), that is, count of element of type A is equal 3
    • attribute1 required
  • keys of type B:
    • min_length(2).max_length(2), that is, count of element of type B is equal 2
    • attribute2 required

Do you think it's possible with the current implementation? the if condition just lets me put a condition on the current value but I don't have access to the parent object to check the type key. Alternatively, I can do a find_all by type and validate them by type but it's more verbose.

Thanks

require key X if other key Y is sent with value Z

something like this:

Compel.hash.keys({
  y: Compel.string.in('A', 'B', 'Z'),
  x: Compel.string.in('D', 'E', 'F').required.if(:y, 'Z')
})

and with a lambda:

Compel.hash.keys({
  y: Compel.string.in('A', 'B', 'Z'),
  x: Compel.string.in('D', 'E', 'F').required.if(->(obj){ obj[:y] == 'Z' })
})

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.