klaviyo 2.0.4 → 2.0.5

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 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