{"id":17965159,"url":"https://github.com/davecaos/kylie","last_synced_at":"2025-03-25T06:31:10.687Z","repository":{"id":57514651,"uuid":"67180260","full_name":"davecaos/kylie","owner":"davecaos","description":":floppy_disk: Kylie is a blond and small Erlang/Elixir client for Cayley graph data base","archived":false,"fork":false,"pushed_at":"2017-10-23T03:45:40.000Z","size":72,"stargazers_count":12,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-19T09:40:52.670Z","etag":null,"topics":["cayley","elixir","erlang","graph-data"],"latest_commit_sha":null,"homepage":"","language":"Erlang","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/davecaos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-09-02T01:42:43.000Z","updated_at":"2024-10-24T05:24:46.000Z","dependencies_parsed_at":"2022-09-06T04:00:24.973Z","dependency_job_id":null,"html_url":"https://github.com/davecaos/kylie","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davecaos%2Fkylie","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davecaos%2Fkylie/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davecaos%2Fkylie/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davecaos%2Fkylie/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davecaos","download_url":"https://codeload.github.com/davecaos/kylie/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245413692,"owners_count":20611353,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cayley","elixir","erlang","graph-data"],"created_at":"2024-10-29T12:10:19.759Z","updated_at":"2025-03-25T06:31:10.412Z","avatar_url":"https://github.com/davecaos.png","language":"Erlang","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kylie (can't get you out of my graph data base)\n[![Hex.pm](https://img.shields.io/hexpm/v/kylie.svg?style=flat-square)](https://hex.pm/packages/kylie)\n[![Hex.pm](https://img.shields.io/hexpm/dt/kylie.svg?style=flat-square)](https://hex.pm/packages/kylie)\n[![License](http://img.shields.io/hexpm/l/kylie.svg?style=flat)](https://hex.pm/packages/kylie)\n\nKylie is a blond and small Erlang/Elixir client for Cayley graph data base\n\n [Cayley](https://github.com/cayleygraph/cayley/) is an open-source graph data base written in go\n\n![kylie](https://cloud.githubusercontent.com/assets/6124495/18232603/3f1f34fa-72a9-11e6-8b52-4a2731a4be7c.gif)\n\n---------\nExample:\n```erlang\n\u003erebar3 shell\n\n===\u003e Verifying dependencies...\n===\u003e Compiling kylie\nErlang/OTP 19 [erts-8.1] [source-77fb4f8] [64-bit] [smp:4:4] [async-threads:0] [kernel-poll:false]\n\nEshell V8.1  (abort with ^G)\n1\u003e squad:new(\"Kylie\", \"is\", \"singer\").\n#{object =\u003e \"singer\",predicate =\u003e \"is\",subject =\u003e \"Kylie\"}\n\n2\u003e kylie:add(squad:new(\u003c\u003c\"Kylie\"\u003e\u003e, \u003c\u003c\"is\"\u003e\u003e,\u003c\u003c \"singer\"\u003e\u003e)).\nok\n3\u003e kylie:add(squad:new(\u003c\u003c\"Kylie\"\u003e\u003e, \u003c\u003c\"is\"\u003e\u003e,\u003c\u003c \"songwriter\"\u003e\u003e)).\nok\n4\u003e kylie:add(squad:new(\u003c\u003c\"Kylie\"\u003e\u003e, \u003c\u003c\"is\"\u003e\u003e,\u003c\u003c \"model\"\u003e\u003e)).\nok\n\n```\n\nYou can do a generic query with Subject and Predicate.\n```erlang\n5\u003e kylie:get_result(\u003c\u003c\"Kylie\"\u003e\u003e, \u003c\u003c\"is\"\u003e\u003e).\n[\u003c\u003c\"model\"\u003e\u003e,\u003c\u003c\"singer\"\u003e\u003e,\u003c\u003c\"songwriter\"\u003e\u003e]\n```\n\n\nYou can also do a proplisp(?) and generate a query in the [Gremblin](http://gremlindocs.spmallette.documentup.com/) way.\n\nThe idea is build this query: \n```javascript\n  g.V('Kylie').Out('recorded').Out('incluided').All()\"\n```\nWith this proplisp:\n```erlang\n   [{graph_vertex, \u003c\u003c\"Kylie\"\u003e\u003e}, {out, \u003c\u003c\"recorded\"\u003e\u003e}, {out, \u003c\u003c\"incluided\"\u003e\u003e}, all]\n```\n\n```erlang\n6\u003e kylie:add(squad:new(\u003c\u003c\"Kylie\"\u003e\u003e, \u003c\u003c\"recorded\"\u003e\u003e, \u003c\u003c\"Fever\"\u003e\u003e)).\nok\n7\u003e kylie:add(squad:new(\u003c\u003c\"Fever\"\u003e\u003e, \u003c\u003c\"incluided\"\u003e\u003e, \u003c\u003c\"Can't Get You Out of My Head\"\u003e\u003e)).\nok\n8\u003e kylie:add(squad:new(\u003c\u003c\"Fever\"\u003e\u003e, \u003c\u003c\"incluided\"\u003e\u003e, \u003c\u003c\"In Your Eyes\"\u003e\u003e)),\nok\n\n9\u003ePropLispQuery = [{graph_vertex, \u003c\u003c\"Kylie\"\u003e\u003e}, {out, \u003c\u003c\"recorded\"\u003e\u003e}, {out, \u003c\u003c\"incluided\"\u003e\u003e}, all].\n[{graph_vertex,\u003c\u003c\"Kylie\"\u003e\u003e},{out,\u003c\u003c\"recorded\"\u003e\u003e},{out,\u003c\u003c\"incluided\"\u003e\u003e},all]\n\n10\u003eGremblinQuery = kylie:build_gremblin_human_readable(PropLispQuery).\n\u003c\u003c\"g.V('Kylie').Out('recorded').Out('incluided').All()\"\u003e\u003e\n\n11\u003e{ok, Result} = kylie:query(GremblinQuery).\n[\u003c\u003c\"Can't Get You Out of My Head\"\u003e\u003e,\u003c\u003c\"In Your Eyes\"\u003e\u003e]\n```\n\n---------\nElixir Example:\n```elixir\n\u003eiex -S mix run -e \"Kylie.start\"\nErlang/OTP 19 [erts-8.1] [source-77fb4f8] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false]\n\n\n=INFO REPORT==== 14-Dec-2016::11:50:14 ===\nCreating wpool ETS tableInteractive Elixir (1.3.4) - press Ctrl+C to exit (type h() ENTER for help)\n\niex(1)\u003e Squad.new(\"Kylie\", \"is\", \"singer\")\n%{object: \"singer\", predicate: \"is\", subject: \"Kylie\"}\n\niex(2)\u003e Kylie.add(Squad.new(\"Kylie\", \"is\", \"model\"))\n:ok\niex(3)\u003e Kylie.add(Squad.new(\"Kylie\", \"is\", \"songwriter\"))\n:ok\niex(4)\u003e Kylie.add(Squad.new(\"Kylie\", \"is\", \"actress\"))\n:ok\n\n```\n\nYou can do a generic query with Subject and Predicate.\n```elixir\niex(4)\u003e Kylie.get_result(\"Kylie\", \"is\")\n[\"model\",\"singer\",\"songwriter\"]\n```\n\n\nYou can also do a proplisp(?) and generate a query in the [Gremblin](http://gremlindocs.spmallette.documentup.com/) way.\n\nThe idea is build this query: \n```javascript\n  g.V(\"Kylie\").Out(\"recorded\").Out(\"incluided\").All()\"\n```\nWith this proplisp:\n```elixir\n   [{:graph_vertex, \"Kylie\"}, {:out, \"recorded\"}, {:out, \"incluided\"}, :all]\n```\n\n```elixir\n\niex(5)\u003e Kylie.add(Squad.new(\"Kylie\", \"recorded\", \"Fever\"))\n:ok\niex(6)\u003e Kylie.add(Squad.new(\"Fever\", \"incluided\", \"Can't Get You Out of My Head\"))\n:ok\niex(7)\u003e Kylie.add(Squad.new(\"Fever\", \"incluided\", \"In Your Eyes\"))\n:ok\n\niex(8)\u003e propLispQuery = [{:graph_vertex, \"Kylie\"}, {:out, \"recorded\"}, {:out, \"incluided\"}, :all]\n[{:graph_vertex, \"Kylie\"}, {:out, \"recorded\"}, {:out, \"incluided\"}, :all]\n\niex(9)\u003e gremblinQuery = Kylie.build_gremblin_human_readable(propLispQuery)\n\"g.V(\"Kylie\").Out(\"recorded\").Out(\"incluided\").All()\"\n\niex(10)\u003e {ok, result} = Kylie.query(gremblinQuery)\n[\"Can't Get You Out of My Head\",\"In Your Eyes\"]\n\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavecaos%2Fkylie","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavecaos%2Fkylie","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavecaos%2Fkylie/lists"}