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 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: {}