retentiongrid 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +10 -0
- data/README.md +8 -0
- data/lib/retentiongrid/api.rb +28 -4
- data/lib/retentiongrid/customer.rb +24 -7
- data/lib/retentiongrid/line_item.rb +8 -0
- data/lib/retentiongrid/order.rb +18 -6
- data/lib/retentiongrid/product.rb +8 -0
- data/lib/retentiongrid/version.rb +1 -1
- data/lib/retentiongrid.rb +2 -0
- data/retentiongrid.gemspec +3 -1
- data/spec/integration/customer_spec.rb +12 -0
- data/spec/integration/order_spec.rb +17 -0
- data/spec/models/customer_spec.rb +1 -1
- data/spec/models/order_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -0
- metadata +20 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f20d8859d9e7bc3b343422102b0de9739236711
|
4
|
+
data.tar.gz: 618928f847d92e0d95c636617b54c601e1906d71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c43e523cc8723253362faa2de50252d239e638e8ba6a008096350fe7209a3c93910b41b3c210a02f3a2de6413b79eb821ee17c185290a3b5061594652b1fa377
|
7
|
+
data.tar.gz: f6021a616226c2321555b282dcc1dedc9eff3b5179272cd7898a7b940b3910dfd87a197e1294aa5f6c358a72d8b77527f6e7e499fbb99129f8dec1cd2bb3dd20
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
# Retention::Grid
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/retentiongrid)
|
4
|
+
[](https://travis-ci.org/christoph-buente/retentiongrid)
|
5
|
+
[](https://coveralls.io/r/christoph-buente/retentiongrid)
|
6
|
+
[](https://codeclimate.com/github/christoph-buente/retentiongrid)
|
7
|
+
[ ](https://github.com/christoph-buente/retentiongrid/blob/master/LICENSE)
|
8
|
+
|
9
|
+
|
3
10
|
A ruby client for retentiongrid.com API
|
4
11
|
|
12
|
+
|
5
13
|
## Installation
|
6
14
|
|
7
15
|
Add this line to your application's Gemfile:
|
data/lib/retentiongrid/api.rb
CHANGED
@@ -4,10 +4,6 @@ module Retentiongrid
|
|
4
4
|
|
5
5
|
# The Api class handles all calls to the Retentiongrid API.
|
6
6
|
#
|
7
|
-
# Usage:
|
8
|
-
# require 'retentiongrid'
|
9
|
-
# Retentiongrid::Api.api_key = "your_api_key"
|
10
|
-
# order = Retentiongrid::Order.find(1234)
|
11
7
|
class Api
|
12
8
|
include HTTParty
|
13
9
|
|
@@ -22,20 +18,48 @@ module Retentiongrid
|
|
22
18
|
|
23
19
|
class << self
|
24
20
|
|
21
|
+
# Set your API key to communicate with retentiongrid
|
22
|
+
# @param [String] api_key your API key,
|
25
23
|
def api_key=(api_key)
|
26
24
|
default_params token: api_key
|
27
25
|
end
|
28
26
|
|
27
|
+
# Do a HTTP GET requests with the given arguments
|
28
|
+
# and then check for the response code.
|
29
|
+
# @raise [Retentiongrid::BadRequest] (400) in case the request was not legible to the server
|
30
|
+
# @raise [Retentiongrid::Forbidden] (403) access denied (e.g. wrong api key)
|
31
|
+
# @raise [Retentiongrid::NotFound] (404) in case the requested resource could not be found
|
32
|
+
# @raise [Retentiongrid::ServerError] (500) in case something went wrong on the retentiongrid server
|
33
|
+
# @return [Httparty::Response]
|
29
34
|
def get_with_response_check(*args)
|
30
35
|
check_response_codes(get_without_response_check(*args))
|
31
36
|
end
|
32
37
|
alias_method_chain :get, :response_check
|
33
38
|
|
39
|
+
# Do a HTTP POST requests with the given arguments
|
40
|
+
# and then check for the response code.
|
41
|
+
# @raise [Retentiongrid::BadRequest] (400) in case the request was not legible to the server
|
42
|
+
# @raise [Retentiongrid::Forbidden] (403) access denied (e.g. wrong api key)
|
43
|
+
# @raise [Retentiongrid::NotFound] (404) in case the requested resource could not be found
|
44
|
+
# @raise [Retentiongrid::ServerError] (500) in case something went wrong on the retentiongrid server
|
45
|
+
# @return [Httparty::Response]
|
34
46
|
def post_with_response_check(*args)
|
35
47
|
check_response_codes(post_without_response_check(*args))
|
36
48
|
end
|
37
49
|
alias_method_chain :post, :response_check
|
38
50
|
|
51
|
+
# Do a HTTP DELETE requests with the given arguments
|
52
|
+
# and then check for the response code.
|
53
|
+
# @raise [Retentiongrid::BadRequest] (400) in case the request was not legible to the server
|
54
|
+
# @raise [Retentiongrid::Forbidden] (403) access denied (e.g. wrong api key)
|
55
|
+
# @raise [Retentiongrid::NotFound] (404) in case the requested resource could not be found
|
56
|
+
# @raise [Retentiongrid::ServerError] (500) in case something went wrong on the retentiongrid server
|
57
|
+
# @return [Httparty::Response]
|
58
|
+
def delete_with_response_check(*args)
|
59
|
+
check_response_codes(delete_without_response_check(*args))
|
60
|
+
end
|
61
|
+
alias_method_chain :delete, :response_check
|
62
|
+
|
39
63
|
end
|
40
64
|
|
41
65
|
private
|
@@ -1,7 +1,17 @@
|
|
1
1
|
module Retentiongrid
|
2
|
+
|
3
|
+
# Retentiongrid Customer
|
4
|
+
#
|
5
|
+
# To create a new Retentiongrid::Customer object:
|
6
|
+
# customer = Retentiongrid::Customer.new(customer_id: 'C123', full_name: 'Chris Tucker').save
|
7
|
+
#
|
8
|
+
# To get a order from the API:
|
9
|
+
# customer = Retentiongrid::Customer.find('C123')
|
10
|
+
#
|
2
11
|
class Customer
|
3
12
|
include ActiveModel::Validations
|
4
13
|
|
14
|
+
# The set of attributes defined by the API documentation
|
5
15
|
ATTRIBUTES_NAMES = [ :customer_id, :full_name, :first_name, :email,
|
6
16
|
:country, :state, :city, :postal_code, :tags,
|
7
17
|
:accepts_email_marketing ].freeze
|
@@ -32,21 +42,29 @@ module Retentiongrid
|
|
32
42
|
end
|
33
43
|
end
|
34
44
|
|
35
|
-
|
36
|
-
|
45
|
+
# Create or update a customer with given id
|
46
|
+
# @return [Boolean] successfully created or updated?
|
37
47
|
def save
|
38
|
-
|
39
|
-
Customer.new(result.parsed_response["rg_customer"])
|
48
|
+
!!(save!) rescue false
|
40
49
|
end
|
41
50
|
|
51
|
+
# Create or update a customer with given id
|
52
|
+
# @return [Customer] if successfully created or updated
|
53
|
+
# @raise [Httparty::Error] for all sorts of HTTP statuses.
|
42
54
|
def save!
|
43
|
-
|
55
|
+
result = Api.post("/customers/#{customer_id}", body: attributes.to_json)
|
56
|
+
Customer.new(result.parsed_response["rg_customer"])
|
44
57
|
end
|
45
58
|
|
59
|
+
# Delete this customer at retention grid
|
60
|
+
# @return [Boolean] successfully deleted?
|
46
61
|
def destroy
|
47
|
-
|
62
|
+
Api.delete("/customers/#{customer_id}")
|
63
|
+
true
|
48
64
|
end
|
49
65
|
|
66
|
+
# Return all attributes as a hash
|
67
|
+
# @return [Hash]
|
50
68
|
def attributes
|
51
69
|
ATTRIBUTES_NAMES.inject({}) do |attribs, attrib_name|
|
52
70
|
value = self.send(attrib_name)
|
@@ -54,6 +72,5 @@ module Retentiongrid
|
|
54
72
|
attribs
|
55
73
|
end
|
56
74
|
end
|
57
|
-
|
58
75
|
end
|
59
76
|
end
|
data/lib/retentiongrid/order.rb
CHANGED
@@ -2,14 +2,15 @@ module Retentiongrid
|
|
2
2
|
# Retentiongrid Order
|
3
3
|
#
|
4
4
|
# To create a new Retentiongrid::Order object:
|
5
|
-
# order =
|
5
|
+
# order = Retentiongrid::Order.new(order_id: "A123", customer_id: 'C123', currency: 'EUR', total_price: 12.00, order_created_at: Time.now).save
|
6
6
|
#
|
7
7
|
# To get a order from the API:
|
8
|
-
# order =
|
8
|
+
# order = Retentiongrid::Order.find('A123')
|
9
9
|
#
|
10
10
|
class Order
|
11
11
|
include ActiveModel::Validations
|
12
12
|
|
13
|
+
# The set of attributes defined by the API documentation
|
13
14
|
ATTRIBUTES_NAMES = [ :order_id, :customer_id, :status, :total_price, :total_discounts,
|
14
15
|
:currency, :canceled_shipped, :canceled_shop_fault, :order_created_at
|
15
16
|
].freeze
|
@@ -29,7 +30,6 @@ module Retentiongrid
|
|
29
30
|
@order_created_at = Time.parse(order_created_at) unless order_created_at.nil?
|
30
31
|
end
|
31
32
|
|
32
|
-
|
33
33
|
# relations
|
34
34
|
|
35
35
|
def customer=(customer)
|
@@ -51,16 +51,29 @@ module Retentiongrid
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
+
# Create or update an order with given id
|
55
|
+
# @return [Boolean] successfully created or updated?
|
54
56
|
def save
|
57
|
+
!!(save!) rescue false
|
58
|
+
end
|
59
|
+
|
60
|
+
# Create or update an order with given id
|
61
|
+
# @return [Order] if successfully created or updated
|
62
|
+
# @raise [Httparty::Error] for all sorts of HTTP statuses.
|
63
|
+
def save!
|
55
64
|
result = Api.post("/orders/#{order_id}", { body: attributes.to_json })
|
56
|
-
puts result.inspect
|
57
65
|
Order.new(result.parsed_response["rg_order"])
|
58
66
|
end
|
59
67
|
|
68
|
+
# Delete this order at retention grid
|
69
|
+
# @return [Boolean] successfully deleted?
|
60
70
|
def destroy
|
61
|
-
|
71
|
+
Api.delete("/orders/#{order_id}")
|
72
|
+
true
|
62
73
|
end
|
63
74
|
|
75
|
+
# Return all attributes as a hash
|
76
|
+
# @return [Hash]
|
64
77
|
def attributes
|
65
78
|
ATTRIBUTES_NAMES.inject({}) do |attribs, attrib_name|
|
66
79
|
value = self.send(attrib_name)
|
@@ -68,6 +81,5 @@ module Retentiongrid
|
|
68
81
|
attribs
|
69
82
|
end
|
70
83
|
end
|
71
|
-
|
72
84
|
end
|
73
85
|
end
|
data/lib/retentiongrid.rb
CHANGED
data/retentiongrid.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Christoph Bünte"]
|
10
10
|
spec.email = ["info@christophbuente.de"]
|
11
11
|
spec.summary = "A ruby client for retentiongrid.com API."
|
12
|
-
spec.homepage = "
|
12
|
+
spec.homepage = "http://retentiongrid.com/"
|
13
13
|
spec.license = "MIT"
|
14
14
|
|
15
15
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -30,4 +30,6 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_development_dependency 'webmock'
|
31
31
|
spec.add_development_dependency 'factory_girl'
|
32
32
|
|
33
|
+
spec.add_development_dependency 'coveralls'
|
34
|
+
|
33
35
|
end
|
@@ -48,6 +48,18 @@ RSpec.describe Customer do
|
|
48
48
|
end
|
49
49
|
|
50
50
|
context '#delete' do
|
51
|
+
|
52
|
+
subject do
|
53
|
+
FactoryGirl.build(:customer)
|
54
|
+
end
|
55
|
+
|
56
|
+
before :each do
|
57
|
+
stub_request(:delete, "http://retentiongrid.apiary-mock.com/customers/#{subject.customer_id}").to_return(:status => 204, :body => '')
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should send delete to API" do
|
61
|
+
expect(subject.destroy).to eql true
|
62
|
+
end
|
51
63
|
end
|
52
64
|
|
53
65
|
end
|
@@ -79,6 +79,23 @@ RSpec.describe Order do
|
|
79
79
|
end
|
80
80
|
|
81
81
|
context '#delete' do
|
82
|
+
|
83
|
+
let :customer do
|
84
|
+
FactoryGirl.build(:customer)
|
85
|
+
end
|
86
|
+
|
87
|
+
subject do
|
88
|
+
FactoryGirl.build(:order, customer: customer)
|
89
|
+
end
|
90
|
+
|
91
|
+
before :each do
|
92
|
+
stub_request(:delete, "http://retentiongrid.apiary-mock.com/orders/#{subject.order_id}").to_return(:status => 204, :body => '')
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should send delete to API" do
|
96
|
+
expect(subject.destroy).to eql true
|
97
|
+
end
|
98
|
+
|
82
99
|
end
|
83
100
|
|
84
101
|
end
|
data/spec/models/order_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: retentiongrid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christoph Bünte
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: coveralls
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
139
153
|
description:
|
140
154
|
email:
|
141
155
|
- info@christophbuente.de
|
@@ -145,6 +159,7 @@ extra_rdoc_files: []
|
|
145
159
|
files:
|
146
160
|
- ".gitignore"
|
147
161
|
- ".rspec"
|
162
|
+
- ".travis.yml"
|
148
163
|
- Gemfile
|
149
164
|
- LICENSE
|
150
165
|
- LICENSE.txt
|
@@ -154,7 +169,9 @@ files:
|
|
154
169
|
- lib/retentiongrid/api.rb
|
155
170
|
- lib/retentiongrid/customer.rb
|
156
171
|
- lib/retentiongrid/errors.rb
|
172
|
+
- lib/retentiongrid/line_item.rb
|
157
173
|
- lib/retentiongrid/order.rb
|
174
|
+
- lib/retentiongrid/product.rb
|
158
175
|
- lib/retentiongrid/version.rb
|
159
176
|
- log/.gitkeep
|
160
177
|
- retentiongrid.gemspec
|
@@ -165,7 +182,7 @@ files:
|
|
165
182
|
- spec/models/customer_spec.rb
|
166
183
|
- spec/models/order_spec.rb
|
167
184
|
- spec/spec_helper.rb
|
168
|
-
homepage:
|
185
|
+
homepage: http://retentiongrid.com/
|
169
186
|
licenses:
|
170
187
|
- MIT
|
171
188
|
metadata: {}
|