Fluent::Json::Schema
Build json schemas fluently.
Installation
Add this line to your application’s Gemfile:
“by gem ‘fluent-json-schema’, git: ‘https://github.com/rcpedro/fluent-json-schema.git’
“
And then execute:
$ bundle
Or install it yourself as:
$ gem install fluent-json-schema
Usage
Basic Usage
Given:
“by basic = Fluent::Json::Schema::Terms::Obj.new(:user) basic .req .strs(:first_name, :last_name, :username, :contact_no, :email, status: { enum: [active, inactive]}) .bools(:super) .dates(:created_at, :updated_at) .opt .strs(:created_by, :updated_by)
“
Calling as_json
would give the following result:
“by { type: :object, additionalProperties: false, required: [:first_name, :last_name, :username, :contact_no, :email, :status, :super, :created_at, :updated_at], properties: { first_name: { type: :string }, last_name: { type: :string }, email: { type: :string }, username: { type: :string }, contact_no: { type: :string }, status: { type: :string, enum: [active, inactive] }, super: { type: :boolean }, created_at: { type: :string, format: ‘date-time’ }, updated_at: { type: :string, format: ‘date-time’ }, created_by: { type: :string }, updated_by: { type: :string } } }
“
Nested Objects
Given:
“by home = Fluent::Json::Schema::Terms::Obj.new(:home)
home .req .obj(:address) { |address| address .req.strs(:city, :country) .opt.strs(:name, :street) } .obj(:owner) { |owner| owner .req.str(:first_name, :last_name, email: { fmt: :email }) .opt.strs(:title, :contact_no) } .opt .date(:date_built)
“
Calling as_json
would give the following result:
“by { type: :object, additionalProperties: false, required: [:address, :owner], properties: { address: { type: :object, additionalProperties: false, required: [:city, :country], properties: { city: { type: :string }, country: { type: :string }, name: { type: :string }, street: { type: :string } } }, owner: { type: :object, additionalProperties: false, required: [:first_name, :last_name, :email], properties: { email: { type: :string, format: :email }, title: { type: :string }, first_name: { type: :string }, last_name: { type: :string }, contact_no: { type: :string } } }, date_built: { type: :string, format: :‘date-time’ } } }
“
With Active Record
Given:
“by user = Fluent::Json::Schema::Terms::Obj.new(:user) user.lookup(User) .reflect( :first_name, :last_name, :email, :username, :contact_no, :super, :status, :created_by, :updated_by, :created_at, :updated_at )
“
Calling as_json
would give the following result:
“by { type: :object, additionalProperties: false, required: [:first_name, :last_name, :email, :username, :super, :status, :created_by, :updated_by, :created_at, :updated_at],
properties: { first_name: { type: :string }, last_name: { type: :string }, email: { type: :string }, username: { type: :string }, contact_no: { type: :string }, super: { type: :boolean }, status: { type: :string, enum: [active, inactive] }, created_by: { type: :string }, updated_by: { type: :string }, created_at: { type: :string, format: ‘date-time’ }, updated_at: { type: :string, format: ‘date-time’ } } }
“
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/fluent-json-schema.