Compare commits

...

18 commits

Author SHA1 Message Date
Alex Lushpai
979d06550a
Update product name, cleanup annotations 2020-12-15 13:30:40 +03:00
Alex Lushpai
30999696f9
Update README.md 2020-02-19 13:50:59 +03:00
Alex Lushpai
978f2f0509 Update README.md 2016-03-14 23:07:43 +03:00
Alex Lushpai
4358a6e815 Merge pull request #3 from gwinn/master
Update client methods & docs
2016-03-08 01:28:47 +03:00
Alex Lushpai
2ffec96adb fix typos 2016-03-08 01:26:58 +03:00
Alex Lushpai
06c5ce871d gemspec 2016-03-08 01:25:01 +03:00
Alex Lushpai
0763201af2 update client methods & docs 2016-03-08 01:23:25 +03:00
Alex Lushpai
c9cc8a76de Merge pull request #2 from gwinn/master
Исправления для filters и методов редактирования справочников
2015-07-16 18:05:55 +03:00
Alex Lushpai
1f2cd4128e enable specs for refs 2015-07-16 18:03:57 +03:00
Alex Lushpai
d21553e681 fix references edit methods, fix make request to proper collect of ids & filters, referenses tests added 2015-07-16 18:01:35 +03:00
Alex Lushpai
9b43a56c97 Update README.md 2015-04-27 14:24:24 +03:00
Alex Lushpai
a0ebbe5b38 add all available methods 2015-04-15 15:06:05 +03:00
Alex Lushpai
c358e13330 update gemspec 2015-04-14 18:06:46 +03:00
Alex Lushpai
eeb450f6e3 store_inventories method, orders_packs_history method, refactoring, update bootstrap file 2015-04-14 18:05:47 +03:00
Alex Lushpai
bb39e0481a gem version 2015-04-14 17:33:02 +03:00
Alex Lushpai
9329ce984b fix filters for orders method, add customers method, rewrite orders_statuses method 2015-04-14 17:31:43 +03:00
Alex Lushpai
9a16a5068f fixes 2015-04-13 18:07:40 +03:00
Alex Lushpai
367c190b11 badge 2015-04-13 03:19:04 +03:00
13 changed files with 714 additions and 273 deletions

3
.gitignore vendored
View file

@ -1,2 +1,3 @@
*.gem
/test/bootstrap.rb
spec/bootstrap.rb

View file

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2013 Alex Lushpai
Copyright (c) 2013-2020 RetailDriver LLC
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in

View file

