retentiongrid 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dc982fceff738bbdc926a70180a7fcac16e2837e
4
- data.tar.gz: c46f09b43f55724b4aa9fa3313d8e3ef66728b5d
3
+ metadata.gz: 6f20d8859d9e7bc3b343422102b0de9739236711
4
+ data.tar.gz: 618928f847d92e0d95c636617b54c601e1906d71
5
5
  SHA512:
6
- metadata.gz: dadd35f11ccd9fdd5a1f0fe5187bdff5adaa063b970f65594dc97e71af462e8c55aeef26d97d13eb160607847399445d4dcef538fa63b4e0bb87b1e3499ea065
7
- data.tar.gz: 9c089755a448ee50a36249a4a7bd864b0663c20f02053bfe9ae60f2dc9af1adb82f2ba46f0e6eab6599df8c0f721b53f0c23eb58b6bc64bf6028216edde30bee
6
+ metadata.gz: c43e523cc8723253362faa2de50252d239e638e8ba6a008096350fe7209a3c93910b41b3c210a02f3a2de6413b79eb821ee17c185290a3b5061594652b1fa377
7
+ data.tar.gz: f6021a616226c2321555b282dcc1dedc9eff3b5179272cd7898a7b940b3910dfd87a197e1294aa5f6c358a72d8b77527f6e7e499fbb99129f8dec1cd2bb3dd20
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - 2.1.0
7
+
8
+ notifications:
9
+ email:
10
+ - info@christophbuente.de
data/README.md CHANGED
@@ -1,7 +1,15 @@
1
1
  # Retention::Grid
2
2
 
3
+ [![Gem Version](https://fury-badge.herokuapp.com/rb/retentiongrid.png)](http://badge.fury.io/rb/retentiongrid)
4
+ [![Build Status](https://travis-ci.org/christoph-buente/retentiongrid.png?branch=master)](https://travis-ci.org/christoph-buente/retentiongrid)
5
+ [![Coverage Status](https://coveralls.io/repos/christoph-buente/retentiongrid/badge.png)](https://coveralls.io/r/christoph-buente/retentiongrid)
6
+ [![Code Climate](https://codeclimate.com/github/christoph-buente/retentiongrid.png)](https://codeclimate.com/github/christoph-buente/retentiongrid)
7
+ [![License](http://img.shields.io/license/MIT.png?color=green) ](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:
@@ -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
- result = Api.post("/customers/#{customer_id}", body: attributes.to_json)
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
- !!save
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
- res = Api.delete("/customers/#{customer_id}")
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
@@ -0,0 +1,8 @@
1
+ module Retentiongrid
2
+ class LineItem
3
+
4
+ def initialize
5
+ raise NotImplemented.new
6
+ end
7
+ end
8
+ end
@@ -2,14 +2,15 @@ module Retentiongrid
2
2
  # Retentiongrid Order
3
3
  #
4
4
  # To create a new Retentiongrid::Order object:
5
- # order = Retention::Order.new(:id => "123", :lat => "52.2", :lon => "13.4", :changeset => "12", :user => "fred", :uid => "123", :visible => true, :timestamp => "2005-07-30T14:27:12+01:00")
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 = Retention::Order.find(17)
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
- res = Api.delete("/orders/#{order_id}")
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
@@ -0,0 +1,8 @@
1
+ module Retentiongrid
2
+ class Product
3
+
4
+ def initialize
5
+ raise NotImplemented.new
6
+ end
7
+ end
8
+ end
@@ -1,3 +1,3 @@
1
1
  module Retentiongrid
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/lib/retentiongrid.rb CHANGED
@@ -3,7 +3,9 @@ require 'retentiongrid/version'
3
3
  require 'retentiongrid/api'
4
4
  require 'retentiongrid/customer'
5
5
  require 'retentiongrid/errors'
6
+ require 'retentiongrid/line_item'
6
7
  require 'retentiongrid/order'
8
+ require 'retentiongrid/product'
7
9
 
8
10
  module Retentiongrid
9
11
  end
@@ -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 = "https://github.com/christoph-buente/retentiongrid"
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
@@ -13,7 +13,7 @@ RSpec.describe Customer do
13
13
  end
14
14
 
15
15
  it "makes sure the order id is populated" do
16
- expect(subject.customer_id).to eql 1
16
+ expect(subject.customer_id).to_not eql nil
17
17
  end
18
18
 
19
19
  end
@@ -20,7 +20,7 @@ RSpec.describe Order do
20
20
  end
21
21
 
22
22
  it "makes sure the order id is populated" do
23
- expect(subject.order_id).to eql 1
23
+ expect(subject.order_id).not_to eql nil
24
24
  end
25
25
 
26
26
  end
data/spec/spec_helper.rb CHANGED
@@ -4,6 +4,8 @@ require 'retentiongrid'
4
4
  require 'shoulda/matchers'
5
5
 
6
6
  require 'rspec'
7
+ require 'coveralls'
8
+ Coveralls.wear!
7
9
 
8
10
  RSpec.configure do |config|
9
11
 
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
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-18 00:00:00.000000000 Z
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: https://github.com/christoph-buente/retentiongrid
185
+ homepage: http://retentiongrid.com/
169
186
  licenses:
170
187
  - MIT
171
188
  metadata: {}