gibbon 3.4.4 → 3.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|