klaviyo 2.0.9 → 2.0.4

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: f20097f9b9538503cc8f541dd7e6d71c6c70904e51fdd59f636670f56d0b53c5
4
- data.tar.gz: 98032c0e8a4ac60b16501495b71d35ce09bd28bd62fce4c49392448929555ffa
3
+ metadata.gz: 28360ee80e88095a3cab7c279740506e843483536659a59b2ac4473e2163e489
4
+ data.tar.gz: 68e8e4561cdb1790f786b195a83ae3ea557aaf69ff9c7c9356b09cee33f724d6
5
5
  SHA512:
6
- metadata.gz: e4f99398385906828f37a4e1f25f05ca76493a905d526177da2cc189301fba84adc76551711213c85003337b0278d0cade9c8ba52e0c0726176465fd2c8132cd
7
- data.tar.gz: e109724a853cbf44a3546298fdfc04037a9cfb748b72a3edd96fab1475e209a3ea67c697ce940ff54d6aac57120f37aa853076398c016995b1b4b11f70279694
6
+ metadata.gz: 46def1393ec8838ccfe6c966f0aa0e0651fa3354b6c580a42e764245636aab1e7cc7894d221c405fd23abed2c7bed2ea3a0cc3f1b04841f2ee061538bf5297b0
7
+ data.tar.gz: 4d5bd8ee0ae050dc333c0b2cf5b3c4be06875a08ea9b6bfa1c3479f755b0d44c255facc7c6cafec76d094714ed74e8bb94ac137fe302b22f29ac12e9477e5bb0
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.9'
6
- s.date = '2021-07-30'
5
+ s.version = '2.0.4'
6
+ s.date = '2021-04-02'
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']
@@ -2,7 +2,7 @@ module Klaviyo
2
2
  class DataPrivacy < Client
3
3
  DATA_PRIVACY = 'data-privacy'
4
4
  DELETION_REQUEST = 'deletion-request'
5
-
5
+
6
6
  # Submits a data privacy-related deletion request
7
7
  # @param id_type [String] 'email' or 'phone_number' or 'person_id
8
8
  # @param identifier [String] value for the identifier specified
@@ -11,9 +11,9 @@ module Klaviyo
11
11
  unless ['email', 'phone_number', 'person_id'].include? id_type
12
12
  raise Klaviyo::KlaviyoError.new(INVALID_ID_TYPE_ERROR)
13
13
  end
14
- data = Hash[id_type.to_sym, identifier]
14
+ identifier = { id_type => identifier }
15
15
  path = "#{DATA_PRIVACY}/#{DELETION_REQUEST}"
16
- v2_request(HTTP_POST, path, **data)
16
+ v2_request(HTTP_POST, path, identifier)
17
17
  end
18
18
  end
19
19
  end
@@ -14,7 +14,7 @@ module Klaviyo
14
14
  body = {
15
15
  :list_name => list_name
16
16
  }
17
- v2_request(HTTP_POST, LISTS, **body)
17
+ v2_request(HTTP_POST, LISTS, body)
18
18
  end
19
19
 
20
20
  # Retrieves all the lists in the Klaviyo account
@@ -40,7 +40,7 @@ module Klaviyo
40
40
  body = {
41
41
  :list_name => list_name
42
42
  }
43
- v2_request(HTTP_PUT, path, **body)
43
+ v2_request(HTTP_PUT, path, body)
44
44
  end
45
45
 
46
46
  # Deletes a list
@@ -65,7 +65,7 @@ module Klaviyo
65
65
  :phone_numbers => phone_numbers,
66
66
  :push_tokens => push_tokens
67
67
  }
68
- v2_request(HTTP_GET, path, **params)
68
+ v2_request(HTTP_GET, path, params)
69
69
  end
70
70
 
71
71
  # Subscribe profiles to a list.
@@ -80,7 +80,7 @@ module Klaviyo
80
80
  params = {
81
81
  :profiles => profiles
82
82
  }
83
- v2_request(HTTP_POST, path, **params)
83
+ v2_request(HTTP_POST, path, params)
84
84
  end
85
85
 
86
86
  # Unsubscribe and remove profiles from a list
@@ -92,7 +92,7 @@ module Klaviyo
92
92
  params = {
93
93
  :emails => emails
94
94
  }
95
- v2_request(HTTP_DELETE, path, **params)
95
+ v2_request(HTTP_DELETE, path, params)
96
96
  end
97
97
 
98
98
  # Add profiles to a list
