klaviyo 2.0.4 → 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 28360ee80e88095a3cab7c279740506e843483536659a59b2ac4473e2163e489
4
- data.tar.gz: 68e8e4561cdb1790f786b195a83ae3ea557aaf69ff9c7c9356b09cee33f724d6
3
+ metadata.gz: cd4d1f6230dbb4af41de16e16ed58a2735ac78a214e803077f6ecf1b8a0e84d4
4
+ data.tar.gz: 2223c93c668ed584cb60d2d48f86073b68dc10056ccf3634754f26e2f8c779fb
5
5
  SHA512:
6
- metadata.gz: 46def1393ec8838ccfe6c966f0aa0e0651fa3354b6c580a42e764245636aab1e7cc7894d221c405fd23abed2c7bed2ea3a0cc3f1b04841f2ee061538bf5297b0
7
- data.tar.gz: 4d5bd8ee0ae050dc333c0b2cf5b3c4be06875a08ea9b6bfa1c3479f755b0d44c255facc7c6cafec76d094714ed74e8bb94ac137fe302b22f29ac12e9477e5bb0
6
+ metadata.gz: 4708d10212eea6976e6a11051c74e946e30e8b109dfbc204351a9669e3c1fcb77cb29b6e2e6d438bee6c5ee725d330207cd9cbb1e5fb9f75b26835229e6055c5
7
+ data.tar.gz: 28859dded4559668b1ab44d5e3551369e497351f102aa4bfbc30414cae4c524c683dda22123eaf3a18fff29c3b886b404ee57e900b1190ef71d254844ed90ba6
data/klaviyo.gemspec CHANGED
@@ -2,8 +2,8 @@ files = ['klaviyo.gemspec', '{lib}/**/**/*'].map {|f| Dir[f]}.flatten
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'klaviyo'
5
- s.version = '2.0.4'
6
- s.date = '2021-04-02'
5
+ s.version = '2.0.5'
6
+ s.date = '2021-04-05'
7
7
  s.summary = 'You heard us, a Ruby wrapper for the Klaviyo API'
8
8
  s.description = 'Ruby wrapper for the Klaviyo API'
9
9
  s.authors = ['Klaviyo Team']
