klaviyo 2.0.6 → 2.1.0

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: c50780aa07007d13ffcbfd5e88692dc46122641627511be21f4988012d48d20e
4
- data.tar.gz: 453757a911094db7394000a2aa59d4a0f31a3cb6aa9196e50a749dac3e51b336
3
+ metadata.gz: 637b6125081b06c6f8121a331e4bfaef0976a5293496a3f9fe5aaed3b8b96afc
4
+ data.tar.gz: 420103a5fec88c53524eeeeaf32826424feb3fe5bd4146b4127fc71059319512
5
5
  SHA512:
6
- metadata.gz: 62278b5560afe418dc8658e71646f36905cdb10c2b607b923377ea08c8ea247630fc782c6dbceda1d4fe2a88f5f332995abce6dcf90484cfbc1791516d4b6cd3
7
- data.tar.gz: 1358f2f45b1e92144f8a43f0f52a291f3ee859af3e416924e003a1b7c7a02553965d6240fecf8289eb41167c422565c8909b57344b8baed9091c6f022801183b
6
+ metadata.gz: 15ca790911f3306253271f36fe7e15da7c2e042a3a25614217aab530d52c4bfcfdf4cd675cd1bf4f761d7e4b9b126c07b87681def392daf9514d5ab072f016e2
7
+ data.tar.gz: 4eca152856c1ce76571c0745a6d437ed8ccea93e6fbf057f35d81771c80c11219f20198fb52cf561447554a939e8eea65fa0c2db041c54f426c7b70270d73a10
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.1.0'
6
+ s.date = '2021-10-01'
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
- identifier = { id_type => identifier }
14
+ data = Hash[id_type.to_sym, identifier]
15
15
  path = "#{DATA_PRIVACY}/#{DELETION_REQUEST}"
16
- v2_request(HTTP_POST, path, identifier)
16
+ v2_request(HTTP_POST, path, **data)
17
17
  end
18
18
  end
19
19
  end
@@ -37,7 +37,7 @@ module Klaviyo
37
37
  name: name,
38
38
  html: html
39
39
  }
40
- v1_request(HTTP_PUT, path, params)
40
+ v1_request(HTTP_PUT, path, **params)
41
41
  end
42
42
 
43
43
  # Deletes a given template.
@@ -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
@@ -11,7 +11,7 @@ module Klaviyo
11
11
  :page => page,
12
12
  :count => count
13
13
  }
14
- v1_request(HTTP_GET, METRICS, params)
14
+ v1_request(HTTP_GET, METRICS, **params)
15
15
  end
16
16
 
17
17
  # Returns a batched timeline of all events in your Klaviyo account.
@@ -26,7 +26,7 @@ module Klaviyo
26
26
  :count => count,
27
27
  :sort => sort
28
28
  }
29
- v1_request(HTTP_GET, path, params)
29
+ v1_request(HTTP_GET, path, **params)
30
30
  end
31
31
 
32
32
  # Returns a batched timeline for one specific type of metric.
@@ -42,7 +42,7 @@ module Klaviyo
42
42
  :count => count,
43
43
  :sort => sort
44
44
  }
45
- v1_request(HTTP_GET, path, params)
45
+ v1_request(HTTP_GET, path, **params)
46
46
  end
47
47
 
48
48
  # Export event data, optionally filtering and segmented on available event properties
@@ -74,7 +74,7 @@ module Klaviyo
74
74
  :by => by,
75
75
  :count => count
76
76
  }
77
- v1_request(HTTP_GET, path, params)
77
+ v1_request(HTTP_GET, path, **params)
78
78
  end
79
79
  end
80
80
  end
@@ -12,7 +12,7 @@ module Klaviyo
12
12
  params = {
13
13
  :email => email
14
14
  }
15
- v2_request(HTTP_GET, path, params)
15
+ v2_request(HTTP_GET, path, **params)
16
16
  end