@@ -106,7 +106,7 @@ module Klaviyo
106
106
  params = {
107
107
  :profiles => profiles
108
108
  }
109
- v2_request(HTTP_POST, path, **params)
109
+ v2_request(HTTP_POST, path, params)
110
110
  end
111
111
 
112
112
  # Check if profiles are on a list
@@ -123,7 +123,7 @@ module Klaviyo
123
123
  :phone_numbers => phone_numbers,
124
124
  :push_tokens => push_tokens
125
125
  }
126
- v2_request(HTTP_GET, path, **params)
126
+ v2_request(HTTP_GET, path, params)
127
127
  end
128
128
 
129
129
  # Remove profiles from a list
@@ -139,7 +139,7 @@ module Klaviyo
139
139
  :phone_numbers => phone_numbers,
140
140
  :push_tokens => push_tokens
141
141
  }
142
- v2_request(HTTP_DELETE, path, **params)
142
+ v2_request(HTTP_DELETE, path, params)
143
143
  end
144
144
 
145
145
  # Get all emails, phone numbers, along with reasons for list exclusion
@@ -151,7 +151,7 @@ module Klaviyo
151
151
  params = {
152
152
  :marker => marker
153
153
  }
154
- v2_request(HTTP_GET, path, **params)
154
+ v2_request(HTTP_GET, path, params)
155
155
  end
156
156
 
157
157
  # Get all of the emails, phone numbers, and push tokens for profiles in a given list or segment
@@ -1,6 +1,8 @@
1
1
  module Klaviyo
2
2
  class Metrics < Client
3
3
  EXPORT = 'export'
4
+ METRIC = 'metric'
5
+ METRICS = 'metrics'
4
6
 
5
7
  # Returns a list of all metrics in Klaviyo
6
8
  # @param page [Integer] which page to return, default 0
@@ -11,7 +13,7 @@ module Klaviyo
11
13
  :page => page,
12
14
  :count => count
13
15
  }
14
- v1_request(HTTP_GET, METRICS, **params)
16
+ v1_request(HTTP_GET, METRICS, params)
15
17
  end
16
18
 
17
19
  # Returns a batched timeline of all events in your Klaviyo account.
@@ -26,7 +28,7 @@ module Klaviyo
26
28
  :count => count,
27
29
  :sort => sort
28
30
  }
29
- v1_request(HTTP_GET, path, **params)
31
+ v1_request(HTTP_GET, path, params)
30
32
  end
31
33
 
32
34
  # Returns a batched timeline for one specific type of metric.
@@ -42,7 +44,7 @@ module Klaviyo
42
44
  :count => count,
43
45
  :sort => sort
44
46
  }
45
- v1_request(HTTP_GET, path, **params)
47
+ v1_request(HTTP_GET, path, params)
46
48
  end
47
49
 
48
50
  # Export event data, optionally filtering and segmented on available event properties
@@ -74,7 +76,7 @@ module Klaviyo
74
76
  :by => by,
75
77
  :count => count
76
78
  }
77
- v1_request(HTTP_GET, path, **params)
79
+ v1_request(HTTP_GET, path, params)
78
80
  end
79
81
  end
80
82
  end
@@ -12,8 +12,9 @@ module Klaviyo
12
12
  params = {
13
13
  :email => email
14
14
  }
15
- v2_request(HTTP_GET, path, **params)
16
- end
15
+ v2_request(HTTP_GET, path, params)
16
+ end
17
+
17
18
 
18
19
  # Retrieve all the data attributes for a Klaviyo Person ID.
19
20
  # @param person_id [String] the id of the profile
@@ -29,7 +30,7 @@ module Klaviyo
29
30
  # @return returns the updated person object
30
31
  def self.update_person_attributes(person_id, kwargs = {})
31
32
  path = "#{PERSON}/#{person_id}"
32
- v1_request(HTTP_PUT, path, **kwargs)
33
+ v1_request(HTTP_PUT, path, kwargs)
33
34
  end
34
35
 
35
36
  # Listing a person's event timeline
@@ -45,7 +46,7 @@ module Klaviyo
45
46
  :count => count,
46
47
  :sort => sort
47
48
  }
48
- v1_request(HTTP_GET, path, **params)
49
+ v1_request(HTTP_GET, path, params)
49
50
  end
50
51
 
51
52
  # Listing a person's event timeline for a particular metric
@@ -62,7 +63,7 @@ module Klaviyo
62
63
  :count => count,
63
64
  :sort => sort
64
65
  }
