Jot::Ruby
Library connecting JOT implementations and ruby runtime
Usage
require 'jot/ruby'
Basic JOT operations
- NO_OP - Creates operation that does nothing
- SET and LIST – General purpose operations
- MATH - Math ops
- SPLICE, ATINDEX, MAP - Strings and Arrays ops
- PUT, REM, APPLY - Object operations
- COPY
# creating a new operation
Jot::Ruby.PUT("0", "1")
General purpose methods
- opFromJSON - Creates an operation declared in json form
- deserialize - Creates an operation using it's serialized form
- diff - Creates a coplex op describes a list of operations to transform one object into another
Jot::Ruby.diff({a: 1}, {b: 2}) # Returns an operation instance
Operation instance methods
- isNoOp - Returns true or false according to op's functionalify
- toJSON - Returns a json view of operation
- apply - Gets an object and returns it's updated version
- serialize - Returns serialized version of operation
- simplify - Tries to reduce operation complexity
- drilldown - Returns operation describing it's subset ongiven key or index
- compose - Composes an operation with another one and returns another operation (i.e. LIST operation)
- rebase - receives another operation and raise an exception if there is a conflict, or may additionally receive initial version of document as second argument to make a conflictless rebase
op = jot.LIST([jot.APPLY("title", jot.SPLICE(5, 3, "small")), jot.APPLY("count", jot.MATH('add', -10))])
op.apply({title: "It's big", count: 20}) # => {"title"=>"It's small", "count"=>10}
Additional info
Use same arguments format as original implementation does For example, LIST operation receives an Array but not a list of arguments
Jot::Ruby.LIST([
Jot::Ruby.APPLY("title", Jot::Ruby.SPLICE(0, 5, "It's small")),
Jot::Ruby.APPLY("count", Jot::Ruby.MATH("add", 10))
]) # Works as expected
Jot::Ruby.LIST(
Jot::Ruby.APPLY("title", Jot::Ruby.SPLICE(0, 5, "It's small")),
Jot::Ruby.APPLY("count", Jot::Ruby.MATH("add", 10))
) # Raises a Jot::Ruby::Errors::ImplError exception
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.
To build a new version of js implementation update a submodule first:
$ git submodule init
$ git submodule update --recursive
Install javascript dependencies (you should have a javscript runtime and Yarn installed):
$ yarn install
rebuild build/jot.js using Rake command:
$ rake build:webpack
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/bombazook/jot-ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
License
The gem is available as open source under the terms of the MIT License.
Code of Conduct
Everyone interacting in the Jot::Ruby project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.