klaviyo 2.0.6 → 2.0.1

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
- SHA256:
3
- metadata.gz: c50780aa07007d13ffcbfd5e88692dc46122641627511be21f4988012d48d20e
4
- data.tar.gz: 453757a911094db7394000a2aa59d4a0f31a3cb6aa9196e50a749dac3e51b336
2
+ SHA1:
3
+ metadata.gz: a6eaa11bdc826d37a755546d9cb771a469ff9039
4
+ data.tar.gz: 9f599d1c47bc281311a8adeb5f0c90e8467e4b65
5
5
  SHA512:
6
- metadata.gz: 62278b5560afe418dc8658e71646f36905cdb10c2b607b923377ea08c8ea247630fc782c6dbceda1d4fe2a88f5f332995abce6dcf90484cfbc1791516d4b6cd3
7
- data.tar.gz: 1358f2f45b1e92144f8a43f0f52a291f3ee859af3e416924e003a1b7c7a02553965d6240fecf8289eb41167c422565c8909b57344b8baed9091c6f022801183b
6
+ metadata.gz: 9a9ddabcb4a51a640a3f6b265d329a77934a5146803a4e4c67482fe4fbb7589e8dc722c193c55a7ae547ef917da6a61ad44e666442f7107f0963affdb8af7166
7
+ data.tar.gz: a04c3224f53c41f732e99f423b0e0e895772b3edd87b2824b179aec24f14c258f12f541631d035550fab32241f43558d04dd92b159fb9145e83d76737ee36d5b
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.6'
6
- s.date = '2021-04-08'
5
+ s.version = '2.0.1'
6
+ s.date = '2020-11-23'
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']
@@ -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
@@ -1,19 +1,6 @@
1
1
  module Klaviyo
2
2
  class Profiles < Client
3
3
  PERSON = 'person'
4
- PEOPLE = 'people'
5
- SEARCH = 'search'
6
-
7
- # Retrieves the id of the profile given email
8
- # @param email [String] the email of the profile
9
- # @return [JSON] a JSON object containing id of the profile
10
- def self.get_profile_id_by_email(email)
11
- path = "#{PEOPLE}/#{SEARCH}"
12
- params = {
13
- :email => email
14
- }
15
- v2_request(HTTP_GET, path, params)
16
- end
17
4
 
18
5
  # Retrieve all the data attributes for a Klaviyo Person ID.
19
6
  # @param person_id [String] the id of the profile
@@ -8,18 +8,16 @@ module Klaviyo
8
8
  def self.identify(kwargs = {})
9
9
  defaults = {:id => nil,
10
10
  :email => nil,
11
- :phone_number => nil,
12
11
  :properties => {}
13
12
  }
14
13
  kwargs = defaults.merge(kwargs)
15
14
 
16
- unless check_required_args(kwargs)
15
+ if !check_email_or_id_exists(kwargs)
17
16
  return
18
17
  end
19
18
 
20
19
  properties = kwargs[:properties]
21
20
  properties[:email] = kwargs[:email] unless kwargs[:email].to_s.empty?
22
- properties[:$phone_number] = kwargs[:phone_number] unless kwargs[:phone_number].to_s.empty?
23
21
  properties[:id] = kwargs[:id] unless kwargs[:id].to_s.empty?
24
22
 