65
- v1_request(HTTP_GET, path, **params)
66
+ v1_request(HTTP_GET, path, params)
66
67
  end
67
68
  end
68
69
  end
@@ -4,15 +4,12 @@ module Klaviyo
4
4
  #
5
5
  # @kwarg :id [String] the customer or profile id
6
6
  # @kwarg :email [String] the customer or profile email
7
- # @kwarg :phone_number [String] the customer or profile phone number
8
7
  # @kwarg :properties [Hash] properties of the profile to add or update
9
- # @kwargs :method [String] the HTTP method to use for the request. Accepts 'get' or 'post'. Defaults to 'get'.
10
8
  def self.identify(kwargs = {})
11
9
  defaults = {:id => nil,
12
10
  :email => nil,
13
11
  :phone_number => nil,
14
- :properties => {},
15
- :method => HTTP_GET
12
+ :properties => {}
16
13
  }
17
14
  kwargs = defaults.merge(kwargs)
18
15
 
@@ -30,7 +27,7 @@ module Klaviyo
30
27
  :properties => properties
31
28
  }
32
29
 
33
- public_request(kwargs[:method], 'identify', **params)
30
+ public_request(HTTP_GET, 'identify', params)
34
31
  end
35
32
 
36
33
  # Used for tracking events and customer behaviors
@@ -42,7 +39,6 @@ module Klaviyo
42
39
  # @kwarg :properties [Hash] properties of the event
43
40
  # @kwargs :customer_properties [Hash] properties of the customer or profile
44
41
  # @kwargs :time [Integer] timestamp of the event
45
- # @kwargs :method [String] the HTTP method to use for the request. Accepts 'get' or 'post'. Defaults to 'get'.
46
42
  def self.track(event, kwargs = {})
47
43
  defaults = {
48
44
  :id => nil,
@@ -50,8 +46,7 @@ module Klaviyo
50
46
  :phone_number => nil,
51
47
  :properties => {},
52
48
  :customer_properties => {},
53
- :time => nil,
54
- :method => HTTP_GET
49
+ :time => nil
55
50
  }
56
51
 
57
52
  kwargs = defaults.merge(kwargs)
@@ -71,9 +66,9 @@ module Klaviyo
71
66
  :properties => kwargs[:properties],
72
67
  :customer_properties => customer_properties
73
68
  }
74
- params[:time] = kwargs[:time] if kwargs[:time]
69
+ params[:time] = kwargs[:time].to_time.to_i if kwargs[:time]
75
70
 
76
- public_request(kwargs[:method], 'track', **params)
71
+ public_request(HTTP_GET, 'track', params)
77
72
  end
78
73
 
79
74
  def self.track_once(event, kwargs = {})
@@ -10,87 +10,57 @@ module Klaviyo
10
10
  HTTP_PUT = 'put'
11
11
 
12
12
  ALL = 'all'
13
- METRIC = 'metric'
14
- METRICS = 'metrics'
15
13
  TIMELINE = 'timeline'
16
14
 
17
15
  DEFAULT_COUNT = 100
18
16
  DEFAULT_PAGE = 0
19
17
  DEFAULT_SORT_DESC = 'desc'
20
18
 
21
- CONTENT_JSON = 'application/json'
22
- CONTENT_URL_FORM = 'application/x-www-form-urlencoded'
23
-
24
19
  private
25
20
 
26
- def self.request(method, path, content_type, **kwargs)
21
+ def self.request(method, path, kwargs = {})
27
22
  check_private_api_key_exists()
28
23
  url = "#{BASE_API_URL}/#{path}"
29
24
  connection = Faraday.new(
30
25
  url: url,
31
26
  headers: {
32
- 'Content-Type' => content_type
27
+ 'Content-Type' => 'application/json'
33
28
  })
34
- if content_type == CONTENT_JSON
35
- kwargs[:body] = kwargs[:body].to_json
36
- end
37
29
  response = connection.send(method) do |req|
38
- req.body = kwargs[:body] || nil
30
+ req.body = kwargs[:body].to_json || nil
39
31
  end
40
32
  end
41
33
 
