README.md in grumlin-0.11.0 vs README.md in grumlin-0.12.0

- old
+ new

@@ -1,13 +1,33 @@ # Grumlin -[Gremlin](https://tinkerpop.apache.org/gremlin.html) query language DSL for Ruby +[![Ruby](https://github.com/zhulik/grumlin/actions/workflows/main.yml/badge.svg)](https://github.com/zhulik/grumlin/actions/workflows/main.yml) +[![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme) +[![MIT license](https://img.shields.io/badge/License-MIT-blue.svg)](https://lbesson.mit-license.org/) -**In development. Nothing to write here yet. If you are really interested, check out the source code and the specs.** +Grumlin is a [Gremlin](https://tinkerpop.apache.org/gremlin.html) graph traversal language DSL and client for Ruby. +Suitable for and tested with [gremlin-server](http://tinkerpop.apache.org/) and [AWS Neptune](https://aws.amazon.com/neptune/). -## Installation +**Important**: Grumlin and it's author are not affiliated with The Apache Software Foundation which develops gremlin +and gremlin-server. +**Important**: Grumlin is based on the [async stack](https://github.com/socketry/async) and utilizes +[async-websocket](https://github.com/socketry/async-websocket). Code using grumlin must be executed in an async +event loop. + +**Warning:** Grumlin is in development, but ready for simple use cases + +## Table of contents +- [Install](#install) +- [Usage](#usage) +- [Development](#development) +- [Contributing](#contributing) +- [License](#license) +- [Code Of Conduct](#code-of-conduct) + +## Install + Add this line to your application's Gemfile: ```ruby gem 'grumlin' ``` @@ -20,20 +40,80 @@ $ gem install grumlin ## Usage -TODO: Write usage instructions here +### Configuration +```ruby +Grumlin.configure do |config| + config.url = "ws://localhost:8182/gremlin" +end +``` +### Traversing graphs + +**Warning:** Not all steps and tools described in the standard are supported + +#### Sugar + +Grumlin provides an easy to use module called `Grumlin::Sugar`. Once included in your class it injects some useful +constants and methods turning your class into an entrypoint for traversals. + +```ruby +class MyRepository + include Grumlin::Sugar + + def nodes(property1:, property2:) + g.V() + .has(T.label, "node") + .has(:property1, property1) + .has(:property2, property2) + .order.by(:property3, Order.asc).limit(10) + .toList + end +end +``` + +#### Testing + +Grumlin provides a couple of helpers to simplify testing code written with it. + +##### RSpec + +Make sure you have [async-rspec](https://github.com/socketry/async-rspec) installed. + +`spec_helper.rb` or `rails_helper.rb`: +```ruby +require 'async/rspec' +require require "grumlin/test/rspec" +... +config.include_context(Async::RSpec::Reactor) # Runs async reactor +config.include_context(Grumlin::Test::RSpec::GremlinContext) # Injects sugar and makes sure client is closed after every test +config.include_context(Grumlin::Test::RSpec::DBCleanerContext) # Cleans the database before every test +... +``` + +It is highly recommended to use `Grumlin::Sugar` and not trying to use lower level APIs as they are subject to change. + ## 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. +Before running tests make sure you have gremlin-server running on your computer. The simplest way to run it is using +[docker-compose](https://docs.docker.com/compose/) and provided `docker-compose.yml` and `gremlin_server/Dockerfile`: -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 the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org). + $ docker-compose up -d gremlin_server +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 the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org). + ## Contributing -Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/grumlin. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/grumlin/blob/master/CODE_OF_CONDUCT.md). +Bug reports and pull requests are welcome on GitHub at https://github.com/zhulik/grumlin. This project is intended to +be a safe, welcoming space for collaboration, and contributors are expected to adhere to the +[code of conduct](https://github.com/zhulik/grumlin/blob/master/CODE_OF_CONDUCT.md). ## License The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).