gibbon 3.4.4 → 3.5.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 +4 -4
- data/.github/FUNDING.yml +3 -0
- data/.travis.yml +2 -1
- data/CHANGELOG.md +2 -1
- data/README.markdown +6 -27
- data/gibbon.gemspec +2 -2
- data/lib/gibbon/version.rb +1 -1
- data/lib/gibbon.rb +0 -1
- metadata +5 -7
- data/lib/gibbon/export.rb +0 -93
- data/spec/gibbon/export_spec.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61103c56f7d3ff60ca48fab8a2ca7c71949c1c01c784abd7ddb062dbd74d4560
|
4
|
+
data.tar.gz: 93f18505844eb71b72d189622547c61c0bda3c416bdb2a2caa4ec0358899e52b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e4203bc006c80cc20c5fff0217673543faa842a28b57eb3620a373a63409c0e1b5f503335d44ff05d8ba8d124db1f5b984dcf5f98632aaa8ee077d525d0a413
|
7
|
+
data.tar.gz: ecc7c39379e218a5a10d92c4597fdb9e5f28c90c8297ef5a19d04189044a0b86a0f84120151369ecca4c989c3d88bb359fcc651de9527497cba368b608225d9d
|
data/.github/FUNDING.yml
ADDED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
## [
|
1
|
+
## [3.5.0, unreleased] - 2022-06-05
|
2
|
+
- Remove support for retired Export API
|
2
3
|
|
3
4
|
## [3.4.4] - 2022-02-24
|
4
5
|
- Remove non-alpha characters when parsing datacenter from API keys to prevent potential attackers from injecting a domain via the API key. This would only be possible if one were using user-provided API keys (e.g. from a form, etc.).
|
data/README.markdown
CHANGED
@@ -180,6 +180,12 @@ Get a specific member's information (open/click rates etc.) from MailChimp:
|
|
180
180
|
gibbon.lists(list_id).members(lower_case_md5_hashed_email_address).retrieve
|
181
181
|
```
|
182
182
|
|
183
|
+
Permanently delete a specific member from a list:
|
184
|
+
|
185
|
+
```ruby
|
186
|
+
gibbon.lists(list_id).members(lower_case_md5_hashed_email_address).actions.delete_permanent.create
|
187
|
+
```
|
188
|
+
|
183
189
|
### Tags
|
184
190
|
|
185
191
|
[Tags](https://mailchimp.com/help/getting-started-tags/) are a flexible way to organize (slice and dice) your list: for example, you can send a campaign directly to one or more tags.
|
@@ -474,33 +480,6 @@ Gibbon 2.x+:
|
|
474
480
|
```ruby
|
475
481
|
gibbon.lists(list_id).members.create(body: {email_address: "foo@bar.com", status: "subscribed", merge_fields: {FNAME: "Bob", LNAME: "Smith"}})
|
476
482
|
```
|
477
|
-
## Export API 1.0
|
478
|
-
|
479
|
-
Gibbon 3.0.0+ supports MailChimp's [Export API 1.0](https://apidocs.mailchimp.com/export/1.0/). You can choose to handle the API response all at
|
480
|
-
once or line by line by passing a block. To access the Export API with Gibbon, you must first create an instance of `Gibbon::Export`:
|
481
|
-
|
482
|
-
```ruby
|
483
|
-
export = Gibbon::Export.new(api_key: "your_api_key")
|
484
|
-
```
|
485
|
-
|
486
|
-
Next, call the method corresponding to the API endpoint you'd like to query:
|
487
|
-
|
488
|
-
```ruby
|
489
|
-
export.list(id: list_id)
|
490
|
-
```
|
491
|
-
|
492
|
-
This fetches and returns all of the results at once. Pass a block if you'd like to handle the response as individual lines:
|
493
|
-
|
494
|
-
```ruby
|
495
|
-
export = Gibbon::Export.new(api_key: "your_api_key", timeout: 1200)
|
496
|
-
export.list(id: list_id) do |row|
|
497
|
-
puts row
|
498
|
-
end
|
499
|
-
```
|
500
|
-
|
501
|
-
This is useful when handling large sets of data. Setting the `timeout` here is optional, but a high value is recommended given the nature of the Export API. The default timeout is 600 seconds.
|
502
|
-
|
503
|
-
Gibbon supports all current Export API endpoints: `/list`, `/ecommOrders`, and `/campaignSubscriberActivity`. They're mapped onto Ruby methods with similar names: `list()`, `ecomm_orders()`, and `campaign_subscriber_activity()` respectively. Please see [MailChimp's API documentation](https://developer.mailchimp.com/documentation/mailchimp/guides/how-to-use-the-export-api/) for supported parameters.
|
504
483
|
|
505
484
|
## Thanks
|
506
485
|
|
data/gibbon.gemspec
CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.email = ["amromousa@gmail.com"]
|
10
10
|
s.homepage = "http://github.com/amro/gibbon"
|
11
11
|
|
12
|
-
s.summary = %q{A wrapper for MailChimp API 3.0
|
13
|
-
s.description = %q{A wrapper for MailChimp API 3.0
|
12
|
+
s.summary = %q{A wrapper for MailChimp API 3.0}
|
13
|
+
s.description = %q{A wrapper for MailChimp API 3.0}
|
14
14
|
s.license = "MIT"
|
15
15
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
data/lib/gibbon/version.rb
CHANGED
data/lib/gibbon.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gibbon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Amro Mousa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '3.8'
|
83
|
-
description: A wrapper for MailChimp API 3.0
|
83
|
+
description: A wrapper for MailChimp API 3.0
|
84
84
|
email:
|
85
85
|
- amromousa@gmail.com
|
86
86
|
executables: []
|
@@ -88,6 +88,7 @@ extensions: []
|
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
90
|
- ".document"
|
91
|
+
- ".github/FUNDING.yml"
|
91
92
|
- ".gitignore"
|
92
93
|
- ".travis.yml"
|
93
94
|
- CHANGELOG.md
|
@@ -99,7 +100,6 @@ files:
|
|
99
100
|
- gibbon.gemspec
|
100
101
|
- lib/gibbon.rb
|
101
102
|
- lib/gibbon/api_request.rb
|
102
|
-
- lib/gibbon/export.rb
|
103
103
|
- lib/gibbon/gibbon_error.rb
|
104
104
|
- lib/gibbon/gibbon_helpers.rb
|
105
105
|
- lib/gibbon/mailchimp_error.rb
|
@@ -107,7 +107,6 @@ files:
|
|
107
107
|
- lib/gibbon/response.rb
|
108
108
|
- lib/gibbon/version.rb
|
109
109
|
- spec/gibbon/api_request_spec.rb
|
110
|
-
- spec/gibbon/export_spec.rb
|
111
110
|
- spec/gibbon/gibbon_spec.rb
|
112
111
|
- spec/gibbon/mailchimp_error_spec.rb
|
113
112
|
- spec/gibbon/upsert_spec.rb
|
@@ -134,10 +133,9 @@ requirements: []
|
|
134
133
|
rubygems_version: 3.2.27
|
135
134
|
signing_key:
|
136
135
|
specification_version: 4
|
137
|
-
summary: A wrapper for MailChimp API 3.0
|
136
|
+
summary: A wrapper for MailChimp API 3.0
|
138
137
|
test_files:
|
139
138
|
- spec/gibbon/api_request_spec.rb
|
140
|
-
- spec/gibbon/export_spec.rb
|
141
139
|
- spec/gibbon/gibbon_spec.rb
|
142
140
|
- spec/gibbon/mailchimp_error_spec.rb
|
143
141
|
- spec/gibbon/upsert_spec.rb
|
data/lib/gibbon/export.rb
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
require 'net/https'
|
2
|
-
|
3
|
-
module Gibbon
|
4
|
-
class Export
|
5
|
-
include Helpers
|
6
|
-
|
7
|
-
attr_accessor :api_key, :timeout
|
8
|
-
|
9
|
-
def initialize(api_key: nil, timeout: nil)
|
10
|
-
@api_key = api_key || self.class.api_key || ENV['MAILCHIMP_API_KEY']
|
11
|
-
@timeout = timeout || self.class.timeout || 600
|
12
|
-
end
|
13
|
-
|
14
|
-
def list(params = {}, &block)
|
15
|
-
call("list", params, &block)
|
16
|
-
end
|
17
|
-
|
18
|
-
def ecomm_orders(params = {}, &block)
|
19
|
-
call("ecommOrders", params, &block)
|
20
|
-
end
|
21
|
-
|
22
|
-
def campaign_subscriber_activity(params = {}, &block)
|
23
|
-
call("campaignSubscriberActivity", params, &block)
|
24
|
-
end
|
25
|
-
|
26
|
-
protected
|
27
|
-
|
28
|
-
def export_api_url
|
29
|
-
"https://#{get_data_center_from_api_key(@api_key)}api.mailchimp.com/export/1.0/"
|
30
|
-
end
|
31
|
-
|
32
|
-
def call(method, params = {}, &block)
|
33
|
-
rows = []
|
34
|
-
|
35
|
-
api_url = export_api_url + method + "/"
|
36
|
-
params = params.merge({ apikey: @api_key })
|
37
|
-
block = Proc.new { |row| rows << row } unless block_given?
|
38
|
-
|
39
|
-
ensure_api_key(params)
|
40
|
-
|
41
|
-
url = URI.parse(api_url)
|
42
|
-
req = Net::HTTP::Post.new(url.path, initheader = {'Content-Type' => 'application/json'})
|
43
|
-
req.body = MultiJson.dump(params)
|
44
|
-
Net::HTTP.start(url.host, url.port, read_timeout: @timeout, use_ssl: true, ssl_version: :TLSv1_2) do |http|
|
45
|
-
# http://stackoverflow.com/questions/29598196/ruby-net-http-read-body-nethttpokread-body-called-twice-ioerror
|
46
|
-
http.request req do |response|
|
47
|
-
i = -1
|
48
|
-
last = ''
|
49
|
-
response.read_body do |chunk|
|
50
|
-
next if chunk.nil? or chunk.strip.empty?
|
51
|
-
infix = "\n" if last[-1, 1]==']'
|
52
|
-
lines, last = try_parse_line("#{last}#{infix}#{chunk}")
|
53
|
-
lines.each { |line| block.call(line, i += 1) }
|
54
|
-
end
|
55
|
-
block.call(parse_line(last), i += 1) unless last.nil? or last.empty?
|
56
|
-
end
|
57
|
-
end
|
58
|
-
rows unless block_given?
|
59
|
-
end
|
60
|
-
|
61
|
-
def try_parse_line(res)
|
62
|
-
lines = res.split("\n")
|
63
|
-
last = lines.pop || ''
|
64
|
-
lines.map! { |line| parse_line(line) }
|
65
|
-
[lines.compact, last]
|
66
|
-
rescue MultiJson::ParseError
|
67
|
-
[[], last]
|
68
|
-
end
|
69
|
-
|
70
|
-
|
71
|
-
def parse_line(line)
|
72
|
-
parsed_response = MultiJson.load(line)
|
73
|
-
rescue MultiJson::ParseError
|
74
|
-
return []
|
75
|
-
end
|
76
|
-
|
77
|
-
private
|
78
|
-
|
79
|
-
def ensure_api_key(params)
|
80
|
-
unless params[:apikey] && (get_data_center_from_api_key(params[:apikey]) != "")
|
81
|
-
raise Gibbon::GibbonError, "You must set an api_key prior to making a call"
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
class << self
|
86
|
-
attr_accessor :api_key, :timeout
|
87
|
-
|
88
|
-
def method_missing(sym, *args, &block)
|
89
|
-
new(api_key: self.api_key, timeout: self.timeout).send(sym, *args, &block)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
data/spec/gibbon/export_spec.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'webmock/rspec'
|
3
|
-
|
4
|
-
describe Gibbon::Export do
|
5
|
-
before do
|
6
|
-
Gibbon::Export.send(:public, *Gibbon::Export.protected_instance_methods)
|
7
|
-
@export = Gibbon::Export.new
|
8
|
-
end
|
9
|
-
|
10
|
-
it "doesn't allow empty api key" do
|
11
|
-
expect {@export.list(id: "123456")}.to raise_error(Gibbon::GibbonError)
|
12
|
-
end
|
13
|
-
|
14
|
-
it "doesn't allow api key without data center" do
|
15
|
-
@api_key = "123"
|
16
|
-
@export.api_key = @api_key
|
17
|
-
expect {@export.list(id: "123456")}.to raise_error(Gibbon::GibbonError)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "sets an API key from the 'MAILCHIMP_API_KEY' ENV variable" do
|
21
|
-
ENV['MAILCHIMP_API_KEY'] = 'TESTKEY-us1'
|
22
|
-
@export = Gibbon::Export.new
|
23
|
-
expect(@export.api_key).to eq('TESTKEY-us1')
|
24
|
-
ENV.delete('MAILCHIMP_API_KEY')
|
25
|
-
end
|
26
|
-
|
27
|
-
it "sets correct endpoint from api key" do
|
28
|
-
@api_key = "TESTKEY-us1"
|
29
|
-
@export.api_key = @api_key
|
30
|
-
expect(@export.export_api_url).to eq("https://us1.api.mailchimp.com/export/1.0/")
|
31
|
-
end
|
32
|
-
|
33
|
-
it "sets correct timeout" do
|
34
|
-
@api_key = "TESTKEY-us1"
|
35
|
-
@export.api_key = @api_key
|
36
|
-
@export.timeout = 9
|
37
|
-
expect(@export.timeout).to eq(9)
|
38
|
-
end
|
39
|
-
end
|