25
23
  params = {
@@ -35,7 +33,6 @@ module Klaviyo
35
33
  # @param event [String] the event to track
36
34
  # @kwarg :id [String] the customer or profile id
37
35
  # @kwarg :email [String] the customer or profile email
38
- # @kwarg :phone_number [String] the customer or profile phone number
39
36
  # @kwarg :properties [Hash] properties of the event
40
37
  # @kwargs :customer_properties [Hash] properties of the customer or profile
41
38
  # @kwargs :time [Integer] timestamp of the event
@@ -43,7 +40,6 @@ module Klaviyo
43
40
  defaults = {
44
41
  :id => nil,
45
42
  :email => nil,
46
- :phone_number => nil,
47
43
  :properties => {},
48
44
  :customer_properties => {},
49
45
  :time => nil
@@ -51,13 +47,12 @@ module Klaviyo
51
47
 
52
48
  kwargs = defaults.merge(kwargs)
53
49
 
54
- unless check_required_args(kwargs)
50
+ if !check_email_or_id_exists(kwargs)
55
51
  return
56
52
  end
57
53
 
58
54
  customer_properties = kwargs[:customer_properties]
59
55
  customer_properties[:email] = kwargs[:email] unless kwargs[:email].to_s.empty?
60
- customer_properties[:$phone_number] = kwargs[:phone_number] unless kwargs[:phone_number].to_s.empty?
61
56
  customer_properties[:id] = kwargs[:id] unless kwargs[:id].to_s.empty?
62
57
 
63
58
  params = {
@@ -66,9 +61,9 @@ module Klaviyo
66
61
  :properties => kwargs[:properties],
67
62
  :customer_properties => customer_properties
68
63
  }
69
- params[:time] = kwargs[:time] if kwargs[:time]
64
+ params[:time] = kwargs[:time].to_time.to_i if kwargs[:time]
70
65
 
71
- public_request(HTTP_GET, 'track', **params)
66
+ public_request(HTTP_GET, 'track', params)
72
67
  end
73
68
 
74
69
  def self.track_once(event, kwargs = {})
@@ -10,81 +10,62 @@ 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)
34
+ def self.public_request(method, path, kwargs = {})
43
35
  check_public_api_key_exists()
44
36
  params = build_params(kwargs)
45
37
  url = "#{BASE_API_URL}/#{path}?#{params}"
46
38
  res = Faraday.get(url).body
47
39
  end
48
40
 
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
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)
69
50
  end
70
51
 
71
- def self.v2_request(method, path, **kwargs)
52
+ def self.v2_request(method, path, kwargs = {})
72
53
  path = "#{V2_API}/#{path}"
73
54
  key = {
74
55
  "api_key": "#{Klaviyo.private_api_key}"
75
56
  }
76
57
  data = {}
77
58
  data[:body] = key.merge(kwargs)
78
- request(method, path, CONTENT_JSON, data)
59
+ request(method, path, data)
79
60
  end
80
61
 
81
62
  def self.build_params(params)
82
- "data=#{CGI.escape(Base64.encode64(JSON.generate(params)).gsub(/\n/, ''))}"
63
+ "data=#{Base64.encode64(JSON.generate(params)).gsub(/\n/,'')}"
83
64
  end
84
65
 
85
- def self.check_required_args(kwargs)
86
- if kwargs[:email].to_s.empty? and kwargs[:phone_number].to_s.empty? and kwargs[:id].to_s.empty?
87
- raise Klaviyo::KlaviyoError.new(REQUIRED_ARG_ERROR)
66
+ def self.check_email_or_id_exists(kwargs)
67
+ if kwargs[:email].to_s.empty? and kwargs[:id].to_s.empty?
68
+ raise Klaviyo::KlaviyoError.new(NO_ID_OR_EMAIL_ERROR)
88
69
  else
89
70
  return true
90
71
  end
@@ -8,9 +8,6 @@ require_relative 'apis/public'
8
8
  require_relative 'apis/lists'
9
9
  require_relative 'apis/metrics'
10
10
  require_relative 'apis/profiles'
11
- require_relative 'apis/campaigns'
12
- require_relative 'apis/email_templates'
13
- require_relative 'apis/data_privacy'
14
11
 
15
12
  module Klaviyo
16
13
  class << self
@@ -22,6 +19,5 @@ module Klaviyo
22
19
 
23
20
  NO_PRIVATE_API_KEY_ERROR = 'Please provide your Private API key for this request'
24
21
  NO_PUBLIC_API_KEY_ERROR = 'Please provide your Public API key for this request'
25
- REQUIRED_ARG_ERROR = 'You must identify a user by email, ID or phone_number'
26
- INVALID_ID_TYPE_ERROR = 'Invalid id_type provided, must be one of: email, phone_number, person_id'
22
+ NO_ID_OR_EMAIL_ERROR = 'You must identify a user by email or ID'
27
23
  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.6
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Klaviyo Team
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-08 00:00:00.000000000 Z
11
+ date: 2020-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -74,9 +74,6 @@ extra_rdoc_files: []
74
74
  files:
75
75
  - klaviyo.gemspec
76
76
  - lib/klaviyo.rb
77
- - lib/klaviyo/apis/campaigns.rb
78
- - lib/klaviyo/apis/data_privacy.rb
79
- - lib/klaviyo/apis/email_templates.rb
80
77
  - lib/klaviyo/apis/lists.rb
81
78
  - lib/klaviyo/apis/metrics.rb
82
79
  - lib/klaviyo/apis/profiles.rb
@@ -87,7 +84,7 @@ files:
87
84
  homepage: https://www.klaviyo.com/
88
85
  licenses: []
89
86
  metadata: {}
90
- post_install_message:
87
+ post_install_message:
91
88
  rdoc_options: []
92
89
  require_paths:
93
90
  - lib
@@ -102,8 +99,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
99
  - !ruby/object:Gem::Version
103
100
  version: '0'
104
101
  requirements: []
105
- rubygems_version: 3.0.8
106
- signing_key:
102
+ rubyforge_project:
103
+ rubygems_version: 2.5.1
104
+ signing_key:
107
105
  specification_version: 4
108
106
  summary: You heard us, a Ruby wrapper for the Klaviyo API
109
107
  test_files: []
@@ -1,41 +0,0 @@
1
- module Klaviyo
2
- class Campaigns < Client
3
- CANCEL = 'cancel'
4
- CAMPAIGN = 'campaign'
5
- CAMPAIGNS = 'campaigns'
6
- SEND = 'send'
7
-
8
- # Retrieves all the campaigns from Klaviyo account
9
- # @return [List] of JSON formatted campaing objects
10
- def self.get_campaigns()
11
- v1_request(HTTP_GET, CAMPAIGNS)
12
- end
13
-
14
- # Retrieves the details of the list
15
- # @param campaign_id the if of campaign
16
- # @return [JSON] a JSON object containing information about the campaign
17
- def self.get_campaign_details(campaign_id)
18
- path = "#{CAMPAIGN}/#{campaign_id}"
19
-
20
- v1_request(HTTP_GET, path)
21
- end
22
-
23
- # Sends the campaign immediately
24
- # @param campaign_id [String] the id of campaign
25
- # @return will return with HTTP ok in case of success
26
- def self.send_campaign(campaign_id)
27
- path = "#{CAMPAIGN}/#{campaign_id}/#{SEND}"
28
-
29
- v1_request(HTTP_POST, path)
30
- end
31
-
32
- # Cancels the campaign with specified campaign_id
33
- # @param campaign_id [String] the id of campaign
34
- # @return [JSON] a JSON object containing the campaign details
35
- def self.cancel_campaign(campaign_id)
36
- path = "#{CAMPAIGN}/#{campaign_id}/#{CANCEL}"
37
-
38
- v1_request(HTTP_POST, path)
39
- end
40
- end
41
- end
@@ -1,19 +0,0 @@
1
- module Klaviyo
2
- class DataPrivacy < Client
3
- DATA_PRIVACY = 'data-privacy'
4
- DELETION_REQUEST = 'deletion-request'
5
-
6
- # Submits a data privacy-related deletion request
7
- # @param id_type [String] 'email' or 'phone_number' or 'person_id
8
- # @param identifier [String] value for the identifier specified
9
- # @return a dictionary with a confirmation that deletion task submitted for the customer
10
- def self.request_profile_deletion(id_type, identifier)
11
- unless ['email', 'phone_number', 'person_id'].include? id_type
12
- raise Klaviyo::KlaviyoError.new(INVALID_ID_TYPE_ERROR)
13
- end
14
- identifier = { id_type => identifier }
15
- path = "#{DATA_PRIVACY}/#{DELETION_REQUEST}"
16
- v2_request(HTTP_POST, path, identifier)
17
- end
18
- end
19
- end
@@ -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