@@ -0,0 +1,97 @@
1
+ module Klaviyo
2
+ class EmailTemplates < Client
3
+ EMAIL_TEMPLATES = 'email-templates'
4
+ EMAIL_TEMPLATE = 'email-template'
5
+ CLONE = 'clone'
6
+ RENDER = 'render'
7
+ SEND = 'send'
8
+
9
+ # Returns a list of all the email templates you've created.
10
+ # The templates are returned in sorted order by name.
11
+ # @return [List] of JSON formatted email template objects
12
+ def self.get_templates()
13
+ v1_request(HTTP_GET, EMAIL_TEMPLATES)
14
+ end
15
+
16
+ # Creates a new email template
17
+ # @param :name [String] The name of the email template
18
+ # @param :html [String] The HTML content for this template
19
+ # @return [JSON] a JSON object containing information about the email template
20
+ def self.create_template(name: nil, html: nil)
21
+ params = {
22
+ name: name,
23
+ html: html
24
+ }
25
+ v1_request(HTTP_POST, EMAIL_TEMPLATES, content_type: CONTENT_URL_FORM, params: params)
26
+ end
27
+
28
+ # Updates the name and/or HTML content of a template. Only updates imported
29
+ # HTML templates; does not currently update drag & drop templates
30
+ # @param template_id [String] The id of the email template
31
+ # @param :name [String] The name of the email template
32
+ # @param :html [String] The HTML content for this template
33
+ # @return [JSON] a JSON object containing information about the email template
34
+ def self.update_template(template_id, name:, html:)
35
+ path = "#{EMAIL_TEMPLATE}/#{template_id}"
36
+ params = {
37
+ name: name,
38
+ html: html
39
+ }
40
+ v1_request(HTTP_PUT, path, params)
41
+ end
42
+
43
+ # Deletes a given template.
44
+ # @param template_id [String] The id of the email template
45
+ # @return [JSON] a JSON object containing information about the email template
46
+ def self.delete_template(template_id)
47
+ path = "#{EMAIL_TEMPLATE}/#{template_id}"
48
+ v1_request(HTTP_DELETE, path)
49
+ end
50
+
51
+ # Creates a copy of a given template with a new name
52
+ # @param template_id [String] The id of the email template to copy
53
+ # @param :name [String] The name of the newly cloned email template
54
+ # @return [JSON] a JSON object containing information about the email template
55
+ def self.clone_template(template_id, name:)
56
+ path = "#{EMAIL_TEMPLATE}/#{template_id}/#{CLONE}"
57
+ params = {
58
+ name: name
59
+ }
60
+ v1_request(HTTP_POST, path, content_type: CONTENT_URL_FORM, params: params)
61
+ end
62
+
63
+ # Renders the specified template with the provided data and return HTML
64
+ # and text versions of the email
65
+ # @param template_id [String] The id of the email template to copy
66
+ # @param :context [Hash] The context the email template will be rendered with
67
+ # @return [JSON] a JSON object containing information about the email template
68
+ def self.render_template(template_id, context: {})
69
+ path = "#{EMAIL_TEMPLATE}/#{template_id}/#{RENDER}"
70
+ params = {
71
+ context: context
72
+ }
73
+ v1_request(HTTP_POST, path, content_type: CONTENT_URL_FORM, params: params)
74
+ end
75
+
76
+ # Renders the specified template with the provided data and then send the
77
+ # contents in an email via the service specified
78
+ # @param template_id [String] The id of the email template to copy
79
+ # @param :from_email [String] The from email address; used in the reply-to header
80
+ # @param :from_name [String] The name the email is sent from
81
+ # @param :subject [String] The subject of the email template
82
+ # @param :to [Mixed] The email this template is being sent to
83
+ # @param :context [Hash] The context the email template will be rendered with
84
+ # @return [JSON] a JSON object containing information about the email template
85
+ def self.send_template(template_id, from_email:, from_name:, subject:, to:, context: {})
86
+ path = "#{EMAIL_TEMPLATE}/#{template_id}/#{SEND}"
87
+ params = {
88
+ from_email: from_email,
89
+ from_name: from_name,
90
+ subject: subject,
91
+ to: to,
92
+ context: context
93
+ }
94
+ v1_request(HTTP_POST, path, content_type: CONTENT_URL_FORM, params: params)
95
+ end
96
+ end
97
+ end
@@ -1,8 +1,6 @@
1
1
  module Klaviyo
2
2
  class Metrics < Client
3
3
  EXPORT = 'export'
4
- METRIC = 'metric'
5
- METRICS = 'metrics'
6
4
 
7
5
  # Returns a list of all metrics in Klaviyo
8
6
  # @param page [Integer] which page to return, default 0
@@ -13,8 +13,7 @@ module Klaviyo
13
13
  :email => email
14
14
  }
15
15
  v2_request(HTTP_GET, path, params)
16
- end
17
-
16
+ end
18
17
 
19
18
  # Retrieve all the data attributes for a Klaviyo Person ID.
20
19
  # @param person_id [String] the id of the profile
@@ -10,57 +10,76 @@ module Klaviyo
10
10
  HTTP_PUT = 'put'
11
11
 
12
12
  ALL = 'all'
13
+ METRIC = 'metric'
14
+ METRICS = 'metrics'
13
15
  TIMELINE = 'timeline'
14
16
 
15
17
  DEFAULT_COUNT = 100
16
18
  DEFAULT_PAGE = 0
17
19
  DEFAULT_SORT_DESC = 'desc'
18
20
 
21
+ CONTENT_JSON = 'application/json'
22
+ CONTENT_URL_FORM = 'application/x-www-form-urlencoded'
23
+
19
24
  private
20
25
 
21
- def self.request(method, path, kwargs = {})
26
+ def self.request(method, path, content_type, **kwargs)
22
27
  check_private_api_key_exists()