@ -1,33 +1,36 @@
Ruby-клиент для retailCRM API
=============================
[![Gem](https://img.shields.io/gem/v/retailcrm?color=red)](https://rubygems.org/gems/retailcrm)
[![RDoc](https://img.shields.io/badge/RDoc-reference-red.svg)](http://www.rubydoc.info/gems/retailcrm)
RetailCRM API ruby client
=========================
### Установка
### Install
```
gem install retailcrm
```
### Примеры использования
### Examples
#### Получение информации о заказе
#### Get order
```ruby
require 'retailcrm'
api = Retailcrm.new('https://yourcrmname.intarocrm.ru', 'yourApiKeyHere')
api = Retailcrm.new('https://demo.retailcrm.pro', 'yourApiKeyHere')
response = api.orders_get(345, 'id').get_response
response = api.orders_get(345, 'id').response
order = response[:order]
```
#### Создание заказа
#### Create order
```ruby
require 'retailcrm'
api = Retailcrm.new('https://yourcrmname.intarocrm.ru', 'yourApiKeyHere')
api = Retailcrm.new('https://demo.retailcrm.pro', 'yourApiKeyHere')
order = {
:externalId => 171,
@ -62,12 +65,7 @@ order = {
]
}
response = api.orders_create(order).get_response
response = api.orders_create(order).response
order_id = response[:id]
```
#### REST API Documentation
http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3

View file

@ -3,10 +3,10 @@
require 'rake/testtask'
Rake::TestTask.new do |t|
t.libs.push "lib"
t.test_files = FileList['test/test_*.rb', 'test/spec_*.rb']
t.libs.push 'lib'
t.test_files = FileList['spec/spec_*.rb']
t.verbose = true
end
desc "Run tests"
desc 'Run tests'
task :default => :test

View file

@ -1,43 +1,63 @@
# encoding: utf-8
# noinspection RubyResolve
require 'net/http'
# noinspection RubyResolve
require 'net/https'
# noinspection RubyResolve
require 'uri'
# noinspection RubyResolve
require 'json'
# RetailCRM API Client
# noinspection ALL
class Retailcrm
def initialize(url, key)
@rr_version = 3
@rr_url = "#{url}/api/v#{@rr_version}/"
@rr_key = key
@rr_params = { :apiKey => @rr_key }
@version = 3
@url = "#{url}/api/v#{@version}/"
@key = key
@params = { :apiKey => @key }
@filter = nil
@ids = nil
end
##
# === Get orders by filter
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders(50, 2, {:email => 'test@example.com', :status => 'new'})
# >> Retailcrm.orders({:email => 'test@example.com', :status => 'new'}, 50, 2)
# => {...}
#
# Arguments:
# filter (Hash)
# limit (Integer) (20|50|100)
# page (Integer)
# filter (Array)
def orders(filter = {}, limit = 20, page = 1)
url = "#{@rr_url}orders"
@rr_params[:limit] = limit
@rr_params[:page] = page
@rr_params[:filter] = filter.to_json
return make_request(url)
def orders(filter = nil, limit = 20, page = 1)
url = "#{@url}orders"
@params[:limit] = limit
@params[:page] = page
@filter = filter.to_a.map { |x| "filter[#{x[0]}]=#{x[1]}" }.join('&')
make_request(url)
end
##
# === Get orders statuses
#
# Example:
# >> Retailcrm.orders_statuses([26120, 19282])
# => {...}
#
# Arguments:
# ids (Array)
def orders_statuses(ids = [])
@ids = ids.map { |x| "ids[]=#{x}" }.join('&')
url = "#{@url}orders/statuses"
make_request(url)
end
##
# === Get orders by id (or externalId)
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders_get(345, 'id')
@ -46,17 +66,18 @@ class Retailcrm
# Arguments:
# id (Integer)
# by (String)
def orders_get(id, by = 'externalId')
url = "#{@rr_url}orders/#{id}"
if (by != 'externalId')
@rr_params[:by] = by
# site (String)
def orders_get(id, by = 'externalId', site = nil)
url = "#{@url}orders/#{id}"
if by != 'externalId'
@params[:by] = by
@params[:site] = site
end
return make_request(url)
make_request(url)
end
##
# === Create order
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders_create(order)
@ -64,15 +85,16 @@ class Retailcrm
#
# Arguments:
# order (Array)
def orders_create(order)
url = "#{@rr_url}orders/create"
@rr_params[:order] = order.to_json
return make_request(url, 'post')
# site (String)
def orders_create(order, site = nil)
url = "#{@url}orders/create"
@params[:order] = order.to_json
@params[:site] = site
make_request(url, 'post')
end
##
# === Edit order
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders_edit(order)
@ -80,16 +102,17 @@ class Retailcrm
#
# Arguments:
# order (Array)
def orders_edit(order)
# site (String)
def orders_edit(order, site = nil)
id = order[:externalId]
url = "#{@rr_url}orders/#{id}/edit"
@rr_params[:order] = order.to_json
return make_request(url, 'post')
url = "#{@url}orders/#{id}/edit"
@params[:order] = order.to_json
@params[:site] = site
make_request(url, 'post')
end
##
# === Upload orders
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders_upload(orders)
@ -97,16 +120,16 @@ class Retailcrm
#
# Arguments:
# orders (Array)
def orders_upload(orders)
url = "#{@rr_url}orders/upload"
@rr_params[:orders] = orders.to_json
result = JSON.parse(make_request(url, 'post'))
return result[:uploadedOrders] || result
# site (String)
def orders_upload(orders, site = nil)
url = "#{@url}orders/upload"
@params[:orders] = orders.to_json
@params[:site] = site
make_request(url, 'post')
end
##
# === Set external ids for orders created into CRM
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders_fix_external_ids([{:id => 200, :externalId => 334}, {:id => 201, :externalId => 364}])
@ -115,51 +138,55 @@ class Retailcrm
# Arguments:
# orders (Array)
def orders_fix_external_ids(orders)
url = "#{@rr_url}orders/fix-external-ids"
@rr_params[:orders] = orders.to_json
return make_request(url, 'post')
url = "#{@url}orders/fix-external-ids"
@params[:orders] = orders.to_json
make_request(url, 'post')
end
##
# === Get orders history
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.orders_history('2015-04-10 22:23:12', '2015-04-10 23:33:12')
# => {...}
#
# Arguments:
# startDate (Time) (Time.strftime('%Y-%m-%d %H:%M:%S'))
# endDate (Time) (Time.strftime('%Y-%m-%d %H:%M:%S'))
# start_date (Time) (Time.strftime('%Y-%m-%d %H:%M:%S'))
# end_date (Time) (Time.strftime('%Y-%m-%d %H:%M:%S'))
# limit (Integer) (20|50|100)
# offset (Integer)
def orders_history(startDate = nil, endDate = nil, limit = 20, offset = 0)
url = "#{@rr_url}orders/history"
@rr_params[:startDate] = startDate
@rr_params[:endDate] = endDate
@rr_params[:limit] = limit
@rr_params[:offset] = offset
return make_request(url)
# skip_my_changes (Boolean)
def orders_history(start_date = nil, end_date = nil, limit = 100, offset = 0, skip_my_changes = true)
url = "#{@url}orders/history"
@params[:startDate] = start_date
@params[:endDate] = end_date
@params[:limit] = limit
@params[:offset] = offset
@params[:skipMyChanges] = skip_my_changes
make_request(url)
end
##
# === Get orders statuses
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
# === Get customers by filter
#
# Example:
# >> Retailcrm.orders_statuses([231,244,356,564])
# >> Retailcrm.customers({:email => 'test@example.com'}, 50, 2)
# => {...}
#
# Arguments:
# ids (Array)
def orders_statuses(ids)
url = "#{@rr_url}orders/statuses/#{ids}"
return make_request(url)
# filter (Hash)
# limit (Integer) (20|50|100)
# page (Integer)
def customers(filter = nil, limit = 20, page = 1)
url = "#{@url}customers"
@params[:limit] = limit
@params[:page] = page
@filter = filter.to_a.map { |x| "filter[#{x[0]}]=#{x[1]}" }.join('&')
make_request(url)
end
##
# === Get customers by id (or externalId)
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.customers_get(345, 'id')
@ -168,17 +195,18 @@ class Retailcrm
# Arguments:
# id (Integer)
# by (String)
def customers_get(id, by = 'externalId')
url = "#{@rr_url}customers/#{id}"
if (by != 'externalId')
@rr_params[:by] = by
# site (String)
def customers_get(id, by = 'externalId', site = nil)
url = "#{@url}customers/#{id}"
@params[:site] = site
if by != 'externalId'
@params[:by] = by
end
return make_request(url)
make_request(url)
end
##
# === Create customer
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.customer_create(customer)
@ -186,15 +214,16 @@ class Retailcrm
#
# Arguments:
# customer (Array)
def customers_create(customer)
url = "#{@rr_url}customers/create"
@rr_params[:customer] = customer.to_json
return make_request(url, 'post')
# site (String)
def customers_create(customer, site = nil)
url = "#{@url}customers/create"
@params[:customer] = customer.to_json
@params[:site] = site
make_request(url, 'post')
end
##
# === Edit customer
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.customers_edit(customer)
@ -202,15 +231,17 @@ class Retailcrm
#
# Arguments:
# customer (Array)
def customers_edit(customer, id)
url = "#{@rr_url}customers/#{id}/edit"
@rr_params[:customer] = customer.to_json
return make_request(url, 'post')
# site (String)
def customers_edit(customer, site = nil)
id = customer[:externalId]
url = "#{@url}customers/#{id}/edit"
@params[:customer] = customer.to_json
@params[:site] = site
make_request(url, 'post')
end
##
# === Upload customers
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.customers_upload(customers)
@ -218,16 +249,16 @@ class Retailcrm
#
# Arguments:
# customers (Array)
def customers_upload(customers)
url = "#{@rr_url}customers/upload"
@rr_params[:customers] = customers.to_json
result = JSON.parse(make_request(url, 'post'))
return result[:uploaded] || result
# site (String)
def customers_upload(customers, site = nil)
url = "#{@url}customers/upload"
@params[:customers] = customers.to_json
@params[:site] = site
make_request(url, 'post')
end
##
# === Set external ids for customers created into CRM
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
# Example:
# >> Retailcrm.customers_fix_external_ids([{:id => 200, :externalId => 334}, {:id => 201, :externalId => 364}])
@ -236,114 +267,349 @@ class Retailcrm
# Arguments:
# customers (Array)
def customers_fix_external_ids(customers)
url = "#{@rr_url}customers/fix-external-ids"
@rr_params[:customers] = customers.to_json
return make_request(url, 'post')
url = "#{@url}customers/fix-external-ids"
@params[:customers] = customers.to_json
make_request(url, 'post')
end
##
# === Get purchace prices & stock balance
#
# Example:
# >> Retailcrm.store_inventories({:productExternalId => 26120, :details => 1}, 50, 2)
# => {...}
#
# Arguments:
# filter (Hash)
# limit (Integer) (20|50|100)
# page (Integer)
def store_inventories(filter = nil, limit = 20, page = 1)
url = "#{@url}store/inventories"
@params[:limit] = limit
@params[:page] = page
@filter = filter.to_a.map { |x| "filter[#{x[0]}]=#{x[1]}" }.join('&')
make_request(url)
end
##
# === Set purchace prices & stock balance
#
# Example:
# >> Retailcrm.store_inventories_upload({:offers => [{:externalId => 123, :stores => [{:code => 'store_1', :available => 15, :purchasePrice => 1000}]}]}, :site => 'main_site')
# => {...}
#
# Arguments:
# offers (Array)
# site (String)
def store_inventories_upload(offers = [], site = nil)
url = "#{@url}store/inventories/upload"
@params[:offers] = offers
@params[:site] = site
make_request(url, 'post')
end
##
# === Get packs by filter
#
# Example:
# >> Retailcrm.packs({:store => 'main'}, 50, 2)
# => {...}
#
# Arguments:
# filter (Hash)
# limit (Integer) (20|50|100)
# page (Integer)
def packs(filter = nil, limit = 20, page = 1)
url = "#{@url}orders/packs"
@params[:limit] = limit
@params[:page] = page
@filter = filter.to_a.map { |x| "filter[#{x[0]}]=#{x[1]}" }.join('&')
make_request(url)
end
##
# === Create pack
#
# Example:
# >> Retailcrm.packs_create(pack)
# => {...}
#
# Arguments:
# pack (Array)
# site (String)
def packs_create(pack, site = nil)
url = "#{@url}orders/packs/create"
@params[:pack] = pack.to_json
@params[:site] = site
make_request(url, 'post')
end
##
# === Get orders assembly history
#
# Example:
# >> Retailcrm.packs_history({:orderId => 26120, :startDate => '2015-04-10 23:33:12'}, 50, 2)
# => {...}
#
# Arguments:
# filter (Hash)
# limit (Integer) (20|50|100)
# page (Integer)
def packs_history(filter = nil, limit = 20, page = 1)
url = "#{@url}orders/packs/history"
@params[:limit] = limit
@params[:page] = page
@filter = filter.to_a.map { |x| "filter[#{x[0]}]=#{x[1]}" }.join('&')
make_request(url)
end
##
# === Get pack by id
#
# Example:
# >> Retailcrm.packs_get(345)
# => {...}
#
# Arguments:
# id (Integer)
# site (String)
def packs_get(id, site = nil)
url = "#{@url}orders/packs/#{id}"
@params[:site] = site
make_request(url)
end
##
# === Edit pack
#
# Example:
# >> Retailcrm.packs_edit(pack)
# => {...}
#
# Arguments:
# pack (Array)
# site (String)
def packs_edit(pack, site = nil)
id = pack[:id]
url = "#{@url}orders/packs/#{id}/edit"
@params[:pack] = pack.to_json
@params[:site] = site
make_request(url, 'post')
end
##
# === Delete pack
#
# Example:
# >> Retailcrm.packs_delete(14)
# => {...}
#
# Arguments:
# id (Integer)
# site (String)
def packs_delete(id, site = nil)
url = "#{@url}orders/packs/#{id}/delete"
@params[:site] = site
make_request(url, 'post')
end
##
# === Get delivery services
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def delivery_services
url = "#{@rr_url}reference/delivery-services"
return make_request(url)
url = "#{@url}reference/delivery-services"
make_request(url)
end
##
# === Edit delivery service
#
def delivery_services_edit(delivery_service)
code = delivery_service[:code]
url = "#{@url}reference/delivery-services/#{code}/edit"
@params[:deliveryService] = delivery_service.to_json
make_request(url, 'post')
end
# Get delivery types
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def delivery_types
url = "#{@rr_url}reference/delivery-types"
return make_request(url)
url = "#{@url}reference/delivery-types"
make_request(url)
end
##
# === Edit delivery type
#
def delivery_types_edit(delivery_type)
code = delivery_type[:code]
url = "#{@url}reference/delivery-types/#{code}/edit"
@params[:deliveryType] = delivery_type.to_json
make_request(url, 'post')
end
##
# === Get order methods
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def order_methods
url = "#{@rr_url}reference/order-methods"
return make_request(url)
url = "#{@url}reference/order-methods"
make_request(url)
end
##
# === Edit order method
#
def order_methods_edit(order_method)
code = order_method[:code]
url = "#{@url}reference/order-methods/#{code}/edit"
@params[:orderMethod] = order_method.to_json
make_request(url, 'post')
end
##
# === Get order types
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def order_types
url = "#{@rr_url}reference/order-types"
return make_request(url)
url = "#{@url}reference/order-types"
make_request(url)
end
##
# === Edit order type
#
def order_types_edit(order_type)
code = order_type[:code]
url = "#{@url}reference/order-types/#{code}/edit"
@params[:orderType] = order_type.to_json
make_request(url, 'post')
end
# Get payment statuses
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def payment_statuses
url = "#{@rr_url}reference/payment-statuses"
return make_request(url)
url = "#{@url}reference/payment-statuses"
make_request(url)
end
##
# === Edit payment status
#
def payment_statuses_edit(payment_status)
code = payment_status[:code]
url = "#{@url}reference/payment-statuses/#{code}/edit"
@params[:paymentStatus] = payment_status.to_json
make_request(url, 'post')
end
##
# === Get payment types
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def payment_types
url = "#{@rr_url}reference/payment-types"
return make_request(url)
url = "#{@url}reference/payment-types"
make_request(url)
end
##
# === Edit payment type
#
def payment_types_edit(payment_type)
code = payment_type[:code]
url = "#{@url}reference/payment-types/#{code}/edit"
@params[:paymentType] = payment_type.to_json
make_request(url, 'post')
end
##
# === Get product statuses
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def product_statuses
url = "#{@rr_url}reference/product-statuses"
return make_request(url)
url = "#{@url}reference/product-statuses"
make_request(url)
end
##
# === Edit product status
#
def product_statuses_edit(product_status)
code = product_status[:code]
url = "#{@url}reference/product-statuses/#{code}/edit"
@params[:productStatus] = product_status.to_json
make_request(url, 'post')
end
# Get sites list
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def sites
url = "#{@rr_url}reference/sites"
return make_request(url)
url = "#{@url}reference/sites"
make_request(url)
end
##
# === Edit site
#
def sites_edit(site)
code = site[:code]
url = "#{@url}reference/sites/#{code}/edit"
@params[:site] = site.to_json
make_request(url, 'post')
end
##
# === Get status groups
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def status_groups
url = "#{@rr_url}reference/status-groups"
return make_request(url)
url = "#{@url}reference/status-groups"
make_request(url)
end
# Get statuses
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def statuses
url = "#{@rr_url}reference/statuses"
return make_request(url)
url = "#{@url}reference/statuses"
make_request(url)
end
##
# === Edit status
#
def statuses_edit(status)
code = status[:code]
url = "#{@url}reference/statuses/#{code}/edit"
@params[:status] = status.to_json
make_request(url, 'post')
end
##
# === Get stores
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def stores
url = "#{@rr_url}reference/stores"
return make_request(url)
url = "#{@url}reference/stores"
make_request(url)
end
##
# === Edit store
#
def stores_edit(store)
code = store[:code]
url = "#{@url}reference/stores/#{code}/edit"
@params[:store] = store.to_json
make_request(url, 'post')
end
# Get countries list
#
def countries
url = "#{@url}reference/countries"
make_request(url)
end
##
# === Statistic update
# http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
#
def statistic_update
url = "#{@rr_url}statistic/update"
return make_request(url)
url = "#{@url}statistic/update"
make_request(url)
end
protected
@ -353,34 +619,39 @@ class Retailcrm
uri = URI.parse(url)
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
if method == 'post'
request = Net::HTTP::Post.new(uri)
request.set_form_data(@rr_params)
request.set_form_data(@params)
elsif method == 'get'
request = Net::HTTP::Get.new(uri.path)
request.set_form_data(@rr_params)
request = Net::HTTP::Get.new("#{uri.path}?#{request.body}")
request.set_form_data(@params)
data = "#{request.body}"
unless @filter.nil?
data = data + "&#{@filter}"
end
unless @ids.nil?
data = data + "&#{@ids}"
end
request = Net::HTTP::Get.new("#{uri.path}?#{data}")
end
response = https.request(request)
return Retailcrm::Response.new(response.code, response.body)
Retailcrm::Response.new(response.code, response.body)
end
end
class Retailcrm::Response
attr_reader :status, :response
def initialize(status, body)
@status = status
@response = body.empty? ? [] : JSON.parse(body);
@response = body.empty? ? [] : JSON.parse(body)
end
def get_status
return @status
end
def get_response
return @response
end
def is_successfull?
return @status.to_i < 400
@status.to_i < 400
end
end

View file

@ -1,7 +1,7 @@
Gem::Specification.new do |s|
s.name = 'retailcrm'
s.version = '1.0.0'
s.date = '2015-04-13'
s.version = '1.1.2'
s.date = '2016-03-07'
s.summary = 'RetailCRM Rest API client'
s.description = 'Library for interact with RetailCRM API'
s.authors = ['Alex Lushpai']

204
spec/bootstrap-dist.rb Normal file
View file

@ -0,0 +1,204 @@
# encoding: utf-8
class Bootstrap
attr_reader :api_key, :api_url, :order, :customer, :refs_get, :refs_edit
def initialize
@api_url = 'https://demo.retailcrm.pro'
@api_key = 'YourAPIKeyRightHere'
id = Time.now.to_i
time = Time.now.strftime('%F %T')
@customer = {
:externalId => id,
:createdAt => time,
:firstName => 'John',
:lastName => 'Doe',
:email => 'john@example.org',
:phones => [{:number => '+79099099090'}]
}
@order = {
:create => {
:externalId => id,
:number => "#{id}",
:orderType => 'eshop-individual',
:orderMethod => 'phone',
:createdAt => time,
:discountPercent => 10,
:firstName => 'API',
:lastName => 'Test',
:customer => {
:firstName => 'John',
:lastName => 'Doe',
:phones => [{:number => '+79099099090'}],
},
:delivery => {
:code => 'courier',
:cost => 500
},
:status => 'new',
:items => [
{
:productName => 'First',
:initialPrice => 500,
:quantity => 2
},
{
:productName => 'Second',
:initialPrice => 1300,
:quantity => 1
}
]
},
:edit => {
:externalId => 1428877985,
:email => 'spec@example.org',
:phone => '+79999999999',
:status => 'cancel-other',
:delivery => {
:code => 'ems',
:cost => 300,
}
},
:mass => [
{
:externalId => id,
:number => "#{id}",
:orderType => 'eshop-individual',
:orderMethod => 'phone',
:createdAt => time,
:discountPercent => 10,
:firstName => 'API',
:lastName => 'Test',
:customer => {
:firstName => 'John',
:lastName => 'Doe',
:phones => [{:number => '+79099099090'}],
},
:delivery => {
:code => 'courier',
:cost => 500
},
:status => 'new',
:items => [
{
:productName => 'First',
:initialPrice => 500,
:quantity => 2
},
{
:productName => 'Second',
:initialPrice => 1300,
:quantity => 1
}
]
},
{
:externalId => id+1,
:number => "#{id+1}",
:orderType => 'eshop-individual',
:createdAt => time,
:discount => 200,
:firstName => 'API2',
:lastName => 'Test2',
:customer => {
:firstName => 'Joe',
:lastName => 'Doe',
:phones => [{:number => '+79099099000'}],
},
:delivery => {
:code => 'ems',
:cost => 500
},
:status => 'availability-confirmed',
:items => [
{
:productName => 'Third',
:initialPrice => 500,
:quantity => 2
},
{
:productName => 'Extra',
:initialPrice => 1300,
:quantity => 1
}
]
}
]
}
@refs_get = %w(
delivery_services
delivery_types
order_methods
order_types
payment_statuses
payment_types
product_statuses
status_groups
statuses
sites
stores
)
@refs_edit = {
delivery_types_edit: {
name: 'Rake delivery type',
code: 'rake-delivery-type',
defaultCost: 300,
defaultNetCost: 0,
description: 'Test delivery type through Rake test task'
},
delivery_services_edit: {
name: 'Rake delivery service',
code: 'rake-delivery-service',
deliveryType: 'rake-delivery-type'
},
order_methods_edit: {
name: 'Rake order method',
code: 'rake-order-method',
},
order_types_edit: {
name: 'Rake order type',
code: 'rake-order-type',
},
payment_statuses_edit: {
name: 'Rake payment status',
code: 'rake-payment-status',
description: 'Test payment status through Rake test task'
},
payment_types_edit: {
name: 'Rake payment type',
code: 'rake-payment-type',
description: 'Test payment type through Rake test task'
},
product_statuses_edit: {
ordering: 65,
name: 'Rake product status',
code: 'rake-payment-type',
cancelStatus: true,
orderStatusByProductStatus: 'cancel-other',
},
statuses_edit: {
name: 'Rake status',
code: 'rake-status',
group: 'new',
},
sites_edit: {
name: 'Rake Shop',
url: 'http://example.org',
code: 'api-client-all',
loadFromYml: false,
},
stores_edit: {
type: 'store-type-online',
code: 'rake-store',
name: 'Rake Store'
}
}
end
end

30
spec/spec_customers.rb Normal file
View file

@ -0,0 +1,30 @@
# encoding: utf-8
require 'minitest/autorun'
require 'minitest/spec'
require 'minitest-spec-context'
require 'pp'
require_relative '../lib/retailcrm'
require_relative './bootstrap'
describe Retailcrm do
before do
@bootstrap = Bootstrap.new
@api = Retailcrm.new(@bootstrap.api_url, @bootstrap.api_key)
@customer = @bootstrap.customer
end
describe '#customers' do
it 'responds with 200' do
res = @api.customers({:email => 'test@example.com'}, 50, 1)
res.status.to_i.must_equal 200
res.response['customers'].must_be_instance_of Array
res.response['customers'].each do |x|
x['email'].must_equal 'test@example.com'
end
end
end
end

39
spec/spec_references.rb Normal file
View file

@ -0,0 +1,39 @@
# encoding: utf-8
require 'minitest/autorun'
require 'minitest/spec'
require 'minitest-spec-context'
require 'pp'
require_relative '../lib/retailcrm'
require_relative './bootstrap'
describe Retailcrm do
before do
@bootstrap = Bootstrap.new
@api = Retailcrm.new(@bootstrap.api_url, @bootstrap.api_key)
@ref = @bootstrap.refs_edit
end
describe '#reference get' do
it 'responds with 200' do
@bootstrap.refs_get.each { |method|
res = @api.public_send(method)
res.status.to_i.must_equal 200
sleep 0.3
}
end
end
describe '#reference edit' do
it 'responds with 200 or 201' do
@bootstrap.refs_edit.each do |method, data|
res = @api.public_send(method, data)
res.status.to_i.must_be :<, 202
sleep 0.3
end
end
end
end

16
spec/spec_retailcrm.rb Normal file
View file

@ -0,0 +1,16 @@
# encoding: utf-8
require 'minitest/autorun'
require 'minitest/spec'
require_relative '../lib/retailcrm'
require_relative './bootstrap'
describe Retailcrm do
before do
@bootstrap = Bootstrap.new
@api = Retailcrm.new(@bootstrap.api_url, @bootstrap.api_key)
end
end

View file

@ -1,65 +0,0 @@
# encoding: utf-8
class Bootstrap
attr_reader :api_key, :api_url, :order, :customer, :order_edit
def initialize()
@api_url = 'https://demo.retailcrm.ru'
@api_key = ''
id = Time.now.to_i
time = Time.now.strftime("%F %T")
@customer = {
:externalId => id,
:createdAt => time,
:firstName => 'API',
:lastName => 'Test',
:email => 'pupkin@example.org',
:phones => [{:number => '+79099099090'}]
}
@order = {
:externalId => id,
:number => "#{id}",
:orderType => 'eshop-individual',
:orderMethod => 'phone',
:createdAt => time,
:discountPercent => 10,
:firstName => 'API',
:lastName => 'Test',
:customer => {
:firstName => 'Тестовый',
:lastName => 'Клиент',
:phones => [{:number => '+79099099090'}],
},
:delivery => {
:code => 'courier',
:cost => 500,
:address => {:text => '344000, Ростов-на-Дону, пр. Буденовский, 13'}
},
:status => 'new',
:items => [
{
:productName => 'Товар 1',
:initialPrice => 500,
:quantity => 2
},
{
:productName => 'Товар 2',
:initialPrice => 1300,
:quantity => 1
}
]
}
@order_edit = {
:externalId => 1428877985,
:email => 'test@example.org',
:phone => '+79999999999',
:status => 'cancel-other',
}
end
end

View file

@ -1,26 +0,0 @@
# encoding: utf-8
require 'minitest/autorun'
require 'minitest/spec'
require_relative '../lib/retailcrm'
require_relative './bootstrap'
describe Retailcrm do
before do
@boot = Bootstrap.new()
@api = Retailcrm.new(@boot.api_url, @boot.api_key)
end
describe "#delivery services status code" do
it "checks successful status code of delivery services" do
@api.delivery_services.get_status.to_i.must_be :<, 400
end
end
describe "#delivery types status code" do
it "checks successful status code of delivery types" do
@api.delivery_types.get_status.to_i.must_be :<, 400
end
end
end

View file

@ -1,27 +0,0 @@
# encoding: utf-8
require 'minitest/autorun'
require_relative '../lib/retailcrm'
require_relative './bootstrap'
class RetailcrmTest < Minitest::Test
def setup
@boot = Bootstrap.new()
@api = Retailcrm.new(@boot.api_url, @boot.api_key)
end
def test_delivery_services
assert_equal true,
@api.delivery_services.is_successfull?
end
def test_delivery_types
assert_equal true,
@api.delivery_types.is_successfull?
end
def test_order_methods
assert_equal true,
@api.order_methods.is_successfull?
end
end