README.md in syncano-4.0.0.alpha1 vs README.md in syncano-4.0.0.alpha2

- old
+ new

@@ -1,168 +1,19 @@ -# Syncano 4.0 ruby gem +# Syncano 4.0 Ruby Gem +## Ruby QuickStart Guide +--- -## Installation +Syncano ruby gem provides communication with Syncano platform - ([www.syncano.io](http://www.syncano.io/?utm_source=github&utm_medium=readme&utm_campaign=syncano-ruby)) -Using gems: +You can find quick start on installing and using Syncano's Ruby library in our [documentation](http://docs.syncano.io/docs/ruby/?utm_source=github&utm_medium=readme&utm_campaign=syncano-js). -```bash -$ gem install syncano --pre -``` +For more detailed information on how to use Syncano and its features - our [Developer Manual](http://docs.syncano.io/docs/getting-started-with-syncano/?utm_source=github&utm_medium=readme&utm_campaign=syncano-js) should be very helpful. -## First steps +In case you need help working with the library - email us at libraries@syncano.com - we will be happy to help! -After installation, you have to set a path for api root for syncano. - -If you want to use staging, export: - -```bash -$ export API_ROOT=https://api.syncano.rocks -``` - -If you're less adventurous, use our production api servers: - -```bash -$ export=API_ROOT=https://api.syncano.io -``` - -Ok, now we can start coding! - -```ruby -require 'syncano' - -syncano = Syncano.connect(api_key: 'your-api-key') - -syncano.instances.all.each { |instance| puts instance } -``` - -You can either pass your API key to the connect method as above or set -`ENV['SYNCANO_API_KEY']` and call just `Syncano.connect`. - -## API basics - -Syncano API is a nested API - all the endpointes are scoped by an instances, ex. -codeboxes path is `/instance/your_instance_name/codeboxes/`. Syncano instances -is more less a schema is in relation databases. **Your instance name must be -unique across all existing Syncano instnaces, not only limitted to your account.** - - -# Instances - -In order to do anything with Syncano, you have to create an instances. Choose a -globally unique name and call: - -```ruby -instances = syncano.instances.create name: 'my_instances_name' -instance.first - -#=> #<Syncano::Resources::Instance created_at: Sun, 26 Apr 2015 18:09:46 +0000, description: "", metadata: {}, name: "my_instance_name", owner: nil, role: "full", updated_at: Sun, 26 Apr 2015 18:09:46 +0000> -``` - -# Classes and objects - -In order to save objects in Syncano, first you need to create a class. A class -defines objects' attributes in the class' schema. The attribute definition has two -mandatory (`name`, `type`) and two optional fields (`filter_index`, `order_index`). -What these fields are for is rather obvious - `name` defines objects' attribute -name, and `type` defines type (you can read more about available types in the -[API docs](http://docs.syncano.com/v0.1/docs/instancesinstanceclasses-2)). `*_index` -fields are indexing. `order_index` allows you order returned collections, -`filter_index` allows filtering in a various ways. There will be a few examples -in this README, but you can read in the -[API docs](http://docs.syncano.com/v0.1/docs/filtering-data-objects). - -```ruby - stock = instance.classes.create name: 'stock_items', - schema: [{ name: 'name', type: 'string', - filter_index: true }, - { name: 'amount', type: 'integer', - filter_index: true, - order_index: true }] -``` - -Once we have a class, we can start creating objects. - -```ruby - chorizo = stock.objects.create name: 'Chorizo', amount: 100 - black_pudding = stock.objects.create name: 'Black pudding', amount: 200 - curry_wurts = stock.objects.create name: 'Curry wurst', amount: 150 - kabanos = stock.objects.create name: 'Kabanos' - something = stock.objects.create amount: 3 -``` - -Now we have a few items in stock, let's try filtering. - -```ruby - stock.objects.all(order_by: '-amount', query: { amount: { _lte: 150 }, name: { _exists: true } }) - #=> #<Syncano::Resources::Collection:0x007fc18b9c7698 @next=false, @prev=false, @collection=[#<Syncano::Resources::Object amount: 150, channel: nil, channel_room: nil, created_at: Mon, 27 Apr 2015 05:21:31 +0000, group: nil, group_permissions: "none", id: 12, name: "Curry wurst", other_permissions: "none", owner: nil, owner_permissions: "none", revision: 1, updated_at: Mon, 27 Apr 2015 05:21:31 +0000>, #<Syncano::Resources::Object amount: 100, channel: nil, channel_room: nil, created_at: Mon, 27 Apr 2015 05:21:30 +0000, group: nil, group_permissions: "none", id: 10, name: "Chorizo", other_permissions: "none", owner: nil, owner_permissions: "none", revision: 1, updated_at: Mon, 27 Apr 2015 05:21:30 +0000>]> -``` - -Let's give `something` a name and try again. - -```ruby - something.name = 'Unidentified sausage' - something.save - - stock.objects.all(order_by: '-amount', query: { amount: { _lte: 150 }, name: { _exists: true } }) - #=> #<Syncano::Resources::Collection:0x007fc18d58a628 @next=false, @prev=false, @collection=[#<Syncano::Resources::Object amount: 150, channel: nil, channel_room: nil, created_at: Mon, 27 Apr 2015 05:21:31 +0000, group: nil, group_permissions: \"none\", id: 12, name: \"Curry wurst\", other_permissions: \"none\", owner: nil, owner_permissions: \"none\", revision: 1, updated_at: Mon, 27 Apr 2015 05:21:31 +0000>, #<Syncano::Resources::Object amount: 100, channel: nil, channel_room: nil, created_at: Mon, 27 Apr 2015 05:21:30 +0000, group: nil, group_permissions: \"none\", id: 10, name: \"Chorizo\", other_permissions: \"none\", owner: nil, owner_permissions: \"none\", revision: 1, updated_at: Mon, 27 Apr 2015 05:21:30 +0000>, #<Syncano::Resources::Object amount: 3, channel: nil, channel_room: nil, created_at: Mon, 27 Apr 2015 05:30:18 +0000, group: nil, group_permissions: \"none\", id: 15, name: \"Unidentified sausage\", other_permissions: \"none\", owner: nil, owner_permissions: \"none\", revision: 2, updated_at: Mon, 27 Apr 2015 05:30:48 +0000>]> -``` - -Now it matches the query and appears in the result. - -# Codeboxes - -Codeboxes are small pieces of code that run on Syncano servers. You can run them -manually using the API, you can create a schedule to run them periodically, you -can create a Webhook (and optionally make it public) to run them from the web, -you can create a trigger to run one after a class' object is created, updated or -deleted. There are three runtimes available: Ruby, Python and Node. This gem is -available in Ruby runtime (just needs to be required). Let's create a simple -codebox and run it. - -```ruby -clock = instance.codeboxes.create(name: 'clock', source: 'puts Time.now', runtime_name: 'ruby') -#=> #<Syncano::Resources::CodeBox config: {}, created_at: Thu, 30 Apr 2015 05:50:09 +0000, description: "", id: 1, name: "clock", runtime_name: "ruby", source: "puts Time.now", updated_at: Thu, 30 Apr 2015 05:50:09 +0000> -clock.run -#=> {"status"=>"pending", "links"=>{"self"=>"gv1/instances/a523b7e842dea927d8c306ec0a9a7a4ac30191c2cd034b11d/codeboxes/1/traces/1/"}, "executed_at"=>nil, "result"=>"", "duration"=>nil, "id"=>1} -``` - -When you schedule a codebox run, it returns the trace. Immediately after the -call it's status is pending, so you need to check the trace. - -```ruby -clock.traces.first -=> #<Syncano::Resources::CodeBoxTrace duration: 526, executed_at: Thu, 30 Apr 2015 05:25:14 +0000, id: 1, result: "2015-04-30 05:25:14 +0000", status: "success"> -``` - -The run method is asynchronous and returns immediately. You should use this to -run codeboxes when you don't care about results at this very moment. If you -want to run the codebox and get results in one call, you should use webhooks. - -# Webhooks - -You can use webhooks to run codeboxes synchronously. Webhooks can be either -public or private. You have to provide your API key when calling private ones, -public are public, you can call them with curl, connect with third party -services, etc. Ruby: - - -```ruby -webhook = @instance.webhooks.create slug: 'clock-webhook', codebox: clock.primary_key, public: true -#=> #<Syncano::Resources::Webhook codebox: 1, public: true, public_link: "a20b0ae122b53b2f2c445f6a7a202b274c3631ad", slug: "clock-webhook"> - -webhook.run['result'] -#=> "2015-04-30 05:51:45 +0000" -``` - -and curl - -```bash -$ curl "https://api.syncano.rocks/v1/instances//af248d3e8b92e6e7aaa42dfc41de80c66c90d620cbe3fcd19/webhooks/p/a20b0ae122b53b2f2c445f6a7a202b274c3631ad/" -{"status": "success", "duration": 270, "result": "2015-04-30 06:11:08 +0000", "executed_at": "2015-04-30T06:11:08.607389Z"} -``` - ## Contributing +--- 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`)