selligent 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'selligent/configuration'
4
+ require 'selligent/connection'
5
+ require 'selligent/client/content'
6
+ require 'selligent/client/cumulio'
7
+ require 'selligent/client/data'
8
+ require 'selligent/client/journeys'
9
+ require 'selligent/client/lists'
10
+ require 'selligent/client/organizations'
11
+ require 'selligent/client/single_batch'
12
+ require 'selligent/client/status'
13
+ require 'selligent/client/stored_procedures'
14
+ require 'selligent/client/tasks'
15
+ require 'selligent/client/transactional_bulk'
16
+ require 'selligent/client/transactionals'
17
+ require 'selligent/middlewares/authorization'
18
+
19
+ module Selligent
20
+ # The actual Selligent client
21
+ class Client
22
+ extend Forwardable
23
+
24
+ include Selligent::Connection
25
+ include Selligent::Client::Content
26
+ include Selligent::Client::Cumulio
27
+ include Selligent::Client::Data
28
+ include Selligent::Client::Journeys
29
+ include Selligent::Client::Lists
30
+ include Selligent::Client::Organizations
31
+ include Selligent::Client::SingleBatch
32
+ include Selligent::Client::Status
33
+ include Selligent::Client::StoredProcedures
34
+ include Selligent::Client::Tasks
35
+ include Selligent::Client::TransactionalBulk
36
+ include Selligent::Client::Transactionals
37
+
38
+ attr_reader :config
39
+
40
+ def initialize(options = {})
41
+ Selligent::Middlewares::Authorization.setup!
42
+ @config = Selligent::Configuration.new(options)
43
+ end
44
+
45
+ def configure
46
+ yield config
47
+ end
48
+
49
+ def root_url
50
+ '/Portal/Api'
51
+ end
52
+
53
+ def base_url
54
+ "#{root_url}/organizations/#{config.organization}"
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,180 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Selligent
4
+ class Client
5
+ # Implements the content endpoints
6
+ #
7
+ # /organizations/:organization/content/*
8
+ module Content
9
+ # Create simple (HTML only) single language email message content
10
+ #
11
+ # The model has the following shape:
12
+ #
13
+ # {
14
+ # "properties": {
15
+ # "name": "Message name",
16
+ # "description": "description",
17
+ # "api_name": "message_name",
18
+ # "tags": [
19
+ # "tag1",
20
+ # "tag2"
21
+ # ],
22
+ # "languages": [
23
+ # "en"
24
+ # ],
25
+ # "default_language": "en",
26
+ # "empty_language": "en",
27
+ # "audience_api_name": "my_audience"
28
+ # },
29
+ # "headers": {
30
+ # "en": [
31
+ # {
32
+ # "from_domain": "example.net",
33
+ # "from_alias": "info",
34
+ # "reply_email": "reply@example.net",
35
+ # "reply_alias": "Your reply alias",
36
+ # "to_alias": "John Doe",
37
+ # "preheader": "Put your preheader text here",
38
+ # "subject": "Put your subject here"
39
+ # }
40
+ # ]
41
+ # },
42
+ # "content": {
43
+ # "text": "Hello World!",
44
+ # "html": "<html><body>h1>Hello World!</h1></body></html>"
45
+ # }
46
+ # }
47
+ #
48
+ # @param model [Hash] The model
49
+ # @param params [Hash] The query parameters
50
+ # @option params [Boolean] :publish Indicate whether content should be published
51
+ def create_email(model, params = {})
52
+ post("#{base_url}/content/message", model) do |req|
53
+ req.params.merge!(params)
54
+ end
55
+ end
56
+
57
+ # Create mobile push message content
58
+ #
59
+ # The model has the following shape:
60
+ #
61
+ # {
62
+ # "properties": {
63
+ # "name": "Message name",
64
+ # "description": "description",
65
+ # "api_name": "message_name",
66
+ # "tags": [
67
+ # "tag1",
68
+ # "tag2"
69
+ # ],
70
+ # "languages": [
71
+ # "en"
72
+ # ],
73
+ # "default_language": "en",
74
+ # "empty_language": "en",
75
+ # "audience_api_name": "my_audience"
76
+ # },
77
+ # "mobile_message_properties": {
78
+ # "distribution_type": "MobilePush",
79
+ # "custom_in_app_content": true,
80
+ # "in_app_content_type": "Text",
81
+ # "expiration_date": "2018-10-26T10:11:32.4188693+02:00"
82
+ # },
83
+ # "content": {
84
+ # "en": {
85
+ # "mobile_push": {
86
+ # "title": "MP Title en",
87
+ # "content": "MP Content en"
88
+ # },
89
+ # "in_app": {
90
+ # "title": "IA Title en",
91
+ # "content": {
92
+ # "text": "IA Content en",
93
+ # "url": "http://example.com"
94
+ # }
95
+ # }
96
+ # }
97
+ # }
98
+ # }
99
+ #
100
+ # @param model [Hash] The model
101
+ # @param params [Hash] The query parameters
102
+ # @option params [Boolean] :publish Indicate whether content should be published
103
+ def create_push_message(model, params = {})
104
+ post("#{base_url}/content/mobile", model) do |req|
105
+ req.params.merge!(params)
106
+ end
107
+ end
108
+
109
+ # Create simple page content
110
+ #
111
+ # The model has the following shape:
112
+ #
113
+ # {
114
+ # "properties": {
115
+ # "name": "Message name",
116
+ # "description": "description",
117
+ # "api_name": "message_name",
118
+ # "tags": [
119
+ # "tag1",
120
+ # "tag2"
121
+ # ],
122
+ # "languages": [
123
+ # "en"
124
+ # ],
125
+ # "default_language": "en",
126
+ # "empty_language": "en",
127
+ # "audience_api_name": "my_audience"
128
+ # },
129
+ # "content": {
130
+ # "html": "<html><body><h1>Hello World!</h1></body></html>"
131
+ # }
132
+ # }
133
+ #
134
+ # @param model [Hash] The model
135
+ # @param params [Hash] The query parameters
136
+ # @option params [Boolean] :publish Indicate whether content should be published
137
+ def create_page(model, params = {})
138
+ post("#{base_url}/content/page", model) do |req|
139
+ req.params.merge!(params)
140
+ end
141
+ end
142
+
143
+ # Create SMS content
144
+ #
145
+ # The model has the following shape:
146
+ #
147
+ # {
148
+ # "properties": {
149
+ # "name": "Message name",
150
+ # "description": "description",
151
+ # "api_name": "message_name",
152
+ # "tags": [
153
+ # "tag1",
154
+ # "tag2"
155
+ # ],
156
+ # "languages": [
157
+ # "en"
158
+ # ],
159
+ # "default_language": "en",
160
+ # "empty_language": "en",
161
+ # "audience_api_name": "my_audience"
162
+ # },
163
+ # "content": {
164
+ # "en": {
165
+ # "text": "Text"
166
+ # }
167
+ # }
168
+ # }
169
+ #
170
+ # @param model [Hash] The model
171
+ # @param params [Hash] The query parameters
172
+ # @option params [Boolean] :publish Indicate whether content should be published
173
+ def create_sms(model, params = {})
174
+ post("#{base_url}/content/sms", model) do |req|
175
+ req.params.merge!(params)
176
+ end
177
+ end
178
+ end
179
+ end
180
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Selligent
4
+ class Client
5
+ # Implements the Cumulio endpoints
6
+ #
7
+ # /reporting/cumulio/:organization/{datasets, query}
8
+ module Cumulio
9
+ # Get datasets
10
+ def cumulio_datasets
11
+ get "#{root_url}/reporting/cumulio/#{config.organization}/datasets"
12
+ end
13
+
14
+ # Run a cumulio query
15
+ #
16
+ # The model has the following shape:
17
+ #
18
+ # {
19
+ # "id": "string",
20
+ # "columns": [
21
+ # {
22
+ # "column_id": "string",
23
+ # "aggregation": "none",
24
+ # "level": "none"
25
+ # }
26
+ # ],
27
+ # "filters": [
28
+ # {
29
+ # "column_id": "string",
30
+ # "expression": "unknown",
31
+ # "value": [
32
+ # "string"
33
+ # ]
34
+ # }
35
+ # ],
36
+ # "user": {
37
+ # "id": "string",
38
+ # "name": "string",
39
+ # "email": "string",
40
+ # "authorization_id": "string",
41
+ # "metadata": {
42
+ # "tenant_id": "string",
43
+ # "organization": "string"
44
+ # }
45
+ # },
46
+ # "options": {
47
+ # "id": "string",
48
+ # "name": "string",
49
+ # "email": "string",
50
+ # "authorization_id": "string",
51
+ # "metadata": {
52
+ # "tenant_id": "string",
53
+ # "organization": "string"
54
+ # }
55
+ # }
56
+ # }
57
+ #
58
+ # @param model [Hash] The model
59
+ def cumulio_query(model)
60
+ post "#{root_url}/reporting/cumulio/#{config.organization}/query", model
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,145 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Selligent
4
+ class Client
5
+ # Implements the data endpoints
6
+ #
7
+ # /organizations/:organization/lists/data/*
8
+ module Data
9
+ # Deletes data from the list with the given api-name in the given organization
10
+ #
11
+ # @param api_name [String] The api name
12
+ # @param data [Array<Array>] The data
13
+ # @param params [Hash] Additional options
14
+ # @option params [String] :keyFields Comma-separated list of the key fields to delete records
15
+ # @option params [String] :fields Comma-separated list of the fields in data records
16
+ # @option params [String] :mode Data transfer mode (Sync or Stream)
17
+ # @option params [String] :errorHandling Error handling options
18
+ def delete_data(api_name, data, params = {})
19
+ delete("#{base_url}/lists/#{api_name}/data", params) do |req|
20
+ req.body = data.to_json
21
+ end
22
+ end
23
+
24
+ # Loads data into the list with the given api-name in the given organization
25
+ #
26
+ # @param api_name [String] The api name
27
+ # @param data [Array<Array>] The data
28
+ # @param params [Hash] Additional options
29
+ # @option params [String] :keyFields Comma-separated list of the key fields to delete records
30
+ # @option params [String] :fields Comma-separated list of the fields in data records
31
+ # @option params [String] :mode Data transfer mode (Sync or Stream)
32
+ # @option params [String] :deduplication De-duplication option during an import data
33
+ # @option params [String] :data_import_option Data import option during an import data
34
+ # @option params [String] :create_segment_name Segment name at the time of creation
35
+ # @option params [String] :create_segment_api_name Segment api name at the time of creation
36
+ # @option params [String] :errorHandling Error handling options
37
+ def load_data(api_name, data, params = {})
38
+ post("#{base_url}/lists/#{api_name}/data/load", data) do |req|
39
+ req.params.merge!(params)
40
+ end
41
+ end
42
+
43
+ # Method to search for data records in a specific table
44
+ #
45
+ # The request has the following shape:
46
+ #
47
+ # {
48
+ # "fields": [
49
+ # "FIELD1",
50
+ # "FIELD2"
51
+ # ],
52
+ # "filters": [
53
+ # {
54
+ # "field_name": "FIELD1",
55
+ # "operator": "EqualTo",
56
+ # "field_value": "VALUE"
57
+ # }
58
+ # ],
59
+ # "skip": 20,
60
+ # "take": 20,
61
+ # "order_by": "FIELD2",
62
+ # "order_by_direction": "ASC"
63
+ # }
64
+ #
65
+ # @param api_name [String] The api name
66
+ # @param request [Hash] Details on the data that should be searched
67
+ # @param params [Hash] Additional options
68
+ # @option params [String] :mode Data transfer mode (Sync or Stream)
69
+ def search_data(api_name, request, params = {})
70
+ post("#{base_url}/lists/#{api_name}/data/search", request) do |req|
71
+ req.params.merge!(params)
72
+ end
73
+ end
74
+
75
+ # Deletes data via json from the segment with the given segment-api-name in the list
76
+ # with the given api-name in the given organization
77
+ #
78
+ # @param api_name [String] The api name
79
+ # @param segment_api_name [String] API name of the segment
80
+ # @param data [Array<Array>] The data
81
+ # @param params [Hash] Additional options
82
+ # @option params [String] :keyFields Comma-separated list of the key fields to delete records
83
+ # @option params [String] :fields Comma-separated list of the fields in data records
84
+ # @option params [String] :mode Data transfer mode (Sync or Stream)
85
+ # @option params [String] :errorHandling Error handling options
86
+ def delete_data_from_segment(api_name, segment_api_name, data, params = {})
87
+ delete("#{base_url}/lists/#{api_name}/segments/#{segment_api_name}/data", params) do |req|
88
+ req.body = data.to_json
89
+ end
90
+ end
91
+
92
+ # Loads data into the segment with the given segment-api-name in the list
93
+ # with the given api-name in the given organization
94
+ #
95
+ # @param api_name [String] The api name
96
+ # @param segment_api_name [String] API name of the segment
97
+ # @param data [Array<Array>] The data
98
+ # @param params [Hash] Additional options
99
+ # @option params [String] :fields Comma-separated list of the fields in data records
100
+ # @option params [String] :mode Data transfer mode (Sync or Stream)
101
+ # @option params [String] :deduplication De-duplication option during an import data
102
+ # @option params [String] :errorHandling Error handling options
103
+ def load_data_into_segment(api_name, segment_api_name, data, params = {})
104
+ post("#{base_url}/lists/#{api_name}/segments/#{segment_api_name}/data/load", data) do |req|
105
+ req.params.merge!(params)
106
+ end
107
+ end
108
+
109
+ # Method to search for data records within a segment of specific table
110
+ #
111
+ # The request has the following shape:
112
+ #
113
+ # {
114
+ # "fields": [
115
+ # "FIELD1",
116
+ # "FIELD2"
117
+ # ],
118
+ # "filters": [
119
+ # {
120
+ # "field_name": "FIELD1",
121
+ # "operator": "EqualTo",
122
+ # "field_value": "VALUE"
123
+ # }
124
+ # ],
125
+ # "skip": 20,
126
+ # "take": 20,
127
+ # "order_by": "FIELD2",
128
+ # "order_by_direction": "ASC"
129
+ # }
130
+ # @param api_name [String] The api name
131
+ # @param segment_api_name [String] API name of the segment
132
+ # @param request [Hash] details on the data that should be searched
133
+ # @param params [Hash] Additional options
134
+ # @option params [String] :mode Data transfer mode (Sync or Stream)
135
+ def search_data_within_segment(api_name, segment_api_name, request, params = {})
136
+ post(
137
+ "#{base_url}/lists/#{api_name}/segments/#{segment_api_name}/data/search",
138
+ request
139
+ ) do |req|
140
+ req.params.merge!(params)
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end