17
17
 
18
18
  # Retrieve all the data attributes for a Klaviyo Person ID.
@@ -29,7 +29,7 @@ module Klaviyo
29
29
  # @return returns the updated person object
30
30
  def self.update_person_attributes(person_id, kwargs = {})
31
31
  path = "#{PERSON}/#{person_id}"
32
- v1_request(HTTP_PUT, path, kwargs)
32
+ v1_request(HTTP_PUT, path, **kwargs)
33
33
  end
34
34
 
35
35
  # Listing a person's event timeline
@@ -45,7 +45,7 @@ module Klaviyo
45
45
  :count => count,
46
46
  :sort => sort
47
47
  }
48
- v1_request(HTTP_GET, path, params)
48
+ v1_request(HTTP_GET, path, **params)
49
49
  end
50
50
 
51
51
  # Listing a person's event timeline for a particular metric
@@ -62,7 +62,7 @@ module Klaviyo
62
62
  :count => count,
63
63
  :sort => sort
64
64
  }
65
- v1_request(HTTP_GET, path, params)
65
+ v1_request(HTTP_GET, path, **params)
66
66
  end
67
67
  end
68
68
  end
@@ -4,12 +4,15 @@ 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
7
8
  # @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'.
8
10
  def self.identify(kwargs = {})
9
11
  defaults = {:id => nil,
10
12
  :email => nil,
11
13
  :phone_number => nil,
12
- :properties => {}
14
+ :properties => {},
15
+ :method => HTTP_GET
13
16
  }
14
17
  kwargs = defaults.merge(kwargs)
15
18
 
@@ -27,7 +30,7 @@ module Klaviyo
27
30
  :properties => properties
28
31
  }
29
32
 
30
- public_request(HTTP_GET, 'identify', params)
33
+ public_request(kwargs[:method], 'identify', **params)
31
34
  end
32
35
 
33
36
  # Used for tracking events and customer behaviors
@@ -39,6 +42,7 @@ module Klaviyo
39
42
  # @kwarg :properties [Hash] properties of the event
40
43
  # @kwargs :customer_properties [Hash] properties of the customer or profile
41
44
  # @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'.
42
46
  def self.track(event, kwargs = {})
43
47
  defaults = {
44
48
  :id => nil,
@@ -46,7 +50,8 @@ module Klaviyo
46
50
  :phone_number => nil,
47
51
  :properties => {},
48
52
  :customer_properties => {},
49
- :time => nil
53
+ :time => nil,
54
+ :method => HTTP_GET
50
55
  }
51
56
 
52
57
  kwargs = defaults.merge(kwargs)
@@ -68,7 +73,7 @@ module Klaviyo
68
73
  }
69
74
  params[:time] = kwargs[:time] if kwargs[:time]
70
75
 
71
- public_request(HTTP_GET, 'track', **params)
76
+ public_request(kwargs[:method], 'track', **params)
72
77
  end
73
78
 
74
79
  def self.track_once(event, kwargs = {})
@@ -4,6 +4,9 @@ module Klaviyo
4
4
  V1_API = 'v1'
5
5
  V2_API = 'v2'
6
6
 
7
+ KL_VERSION = '2.1.0'
8
+ KL_USER_AGENT = "Ruby_Klaviyo/#{KL_VERSION}"
9
+
7
10
  HTTP_DELETE = 'delete'
8
11
  HTTP_GET = 'get'
9
12
  HTTP_POST = 'post'
@@ -29,7 +32,8 @@ module Klaviyo
29
32
  connection = Faraday.new(
30
33
  url: url,
31
34
  headers: {
32
- 'Content-Type' => content_type
35
+ 'Content-Type' => content_type,
36
+ 'User-Agent' => KL_USER_AGENT
33
37
  })
34
38
  if content_type == CONTENT_JSON
35
39
  kwargs[:body] = kwargs[:body].to_json
@@ -40,10 +44,22 @@ module Klaviyo
40
44
  end
41
45
 
42
46
  def self.public_request(method, path, **kwargs)
43
- check_public_api_key_exists()
44
- params = build_params(kwargs)
45
- url = "#{BASE_API_URL}/#{path}?#{params}"
46
- res = Faraday.get(url).body
47
+ check_public_api_key_is_valid()
48
+ if method == HTTP_GET
49
+ params = build_params(kwargs)
50
+ url = "#{BASE_API_URL}/#{path}?#{params}"
51
+ res = Faraday.get(url, {}, { 'User-Agent' => KL_USER_AGENT }).body
52
+ elsif method == HTTP_POST
53
+ url = URI("#{BASE_API_URL}/#{path}")
54
+ response = Faraday.post(url) do |req|
55
+ req.headers['Content-Type'] = CONTENT_URL_FORM
56
+ req.headers['Accept'] = 'text/html'
57
+ req.headers['User-Agent'] = KL_USER_AGENT
58
+ req.body = {data: "#{kwargs.to_json}"}
59
+ end
60
+ else
61
+ raise KlaviyoError.new(INVALID_HTTP_METHOD)
62
+ end
47
63
  end
48
64
 
49
65
  def self.v1_request(method, path, content_type: CONTENT_JSON, **kwargs)
@@ -55,7 +71,7 @@ module Klaviyo
55
71
  }
56
72
  data[:body] = data[:body].merge(kwargs[:params])
57
73
  full_url = "#{V1_API}/#{path}"
58
- request(method, full_url, content_type, data)
74
+ request(method, full_url, content_type, **data)
59
75
  else
60
76
  defaults = {:page => nil,
61
77
  :count => nil,
@@ -75,7 +91,7 @@ module Klaviyo
75
91
  }
76
92
  data = {}
77
93
  data[:body] = key.merge(kwargs)
78
- request(method, path, CONTENT_JSON, data)
94
+ request(method, path, CONTENT_JSON, **data)
79
95
  end
80
96
 
81
97
  def self.build_params(params)
@@ -96,10 +112,15 @@ module Klaviyo
96
112
  end
97
113
  end
98
114
 
99
- def self.check_public_api_key_exists()
115
+ def self.check_public_api_key_is_valid()
100
116
  if !Klaviyo.public_api_key
101
117
  raise KlaviyoError.new(NO_PUBLIC_API_KEY_ERROR)
102
118
  end
119
+ if ( Klaviyo.public_api_key =~ /pk_\w{34}$/ ) == 0
120
+ warn(PRIVATE_KEY_AS_PUBLIC)
121
+ elsif ( Klaviyo.public_api_key =~ /\w{6}$/ ) != 0
122
+ raise KlaviyoError.new(INCORRECT_PUBLIC_API_KEY_LENGTH)
123
+ end
103
124
  end
104
125
 
105
126
  def self.encode_params(kwargs)
@@ -24,4 +24,7 @@ module Klaviyo
24
24
  NO_PUBLIC_API_KEY_ERROR = 'Please provide your Public API key for this request'
25
25
  REQUIRED_ARG_ERROR = 'You must identify a user by email, ID or phone_number'
26
26
  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"'
27
30
  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.1.0
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: 2021-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -87,7 +87,7 @@ files:
87
87
  homepage: https://www.klaviyo.com/
88
88
  licenses: []
89
89
  metadata: {}
90
- post_install_message:
90
+ post_install_message:
91
91
  rdoc_options: []
92
92
  require_paths:
93
93
  - lib
@@ -102,8 +102,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  requirements: []
105
- rubygems_version: 3.0.8
106
- signing_key:
105
+ rubygems_version: 3.0.3
106
+ signing_key:
107
107
  specification_version: 4
108
108
  summary: You heard us, a Ruby wrapper for the Klaviyo API
109
109
  test_files: []