tremendous_ruby 3.0.0 → 4.0.0

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: 31e527a3f588de890644004422ee1d7553b08cbc
4
- data.tar.gz: e8e658a02236b762394241e202740a8634d6ce1b
3
+ metadata.gz: 2f570bd5d472fe847469c7c4857f2cddb4a34370
4
+ data.tar.gz: 8c972e74d632cc003707974c9481320ef4d8165e
5
5
  SHA512:
6
- metadata.gz: 832431e228c4c21d4159a2a323668c585748605a44c9a2d0c81e5326cb3931f024785b791d638a895332fc30d8460f56701867c250af50defbc3fb4f7c4acc57
7
- data.tar.gz: b193b99c2404c789845fa8670d486559557aaf4ec9c738c84523b37aed7841395ea5cdc184e2a4cbc05d79f811f6c528e56c27f6d8882725d16589ce613df58a
6
+ metadata.gz: d37d310f9d06e70495d2992e914701ec9d37600f3e3307a2fa8b8346736b1a761697ea395c5159fb38fd5317a087f5f074f11b6352e84df0b5029c1f683ebe41
7
+ data.tar.gz: 4a6eec24713dd60b17067efc21862adb05937ba4b984bfc8e022c3a76e18f94744a1cb484c91672faf0329331f763416a459c715d5ff2527fa2d36bc66266a41
data/lib/tremendous.rb CHANGED
@@ -1,16 +1,18 @@
1
1
  require 'httparty'
2
2
  require 'active_support/core_ext/hash/indifferent_access'
3
3
  require 'tremendous/base'
4
+ require 'tremendous/version'
5
+ require 'tremendous/error'
4
6
  require 'tremendous/request'
5
7
  require 'tremendous/campaign'
6
8
  require 'tremendous/funding_source'
7
- require 'tremendous/reward'
8
9
  require 'tremendous/invoice'
10
+ require 'tremendous/member'
9
11
  require 'tremendous/order'
10
12
  require 'tremendous/organization'
11
- require 'tremendous/member'
12
13
  require 'tremendous/product'
13
- require 'tremendous/embed'
14
- require 'tremendous/error'
14
+ require 'tremendous/reward'
15
15
  require 'tremendous/webhook'
16
- require 'tremendous/version'
16
+
17
+ require 'tremendous/rest'
18
+ require 'tremendous/embed'
@@ -1,20 +1,2 @@
1
1
  module Tremendous
2
- @@config = {
3
- base_api_uri: 'https://www.tremendous.com/api/v1/'
4
- }
5
-
6
- def self.config
7
- @@config
8
- end
9
-
10
- def self.configure
11
- yield @@config
12
- end
13
-
14
- # Access token
15
- def self.default_options
16
- {
17
- access_token: @@config[:access_token]
18
- }
19
- end
20
2
  end