42
- def self.public_request(method, path, **kwargs)
43
- check_public_api_key_is_valid()
44
- if method == HTTP_GET
45
- params = build_params(kwargs)
46
- url = "#{BASE_API_URL}/#{path}?#{params}"
47
- res = Faraday.get(url).body
48
- elsif method == HTTP_POST
49
- url = URI("#{BASE_API_URL}/#{path}")
50
- response = Faraday.post(url) do |req|
51
- req.headers['Content-Type'] = CONTENT_URL_FORM
52
- req.headers['Accept'] = 'text/html'
53
- req.body = {data: "#{kwargs.to_json}"}
54
- end
55
- else
56
- raise KlaviyoError.new(INVALID_HTTP_METHOD)
57
- end
34
+ def self.public_request(method, path, kwargs = {})
35
+ check_public_api_key_exists()
36
+ params = build_params(kwargs)
37
+ url = "#{BASE_API_URL}/#{path}?#{params}"
38
+ res = Faraday.get(url).body
58
39
  end
59
40
 
60
- def self.v1_request(method, path, content_type: CONTENT_JSON, **kwargs)
61
- if content_type == CONTENT_URL_FORM
62
- data = {
63
- :body => {
64
- :api_key => Klaviyo.private_api_key
65
- }
66
- }
67
- data[:body] = data[:body].merge(kwargs[:params])
68
- full_url = "#{V1_API}/#{path}"
69
- request(method, full_url, content_type, **data)
70
- else
71
- defaults = {:page => nil,
72
- :count => nil,
73
- :since => nil,
74
- :sort => nil}
75
- params = defaults.merge(kwargs)
76
- query_params = encode_params(params)
77
- full_url = "#{V1_API}/#{path}?api_key=#{Klaviyo.private_api_key}#{query_params}"
78
- request(method, full_url, content_type)
79
- end
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)
80
50
  end
81
51
 
82
- def self.v2_request(method, path, **kwargs)
52
+ def self.v2_request(method, path, kwargs = {})
83
53
  path = "#{V2_API}/#{path}"
84
54
  key = {
85
55
  "api_key": "#{Klaviyo.private_api_key}"
86
56
  }
87
57
  data = {}
88
58
  data[:body] = key.merge(kwargs)
89
- request(method, path, CONTENT_JSON, **data)
59
+ request(method, path, data)
90
60
  end
91
61
 
92
62
  def self.build_params(params)
93
- "data=#{CGI.escape(Base64.encode64(JSON.generate(params)).gsub(/\n/, ''))}"
63
+ "data=#{Base64.encode64(JSON.generate(params)).gsub(/\n/,'')}"
94
64
  end
95
65
 
96
66
  def self.check_required_args(kwargs)
@@ -107,16 +77,10 @@ module Klaviyo
107
77
  end
108
78
  end
109
79
 
110
- def self.check_public_api_key_is_valid()
80
+ def self.check_public_api_key_exists()
111
81
  if !Klaviyo.public_api_key
112
82
  raise KlaviyoError.new(NO_PUBLIC_API_KEY_ERROR)
113
83
  end
114
- if ( Klaviyo.public_api_key =~ /pk_\w{34}$/ ) == 0
115
- raise KlaviyoError.new(PRIVATE_KEY_AS_PUBLIC)
116
- end
117
- if ( Klaviyo.public_api_key =~ /\w{6}$/ ) != 0
118
- raise KlaviyoError.new(INCORRECT_PUBLIC_API_KEY_LENGTH)
119
- end
120
84
  end
121
85
 
122
86
  def self.encode_params(kwargs)
@@ -9,7 +9,6 @@ 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'
13
12
  require_relative 'apis/data_privacy'
14
13
 
15
14
  module Klaviyo
@@ -24,7 +23,4 @@ module Klaviyo
24
23
  NO_PUBLIC_API_KEY_ERROR = 'Please provide your Public API key for this request'
25
24
  REQUIRED_ARG_ERROR = 'You must identify a user by email, ID or phone_number'
26
25
  INVALID_ID_TYPE_ERROR = 'Invalid id_type provided, must be one of: email, phone_number, person_id'
27
- PRIVATE_KEY_AS_PUBLIC = 'Private API key added in place of Public API key'
28
- INCORRECT_PUBLIC_API_KEY_LENGTH = 'Public API Key must be 6 characters'
29
- INVALID_HTTP_METHOD = 'Invalid HTTP method present, please use "get" or "post"'
30
26
  end
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.9
4
+ version: 2.0.4
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-07-30 00:00:00.000000000 Z
11
+ date: 2021-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -76,7 +76,6 @@ 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
80
79
  - lib/klaviyo/apis/lists.rb
81
80
  - lib/klaviyo/apis/metrics.rb
82
81
  - lib/klaviyo/apis/profiles.rb
@@ -1,97 +0,0 @@
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