Giter Club home page Giter Club logo

Comments (5)

Pilatch avatar Pilatch commented on September 18, 2024 1

Found the problem. It errors out, which is the expected behavior, when you don't pipe. ExJsonSchema.Validator.validate(schema, foo) will produce the error messages, but foo |> ExJsonSchema.Validator.validate(schema) does not. This is probably because I misunderstand how Elixir handles partial function application.

bug_report.exs

defmodule Bug_Report do
  def main do

  schema = %{
      "type" => "object",
      "properties" => %{
        "foo" => %{
          "type" => "number"
        },
        "bar" => %{
          "type" => ["number", "null"]
        },
        "baz" => %{
          "type" => "string"
        },
      },
      "additionalProperties" => false
    } |> ExJsonSchema.Schema.resolve

    foo = %{
      "foo" => "Hello",
      "bar" => false,
      "baz" => 123
    }

    case ExJsonSchema.Validator.validate(schema, foo) do
      :ok -> foo |> inspect |> IO.puts
      # Even giving the validator an object with no fields that exist in the schema results in :ok.
      {:error, messages} -> messages |> inspect |> IO.puts
    end
  end
end

Bug_Report.main

from ex_json_schema.

jonasschmidt avatar jonasschmidt commented on September 18, 2024

By default, JSON Schema ignores properties that are not specified. You can change that behaviour by adding "additionalProperties" => false to your schema, then your example would fail. A more in-depth explanation of how objects and properties work can be found here: https://spacetelescope.github.io/understanding-json-schema/reference/object.html#properties

from ex_json_schema.

jonasschmidt avatar jonasschmidt commented on September 18, 2024

Yeah, the |> operator is very specific, it passes the value on the left side as the first parameter to the function on the right side. In this case, it doesn't work unfortunately (actually I realized much later that the payload should be the first parameter to validate and the schema the second, but I didn't want to introduce that breaking change just to make things a bit more convenient).

from ex_json_schema.

Pilatch avatar Pilatch commented on September 18, 2024

Ah thanks. I'm coming from Elm, where we pipe to the last parameter.

from ex_json_schema.

jonasschmidt avatar jonasschmidt commented on September 18, 2024

👍

from ex_json_schema.

Related Issues (20)

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.