@@ -1,11 +1,28 @@
1
- module Tremendous
2
- class Campaign
3
- def self.list(filters={})
4
- Tremendous::Request.get(
1
+ module Campaign
2
+
3
+ def self.included(base)
4
+ base.send :include, InstanceMethods
5
+ end
6
+
7
+ module InstanceMethods
8
+ def campaigns
9
+ CampaignResource.new(access_token, uri)
10
+ end
11
+ end
12
+
13
+ class CampaignResource
14
+ include Request
15
+
16
+ def list(filters={})
17
+ get(
5
18
  'campaigns',
6
19
  query: filters,
7
20
  format: 'json'
8
21
  )[:campaigns]
9
22
  end
23
+
24
+ def show(id)
25
+ get("campaigns/#{id}")[:campaign]
26
+ end
10
27
  end
11
28
  end
@@ -2,10 +2,10 @@ require 'jwt'
2
2
 
3
3
  module Tremendous
4
4
  class Embed
5
- def self.tokenize(payload)
5
+ def self.tokenize(access_token, payload)
6
6
  JWT.encode(
7
7
  payload,
8
- Tremendous.config[:access_token],
8
+ access_token,
9
9
  'HS256'
10
10
  )
11
11
  end
@@ -1,20 +1,29 @@
1
- module Tremendous
2
- class FundingSource
1
+ module FundingSource
2
+ include Request
3
3
 
4
- def self.list(filters={})
5
- Tremendous::Request.get(
4
+ def self.included(base)
5
+ base.send :include, InstanceMethods
6
+ end
7
+
8
+ module InstanceMethods
9
+ def funding_sources
10
+ FundingSourceResource.new(access_token, uri)
11
+ end
12
+ end
13
+
14
+ class FundingSourceResource
15
+ include Request
16
+
17
+ def list(filters={})
18
+ get(
6
19
  'funding_sources',
7
- query: filters.merge(Tremendous.default_options),
20
+ query: filters,
8
21
  format: 'json'
9
22
  )[:funding_sources]
10
23
  end
11
24
 
12
- def self.show(id)
13
- Tremendous::Request.get(
14
- "funding_sources/#{id}",
15
- query: filters.merge(Tremendous.default_options),
16
- format: 'json'
17
- )[:funding_source]
25
+ def show(id)
26
+ get("funding_sources/#{id}")[:funding_source]
18
27
  end
19
28
  end
20
29
  end
@@ -1,8 +1,20 @@
1
- module Tremendous
2
- class Invoice
1
+ module Invoice
3
2
 
4
- def self.create!(data={})
5
- Tremendous::Request.post(
3
+ def self.included(base)
4
+ base.send :include, InstanceMethods
5
+ end
6
+
7
+ module InstanceMethods
8
+ def invoices
9
+ InvoiceResource.new(access_token, uri)
10
+ end
11
+ end
12
+
13
+ class InvoiceResource
14
+ include Request
15
+
16
+ def create!(data={})
17
+ post(
6
18
  'invoices',
7
19
  {
8
20
  body: data.to_json,
@@ -11,26 +23,21 @@ module Tremendous
11
23
  )[:invoice]
12
24
  end
13
25
 
14
- def self.list(filters={})
15
- Tremendous::Request.get(
26
+ def list(filters={})
27
+ get(
16
28
  'invoices',
17
- query: filters,
18
- format: 'json'
29
+ query: filters,
30
+ format: 'json'
19
31
  )[:invoices]
20
32
  end
21
33
 
22
- def self.show(id)
23
- Tremendous::Request.get(
24
- "invoices/#{id}",
25
- format: 'json'
26
- )[:invoice]
34
+ def show(id)
35
+ get("invoices/#{id}")[:invoice]
27
36
  end
28
37
 
29
- def self.delete(id)
30
- Tremendous::Request.delete(
31
- "invoices/#{id}",
32
- format: 'json'
33
- )[:invoice]
38
+ def delete!(id)
39
+ delete("invoices/#{id}")[:invoice]
34
40
  end
41
+
35
42
  end
36
43
  end
@@ -1,24 +1,36 @@
1
- module Tremendous
2
- class Member
1
+ module Member
3
2
 
4
- def self.create!(data)
5
- Tremendous::Request.post(
3
+ def self.included(base)
4
+ base.send :include, InstanceMethods
5
+ end
6
+
7
+ module InstanceMethods
8
+ def members
9
+ MemberResource.new(access_token, uri)
10
+ end
11
+ end
12
+
13
+ class MemberResource
14
+ include Request
15
+
16
+ def create!(data)
17
+ post(
6
18
  "members",
7
19
  body: data.to_json,
8
20
  headers: { 'Content-Type' => 'application/json' }
9
21
  )[:member]
10
22
  end
11
23
 
12
- def self.list(filters={})
13
- Tremendous::Request.get(
24
+ def list(filters={})
25
+ get(
14
26
  "members",
15
27
  query: filters,
16
28
  format: 'json'
17
29
  )[:members]
18
30
  end
19
31
 
20
- def self.show(id)
21
- Tremendous::Request.get("members/#{id}")[:member]
32
+ def show(id)
33
+ get("members/#{id}")[:member]
22
34
  end
23
35
  end
24
36
  end
@@ -1,24 +1,36 @@
1
- module Tremendous
2
- class Order
1
+ module Order
3
2
 
4
- def self.create!(data={})
5
- Tremendous::Request.post(
3
+ def self.included(base)
4
+ base.send :include, InstanceMethods
5
+ end
6
+
7
+ module InstanceMethods
8
+ def orders
9
+ OrderResource.new(access_token, uri)
10
+ end
11
+ end
12
+
13
+ class OrderResource
14
+ include Request
15
+
16
+ def create!(data={})
17
+ post(
6
18
  'orders',
7
19
  body: data.to_json,
8
20
  headers: { 'Content-Type' => 'application/json' }
9
21
  )[:order]
10
22
  end
11
23
 
12
- def self.list(filters={})
13
- Tremendous::Request.get(
24
+ def list(filters={})
25
+ get(
14
26
  'orders',
15
27
  query: filters,
16
28
  format: 'json'
17
29
  )[:orders]
18
30
  end
19
31
 
20
- def self.retrieve(id)
21
- Tremendous::Request.get("orders/#{id}")[:order]
32
+ def self.show(id)
33
+ get("orders/#{id}")[:order]
22
34
  end
23
35
  end
24
36
  end
@@ -1,22 +1,32 @@
1
- module Tremendous
2
- class Organization
3
- def self.create!(data)
4
- Tremendous::Request.post(
1
+ module Organization
2
+
3
+ def self.included(base)
4
+ base.send :include, InstanceMethods
5
+ end
6
+
7
+ module InstanceMethods
8
+ def organizations
9
+ OrganizationResource.new(access_token, uri)
10
+ end
11
+ end
12
+
13
+ class OrganizationResource
14
+ include Request
15
+
16
+ def create!(data)
17
+ post(
5
18
  'organizations',
6
19
  body: data.to_json,
7
20
  headers: { 'Content-Type' => 'application/json' }
8
21
  )[:organization]
9
22
  end
10
23
 
11
- def self.list(filters={})
12
- Tremendous::Request.get(
13
- 'organizations',
14
- query: filters
15
- )[:organizations]
24
+ def list(filters={})
25
+ get('organizations', query: filters)[:organizations]
16
26
  end
17
27
 
18
- def self.create_access_token!(id, data={})
19
- Tremendous::Request.post(
28
+ def create_access_token!(id, data={})
29
+ post(
20
30
  "organizations/#{id}/access_token",
21
31
  body: data.to_json,
22
32
  headers: { 'Content-Type' => 'application/json' }
@@ -1,15 +1,27 @@
1
- module Tremendous
2
- class Product
3
- def self.list(filters={})
4
- Tremendous::Request.get(
1
+ module Product
2
+ def self.included(base)
3
+ base.send :include, InstanceMethods
4
+ end
5
+
6
+ module InstanceMethods
7
+ def products
8
+ ProductResource.new(access_token, uri)
9
+ end
10
+ end
11
+
12
+ class ProductResource
13
+ include Request
14
+
15
+ def list(filters={})
16
+ get(
5
17
  'products',
6
18
  query: filters,
7
19
  format: 'json'
8
20
  )[:products]
9
21
  end
10
22
 
11
- def self.show(id)
12
- Tremendous::Request.get("products/#{id}")[:product]
23
+ def show(id)
24
+ get("products/#{id}")[:product]
13
25
  end
14
26
  end
15
27
  end
@@ -1,47 +1,59 @@
1
- module Tremendous
2
- class Request
3
- def self.get(path, data={}, *opts)
4
- handle_response(_execute(:get, url(path), data, *opts))
5
- end
1
+ module Request
6
2
 
7
- def self.post(path, data={}, *opts)
8
- handle_response(_execute(:post, url(path), data, *opts))
9
- end
3
+ def initialize(access_token, uri)
4
+ @access_token = access_token
5
+ @uri = uri
6
+ end
10
7
 
11
- def self.put(path, data={}, *opts)
12
- handle_response(_execute(:put, url(path), data, *opts))
13
- end
8
+ def access_token
9
+ @access_token
10
+ end
14
11
 
15
- def self.delete(path, data={}, *opts)
16
- handle_response(_execute(:delete, url(path), data, *opts))
17
- end
12
+ def uri
13
+ @uri
14
+ end
18
15
 
19
- def self._execute(method, url, data={}, *opts)
20
- data[:headers] = {
21
- 'authorization' => "Bearer #{Tremendous.default_options[:access_token]}"
22
- }.merge(data.class == Hash ? data[:headers] || {} : {})
16
+ def get(path, data={}, *opts)
17
+ handle_response(_execute(:get, url(path), data, *opts))
18
+ end
23
19
 
24
- HTTParty.send(method, url, data, *opts)
25
- end
20
+ def post(path, data={}, *opts)
21
+ handle_response(_execute(:post, url(path), data, *opts))
22
+ end
26
23
 
27
- def self.url(path, params={})
28
- url = URI.join(Tremendous.config[:base_api_uri], path)
29
- end
24
+ def put(path, data={}, *opts)
25
+ handle_response(_execute(:put, url(path), data, *opts))
26
+ end
27
+
28
+ def delete(path, data={}, *opts)
29
+ handle_response(_execute(:delete, url(path), data, *opts))
30
+ end
31
+
32
+ def _execute(method, url, data={}, *opts)
33
+ data[:headers] = {
34
+ 'authorization' => "Bearer #{@access_token}"
35
+ }.merge(data.class == Hash ? data[:headers] || {} : {})
36
+
37
+ HTTParty.send(method, url, data, *opts)
38
+ end
39
+
40
+ def url(path, params={})
41
+ URI.join(uri, path)
42
+ end
30
43
 
31
- def self.handle_response(response)
32
- if response.success?
33
- response_json = JSON.parse(response.body).with_indifferent_access
44
+ def handle_response(response)
45
+ if response.success?
46
+ response_json = JSON.parse(response.body).with_indifferent_access
47
+ else
48
+ case response.code
49
+ when 400
50
+ raise Tremendous::BadDataError.new(response)
51
+ when 401
52
+ raise Tremendous::AccessError.new(response)
53
+ when 402
54
+ raise Tremendous::PaymentError.new(response)
34
55
  else
35
- case response.code
36
- when 400
37
- raise Tremendous::BadDataError.new(response)
38
- when 401
39
- raise Tremendous::AccessError.new(response)
40
- when 402
41
- raise Tremendous::PaymentError.new(response)
42
- else
43
- raise Tremendous::Error.new(response)
44
- end
56
+ raise Tremendous::Error.new(response)
45
57
  end
46
58
  end
47
59
  end
@@ -0,0 +1,22 @@
1
+ module Tremendous
2
+
3
+ class Rest
4
+
5
+ include Campaign
6
+ include FundingSource
7
+ include Invoice
8
+ include Member
9
+ include Order
10
+ include Organization
11
+ include Product
12
+ include Reward
13
+ include Webhook
14
+
15
+ attr_accessor :access_token, :uri
16
+
17
+ def initialize(access_token, uri)
18
+ @access_token = access_token
19
+ @uri = uri
20
+ end
21
+ end
22
+ end
@@ -1,15 +1,28 @@
1
- module Tremendous
2
- class Reward
3
- def self.list(filters={})
4
- Tremendous::Request.get(
1
+ module Reward
2
+
3
+ def self.included(base)
4
+ base.send :include, InstanceMethods
5
+ end
6
+
7
+ module InstanceMethods
8
+ def rewards
9
+ RewardResource.new(access_token, uri)
10
+ end
11
+ end
12
+
13
+ class RewardResource
14
+ include Request
15
+
16
+ def list(filters={})
17
+ get(
5
18
  'rewards',
6
19
  query: filters,
7
20
  format: 'json'
8
21
  )[:rewards]
9
22
  end
10
23
 
11
- def self.show(id)
12
- response = Tremendous::Request.get("rewards/#{id}")[:reward]
24
+ def show(id)
25
+ get("rewards/#{id}")[:reward]
13
26
  end
14
27
  end
15
28
  end
@@ -1,3 +1,3 @@
1
1
  module Tremendous
2
- VERSION = '3.0.0'
2
+ VERSION = '4.0.0'
3
3
  end
@@ -1,23 +1,44 @@
1
- module Tremendous
2
- class Webhook
3
- def self.create!(url, data={})
4
- Tremendous::Request.post(
1
+ module Webhook
2
+
3
+ def self.included(base)
4
+ base.send :include, InstanceMethods
5
+ end
6
+
7
+ module InstanceMethods
8
+ def webhooks
9
+ WebhookResource.new(access_token, uri)
10
+ end
11
+ end
12
+
13
+ class WebhookResource
14
+ include Request
15
+
16
+ def create!(url, data={})
17
+ post(
5
18
  'webhooks',
6
19
  body: {url: url}.merge(data).to_json,
7
20
  headers: { 'Content-Type' => 'application/json' }
8
21
  )[:webhook]
9
22
  end
10
23
 
11
- def self.events(id)
12
- Tremendous::Request.get("webhooks/#{id}/events")[:events]
24
+ def list
25
+ get("webhooks")[:webhooks]
26
+ end
27
+
28
+ def show(id)
29
+ get("webhooks/#{id}")[:webhook]
30
+ end
31
+
32
+ def delete!(id)
33
+ delete("webhooks/#{id}")[:webhook]
13
34
  end
14
35
 
15
- def self.retrieve(id)
16
- response = Tremendous::Request.get("webhooks/#{id}")[:webhook]
36
+ def events(id)
37
+ get("webhooks/#{id}/events")[:events]
17
38
  end
18
39
 
19
- def self.simulate!(id, event, data={})
20
- Tremendous::Request.post(
40
+ def simulate!(id, event, data={})
41
+ post(
21
42
  "webhooks/#{id}/simulate",
22
43
  body: {event: event}.merge(data).to_json,
23
44
  headers: { 'Content-Type' => 'application/json' }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tremendous_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tremendous Developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-24 00:00:00.000000000 Z
11
+ date: 2019-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -147,6 +147,7 @@ files:
147
147
  - lib/tremendous/organization.rb
148
148
  - lib/tremendous/product.rb
149
149
  - lib/tremendous/request.rb
150
+ - lib/tremendous/rest.rb
150
151
  - lib/tremendous/reward.rb
151
152
  - lib/tremendous/version.rb
152
153
  - lib/tremendous/webhook.rb