klaviyo_api 1.3.1 → 1.4.0
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 +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/klaviyo_api/collections/next_marker_collection.rb +16 -0
- data/lib/klaviyo_api/collections/{profile.rb → paginated_collection.rb} +3 -1
- data/lib/klaviyo_api/resources/event.rb +52 -0
- data/lib/klaviyo_api/resources/metric.rb +41 -0
- data/lib/klaviyo_api/resources/profile.rb +3 -3
- data/lib/klaviyo_api/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa973ac50c2f9d84ffea184bbe4ca030c7ff1ffc99fd1a76f0ab51f845140487
|
4
|
+
data.tar.gz: ac7b1cf169a606910eb51aa5736d92e926c60e5862b710027bdd3fa468af4bed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2776400dcc29ef86aac04acb8c49a64d383e302ade62602666c6bb02d69573bde894ea785e61c045329c234c64d242f60182a043d3cc74729bf84ea35e67863c
|
7
|
+
data.tar.gz: 6b9b855da870f2de53a3090dcae65269986cb9bc87c5373873fff684fb57e4bb46f585a6ea3955f66d3b38b0b4b5d373a0dea650d8eb510fab36b40729e904a3
|
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KlaviyoAPI::Collections
|
4
|
+
# This collection is used for item types that rely on
|
5
|
+
# 'next' markers to provide pagination.
|
6
|
+
class NextMarkerCollection < ActiveResource::Collection
|
7
|
+
attr_accessor :next, :count
|
8
|
+
|
9
|
+
def initialize(response = {})
|
10
|
+
@count = response.delete 'count'
|
11
|
+
@next = response.delete 'next'
|
12
|
+
|
13
|
+
@elements = response['data'] || []
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,7 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module KlaviyoAPI::Collections
|
4
|
-
|
4
|
+
# This collection is used for item types that rely on pagination and
|
5
|
+
# provide `page`, `page_size`, etc.
|
6
|
+
class PaginatedCollection < ActiveResource::Collection
|
5
7
|
attr_accessor :total, :page, :page_size, :start, :end
|
6
8
|
|
7
9
|
def initialize(response = {})
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KlaviyoAPI
|
4
|
+
# Klaviyo has the concept of "timelines" on Metrics.
|
5
|
+
# A single entry in that timeline is an Event.
|
6
|
+
class Event < Base
|
7
|
+
ORIGINAL_PREFIX = '/api/v1/metric/:metric_id/'
|
8
|
+
self.prefix = ORIGINAL_PREFIX
|
9
|
+
|
10
|
+
self.element_name = 'timeline'
|
11
|
+
self.collection_name = 'timeline'
|
12
|
+
self.collection_parser = KlaviyoAPI::Collections::NextMarkerCollection
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def find_single(scope, options)
|
16
|
+
raise KlaviyoAPI::InvalidOperation, 'Cannot get single Event via API. Please use KlaviyoAPI::Event#all.'
|
17
|
+
end
|
18
|
+
|
19
|
+
def collection_path(prefix_options = {}, query_options = {})
|
20
|
+
# This needs to support both `metrics/timeline` and `metric/<id>/timeline,
|
21
|
+
# through `Event.all` and `Event.all params {metric_id: <id>}`. It gets a
|
22
|
+
# little messy.
|
23
|
+
if prefix_options.empty?
|
24
|
+
self.prefix = '/api/v1/metrics/'
|
25
|
+
end
|
26
|
+
|
27
|
+
check_prefix_options(prefix_options)
|
28
|
+
|
29
|
+
prefix_options, query_options = split_options(prefix_options) if query_options.nil?
|
30
|
+
query_options = query_options.deep_merge({ api_key: headers['api-key'] })
|
31
|
+
|
32
|
+
path = "#{prefix(prefix_options)}#{collection_name}#{format_extension}#{query_string(query_options)}"
|
33
|
+
|
34
|
+
self.prefix = ORIGINAL_PREFIX
|
35
|
+
|
36
|
+
path
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def destroy
|
41
|
+
raise KlaviyoAPI::InvalidOperation, 'Cannot delete Events via API.'
|
42
|
+
end
|
43
|
+
|
44
|
+
def create
|
45
|
+
raise KlaviyoAPI::InvalidOperation, 'Cannot create Events via API.'
|
46
|
+
end
|
47
|
+
|
48
|
+
def update
|
49
|
+
raise KlaviyoAPI::InvalidOperation, 'Cannot update Events via API.'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KlaviyoAPI
|
4
|
+
class Metric < Base
|
5
|
+
extend KlaviyoAPI::Support::Countable
|
6
|
+
|
7
|
+
self.prefix += 'v1/'
|
8
|
+
|
9
|
+
self.collection_parser = KlaviyoAPI::Collections::PaginatedCollection
|
10
|
+
|
11
|
+
has_many :events, class_name: 'KlaviyoAPI::Event'
|
12
|
+
|
13
|
+
class << self
|
14
|
+
def find_single(scope, options)
|
15
|
+
raise KlaviyoAPI::InvalidOperation, 'Cannot get single Metric via API. Please use KlaviyoAPI::Metric#all.'
|
16
|
+
end
|
17
|
+
|
18
|
+
def collection_path(prefix_options = {}, query_options = {})
|
19
|
+
super prefix_options, query_options.deep_merge({ api_key: headers['api-key'] })
|
20
|
+
end
|
21
|
+
|
22
|
+
# Get all Events for all Metrics
|
23
|
+
# https://www.klaviyo.com/docs/api/metrics#metrics-timeline
|
24
|
+
def events
|
25
|
+
KlaviyoAPI::Event.all
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def destroy
|
30
|
+
raise KlaviyoAPI::InvalidOperation, 'Cannot delete Metrics via API.'
|
31
|
+
end
|
32
|
+
|
33
|
+
def create
|
34
|
+
raise KlaviyoAPI::InvalidOperation, 'Cannot create Metrics via API.'
|
35
|
+
end
|
36
|
+
|
37
|
+
def update
|
38
|
+
raise KlaviyoAPI::InvalidOperation, 'Cannot update Metrics via API.'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -7,7 +7,7 @@ module KlaviyoAPI
|
|
7
7
|
self.prefix += 'v1/'
|
8
8
|
|
9
9
|
self.element_name = 'person'
|
10
|
-
self.collection_parser = KlaviyoAPI::Collections::
|
10
|
+
self.collection_parser = KlaviyoAPI::Collections::PaginatedCollection
|
11
11
|
|
12
12
|
class << self
|
13
13
|
def collection_path(prefix_options = {}, query_options = {})
|
@@ -20,11 +20,11 @@ module KlaviyoAPI
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def destroy
|
23
|
-
raise KlaviyoAPI::InvalidOperation
|
23
|
+
raise KlaviyoAPI::InvalidOperation, 'Cannot delete Profiles via API.'
|
24
24
|
end
|
25
25
|
|
26
26
|
def create
|
27
|
-
raise KlaviyoAPI::InvalidOperation
|
27
|
+
raise KlaviyoAPI::InvalidOperation, 'Cannot create Profiles via API.'
|
28
28
|
end
|
29
29
|
|
30
30
|
def update
|
data/lib/klaviyo_api/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: klaviyo_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- rewind.io
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04-
|
11
|
+
date: 2019-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activeresource
|
@@ -205,7 +205,8 @@ files:
|
|
205
205
|
- lib/active_resource/connection_ext.rb
|
206
206
|
- lib/klaviyo_api.rb
|
207
207
|
- lib/klaviyo_api/collections.rb
|
208
|
-
- lib/klaviyo_api/collections/
|
208
|
+
- lib/klaviyo_api/collections/next_marker_collection.rb
|
209
|
+
- lib/klaviyo_api/collections/paginated_collection.rb
|
209
210
|
- lib/klaviyo_api/configuration.rb
|
210
211
|
- lib/klaviyo_api/connection.rb
|
211
212
|
- lib/klaviyo_api/detailed_log_subscriber.rb
|
@@ -213,8 +214,10 @@ files:
|
|
213
214
|
- lib/klaviyo_api/json_formatter.rb
|
214
215
|
- lib/klaviyo_api/resources.rb
|
215
216
|
- lib/klaviyo_api/resources/base.rb
|
217
|
+
- lib/klaviyo_api/resources/event.rb
|
216
218
|
- lib/klaviyo_api/resources/list.rb
|
217
219
|
- lib/klaviyo_api/resources/list_member.rb
|
220
|
+
- lib/klaviyo_api/resources/metric.rb
|
218
221
|
- lib/klaviyo_api/resources/profile.rb
|
219
222
|
- lib/klaviyo_api/resources/support/countable.rb
|
220
223
|
- lib/klaviyo_api/session.rb
|