cxf 0.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 +7 -0
- data/Gemfile +12 -0
- data/README.md +395 -0
- data/lib/client.rb +447 -0
- data/lib/contact/config/config.rb +4 -0
- data/lib/contact/content/content.rb +4 -0
- data/lib/contact/ecommerce/ecommerce.rb +4 -0
- data/lib/contact.rb +284 -0
- data/lib/cxf/controllers/admin_base_controller.rb +17 -0
- data/lib/cxf/controllers/base_api_controller.rb +28 -0
- data/lib/cxf/controllers/base_controller.rb +54 -0
- data/lib/cxf/controllers/concerns/cxf_clients.rb +104 -0
- data/lib/cxf/controllers/concerns/read_config_file.rb +30 -0
- data/lib/cxf/controllers/contact_api_controller.rb +17 -0
- data/lib/cxf/controllers/public_api_controller.rb +14 -0
- data/lib/cxf/controllers/user_api_controller.rb +16 -0
- data/lib/cxf/helpers/contact_auth_helper.rb +86 -0
- data/lib/cxf/helpers/cxf_helper.rb +52 -0
- data/lib/cxf/helpers/proxy_controllers_methods.rb +144 -0
- data/lib/cxf/helpers/threads_helper.rb +109 -0
- data/lib/cxf/helpers/user_auth_helper.rb +74 -0
- data/lib/cxf.rb +15 -0
- data/lib/errors.rb +109 -0
- data/lib/generators/cxf_assets_controller.rb +7 -0
- data/lib/generators/cxf_config.yml.erb +27 -0
- data/lib/generators/cxf_contact_controller.rb +7 -0
- data/lib/generators/cxf_files_generator.rb +28 -0
- data/lib/generators/cxf_public_controller.rb +7 -0
- data/lib/generators/cxf_user_controller.rb +7 -0
- data/lib/pub/config/config.rb +6 -0
- data/lib/pub/content/assets.rb +16 -0
- data/lib/pub/content/content.rb +9 -0
- data/lib/pub/ecommerce/ecommerce.rb +6 -0
- data/lib/pub.rb +163 -0
- data/lib/user/config/attribute_groups.rb +79 -0
- data/lib/user/config/attributes.rb +88 -0
- data/lib/user/config/calendars.rb +91 -0
- data/lib/user/config/config.rb +23 -0
- data/lib/user/config/relationships.rb +141 -0
- data/lib/user/config/seeds.rb +55 -0
- data/lib/user/config/system_settings.rb +54 -0
- data/lib/user/config/tags.rb +61 -0
- data/lib/user/config/taxonomies.rb +120 -0
- data/lib/user/config/users.rb +77 -0
- data/lib/user/config/views.rb +68 -0
- data/lib/user/contacts/contacts.rb +22 -0
- data/lib/user/content/assets.rb +294 -0
- data/lib/user/content/block_templates.rb +72 -0
- data/lib/user/content/blocks.rb +109 -0
- data/lib/user/content/content.rb +174 -0
- data/lib/user/content/instances.rb +121 -0
- data/lib/user/content/print_versions.rb +129 -0
- data/lib/user/content/stories.rb +110 -0
- data/lib/user/content/story_templates.rb +97 -0
- data/lib/user/content/templates.rb +72 -0
- data/lib/user/crm/companies.rb +111 -0
- data/lib/user/crm/contacts.rb +294 -0
- data/lib/user/crm/crm.rb +9 -0
- data/lib/user/ecommerce/ecommerce.rb +29 -0
- data/lib/user/ecommerce/item_prices.rb +89 -0
- data/lib/user/ecommerce/locations.rb +171 -0
- data/lib/user/ecommerce/price_lists.rb +75 -0
- data/lib/user/ecommerce/product_templates.rb +106 -0
- data/lib/user/ecommerce/product_variations.rb +133 -0
- data/lib/user/ecommerce/product_versions.rb +107 -0
- data/lib/user/ecommerce/products.rb +156 -0
- data/lib/user/ecommerce/skus.rb +90 -0
- data/lib/user/ecommerce/taxes.rb +84 -0
- data/lib/user/ecommerce/variant_options.rb +71 -0
- data/lib/user/ecommerce/variant_values.rb +74 -0
- data/lib/user/ecommerce/vouchers.rb +90 -0
- data/lib/user/helpers/helpers.rb +116 -0
- data/lib/user/helpers/object_activities.rb +85 -0
- data/lib/user/helpers/object_folders.rb +84 -0
- data/lib/user/helpers/user_folders.rb +85 -0
- data/lib/user/marketing/marketing.rb +123 -0
- data/lib/user/profile/profile.rb +104 -0
- data/lib/user.rb +98 -0
- metadata +227 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 70de20a783868a1123abc60270bc196593592593e7fa8c64df844190b80b534a
|
4
|
+
data.tar.gz: b7d630be4143207435a458704e07225a38d655c9ad69a5dcd1e645591c54b70e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ac3d86ac3f771fe039a11d8b2e16665c00d018918014acec644c91f3dc24b5368270392ab45d09e588212b49527b59b1b5610fe4f3ded7036016ac7a7b485b04
|
7
|
+
data.tar.gz: 681adb1f34a99cbee2c3bbef1bef98ce1bc6354afea6b9318a188faa4157b2d681993dce63f201cb242470923bcae315df18737168caa5753a06b6908f845ed0
|
data/Gemfile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
source :rubygems
|
2
|
+
|
3
|
+
gem 'json'
|
4
|
+
gem 'httparty'
|
5
|
+
gem 'addressable'
|
6
|
+
gem 'rails-reverse-proxy', '~> 0.9.1'
|
7
|
+
gem 'redis'
|
8
|
+
gem 'mongo', "~> 2"
|
9
|
+
gem 'concurrent-ruby', require: 'concurrent'
|
10
|
+
gem 'rubocop', require: false
|
11
|
+
gem 'rack', '~> 2.2.0'
|
12
|
+
gem 'rack-test', '~> 1.1.0'
|
data/README.md
ADDED
@@ -0,0 +1,395 @@
|
|
1
|
+
# Cxf Ruby SDK
|
2
|
+
|
3
|
+
This is a library to connect apps built on ruby to Cxf.Cloud
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add gem to the Gemfile
|
8
|
+
|
9
|
+
```bash
|
10
|
+
gem 'cxf'
|
11
|
+
```
|
12
|
+
|
13
|
+
## Configure
|
14
|
+
|
15
|
+
Add the following configuration to the controller and include MintClients and UserAuthHelper (if you log in with a contact, you can use ContactAuthHelper)
|
16
|
+
NOTE: Proxy automatically renew the token, so you don't need to worry about it
|
17
|
+
|
18
|
+
if you haven't run the generator yet, you can use after_action to update the token
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
require 'cxf'
|
22
|
+
|
23
|
+
class ApplicationController < ActionController::Base
|
24
|
+
include CxfClients
|
25
|
+
include UserAuthHelper # if you log in with a user
|
26
|
+
include ContactAuthHelper # if you log in with a contact
|
27
|
+
|
28
|
+
after_action :update_user_tokens # if you haven't run the generator yet and you log in with a user
|
29
|
+
after_action :update_contact_tokens # if you haven't run the generator yet and you log in with a contact
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
## Usage
|
34
|
+
|
35
|
+
Using Cxf Public API
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
cxf_pub = Cxf::Pub.new(cxf_url, api_key)
|
39
|
+
cxf_pub.get_stories
|
40
|
+
```
|
41
|
+
|
42
|
+
Using Cxf Contact API
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
cxf_contact_login(email, password)
|
46
|
+
@cxf_contact.me
|
47
|
+
```
|
48
|
+
|
49
|
+
Using Cxf User API
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
cxf_user_login(email, password)
|
53
|
+
@cxf_user.get_contacts
|
54
|
+
```
|
55
|
+
|
56
|
+
Using Cxf User API by Service account
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
# Usually the api_key and the session token are the same, you can go to the service accounts section
|
60
|
+
# from your Cxf instance and generate your service account api key
|
61
|
+
cxf_service_account = Cxf::User.new(cxf_url, api_key, api_key)
|
62
|
+
cxf_service_account.get_contacts
|
63
|
+
```
|
64
|
+
|
65
|
+
## Generate cxf files
|
66
|
+
|
67
|
+
This command will generate the cxf_config.yml.erb file, API controlles and routes to have available the cxf
|
68
|
+
endpoints
|
69
|
+
|
70
|
+
```bash
|
71
|
+
rails generate cxf_files
|
72
|
+
```
|
73
|
+
|
74
|
+
## Contact tracking usage
|
75
|
+
|
76
|
+
Your app controller needs to be inherited from Cxf::BaseController
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
# application_controller.rb
|
80
|
+
|
81
|
+
class ApplicationController < Cxf::BaseController
|
82
|
+
end
|
83
|
+
```
|
84
|
+
|
85
|
+
This heritance will make the following class variables available:
|
86
|
+
|
87
|
+
| Variable | Description |
|
88
|
+
|----------------|:------------------------------------------------------------------------------------:|
|
89
|
+
| @host | Host defined in cxf_config.yml.erb file |
|
90
|
+
| @api_key | API key defined in cxf_config.yml.erb file |
|
91
|
+
| @cxf_pub | An already instanced public client |
|
92
|
+
| @contact_token | A token used by cxf to identify the contact |
|
93
|
+
| @visit_id | An identifier of the visit registered |
|
94
|
+
| @cxf_contact | An already instanced contact client (not usable until call the contact login method) |
|
95
|
+
|
96
|
+
And the following controller methods:
|
97
|
+
|
98
|
+
| Method | Parameters | Return value | Description |
|
99
|
+
|------------------------------|:-----------------------:|:------------:|:--------------------------------------------------------------:|
|
100
|
+
| cxf_contact_signed_in? | none | boolean | Indicates if the contact has an active session |
|
101
|
+
| cxf_contact_login | email, password | void | Starts a contact session |
|
102
|
+
| cxf_contact_logout | none | void | Ends a contact session |
|
103
|
+
| cxf_contact_magic_link_login | hash, redirect_in_error | void | Starts a contact session in cxf.cloud and set a session cookie |
|
104
|
+
|
105
|
+
## Admin controller usage
|
106
|
+
|
107
|
+
If want to have a private section where only a cxf user can acces and use the private user api is needed to inherit
|
108
|
+
from the AdminBaseController.
|
109
|
+
|
110
|
+
```ruby
|
111
|
+
# admin_controller.rb
|
112
|
+
|
113
|
+
class AdminController < Cxf::AdminBaseController
|
114
|
+
end
|
115
|
+
```
|
116
|
+
|
117
|
+
This heritance will make the following class variables available:
|
118
|
+
|
119
|
+
| Variable | Description |
|
120
|
+
|----------------------|:-------------------------------------------------------------------------------:|
|
121
|
+
| @host | Host defined in cxf_config.yml.erb file |
|
122
|
+
| @api_key | API key defined in cxf_config.yml.erb file |
|
123
|
+
| @cxf_user | An already instanced user client (not usable until call the user login method) |
|
124
|
+
| @cxf_service_account | An already instanced service_account client |
|
125
|
+
|
126
|
+
And the following controller methods:
|
127
|
+
|
128
|
+
| Method | Parameters | Return value | Description |
|
129
|
+
|---------------------------|:---------------:|:------------:|:-----------------------------------------------------------:|
|
130
|
+
| cxf_user_login | email, password | void | Starts a user session |
|
131
|
+
| cxf_user_logout | none | void | Ends a user session |
|
132
|
+
| cxf_user_signed_in? | none | Boolean | Indicates if the user has an active session |
|
133
|
+
| cxf_user_magic_link_login | hash | void | Starts a user session in cxf.cloud and set a session cookie |
|
134
|
+
|
135
|
+
## Cxf config file
|
136
|
+
|
137
|
+
The cxf.config.yml file allows to set the Cxf instance to which the implementation will access, it can add the host,
|
138
|
+
api key for Cxf, in addition to setting the cache rules with redis, if you want to add a url to cache , you should add
|
139
|
+
it to the groups array and set the cache time.
|
140
|
+
|
141
|
+
```yaml
|
142
|
+
# Cxf connection configuration
|
143
|
+
cxf:
|
144
|
+
host: http://your_host_goes_here.com
|
145
|
+
api_key: your_cxf_api_key_goes_here
|
146
|
+
cxf_slug: slug_id #save id and token in redis
|
147
|
+
redis_cache:
|
148
|
+
use_cache: boolean_value_to_enable_and_disable_cache
|
149
|
+
redis_host: your_redis_server_host
|
150
|
+
redis_port: your_redis_server_port
|
151
|
+
redis_db: your_redis_database
|
152
|
+
groups:
|
153
|
+
- urls:
|
154
|
+
- group_of_urls
|
155
|
+
time: time_that_will_be_applied_to_urls_in_seconds
|
156
|
+
sdk:
|
157
|
+
debug: false
|
158
|
+
# Timeout is specified in seconds
|
159
|
+
default_http_timeout: 30 # Allows setting a default timeout for all HTTP calls.
|
160
|
+
get_http_timeout: 30 # Allows setting a default timeout for all GET calls.
|
161
|
+
post_http_timeout: 30 # Allows setting a default timeout for all POST calls.
|
162
|
+
put_http_timeout: 30 # Allows setting a default timeout for all PUT calls.
|
163
|
+
delete_http_timeout: 30 # Allows setting a default timeout for all DELETE calls.
|
164
|
+
```
|
165
|
+
|
166
|
+
To enable sdk debugging you can change the variable debug.
|
167
|
+
Finally, to configure the sharing of cookies between domains, you can configure the "iframe cookies", where you
|
168
|
+
establish how long the cookie will have, if it is activated and the domains to share cookies (to have this
|
169
|
+
functionality, we recommend the use of the template).
|
170
|
+
|
171
|
+
```yaml
|
172
|
+
# Cxf connection configuration
|
173
|
+
sdk:
|
174
|
+
debug: false
|
175
|
+
cookies_iframe:
|
176
|
+
activated: boolean_value_to_enable_and_disable_cookies_iframe
|
177
|
+
expire_time: expire_time_of_cookies_iframe_in_hours
|
178
|
+
hosts:
|
179
|
+
- array_of_host_to_send_cookies
|
180
|
+
```
|
181
|
+
|
182
|
+
## Override default clients
|
183
|
+
|
184
|
+
If you want other clients for admin/base controller, you need to specify them with the "define_cxf_clients" method
|
185
|
+
|
186
|
+
Example:
|
187
|
+
|
188
|
+
```ruby
|
189
|
+
# admin_controller.rb
|
190
|
+
|
191
|
+
class AdminController < Cxf::AdminBaseController
|
192
|
+
def define_cxf_clients
|
193
|
+
%w[contact user pub service_account]
|
194
|
+
end
|
195
|
+
end
|
196
|
+
```
|
197
|
+
|
198
|
+
## Override default timeouts
|
199
|
+
|
200
|
+
If you want specific timeouts per instance, you can define cxf_sdk_timeouts_config
|
201
|
+
|
202
|
+
Example:
|
203
|
+
|
204
|
+
```ruby
|
205
|
+
# admin_controller.rb
|
206
|
+
|
207
|
+
class AdminController < Cxf::AdminBaseController
|
208
|
+
def cxf_sdk_timeouts_config
|
209
|
+
{
|
210
|
+
default: 30,
|
211
|
+
get: 50,
|
212
|
+
post: 40,
|
213
|
+
put: 30,
|
214
|
+
delete: 10
|
215
|
+
}
|
216
|
+
end
|
217
|
+
end
|
218
|
+
```
|
219
|
+
|
220
|
+
## Error catching
|
221
|
+
|
222
|
+
The SDK provides different errors that are identified according to the response provided by Cxf,
|
223
|
+
the errors can be 404, 401, 422, 500, etc.
|
224
|
+
To rescue these errors, it is done as follows:
|
225
|
+
|
226
|
+
```ruby
|
227
|
+
|
228
|
+
# Example 1
|
229
|
+
begin
|
230
|
+
@cxf_pub.client.raw('/invalid-url')
|
231
|
+
rescue => Cxf::Errors::ResourceNotFoundException
|
232
|
+
puts "Error 404"
|
233
|
+
end
|
234
|
+
|
235
|
+
# Example 2
|
236
|
+
|
237
|
+
begin
|
238
|
+
response = @cxf_contact.register(data)
|
239
|
+
rescue Cxf::Errors::ValidationException => e
|
240
|
+
response = e.to_h
|
241
|
+
# This will return a Hash with the information needed to debug
|
242
|
+
# Example:
|
243
|
+
{
|
244
|
+
:client => sdk_instance,
|
245
|
+
# Client instance
|
246
|
+
# @host = "https://your_cxf_instance",
|
247
|
+
# @api_key = current_api_key,
|
248
|
+
# @session_token = current_session_token,
|
249
|
+
# @contact_token_id = current_contact_token_id,
|
250
|
+
# @visit_id = current_visit_id,
|
251
|
+
# @debug = current_debug_flag,
|
252
|
+
# @scope = current_scope,
|
253
|
+
# @base_url = current_base_url
|
254
|
+
:title => "Request failed with status 422",
|
255
|
+
:detail => "Unprocessable Entity",
|
256
|
+
:http_status => 422,
|
257
|
+
:response => { "email" => ["The email has already been taken."] },
|
258
|
+
:errors => ["The email has already been taken."]
|
259
|
+
}
|
260
|
+
end
|
261
|
+
|
262
|
+
```
|
263
|
+
|
264
|
+
The current errors are:
|
265
|
+
|
266
|
+
| Error | Status | Full error name |
|
267
|
+
|---------------------------|:------:|:-----------------------------------------:|
|
268
|
+
| AccessDeniedException | 401 | Cxf::Errors::AccessDeniedException |
|
269
|
+
| ResourceNotFoundException | 404 | Cxf::Errors::ResourceNotFoundException |
|
270
|
+
| MethodNotAllowedException | 405 | Cxf::Errors::MethodNotAllowedException |
|
271
|
+
| ValidationException | 422 | Cxf::Errors::ValidationException |
|
272
|
+
| InternalServerException | 500 | Cxf::Errors::InternalServerException |
|
273
|
+
|
274
|
+
<details>
|
275
|
+
<summary> Cxf::Pub </summary>
|
276
|
+
|
277
|
+
- Cxf::Pub::Config
|
278
|
+
- [Cxf::Pub::Config::Attributes](doc/pub/config/attributes.md)
|
279
|
+
- [Cxf::Pub::Config::PublicFolders](doc/pub/config/public_folders.md)
|
280
|
+
- [Cxf::Pub::Config::Tags](doc/pub/config/tags.md)
|
281
|
+
- [Cxf::Pub::Config::Taxonomies](doc/pub/config/taxonomies.md)
|
282
|
+
|
283
|
+
|
284
|
+
- Cxf::Pub::Content
|
285
|
+
- [Cxf::Pub::Content::Assets](doc/pub/content/assets.md)
|
286
|
+
- [Cxf::Pub::Content::ContentBundles](doc/pub/content/content_bundles.md)
|
287
|
+
- [Cxf::Pub::Content::ContentInstanceVersions](doc/pub/content/content_instance_versions.md)
|
288
|
+
- [Cxf::Pub::Content::ContentInstances](doc/pub/content/content_instances.md)
|
289
|
+
- [Cxf::Pub::Content::Forms](doc/pub/content/forms.md)
|
290
|
+
- [Cxf::Pub::Content::Stories](doc/pub/content/stories.md)
|
291
|
+
- [Cxf::Pub::Content::StoryVersions](doc/pub/content/story_versions.md)
|
292
|
+
|
293
|
+
- Cxf::Pub::Ecommerce
|
294
|
+
- [Cxf::Pub::Ecommerce::Locations](doc/pub/ecommerce/locations.md)
|
295
|
+
- [Cxf::Pub::Ecommerce::Orders](doc/pub/ecommerce/orders.md)
|
296
|
+
|
297
|
+
</details>
|
298
|
+
|
299
|
+
<details>
|
300
|
+
<summary> Cxf::Contact </summary>
|
301
|
+
|
302
|
+
- Cxf::Contact::Config
|
303
|
+
- [Cxf::Contact::Config::Appointments](doc/contact/config/appointments.md)
|
304
|
+
|
305
|
+
|
306
|
+
- Cxf::Contact::Content
|
307
|
+
- [Cxf::Contact::Content::Conversations](doc/contact/content/conversations.md)
|
308
|
+
|
309
|
+
- Cxf::Contact::Ecommerce
|
310
|
+
- [Cxf::Contact::Ecommerce::OrderItemGroups](doc/contact/ecommerce/order_item_groups.md)
|
311
|
+
- [Cxf::Contact::Ecommerce::OrderItems](doc/contact/ecommerce/order_items.md)
|
312
|
+
- [Cxf::Contact::Ecommerce::Orders](doc/contact/ecommerce/orders.md)
|
313
|
+
- [Cxf::Contact::Ecommerce::Vouchers](doc/contact/ecommerce/vouchers.md)
|
314
|
+
|
315
|
+
</details>
|
316
|
+
|
317
|
+
<details>
|
318
|
+
<summary> Cxf::User </summary>
|
319
|
+
|
320
|
+
- Cxf::User::Config
|
321
|
+
- [Cxf::User::Config::ApiKey](doc/user/config/api_key.md)
|
322
|
+
- [Cxf::User::Config::Appointments](doc/user/config/appointments.md)
|
323
|
+
- [Cxf::User::Config::AttributeGroups](doc/user/config/attribute_groups.md)
|
324
|
+
- [Cxf::User::Config::Attributes](doc/user/config/attributes.md)
|
325
|
+
- [Cxf::User::Config::Calendar](doc/user/config/calendar.md)
|
326
|
+
- [Cxf::User::Config::PublicFolder](doc/user/config/public_folders.md)
|
327
|
+
- [Cxf::User::Config::Relationships](doc/user/config/relationships.md)
|
328
|
+
- [Cxf::User::Config::Roles](doc/user/config/roles.md)
|
329
|
+
- [Cxf::User::Config::Seeds](doc/user/config/seeds.md)
|
330
|
+
- [Cxf::User::Config::SystemSettings](doc/user/config/system_settings.md)
|
331
|
+
- [Cxf::User::Config::Tags](doc/user/config/tags.md)
|
332
|
+
- [Cxf::User::Config::Taxonomies](doc/user/config/taxonomies.md)
|
333
|
+
- [Cxf::User::Config::Teams](doc/user/config/teams.md)
|
334
|
+
- [Cxf::User::Config::Users](doc/user/config/users.md)
|
335
|
+
|
336
|
+
- [Cxf::User::Contacts](doc/user/contacts/contacts.md)
|
337
|
+
|
338
|
+
- [Cxf::User::Content](doc/user/content/content.md)
|
339
|
+
- [Cxf::User::Content::Assets](doc/user/content/assets.md)
|
340
|
+
- [Cxf::User::Content::ContentInstances](doc/user/content/content_instances.md)
|
341
|
+
- [Cxf::User::Content::ContentTemplates](doc/user/content/content_templates.md)
|
342
|
+
- [Cxf::User::Content::Conversations](doc/user/content/conversations.md)
|
343
|
+
- [Cxf::User::Content::Dam](doc/user/content/dam.md)
|
344
|
+
- [Cxf::User::Content::Forms](doc/user/content/forms.md)
|
345
|
+
- [Cxf::User::Content::MessageTemplates](doc/user/content/message_templates.md)
|
346
|
+
- [Cxf::User::Content::Messages](doc/user/content/messages.md)
|
347
|
+
- [Cxf::User::Content::Pages](doc/user/content/pages.md)
|
348
|
+
- [Cxf::User::Content::Stories](doc/user/content/stories.md)
|
349
|
+
- [Cxf::User::Content::StoryTemplates](doc/user/content/story_templates.md)
|
350
|
+
- [Cxf::User::Content::StoryVersions](doc/user/content/story_versions.md)
|
351
|
+
|
352
|
+
- Cxf::User::Crm
|
353
|
+
- [Cxf::User::Crm::Companies](doc/user/crm/companies.md)
|
354
|
+
- [Cxf::User::Crm::Contacts](doc/user/crm/contacts.md)
|
355
|
+
- [Cxf::User::Crm::Deals](doc/user/crm/deals.md)
|
356
|
+
- [Cxf::User::Crm::Favorites](doc/user/crm/favorites.md)
|
357
|
+
- [Cxf::User::Crm::Segments](doc/user/crm/segments.md)
|
358
|
+
- [Cxf::User::Crm::Users](doc/user/crm/users.md)
|
359
|
+
- [Cxf::User::Crm::WorkflowStepObjects](doc/user/crm/workflow_step_objects.md)
|
360
|
+
- [Cxf::User::Crm::WorkflowSteps](doc/user/crm/workflow_steps.md)
|
361
|
+
- [Cxf::User::Crm::Workflows](doc/user/crm/workflows.md)
|
362
|
+
|
363
|
+
- Cxf::User::Ecommerce
|
364
|
+
- [Cxf::User::Ecommerce::ItemPrices](doc/user/ecommerce/item_prices.md)
|
365
|
+
- [Cxf::User::Ecommerce::Locations](doc/user/ecommerce/locations.md)
|
366
|
+
- [Cxf::User::Ecommerce::OrderItemGroups](doc/user/ecommerce/order_item_groups.md)
|
367
|
+
- [Cxf::User::Ecommerce::OrderStatuses](doc/user/ecommerce/order_statuses.md)
|
368
|
+
|
369
|
+
- [Cxf::User::Ecommerce::Orders](doc/user/ecommerce/orders.md)
|
370
|
+
- [Cxf::User::Ecommerce::PriceList](doc/user/ecommerce/price_list.md)
|
371
|
+
- [Cxf::User::Ecommerce::ProductTemplates](doc/user/ecommerce/product_templates.md)
|
372
|
+
- [Cxf::User::Ecommerce::ProductVariations](doc/user/ecommerce/product_variations.md)
|
373
|
+
- [Cxf::User::Ecommerce::Products](doc/user/ecommerce/products.md)
|
374
|
+
- [Cxf::User::Ecommerce::Skus](doc/user/ecommerce/skus.md)
|
375
|
+
- [Cxf::User::Ecommerce::Taxes](doc/user/ecommerce/taxes.md)
|
376
|
+
- [Cxf::User::Ecommerce::VariantOptions](doc/user/ecommerce/variant_options.md)
|
377
|
+
- [Cxf::User::Ecommerce::VariantValues](doc/user/ecommerce/variant_values.md)
|
378
|
+
- [Cxf::User::Ecommerce::Vouchers](doc/user/ecommerce/vouchers.md)
|
379
|
+
|
380
|
+
- [Cxf::User::Helpers](doc/user/helpers/helpers.md)
|
381
|
+
- [Cxf::User::Helpers::ObjectActivities](doc/user/helpers/object_activities.md)
|
382
|
+
- [Cxf::User::Helpers::ObjectFolders](doc/user/helpers/object_folders.md)
|
383
|
+
- [Cxf::User::Helpers::UserFolders](doc/user/helpers/user_folders.md)
|
384
|
+
|
385
|
+
- [Cxf::User::Marketing](doc/user/marketing/marketing.md)
|
386
|
+
|
387
|
+
- [Cxf::User::Profile](doc/user/profile/profile.md)
|
388
|
+
|
389
|
+
</details>
|
390
|
+
|
391
|
+
<details>
|
392
|
+
<summary> Cxf::Threads </summary>
|
393
|
+
|
394
|
+
- [Cxf::MakeMultipleRequest](doc/threads/make_multiple_request.md)
|
395
|
+
</details>
|