Skip to content

Ataxo/slim-api-ruby

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Slim-API Ruby

Accessing SlimApi and work with clients, contracts, campaigns and statistics

Instalation

Just in console

gem install slim-api-ruby

Or put into Gemfile

gem "slim-api-ruby"

and somewhere before use (not rails - they will require gem automaticaly)

require "slim-api"

Initialization

Setup your config values

SlimApi.api_token = "YOUR_TOKEN"
SlimApi.taxonomy = "YOUR_TAXONOMY"

#optional settings
SlimApi.version = :v1
#default is :v1

#url where is slim api located
SlimApi.url = "http://slimapi.ataxo.com"

# (default) When asked for not found object by id
# this will return nil:
SlimApi.not_found_handling = :nil
# this will raise exception SlimApiError::NotFound
SlimApi.not_found_handling = :exception

Logging

When you need to log requests use:

SlimApi.logger = Logger.new(STDOUT)
#or
SlimApi.logger = Logger.new("slimapi.log")

this will return you:

--------------------------------------------------------------------------------
Header: {"Api-Token"=>"YOUR TOKEN", "Content-Type"=>"application/json"}
Request: find
URL: http://slimapi.ataxo.com/v1/sandbox/objects
{
  "status": "ok",
  "code": 200,
  "message": "ok",
  "executed_at": "2013-03-12 11:31:21",
  "executed_in": "0.017648806s",
  "objects": [
    {
      ......
    }
  ],
  "total_count": 1
}

Working with Gem

You can access Main classes: Client, Contract, Campaign, Statistics, Category

How classes works

SlimApi documentation

# Find some objects:
campaigns = SlimApi::Client.find
# you got [ <Client:..>, ... ] and choose first one
campaign = campaigns.first
# then you can ask for something
campaign.name #=> "Client Name"
campaign.id #=> 123456

Arguments from api is hash, this hash is saved by hashr directly into instance. Instance is still Hash, you can do all stuf like with normal hash.

Find

# By id
SlimApi::Client.find 123
#=> <Client:..> #or on not found => nil or exception (by settings)

# By array of ids
SlimApi::Client.find 123, 234, 345
#=> [ <Client:..>, <Client:..>, <Client:..> ]

# By hash
SlimApi::Client.find
#=> [ <Client:..>, ... ]

SlimApi::Campaign.find
#=> [ <Campaign:..>, ... ]

#to find all clients with name
clients = SlimApi::Client.find :name => 'John'
#=> [ <Client:..>, ... ]

#and find campaigns under one client
clients.first.campaigns
#=> [ <Campaign:..>, ... ]

(Don't forget: all find queries generated by Query interface or by find({}) are limited by LIMIT!!!)

Query interface

ActiveRecord like query interface.

Supported methods:

  • where (conditions)
  • order
  • limit
  • offset
  • includes (include fields - statistics, payments)
query = SlimApi::Client.where(:name => "John")
#=> <SlimApi::SlimQuery: :where => {:name => 'John'} ... >

# you can chain all methods multiple times together to get your query like:
query = query.order('name desc').order('surname').limit(20).offset(12).where('age.gte' => 10)

# unless you call any enumerable method on query object, it will not load any data
# after first run, it will remember result in loaded_array and all enumerable methods will be delegated to it

query.each do |client|
  puts client.name
end

if you want to know what exactly is going under query interface, you can write

query.explain
#=> {:limit=>20, :offset=>12, :name=>"John", :"age.gte"=>10, :order=>"name desc,surname"}

this is exact hash which will be transformed into url params and added to GET request on right model

Hierarchy

look into documentation: SlimApi documentation

Statistics

In documentation you will find how to work with statistics api.

In gem you can use it same as in api:

SlimApi::Statistics.find :campaign_id => 1234, :'date.from' => Date.today - 10, :include => 'currency,partner_id,date', :order => 'date desc'

or by query interface

SlimApi::Statistics.where(:campaign_id => 1234).where(:'date.from' => Date.today - 10)
    .includes('currency').includes('partner_id').includes('date').order('date desc')

Order

You can order you find requests:

SlimApi::Client.find :order => 'name desc'
#or multiple orders:
SlimApi::Client.find :order => 'name desc,email asc'

or by query interface

SlimApi::Client.order('name desc').order('email asc')

Pagination

we added some functionality to array returned by method find

#default pagination setup
SlimApi.find_options
#=> { limit: 10, offset: 0 }
# and you can setup it by:
SlimApi.find_options = { limit: 20, offset: 0 }
#this is default configuration for all find methods,
#but you can easily overwrite for one call it by adding limit/offset to find method:
SlimApi::Client.find limit: 15

#get first page of clients (in db is 25 clients mathching find, but you will get only 10 default find limit)
clients = SlimApi::Client.find
#=> [ <Client: 1..>, <Client: 2..>, <Client: 3..> .., <Client: 10..>]
clients.total_count
#=> 25 #this will tell you how many items can be getted
clients.has_next_page?
#=> true #this will tell you if you can do .next_page
clients.limit
#=> 10 #show find limit
clients.offset
#=> 0 #show find current offset
clients.page_count
#=> 3 #show how many pages you can get
clients.actual_page
#=> 1 #show current page

# this will return you new array with new data, but with offset changed to offset + limit
second_page_of_clients = clients.next_page
#=> [ <Client: 11..>, <Client: 12..>, <Client: 13..> .., <Client: 20..>]

second_page_of_clients.offset
#=> 10
second_page_of_clients.actual_page
#=> 2

Copyright

Copyright (c) 2012 Ondrej Bartas. See LICENSE.txt for further details.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages