tremendous_ruby_alex 4.3.2
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 +7 -0
- data/lib/tremendous/base.rb +2 -0
- data/lib/tremendous/campaign.rb +29 -0
- data/lib/tremendous/embed.rb +13 -0
- data/lib/tremendous/error.rb +26 -0
- data/lib/tremendous/funding_source.rb +29 -0
- data/lib/tremendous/invoice.rb +44 -0
- data/lib/tremendous/member.rb +37 -0
- data/lib/tremendous/order.rb +37 -0
- data/lib/tremendous/organization.rb +38 -0
- data/lib/tremendous/product.rb +28 -0
- data/lib/tremendous/request.rb +57 -0
- data/lib/tremendous/rest.rb +20 -0
- data/lib/tremendous/reward.rb +33 -0
- data/lib/tremendous/version.rb +3 -0
- data/lib/tremendous/webhook.rb +50 -0
- data/lib/tremendous.rb +18 -0
- metadata +145 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 94bbdbb4cdede277b4b24cbe12c7e8aa042b36fc774b153c077880c6a4852cb6
|
4
|
+
data.tar.gz: 35a86ba0eae8269d9770a75244815eb28974da30d18e52ab8d4000d0f5718d5c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9334f7208c0796bf916c258feaaf9bf9f2edfa937c7cf27efde9d6b77b6c3a87c4bb8a4dc76ec39138be346d748407fd39cf479a02c4285a5bee0f89d2fe1c55
|
7
|
+
data.tar.gz: 1584b8ca8c44a21e25c73497409bd9a9a331cb096167ba11a04eee677a4455f7c944182bedd59b769561ec549abc457ab52abb4528c24e5437f67684c9601d16
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Tremendous
|
2
|
+
module Campaign
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.include InstanceMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module InstanceMethods
|
9
|
+
def campaigns
|
10
|
+
CampaignResource.new(access_token, uri)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class CampaignResource
|
15
|
+
include Request
|
16
|
+
|
17
|
+
def list(filters={})
|
18
|
+
get(
|
19
|
+
'campaigns',
|
20
|
+
query: filters,
|
21
|
+
)[:campaigns]
|
22
|
+
end
|
23
|
+
|
24
|
+
def show(id)
|
25
|
+
get("campaigns/#{id}")[:campaign]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Tremendous
|
2
|
+
class Error < StandardError
|
3
|
+
|
4
|
+
def initialize(response)
|
5
|
+
@response = response
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def server_response
|
10
|
+
@server_response ||= @response.parsed_response.with_indifferent_access
|
11
|
+
end
|
12
|
+
|
13
|
+
def message
|
14
|
+
"Code: #{@response.code}; Data: #{server_response[:errors]}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class BadDataError < Error
|
19
|
+
end
|
20
|
+
|
21
|
+
class PaymentError < Error
|
22
|
+
end
|
23
|
+
|
24
|
+
class AccessError < Error
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Tremendous
|
2
|
+
module FundingSource
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.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(
|
19
|
+
'funding_sources',
|
20
|
+
query: filters,
|
21
|
+
)[:funding_sources]
|
22
|
+
end
|
23
|
+
|
24
|
+
def show(id)
|
25
|
+
get("funding_sources/#{id}")[:funding_source]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Tremendous
|
2
|
+
module Invoice
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.include InstanceMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module InstanceMethods
|
9
|
+
def invoices
|
10
|
+
InvoiceResource.new(access_token, uri)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class InvoiceResource
|
15
|
+
include Request
|
16
|
+
|
17
|
+
def create!(data={})
|
18
|
+
post(
|
19
|
+
'invoices',
|
20
|
+
{
|
21
|
+
body: data.to_json,
|
22
|
+
headers: { 'Content-Type' => 'application/json' }
|
23
|
+
}
|
24
|
+
)[:invoice]
|
25
|
+
end
|
26
|
+
|
27
|
+
def list(filters={})
|
28
|
+
get(
|
29
|
+
'invoices',
|
30
|
+
query: filters,
|
31
|
+
)[:invoices]
|
32
|
+
end
|
33
|
+
|
34
|
+
def show(id)
|
35
|
+
get("invoices/#{id}")[:invoice]
|
36
|
+
end
|
37
|
+
|
38
|
+
def delete!(id)
|
39
|
+
delete("invoices/#{id}")[:invoice]
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Tremendous
|
2
|
+
module Member
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.include InstanceMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module InstanceMethods
|
9
|
+
def members
|
10
|
+
MemberResource.new(access_token, uri)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class MemberResource
|
15
|
+
include Request
|
16
|
+
|
17
|
+
def create!(data)
|
18
|
+
post(
|
19
|
+
"members",
|
20
|
+
body: data.to_json,
|
21
|
+
headers: { 'Content-Type' => 'application/json' }
|
22
|
+
)[:member]
|
23
|
+
end
|
24
|
+
|
25
|
+
def list(filters={})
|
26
|
+
get(
|
27
|
+
"members",
|
28
|
+
query: filters,
|
29
|
+
)[:members]
|
30
|
+
end
|
31
|
+
|
32
|
+
def show(id)
|
33
|
+
get("members/#{id}")[:member]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Tremendous
|
2
|
+
module Order
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.include InstanceMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module InstanceMethods
|
9
|
+
def orders
|
10
|
+
OrderResource.new(access_token, uri)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class OrderResource
|
15
|
+
include Request
|
16
|
+
|
17
|
+
def create!(data={})
|
18
|
+
post(
|
19
|
+
'orders',
|
20
|
+
body: data.to_json,
|
21
|
+
headers: { 'Content-Type' => 'application/json' }
|
22
|
+
)[:order]
|
23
|
+
end
|
24
|
+
|
25
|
+
def list(filters={})
|
26
|
+
get(
|
27
|
+
'orders',
|
28
|
+
query: filters,
|
29
|
+
)[:orders]
|
30
|
+
end
|
31
|
+
|
32
|
+
def show(id)
|
33
|
+
get("orders/#{id}")[:order]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Tremendous
|
2
|
+
module Organization
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.include InstanceMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module InstanceMethods
|
9
|
+
def organizations
|
10
|
+
OrganizationResource.new(access_token, uri)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class OrganizationResource
|
15
|
+
include Request
|
16
|
+
|
17
|
+
def create!(data)
|
18
|
+
post(
|
19
|
+
'organizations',
|
20
|
+
body: data.to_json,
|
21
|
+
headers: { 'Content-Type' => 'application/json' }
|
22
|
+
)[:organization]
|
23
|
+
end
|
24
|
+
|
25
|
+
def list(filters={})
|
26
|
+
get('organizations', query: filters)[:organizations]
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_access_token!(id, data={})
|
30
|
+
post(
|
31
|
+
"organizations/#{id}/access_token",
|
32
|
+
body: data.to_json,
|
33
|
+
headers: { 'Content-Type' => 'application/json' }
|
34
|
+
)[:access_token]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Tremendous
|
2
|
+
module Product
|
3
|
+
def self.included(base)
|
4
|
+
base.include InstanceMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module InstanceMethods
|
8
|
+
def products
|
9
|
+
ProductResource.new(access_token, uri)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class ProductResource
|
14
|
+
include Request
|
15
|
+
|
16
|
+
def list(filters={})
|
17
|
+
get(
|
18
|
+
'products',
|
19
|
+
query: filters,
|
20
|
+
)[:products]
|
21
|
+
end
|
22
|
+
|
23
|
+
def show(id)
|
24
|
+
get("products/#{id}")[:product]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Tremendous
|
2
|
+
module Request
|
3
|
+
|
4
|
+
def initialize(access_token, uri)
|
5
|
+
@access_token = access_token
|
6
|
+
@uri = uri
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_reader :access_token, :uri
|
10
|
+
|
11
|
+
def get(path, data={}, *opts)
|
12
|
+
handle_response(_execute(:get, url(path), data, *opts))
|
13
|
+
end
|
14
|
+
|
15
|
+
def post(path, data={}, *opts)
|
16
|
+
handle_response(_execute(:post, url(path), data, *opts))
|
17
|
+
end
|
18
|
+
|
19
|
+
def put(path, data={}, *opts)
|
20
|
+
handle_response(_execute(:put, url(path), data, *opts))
|
21
|
+
end
|
22
|
+
|
23
|
+
def delete(path, data={}, *opts)
|
24
|
+
handle_response(_execute(:delete, url(path), data, *opts))
|
25
|
+
end
|
26
|
+
|
27
|
+
def _execute(method, url, data={}, *opts)
|
28
|
+
data[:format] = :json
|
29
|
+
data[:headers] = {
|
30
|
+
'authorization' => "Bearer #{@access_token}"
|
31
|
+
}.merge(data.class == Hash ? data[:headers] || {} : {})
|
32
|
+
|
33
|
+
HTTParty.send(method, url, data, *opts)
|
34
|
+
end
|
35
|
+
|
36
|
+
def url(path, params={})
|
37
|
+
URI.join(uri, path)
|
38
|
+
end
|
39
|
+
|
40
|
+
def handle_response(response)
|
41
|
+
if response.success?
|
42
|
+
response_json = JSON.parse(response.body).with_indifferent_access
|
43
|
+
else
|
44
|
+
case response.code
|
45
|
+
when 400
|
46
|
+
raise Tremendous::BadDataError.new(response)
|
47
|
+
when 401
|
48
|
+
raise Tremendous::AccessError.new(response)
|
49
|
+
when 402
|
50
|
+
raise Tremendous::PaymentError.new(response)
|
51
|
+
else
|
52
|
+
raise Tremendous::Error.new(response)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Tremendous
|
2
|
+
class Rest
|
3
|
+
include Tremendous::Campaign
|
4
|
+
include Tremendous::FundingSource
|
5
|
+
include Tremendous::Invoice
|
6
|
+
include Tremendous::Member
|
7
|
+
include Tremendous::Order
|
8
|
+
include Tremendous::Organization
|
9
|
+
include Tremendous::Product
|
10
|
+
include Tremendous::Reward
|
11
|
+
include Tremendous::Webhook
|
12
|
+
|
13
|
+
attr_accessor :access_token, :uri
|
14
|
+
|
15
|
+
def initialize(access_token, uri)
|
16
|
+
@access_token = access_token
|
17
|
+
@uri = uri
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Tremendous
|
2
|
+
module Reward
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.include InstanceMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module InstanceMethods
|
9
|
+
def rewards
|
10
|
+
RewardResource.new(access_token, uri)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class RewardResource
|
15
|
+
include Request
|
16
|
+
|
17
|
+
def list(filters={})
|
18
|
+
get(
|
19
|
+
'rewards',
|
20
|
+
query: filters,
|
21
|
+
)[:rewards]
|
22
|
+
end
|
23
|
+
|
24
|
+
def show(id)
|
25
|
+
get("rewards/#{id}")[:reward]
|
26
|
+
end
|
27
|
+
|
28
|
+
def resend(id)
|
29
|
+
post("rewards/#{id}/resend")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Tremendous
|
2
|
+
module Webhook
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.include InstanceMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module InstanceMethods
|
9
|
+
def webhooks
|
10
|
+
WebhookResource.new(access_token, uri)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class WebhookResource
|
15
|
+
include Request
|
16
|
+
|
17
|
+
def create!(url, data={})
|
18
|
+
post(
|
19
|
+
'webhooks',
|
20
|
+
body: {url: url}.merge(data).to_json,
|
21
|
+
headers: { 'Content-Type' => 'application/json' }
|
22
|
+
)[:webhook]
|
23
|
+
end
|
24
|
+
|
25
|
+
def list
|
26
|
+
get("webhooks")[:webhooks]
|
27
|
+
end
|
28
|
+
|
29
|
+
def show(id)
|
30
|
+
get("webhooks/#{id}")[:webhook]
|
31
|
+
end
|
32
|
+
|
33
|
+
def delete!(id)
|
34
|
+
delete("webhooks/#{id}")[:webhook]
|
35
|
+
end
|
36
|
+
|
37
|
+
def events(id)
|
38
|
+
get("webhooks/#{id}/events")[:events]
|
39
|
+
end
|
40
|
+
|
41
|
+
def simulate!(id, event, data={})
|
42
|
+
post(
|
43
|
+
"webhooks/#{id}/simulate",
|
44
|
+
body: {event: event}.merge(data).to_json,
|
45
|
+
headers: { 'Content-Type' => 'application/json' }
|
46
|
+
)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/tremendous.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
3
|
+
require 'tremendous/base'
|
4
|
+
require 'tremendous/version'
|
5
|
+
require 'tremendous/error'
|
6
|
+
require 'tremendous/request'
|
7
|
+
require 'tremendous/campaign'
|
8
|
+
require 'tremendous/funding_source'
|
9
|
+
require 'tremendous/invoice'
|
10
|
+
require 'tremendous/member'
|
11
|
+
require 'tremendous/order'
|
12
|
+
require 'tremendous/organization'
|
13
|
+
require 'tremendous/product'
|
14
|
+
require 'tremendous/reward'
|
15
|
+
require 'tremendous/webhook'
|
16
|
+
|
17
|
+
require 'tremendous/rest'
|
18
|
+
require 'tremendous/embed'
|
metadata
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tremendous_ruby_alex
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 4.3.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tremendous Developers
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-02-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: httparty
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.18.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.18.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: jwt
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.5.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.5.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 12.3.3
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 12.3.3
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 3.5.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.5.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: webmock
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3'
|
97
|
+
description: This is a fork of https://github.com/tremendous-rewards/tremendous-ruby
|
98
|
+
to add the resend reward API
|
99
|
+
email:
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- lib/tremendous.rb
|
105
|
+
- lib/tremendous/base.rb
|
106
|
+
- lib/tremendous/campaign.rb
|
107
|
+
- lib/tremendous/embed.rb
|
108
|
+
- lib/tremendous/error.rb
|
109
|
+
- lib/tremendous/funding_source.rb
|
110
|
+
- lib/tremendous/invoice.rb
|
111
|
+
- lib/tremendous/member.rb
|
112
|
+
- lib/tremendous/order.rb
|
113
|
+
- lib/tremendous/organization.rb
|
114
|
+
- lib/tremendous/product.rb
|
115
|
+
- lib/tremendous/request.rb
|
116
|
+
- lib/tremendous/rest.rb
|
117
|
+
- lib/tremendous/reward.rb
|
118
|
+
- lib/tremendous/version.rb
|
119
|
+
- lib/tremendous/webhook.rb
|
120
|
+
homepage: https://github.com/tremendous-rewards/tremendous-ruby
|
121
|
+
licenses:
|
122
|
+
- MIT
|
123
|
+
metadata:
|
124
|
+
documentation_uri: https://www.tremendous.com/docs
|
125
|
+
source_code_uri: https://github.com/tremendous-rewards/tremendous-ruby
|
126
|
+
post_install_message:
|
127
|
+
rdoc_options: []
|
128
|
+
require_paths:
|
129
|
+
- lib
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
requirements: []
|
141
|
+
rubygems_version: 3.1.4
|
142
|
+
signing_key:
|
143
|
+
specification_version: 4
|
144
|
+
summary: Tremendous Ruby API SDK
|
145
|
+
test_files: []
|