drip-ruby 3.2.0 → 3.4.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 +5 -5
- data/.github/pull_request_template.md +39 -0
- data/.rubocop.yml +5 -1
- data/.rubocop_todo.yml +17 -9
- data/.travis.yml +2 -4
- data/CHANGELOG.md +51 -1
- data/Gemfile +12 -0
- data/README.md +6 -0
- data/Rakefile +2 -0
- data/drip-ruby.gemspec +4 -11
- data/lib/drip.rb +2 -0
- data/lib/drip/client.rb +48 -66
- data/lib/drip/client/accounts.rb +4 -2
- data/lib/drip/client/broadcasts.rb +4 -2
- data/lib/drip/client/campaign_subscriptions.rb +3 -1
- data/lib/drip/client/campaigns.rb +7 -5
- data/lib/drip/client/configuration.rb +30 -0
- data/lib/drip/client/conversions.rb +4 -2
- data/lib/drip/client/custom_fields.rb +3 -1
- data/lib/drip/client/events.rb +6 -4
- data/lib/drip/client/forms.rb +4 -2
- data/lib/drip/client/http_client.rb +66 -0
- data/lib/drip/client/orders.rb +5 -3
- data/lib/drip/client/shopper_activity.rb +80 -0
- data/lib/drip/client/subscribers.rb +30 -16
- data/lib/drip/client/tags.rb +5 -3
- data/lib/drip/client/users.rb +17 -0
- data/lib/drip/client/webhooks.rb +7 -5
- data/lib/drip/client/workflow_triggers.rb +5 -3
- data/lib/drip/client/workflows.rb +8 -6
- data/lib/drip/collection.rb +2 -0
- data/lib/drip/collections.rb +2 -0
- data/lib/drip/collections/accounts.rb +2 -0
- data/lib/drip/collections/broadcasts.rb +2 -0
- data/lib/drip/collections/campaign_subscriptions.rb +2 -0
- data/lib/drip/collections/campaigns.rb +2 -0
- data/lib/drip/collections/errors.rb +2 -0
- data/lib/drip/collections/orders.rb +2 -0
- data/lib/drip/collections/purchases.rb +2 -0
- data/lib/drip/collections/subscribers.rb +2 -0
- data/lib/drip/collections/tags.rb +2 -0
- data/lib/drip/collections/webhooks.rb +2 -0
- data/lib/drip/collections/workflow_triggers.rb +2 -0
- data/lib/drip/collections/workflows.rb +2 -0
- data/lib/drip/errors.rb +2 -0
- data/lib/drip/request.rb +33 -0
- data/lib/drip/resource.rb +2 -0
- data/lib/drip/resources.rb +2 -0
- data/lib/drip/resources/account.rb +2 -0
- data/lib/drip/resources/broadcast.rb +2 -0
- data/lib/drip/resources/campaign.rb +2 -0
- data/lib/drip/resources/campaign_subscription.rb +2 -0
- data/lib/drip/resources/error.rb +2 -0
- data/lib/drip/resources/order.rb +2 -0
- data/lib/drip/resources/purchase.rb +2 -0
- data/lib/drip/resources/subscriber.rb +2 -0
- data/lib/drip/resources/tag.rb +2 -0
- data/lib/drip/resources/webhook.rb +2 -0
- data/lib/drip/resources/workflow.rb +2 -0
- data/lib/drip/resources/workflow_trigger.rb +2 -0
- data/lib/drip/response.rb +15 -13
- data/lib/drip/version.rb +3 -1
- data/test/drip/client/accounts_test.rb +2 -0
- data/test/drip/client/broadcasts_test.rb +2 -0
- data/test/drip/client/campaign_subscriptions_test.rb +2 -0
- data/test/drip/client/campaigns_test.rb +2 -0
- data/test/drip/client/configuration_test.rb +112 -0
- data/test/drip/client/conversions_test.rb +2 -0
- data/test/drip/client/custom_fields_test.rb +2 -0
- data/test/drip/client/events_test.rb +2 -0
- data/test/drip/client/forms_test.rb +2 -0
- data/test/drip/client/http_client_test.rb +98 -0
- data/test/drip/client/orders_test.rb +2 -0
- data/test/drip/client/shopper_activity_test.rb +189 -0
- data/test/drip/client/subscribers_test.rb +8 -0
- data/test/drip/client/tags_test.rb +2 -0
- data/test/drip/client/users_test.rb +24 -0
- data/test/drip/client/webhooks_test.rb +2 -0
- data/test/drip/client/workflow_triggers_test.rb +2 -0
- data/test/drip/client/workflows_test.rb +2 -0
- data/test/drip/client_test.rb +34 -97
- data/test/drip/collection_test.rb +16 -0
- data/test/drip/collections/account_test.rb +10 -0
- data/test/drip/collections/broadcasts_test.rb +10 -0
- data/test/drip/collections/campaign_subscriptions_test.rb +10 -0
- data/test/drip/collections/campaigns_test.rb +10 -0
- data/test/drip/collections/errors_test.rb +10 -0
- data/test/drip/collections/orders_test.rb +10 -0
- data/test/drip/collections/purchases_test.rb +10 -0
- data/test/drip/collections/tags_test.rb +10 -0
- data/test/drip/collections/webhooks_test.rb +10 -0
- data/test/drip/collections/workflow_triggers_test.rb +10 -0
- data/test/drip/collections/workflows_test.rb +10 -0
- data/test/drip/collections_test.rb +2 -0
- data/test/drip/request_test.rb +60 -0
- data/test/drip/resource_test.rb +14 -0
- data/test/drip/resources/account_test.rb +2 -0
- data/test/drip/resources/order_test.rb +2 -0
- data/test/drip/resources/subscriber_test.rb +2 -0
- data/test/drip/resources/tag_test.rb +15 -0
- data/test/drip/resources_test.rb +2 -0
- data/test/drip/response_test.rb +35 -0
- data/test/test_helper.rb +5 -0
- metadata +50 -109
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: a315464f308426c87063f971108b2861cc7f6beacf9320fdf16af17bed73fc16
|
|
4
|
+
data.tar.gz: 70cd96e4f9ea7a463f73ae83990e8cfda6519563bbcaec9b4942d1862d7613b8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b9d9dba42336127f9cfc9269ab57ff0f7af9fac620fb735d0749cb40ecf76a96175e25bee9b2a55ef94fd4ba038d10ae0fa371c9b0b0d7ded6f09f4169bbcb93
|
|
7
|
+
data.tar.gz: 1991082152cbf1bfc5748a37e6108418313871ea5272e8ad42b33a2be4081174b282601deedd027f8187df2e513071ea80636423f77168fffe2d2f42dba82af2
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Addresses: [ECI-XXXX](https://dripcom.atlassian.net/browse/ECI-XXXX)
|
|
2
|
+
|
|
3
|
+
plus links to any other relevant tickets, PRs, JIRAs, wikis, e.g.:
|
|
4
|
+
|
|
5
|
+
Followup to: https://github.com/DripEmail/drip-ruby/12437
|
|
6
|
+
|
|
7
|
+
Also any pair partners that worked on this code:
|
|
8
|
+
|
|
9
|
+
Co-authored-by: Jesse Developer <jesse.developer@drip.com>
|
|
10
|
+
|
|
11
|
+
## Background
|
|
12
|
+
|
|
13
|
+
Explain the context and why you're making that change. What is the
|
|
14
|
+
problem you're trying to solve? In some cases there is not a problem
|
|
15
|
+
and this can be thought of being the motivation for your change.
|
|
16
|
+
|
|
17
|
+
## Modification
|
|
18
|
+
|
|
19
|
+
Describe the modifications you've done.
|
|
20
|
+
|
|
21
|
+
## Result
|
|
22
|
+
|
|
23
|
+
What will change as a result of your pull request? Note that sometimes
|
|
24
|
+
this section is unnecessary because it is self-explanatory based on
|
|
25
|
+
the solution.
|
|
26
|
+
|
|
27
|
+
## Additional Context
|
|
28
|
+
|
|
29
|
+
Does the PR title contain the JIRA key if using JIRA?
|
|
30
|
+
|
|
31
|
+
## How to verify/test
|
|
32
|
+
|
|
33
|
+
Aside from automated tests that should be part of every PR,
|
|
34
|
+
what are the steps necessary to independently confirm that the PR
|
|
35
|
+
is correct in staging or production? Describe here the steps did you do
|
|
36
|
+
to manually smoke test or verify the functionality from the point of
|
|
37
|
+
view of a non-developer.
|
|
38
|
+
|
|
39
|
+
This section may not apply to all PRs.
|
data/.rubocop.yml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
inherit_from: .rubocop_todo.yml
|
|
2
2
|
|
|
3
3
|
AllCops:
|
|
4
|
-
TargetRubyVersion: '2.
|
|
4
|
+
TargetRubyVersion: '2.3'
|
|
5
5
|
Exclude:
|
|
6
6
|
- 'test/fixtures/**/*'
|
|
7
7
|
|
|
@@ -32,3 +32,7 @@ Layout/MultilineMethodCallIndentation:
|
|
|
32
32
|
Metrics/ClassLength:
|
|
33
33
|
Exclude:
|
|
34
34
|
- 'test/**/*'
|
|
35
|
+
|
|
36
|
+
Metrics/BlockLength:
|
|
37
|
+
Exclude:
|
|
38
|
+
- 'test/**/*'
|
data/.rubocop_todo.yml
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on
|
|
3
|
+
# on 2019-05-02 16:45:21 -0500 using RuboCop version 0.67.2.
|
|
4
4
|
# The point is for the user to remove these configuration records
|
|
5
5
|
# one by one as the offenses are removed from the code base.
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
|
8
8
|
|
|
9
|
+
# Offense count: 2
|
|
10
|
+
# Cop supports --auto-correct.
|
|
11
|
+
Layout/EmptyLineAfterGuardClause:
|
|
12
|
+
Exclude:
|
|
13
|
+
- 'lib/drip/client/subscribers.rb'
|
|
14
|
+
- 'lib/drip/response.rb'
|
|
15
|
+
|
|
9
16
|
# Offense count: 2
|
|
10
17
|
# Cop supports --auto-correct.
|
|
11
18
|
# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods.
|
|
@@ -14,17 +21,18 @@ Lint/UnusedMethodArgument:
|
|
|
14
21
|
- 'lib/drip/client.rb'
|
|
15
22
|
- 'lib/drip/collection.rb'
|
|
16
23
|
|
|
17
|
-
# Offense count:
|
|
24
|
+
# Offense count: 2
|
|
18
25
|
Metrics/AbcSize:
|
|
19
|
-
Max:
|
|
26
|
+
Max: 25
|
|
20
27
|
|
|
21
|
-
# Offense count:
|
|
28
|
+
# Offense count: 8
|
|
22
29
|
# Configuration parameters: CountComments, ExcludedMethods.
|
|
30
|
+
# ExcludedMethods: refine
|
|
23
31
|
Metrics/BlockLength:
|
|
24
32
|
Max: 46
|
|
25
33
|
|
|
26
34
|
# Offense count: 4
|
|
27
|
-
# Configuration parameters: CountComments.
|
|
35
|
+
# Configuration parameters: CountComments, ExcludedMethods.
|
|
28
36
|
Metrics/MethodLength:
|
|
29
37
|
Max: 26
|
|
30
38
|
|
|
@@ -39,14 +47,14 @@ Performance/InefficientHashSearch:
|
|
|
39
47
|
- 'lib/drip/resource.rb'
|
|
40
48
|
- 'lib/drip/response.rb'
|
|
41
49
|
|
|
42
|
-
# Offense count:
|
|
50
|
+
# Offense count: 24
|
|
43
51
|
# Cop supports --auto-correct.
|
|
44
52
|
# Configuration parameters: AutoCorrect, EnforcedStyle.
|
|
45
53
|
# SupportedStyles: nested, compact
|
|
46
54
|
Style/ClassAndModuleChildren:
|
|
47
55
|
Enabled: false
|
|
48
56
|
|
|
49
|
-
# Offense count:
|
|
57
|
+
# Offense count: 44
|
|
50
58
|
Style/Documentation:
|
|
51
59
|
Enabled: false
|
|
52
60
|
|
|
@@ -81,13 +89,13 @@ Style/MissingRespondToMissing:
|
|
|
81
89
|
- 'lib/drip/resource.rb'
|
|
82
90
|
- 'lib/drip/response.rb'
|
|
83
91
|
|
|
84
|
-
# Offense count:
|
|
92
|
+
# Offense count: 12
|
|
85
93
|
# Cop supports --auto-correct.
|
|
86
94
|
# Configuration parameters: Strict.
|
|
87
95
|
Style/NumericLiterals:
|
|
88
96
|
MinDigits: 8
|
|
89
97
|
|
|
90
|
-
# Offense count:
|
|
98
|
+
# Offense count: 700
|
|
91
99
|
# Cop supports --auto-correct.
|
|
92
100
|
# Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
|
|
93
101
|
# SupportedStyles: single_quotes, double_quotes
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -6,10 +6,60 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
-
[master]: https://github.com/DripEmail/drip-ruby/compare/v3.2
|
|
9
|
+
[master]: https://github.com/DripEmail/drip-ruby/compare/v3.4.2...HEAD
|
|
10
10
|
|
|
11
11
|
- Your contribution here!
|
|
12
12
|
|
|
13
|
+
## [3.4.2] - 2021-04-25
|
|
14
|
+
|
|
15
|
+
[3.4.2]: https://github.com/DripEmail/drip-ruby/compare/v3.4.1...v3.4.2
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- `Drip::Client#create_or_update_subscriber` can be used with a BigCommerce Subscriber ID as the required key
|
|
19
|
+
|
|
20
|
+
## [3.4.1] - 2020-04-21
|
|
21
|
+
|
|
22
|
+
[3.4.1]: https://github.com/DripEmail/drip-ruby/compare/v3.4.0...v3.4.1
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
- Support for Ruby 2.7 hash parameters.
|
|
26
|
+
|
|
27
|
+
## [3.4.0] - 2020-04-21
|
|
28
|
+
|
|
29
|
+
[3.4.0]: https://github.com/DripEmail/drip-ruby/compare/v3.3.1...v3.4.0
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
- Support for the user endpoint in the REST API
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
- `Drip::Client#create_cart_activity_event` can be used with visitor UUID
|
|
36
|
+
|
|
37
|
+
## [3.3.1] - 2019-05-28
|
|
38
|
+
|
|
39
|
+
[3.3.1]: https://github.com/DripEmail/drip-ruby/compare/v3.3.0...v3.3.1
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
- Correct shopper activity batch orders API to wrap things in an `orders` key.
|
|
43
|
+
|
|
44
|
+
## [3.3.0] - 2019-05-24
|
|
45
|
+
|
|
46
|
+
[3.3.0]: https://github.com/DripEmail/drip-ruby/compare/v3.2.0...v3.3.0
|
|
47
|
+
|
|
48
|
+
### Added
|
|
49
|
+
- Support for the cart, order, and product endpoints in the shopper activity API.
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
- `Drip::Client#url_prefix` parameter no longer includes `/vN` part of the URL in order to prepare for Shopper Activity API. This breaks backwards compatibility for this option, but there is no expected production usage of this parameter.
|
|
53
|
+
- `Drip::Client#get`, `Drip::Client#post`, `Drip::Client#put`, and `Drip::Client#delete` are deprecated. If you are using these to hit a Drip API endpoint, please file a ticket or PR to fix the use case.
|
|
54
|
+
- `Drip::Client#generate_resource` is deprecated and will be removed in a future version.
|
|
55
|
+
- `Drip::Client#content_type` is deprecated and will be removed in a future version. It is no longer used internally, effective immediately.
|
|
56
|
+
- When using the block form of parameter initialization, a configuration object is provided instead of the client itself.
|
|
57
|
+
- Calling configuration setters on `Drip::Client` is deprecated.
|
|
58
|
+
- `Drip::Client::REDIRECT_LIMIT` constant is now private. This is supposed to be an implementation detail and shouldn't leak.
|
|
59
|
+
|
|
60
|
+
### Removed
|
|
61
|
+
- Drop support for Ruby 2.1.
|
|
62
|
+
|
|
13
63
|
## [3.2.0] - 2018-08-15
|
|
14
64
|
|
|
15
65
|
[3.2.0]: https://github.com/DripEmail/drip-ruby/compare/v3.1.1...v3.2.0
|
data/Gemfile
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
source 'https://rubygems.org'
|
|
2
4
|
|
|
3
5
|
# Specify your gem's dependencies in drip-ruby.gemspec
|
|
4
6
|
gemspec
|
|
7
|
+
|
|
8
|
+
gem "bundler", ">= 1.6", "< 3"
|
|
9
|
+
gem "minitest", "~> 5.0"
|
|
10
|
+
gem "mocha", "~> 1.1"
|
|
11
|
+
gem "rake", "~> 12.0"
|
|
12
|
+
gem "rubocop", "~> 0.67.2"
|
|
13
|
+
gem "rubocop-performance", "~> 1.1.0"
|
|
14
|
+
gem "shoulda-context", "~> 1.0"
|
|
15
|
+
gem "simplecov", require: false
|
|
16
|
+
gem "webmock", "~> 3.4"
|
data/README.md
CHANGED
|
@@ -150,6 +150,12 @@ as methods on the client object. The following methods are currently available:
|
|
|
150
150
|
| Apply a tag | `#apply_tag(email, tag)` |
|
|
151
151
|
| Remove a tag | `#remove_tag(email, tag)` |
|
|
152
152
|
|
|
153
|
+
|
|
154
|
+
#### Users
|
|
155
|
+
| Actions | Methods |
|
|
156
|
+
| :------------------------- | :--------------------------------------------------- |
|
|
157
|
+
| Fetch user | `#user` |
|
|
158
|
+
|
|
153
159
|
#### Webhooks
|
|
154
160
|
|
|
155
161
|
| Actions | Methods |
|
data/Rakefile
CHANGED
data/drip-ruby.gemspec
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# coding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
lib = File.expand_path('../lib', __FILE__)
|
|
4
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
@@ -7,8 +8,8 @@ require 'drip/version'
|
|
|
7
8
|
Gem::Specification.new do |spec|
|
|
8
9
|
spec.name = "drip-ruby"
|
|
9
10
|
spec.version = Drip::VERSION
|
|
10
|
-
spec.authors = ["
|
|
11
|
-
spec.email = ["
|
|
11
|
+
spec.authors = ["Drip"]
|
|
12
|
+
spec.email = ["support@drip.com"]
|
|
12
13
|
spec.summary = 'A Ruby gem for interacting with the Drip API'
|
|
13
14
|
spec.description = 'A simple wrapper for the Drip API'
|
|
14
15
|
spec.homepage = "http://github.com/DripEmail/drip-ruby"
|
|
@@ -19,13 +20,5 @@ Gem::Specification.new do |spec|
|
|
|
19
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
20
21
|
spec.require_paths = ["lib"]
|
|
21
22
|
|
|
22
|
-
spec.required_ruby_version = '>= 2.
|
|
23
|
-
|
|
24
|
-
spec.add_development_dependency "bundler", "~> 1.6"
|
|
25
|
-
spec.add_development_dependency "minitest", "~> 5.0"
|
|
26
|
-
spec.add_development_dependency "mocha", "~> 1.1"
|
|
27
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
|
28
|
-
spec.add_development_dependency "rubocop", "~> 0.56.0"
|
|
29
|
-
spec.add_development_dependency "shoulda-context", "~> 1.0"
|
|
30
|
-
spec.add_development_dependency "webmock", "~> 3.4"
|
|
23
|
+
spec.required_ruby_version = '>= 2.3'
|
|
31
24
|
end
|
data/lib/drip.rb
CHANGED
data/lib/drip/client.rb
CHANGED
|
@@ -1,16 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "drip/errors"
|
|
4
|
+
require "drip/request"
|
|
2
5
|
require "drip/response"
|
|
3
6
|
require "drip/client/accounts"
|
|
4
7
|
require "drip/client/broadcasts"
|
|
5
8
|
require "drip/client/campaigns"
|
|
6
9
|
require "drip/client/campaign_subscriptions"
|
|
10
|
+
require "drip/client/configuration"
|
|
7
11
|
require "drip/client/conversions"
|
|
8
12
|
require "drip/client/custom_fields"
|
|
9
13
|
require "drip/client/events"
|
|
10
14
|
require "drip/client/forms"
|
|
15
|
+
require "drip/client/http_client"
|
|
11
16
|
require "drip/client/orders"
|
|
17
|
+
require "drip/client/shopper_activity"
|
|
12
18
|
require "drip/client/subscribers"
|
|
13
19
|
require "drip/client/tags"
|
|
20
|
+
require "drip/client/users"
|
|
14
21
|
require "drip/client/webhooks"
|
|
15
22
|
require "drip/client/workflows"
|
|
16
23
|
require "drip/client/workflow_triggers"
|
|
@@ -29,88 +36,76 @@ module Drip
|
|
|
29
36
|
include Events
|
|
30
37
|
include Forms
|
|
31
38
|
include Orders
|
|
39
|
+
include ShopperActivity
|
|
32
40
|
include Subscribers
|
|
33
41
|
include Tags
|
|
42
|
+
include Users
|
|
34
43
|
include Webhooks
|
|
35
44
|
include Workflows
|
|
36
45
|
include WorkflowTriggers
|
|
37
46
|
|
|
38
|
-
|
|
47
|
+
Drip::Client::Configuration::CONFIGURATION_FIELDS.each do |config_key|
|
|
48
|
+
define_method(config_key) do
|
|
49
|
+
@config.public_send(config_key)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
setter_name = "#{config_key}=".to_sym
|
|
53
|
+
define_method(setter_name) do |val|
|
|
54
|
+
warn "[DEPRECATED] Setting configuration on Drip::Client after initialization will be removed in a future version"
|
|
55
|
+
@config.public_send(setter_name, val)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
JSON_API_CONTENT_TYPE = "application/vnd.api+json"
|
|
60
|
+
private_constant :JSON_API_CONTENT_TYPE
|
|
39
61
|
|
|
40
|
-
|
|
62
|
+
JSON_CONTENT_TYPE = "application/json"
|
|
63
|
+
private_constant :JSON_CONTENT_TYPE
|
|
41
64
|
|
|
42
65
|
def initialize(options = {})
|
|
43
|
-
@
|
|
44
|
-
@
|
|
45
|
-
@api_key = options[:api_key]
|
|
46
|
-
@url_prefix = options[:url_prefix] || "https://api.getdrip.com/v2/"
|
|
47
|
-
@http_open_timeout = options[:http_open_timeout]
|
|
48
|
-
@http_timeout = options[:http_timeout]
|
|
49
|
-
yield(self) if block_given?
|
|
66
|
+
@config = Drip::Client::Configuration.new(**options)
|
|
67
|
+
yield(@config) if block_given?
|
|
50
68
|
end
|
|
51
69
|
|
|
52
70
|
def generate_resource(key, *args)
|
|
53
|
-
|
|
71
|
+
warn "[DEPRECATED] Drip::Client#generate_resource is deprecated and will be removed in a future version"
|
|
72
|
+
private_generate_resource(key, *args)
|
|
54
73
|
end
|
|
55
74
|
|
|
56
75
|
def content_type
|
|
57
|
-
|
|
76
|
+
warn "[DEPRECATED] Drip::Client#content_type is deprecated and will be removed in a future version"
|
|
77
|
+
JSON_API_CONTENT_TYPE
|
|
58
78
|
end
|
|
59
79
|
|
|
60
|
-
|
|
61
|
-
|
|
80
|
+
Drip::Request::VERB_CLASS_MAPPING.keys.each do |verb|
|
|
81
|
+
define_method(verb) do |path, options = {}|
|
|
82
|
+
warn "[DEPRECATED] Drip::Client##{verb} please use the API endpoint specific methods"
|
|
83
|
+
make_json_api_request(verb, "v2/#{path}", options)
|
|
84
|
+
end
|
|
62
85
|
end
|
|
63
86
|
|
|
64
|
-
|
|
65
|
-
make_request(Net::HTTP::Post, make_uri(url), options)
|
|
66
|
-
end
|
|
87
|
+
private
|
|
67
88
|
|
|
68
|
-
def
|
|
69
|
-
make_request(
|
|
89
|
+
def make_json_api_request(http_verb, path, options = {})
|
|
90
|
+
make_request Drip::Request.new(http_verb, make_uri(path), options, JSON_API_CONTENT_TYPE)
|
|
70
91
|
end
|
|
71
92
|
|
|
72
|
-
def
|
|
73
|
-
make_request(
|
|
93
|
+
def make_json_request(http_verb, path, options = {})
|
|
94
|
+
make_request Drip::Request.new(http_verb, make_uri(path), options, JSON_CONTENT_TYPE)
|
|
74
95
|
end
|
|
75
96
|
|
|
76
|
-
|
|
97
|
+
def private_generate_resource(key, *args)
|
|
98
|
+
# No reason for this to be part of the public API, so making a duplicate method to make it private.
|
|
99
|
+
{ key => args }
|
|
100
|
+
end
|
|
77
101
|
|
|
78
102
|
def make_uri(path)
|
|
79
|
-
URI(url_prefix) + URI(path)
|
|
103
|
+
URI(@config.url_prefix) + URI(path)
|
|
80
104
|
end
|
|
81
105
|
|
|
82
|
-
def make_request(
|
|
83
|
-
raise TooManyRedirectsError, 'too many HTTP redirects' if step >= REDIRECT_LIMIT
|
|
84
|
-
|
|
106
|
+
def make_request(drip_request)
|
|
85
107
|
build_response do
|
|
86
|
-
|
|
87
|
-
if verb_klass == Net::HTTP::Get
|
|
88
|
-
uri.query = URI.encode_www_form(options)
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
request = verb_klass.new uri
|
|
92
|
-
|
|
93
|
-
unless verb_klass == Net::HTTP::Get
|
|
94
|
-
request.body = options.to_json
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
request['User-Agent'] = "Drip Ruby v#{Drip::VERSION}"
|
|
98
|
-
request['Content-Type'] = content_type
|
|
99
|
-
request['Accept'] = "*/*"
|
|
100
|
-
|
|
101
|
-
if access_token
|
|
102
|
-
request['Authorization'] = "Bearer #{access_token}"
|
|
103
|
-
else
|
|
104
|
-
request.basic_auth api_key, ""
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
response = http.request request
|
|
108
|
-
if response.is_a?(Net::HTTPRedirection)
|
|
109
|
-
return make_request(verb_klass, URI(response["Location"]), options, step + 1)
|
|
110
|
-
else
|
|
111
|
-
response
|
|
112
|
-
end
|
|
113
|
-
end
|
|
108
|
+
Drip::Client::HTTPClient.new(@config).make_request(drip_request)
|
|
114
109
|
end
|
|
115
110
|
end
|
|
116
111
|
|
|
@@ -120,18 +115,5 @@ module Drip
|
|
|
120
115
|
rescue JSON::ParserError
|
|
121
116
|
Drip::Response.new(response.code.to_i, nil)
|
|
122
117
|
end
|
|
123
|
-
|
|
124
|
-
def connection_options(uri_scheme)
|
|
125
|
-
options = { use_ssl: uri_scheme == "https" }
|
|
126
|
-
|
|
127
|
-
if @http_open_timeout
|
|
128
|
-
options[:open_timeout] = @http_open_timeout
|
|
129
|
-
options[:ssl_timeout] = @http_open_timeout
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
options[:read_timeout] = @http_timeout if @http_timeout
|
|
133
|
-
|
|
134
|
-
options
|
|
135
|
-
end
|
|
136
118
|
end
|
|
137
119
|
end
|