23
28
  url = "#{BASE_API_URL}/#{path}"
24
29
  connection = Faraday.new(
25
30
  url: url,
26
31
  headers: {
27
- 'Content-Type' => 'application/json'
32
+ 'Content-Type' => content_type
28
33
  })
34
+ if content_type == CONTENT_JSON
35
+ kwargs[:body] = kwargs[:body].to_json
36
+ end
29
37
  response = connection.send(method) do |req|
30
- req.body = kwargs[:body].to_json || nil
38
+ req.body = kwargs[:body] || nil
31
39
  end
32
40
  end
33
41
 
34
- def self.public_request(method, path, kwargs = {})
42
+ def self.public_request(method, path, **kwargs)
35
43
  check_public_api_key_exists()
36
44
  params = build_params(kwargs)
37
45
  url = "#{BASE_API_URL}/#{path}?#{params}"
38
46
  res = Faraday.get(url).body
39
47
  end
40
48
 
41
- def self.v1_request(method, path, kwargs = {})
42
- defaults = {:page => nil,
43
- :count => nil,
44
- :since => nil,
45
- :sort => nil}
46
- params = defaults.merge(kwargs)
47
- query_params = encode_params(params)
48
- full_url = "#{V1_API}/#{path}?api_key=#{Klaviyo.private_api_key}#{query_params}"
49
- request(method, full_url)
49
+ def self.v1_request(method, path, content_type: CONTENT_JSON, **kwargs)
50
+ if content_type == CONTENT_URL_FORM
51
+ data = {
52
+ :body => {
53
+ :api_key => Klaviyo.private_api_key
54
+ }
55
+ }
56
+ data[:body] = data[:body].merge(kwargs[:params])
57
+ full_url = "#{V1_API}/#{path}"
58
+ request(method, full_url, content_type, data)
59
+ else
60
+ defaults = {:page => nil,
61
+ :count => nil,
62
+ :since => nil,
63
+ :sort => nil}
64
+ params = defaults.merge(kwargs)
65
+ query_params = encode_params(params)
66
+ full_url = "#{V1_API}/#{path}?api_key=#{Klaviyo.private_api_key}#{query_params}"
67
+ request(method, full_url, content_type)
68
+ end
50
69
  end
51
70
 
52
- def self.v2_request(method, path, kwargs = {})
71
+ def self.v2_request(method, path, **kwargs)
53
72
  path = "#{V2_API}/#{path}"
54
73
  key = {
55
74
  "api_key": "#{Klaviyo.private_api_key}"
56
75
  }
57
76
  data = {}
58
77
  data[:body] = key.merge(kwargs)
59
- request(method, path, data)
78
+ request(method, path, CONTENT_JSON, data)
60
79
  end
61
80
 
62
81
  def self.build_params(params)
63
- "data=#{Base64.encode64(JSON.generate(params)).gsub(/\n/,'')}"
82
+ "data=#{CGI.escape(Base64.encode64(JSON.generate(params)).gsub(/\n/, ''))}"
64
83
  end
65
84
 
66
85
  def self.check_required_args(kwargs)
@@ -9,6 +9,7 @@ require_relative 'apis/lists'
9
9
  require_relative 'apis/metrics'
10
10
  require_relative 'apis/profiles'
11
11
  require_relative 'apis/campaigns'
12
+ require_relative 'apis/email_templates'
12
13
  require_relative 'apis/data_privacy'
13
14
 
14
15
  module Klaviyo
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: klaviyo
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Klaviyo Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-02 00:00:00.000000000 Z
11
+ date: 2021-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -76,6 +76,7 @@ files:
76
76
  - lib/klaviyo.rb
77
77
  - lib/klaviyo/apis/campaigns.rb
78
78
  - lib/klaviyo/apis/data_privacy.rb
79
+ - lib/klaviyo/apis/email_templates.rb
79
80
  - lib/klaviyo/apis/lists.rb
80
81
  - lib/klaviyo/apis/metrics.rb
81
82
  - lib/klaviyo/apis/profiles.rb