infopark_webcrm_sdk 1.1.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +2 -1
- data/UPGRADE.md +0 -13
- data/config/ca-bundle.crt +887 -1488
- data/lib/crm.rb +2 -7
- data/lib/crm/core/log_subscriber.rb +2 -2
- data/lib/crm/core/mixins/merge_and_deletable.rb +2 -3
- data/lib/crm/core/mixins/modifiable.rb +4 -37
- data/lib/crm/core/mixins/searchable.rb +1 -3
- data/lib/crm/core/search_configurator.rb +0 -18
- data/lib/crm/errors.rb +1 -2
- data/lib/crm/mailing.rb +10 -0
- data/lib/crm/mailing_delivery.rb +95 -0
- data/lib/crm/mailing_recipient.rb +63 -0
- data/lib/crm/type.rb +2 -3
- metadata +8 -8
data/lib/crm.rb
CHANGED
@@ -87,8 +87,7 @@ module Crm
|
|
87
87
|
# limit: 20,
|
88
88
|
# offset: 10,
|
89
89
|
# sort_by: 'created_at',
|
90
|
-
# sort_order: 'desc'
|
91
|
-
# include_deleted: true
|
90
|
+
# sort_order: 'desc'
|
92
91
|
# )
|
93
92
|
# # => Crm::Core::ItemEnumerator with max 20 contacts with last name Johnson from Boston.
|
94
93
|
# @param filters [Array<Hash{String => String}>]
|
@@ -111,13 +110,10 @@ module Crm
|
|
111
110
|
# * +updated_at+
|
112
111
|
# @param sort_order [String] One of +asc+ (ascending) or +desc+ (descending).
|
113
112
|
# For +sort_by+ +score+, the only valid sort order is +desc+ (can be omitted).
|
114
|
-
# @param include_deleted [Boolean]
|
115
|
-
# whether to include deleted items in the results. Server default: +false+.
|
116
113
|
# @return [Crm::Core::ItemEnumerator]
|
117
114
|
# An {Crm::Core::ItemEnumerator enumerator} to iterate over the found items.
|
118
115
|
# @api public
|
119
|
-
def self.search(filters: nil, query: nil, limit: :none, offset: 0, sort_by: nil,
|
120
|
-
sort_order: nil, include_deleted: nil)
|
116
|
+
def self.search(filters: nil, query: nil, limit: :none, offset: 0, sort_by: nil, sort_order: nil)
|
121
117
|
server_limit = 100
|
122
118
|
limit = Float::INFINITY if limit.nil? || limit == :none
|
123
119
|
offset ||= 0
|
@@ -134,7 +130,6 @@ module Crm
|
|
134
130
|
'offset' => offset,
|
135
131
|
'sort_by' => sort_by,
|
136
132
|
'sort_order' => sort_order,
|
137
|
-
'include_deleted' => include_deleted,
|
138
133
|
}.reject { |k, v| v.nil? }
|
139
134
|
search_results = Core::RestApi.instance.post('search', params)
|
140
135
|
ids.concat(search_results['results'].map { |r| r['id'] })
|
@@ -10,7 +10,7 @@ module Crm; module Core
|
|
10
10
|
info { "#{event.payload[:method].to_s.upcase} #{event.payload[:resource_path]}" }
|
11
11
|
request_payload = event.payload[:request_payload]
|
12
12
|
if request_payload.present?
|
13
|
-
debug { " request body: #{parameter_filter.filter(request_payload)}" }
|
13
|
+
debug { " request body: #{parameter_filter.filter({data: request_payload})[:data]}" }
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -21,7 +21,7 @@ module Crm; module Core
|
|
21
21
|
}
|
22
22
|
debug {
|
23
23
|
response_payload = MultiJson.load(r.body)
|
24
|
-
" response body: #{parameter_filter.filter(response_payload)}"
|
24
|
+
" response body: #{parameter_filter.filter({data: response_payload})[:data]}"
|
25
25
|
}
|
26
26
|
end
|
27
27
|
|
@@ -7,11 +7,10 @@ module Crm; module Core; module Mixins
|
|
7
7
|
# whose ID is +merge_into_id+. Afterwards, the current item is deleted.
|
8
8
|
# @param merge_into_id [String]
|
9
9
|
# the ID of the account or contact to which the associated items are assigned.
|
10
|
-
# @return [self] the deleted item.
|
11
10
|
# @api public
|
12
11
|
def merge_and_delete(merge_into_id)
|
13
|
-
|
14
|
-
|
12
|
+
RestApi.instance.post("#{path}/merge_and_delete", {"merge_into_id" => merge_into_id})
|
13
|
+
nil
|
15
14
|
end
|
16
15
|
end
|
17
16
|
end; end; end
|
@@ -2,7 +2,7 @@ require "active_support/concern"
|
|
2
2
|
|
3
3
|
module Crm; module Core; module Mixins
|
4
4
|
# +Modifiable+ is a collection of methods that are used to {ClassMethods#create .create},
|
5
|
-
# {#update}
|
5
|
+
# {#update} and {#delete} an Infopark WebCRM item.
|
6
6
|
# @api public
|
7
7
|
module Modifiable
|
8
8
|
extend ActiveSupport::Concern
|
@@ -54,47 +54,14 @@ module Crm; module Core; module Mixins
|
|
54
54
|
load_attributes(RestApi.instance.put(path, attributes, if_match_header))
|
55
55
|
end
|
56
56
|
|
57
|
-
#
|
57
|
+
# Deletes this item.
|
58
58
|
#
|
59
|
-
# The deleted item can be {#undelete undeleted}.
|
60
|
-
# @example
|
61
|
-
# contact.deleted?
|
62
|
-
# # => false
|
63
|
-
#
|
64
|
-
# contact.delete
|
65
|
-
# # => Crm::Contact
|
66
|
-
#
|
67
|
-
# contact.deleted?
|
68
|
-
# # => true
|
69
|
-
# @return [self] the deleted item.
|
70
59
|
# @raise [Errors::ResourceConflict] if the item has been changed concurrently.
|
71
60
|
# {Core::BasicResource#reload Reload} it, review the changes and retry.
|
72
61
|
# @api public
|
73
62
|
def delete
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
# Undeletes this deleted item.
|
78
|
-
# @example
|
79
|
-
# contact.deleted?
|
80
|
-
# # => true
|
81
|
-
#
|
82
|
-
# contact.undelete
|
83
|
-
# # => Crm::Contact
|
84
|
-
#
|
85
|
-
# contact.deleted?
|
86
|
-
# # => false
|
87
|
-
# @return [self] the undeleted item.
|
88
|
-
# @api public
|
89
|
-
def undelete
|
90
|
-
load_attributes(RestApi.instance.put("#{path}/undelete", {}))
|
91
|
-
end
|
92
|
-
|
93
|
-
# Returns +true+ if the item was deleted (i.e. +item.deleted_at+ is not empty).
|
94
|
-
# @return [Boolean]
|
95
|
-
# @api public
|
96
|
-
def deleted?
|
97
|
-
self['deleted_at'].present?
|
63
|
+
RestApi.instance.delete(path, nil, if_match_header)
|
64
|
+
nil
|
98
65
|
end
|
99
66
|
|
100
67
|
alias_method :destroy, :delete
|
@@ -19,14 +19,12 @@ module Crm; module Core; module Mixins
|
|
19
19
|
|
20
20
|
# Returns an {Crm::Core::ItemEnumerator enumerator} for iterating over all items
|
21
21
|
# of this base type. The items are sorted by +created_at+.
|
22
|
-
# @param include_deleted [Boolean] whether to include deleted items. Default: +false+.
|
23
22
|
# @return [ItemEnumerator]
|
24
23
|
# @api public
|
25
|
-
def all
|
24
|
+
def all
|
26
25
|
search_configurator.
|
27
26
|
sort_by('created_at').
|
28
27
|
unlimited.
|
29
|
-
include_deleted(include_deleted).
|
30
28
|
perform_search
|
31
29
|
end
|
32
30
|
|
@@ -51,7 +51,6 @@ module Crm; module Core
|
|
51
51
|
offset: @settings[:offset],
|
52
52
|
sort_by: @settings[:sort_by],
|
53
53
|
sort_order: @settings[:sort_order],
|
54
|
-
include_deleted: @settings[:include_deleted]
|
55
54
|
)
|
56
55
|
end
|
57
56
|
|
@@ -165,23 +164,6 @@ module Crm; module Core
|
|
165
164
|
sort_order('desc')
|
166
165
|
end
|
167
166
|
|
168
|
-
# Returns a new {SearchConfigurator} constructed by combining this configuration
|
169
|
-
# with the given +include_deleted+ flag.
|
170
|
-
# @param new_include_deleted [Boolean] whether to include deleted items in the results.
|
171
|
-
# @return [SearchConfigurator]
|
172
|
-
# @api public
|
173
|
-
def include_deleted(new_include_deleted = true)
|
174
|
-
SearchConfigurator.new(@settings.merge(include_deleted: new_include_deleted))
|
175
|
-
end
|
176
|
-
|
177
|
-
# Returns a new {SearchConfigurator} constructed by combining this configuration
|
178
|
-
# and excluding deleted items.
|
179
|
-
# @return [SearchConfigurator]
|
180
|
-
# @api public
|
181
|
-
def exclude_deleted
|
182
|
-
include_deleted(false)
|
183
|
-
end
|
184
|
-
|
185
167
|
# @!endgroup
|
186
168
|
|
187
169
|
# Iterates over the search results.
|
data/lib/crm/errors.rb
CHANGED
@@ -58,8 +58,7 @@ module Crm
|
|
58
58
|
end
|
59
59
|
|
60
60
|
# +ItemStatePreconditionFailed+ is raised if one or more preconditions
|
61
|
-
# for the attempted action were not satisfied.
|
62
|
-
# It must be undeleted first.
|
61
|
+
# for the attempted action were not satisfied.
|
63
62
|
# @api public
|
64
63
|
class ItemStatePreconditionFailed < ClientError
|
65
64
|
# Returns the unmet preconditions.
|
data/lib/crm/mailing.rb
CHANGED
@@ -19,6 +19,16 @@ module Crm
|
|
19
19
|
# @!parse extend Core::Mixins::Modifiable::ClassMethods
|
20
20
|
# @!parse extend Core::Mixins::Searchable::ClassMethods
|
21
21
|
|
22
|
+
# Clones a mailing.
|
23
|
+
# @example
|
24
|
+
# mailing.clone
|
25
|
+
# # => Crm::Mailing
|
26
|
+
# @return [BasicResource] the cloned mailing.
|
27
|
+
# @api public
|
28
|
+
def clone
|
29
|
+
self.class.new(Core::RestApi.instance.post("#{path}/clone", {}))
|
30
|
+
end
|
31
|
+
|
22
32
|
# Renders a preview of the email for the given contact.
|
23
33
|
# @example
|
24
34
|
# mailing.html_body
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module Crm
|
2
|
+
# MailingDelivery represents a mailing delivery.
|
3
|
+
# @api public
|
4
|
+
class MailingDelivery
|
5
|
+
include Core::Mixins::Inspectable
|
6
|
+
include Core::Mixins::AttributeProvider
|
7
|
+
|
8
|
+
inspectable :mailing_id, :id
|
9
|
+
|
10
|
+
def self.all(mailing_id, since: nil)
|
11
|
+
path = ['mailings', mailing_id, 'mailing_deliveries'].compact.join('/')
|
12
|
+
params = {}
|
13
|
+
case since
|
14
|
+
when Time
|
15
|
+
params[:since] = since.utc.xmlschema
|
16
|
+
when String
|
17
|
+
params[:since] = since
|
18
|
+
when nil
|
19
|
+
# ignore
|
20
|
+
else
|
21
|
+
raise "unknown class of since param: #{since.class}"
|
22
|
+
end
|
23
|
+
Core::RestApi.instance.get(path, params).map {|attrs| new({'mailing_id' => mailing_id}.merge(attrs))}
|
24
|
+
end
|
25
|
+
|
26
|
+
# Creates or updates a mailing delivery.
|
27
|
+
# @example
|
28
|
+
# Crm::MailingDelivery.create(mailing.id, "abc@example.com", {
|
29
|
+
# custom_data: {
|
30
|
+
# salutation: 'Hello You',
|
31
|
+
# },
|
32
|
+
# })
|
33
|
+
# @param mailing_id [String] the mailing ID
|
34
|
+
# @param id [String] the email address
|
35
|
+
# @param attributes [Hash{String, Symbol => String}] the new attributes.
|
36
|
+
# @return [self] the created or updated mailing delivery.
|
37
|
+
# @api public
|
38
|
+
def self.create(mailing_id, id, attributes = {})
|
39
|
+
new({'mailing_id' => mailing_id, 'id' => id}).update(attributes)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns the requested mailing delivery.
|
43
|
+
# @example
|
44
|
+
# d = Crm::MailingDelivery.find(mailing.id, "abc@example.com")
|
45
|
+
# # => #<Crm::MailingDelivery mailing_id="94933088cec0014575ff920ee9830cfb", id="abc@example.com">
|
46
|
+
# @param mailing_id [String] the mailing ID
|
47
|
+
# @param id [String] the email address
|
48
|
+
# @return [MailingDelivery]
|
49
|
+
# @api public
|
50
|
+
def self.find(mailing_id, id)
|
51
|
+
raise Crm::Errors::ResourceNotFound.new("Items could not be found.", [mailing_id]) if mailing_id.blank?
|
52
|
+
raise Crm::Errors::ResourceNotFound.new("Items could not be found.", [id]) if id.blank?
|
53
|
+
|
54
|
+
new({'mailing_id' => mailing_id, 'id' => id}).reload
|
55
|
+
end
|
56
|
+
|
57
|
+
# Deletes the mailing delivery.
|
58
|
+
#
|
59
|
+
# @raise [Errors::ResourceConflict] if the item has been changed concurrently.
|
60
|
+
# {Core::BasicResource#reload Reload} it, review the changes and retry.
|
61
|
+
# @api public
|
62
|
+
def delete
|
63
|
+
Core::RestApi.instance.delete(path, nil, if_match_header)
|
64
|
+
nil
|
65
|
+
end
|
66
|
+
|
67
|
+
# Updates the attributes of this mailing delivery.
|
68
|
+
# @example
|
69
|
+
# mailing_delivery.update({
|
70
|
+
# custom_data: {
|
71
|
+
# salutation: 'Hello You',
|
72
|
+
# },
|
73
|
+
# })
|
74
|
+
# @param attributes [Hash{String, Symbol => String}] the new attributes.
|
75
|
+
# @return [self] the updated mailing delivery.
|
76
|
+
# @api public
|
77
|
+
def update(attributes = {})
|
78
|
+
load_attributes(Core::RestApi.instance.put(path, attributes, if_match_header))
|
79
|
+
end
|
80
|
+
|
81
|
+
def reload
|
82
|
+
load_attributes(Core::RestApi.instance.get(path))
|
83
|
+
end
|
84
|
+
|
85
|
+
private
|
86
|
+
|
87
|
+
def path
|
88
|
+
['mailings', mailing_id, 'mailing_deliveries', id].compact.join('/')
|
89
|
+
end
|
90
|
+
|
91
|
+
def if_match_header
|
92
|
+
{'If-Match' => self['version']}
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Crm
|
2
|
+
# MailingRecipient represents a mailing recipient email address.
|
3
|
+
# @api public
|
4
|
+
class MailingRecipient < Core::BasicResource
|
5
|
+
include Core::Mixins::Inspectable
|
6
|
+
inspectable :id, :active, :consent, :topic_names
|
7
|
+
|
8
|
+
# Returns the requested mailing recipient.
|
9
|
+
# @example
|
10
|
+
# r = Crm::MailingRecipient.find("abc@example.com")
|
11
|
+
# r.active
|
12
|
+
# # => true
|
13
|
+
# r.consent
|
14
|
+
# # => "unknown"
|
15
|
+
# r.consent_given_at
|
16
|
+
# # => nil
|
17
|
+
# r.consent_revoked_at
|
18
|
+
# # => nil
|
19
|
+
# r.complained_at
|
20
|
+
# # => nil
|
21
|
+
# r.permanent_bounced_at
|
22
|
+
# # => nil
|
23
|
+
# r.topic_names
|
24
|
+
# # => ["foo"]
|
25
|
+
# r.topic_names_unsubscribed
|
26
|
+
# # => ["bar", "baz"]
|
27
|
+
# r.consent_logs
|
28
|
+
# # => [
|
29
|
+
# {
|
30
|
+
# "at"=>"2018-06-20T13:13:32Z",
|
31
|
+
# "description"=>"edited by API2 user root: this is the reason",
|
32
|
+
# "changes"=>{"active"=>["false", "true"]
|
33
|
+
# }
|
34
|
+
# ]
|
35
|
+
# @param email [String] the email address
|
36
|
+
# @return [MailingRecipient]
|
37
|
+
# @api public
|
38
|
+
def self.find(email)
|
39
|
+
if email.blank?
|
40
|
+
raise Crm::Errors::ResourceNotFound.new("Items could not be found.", [email])
|
41
|
+
end
|
42
|
+
new({'id' => email}).reload
|
43
|
+
end
|
44
|
+
|
45
|
+
# Updates the attributes of this mailing recipient.
|
46
|
+
# @example
|
47
|
+
# mailing_recipient.update({
|
48
|
+
# consent: "given",
|
49
|
+
# topic_names: ["foo", "bar"],
|
50
|
+
# edit_reason: "user registered on www.example.com and confirmed the double opt-in email link",
|
51
|
+
# })
|
52
|
+
# mailing_recipient.update({
|
53
|
+
# consent: "revoked",
|
54
|
+
# edit_reason: "user unsubscribed using our newsletter form on www.example.com",
|
55
|
+
# })
|
56
|
+
# @param attributes [Hash{String, Symbol => String}] the new attributes.
|
57
|
+
# @return [self] the updated mailing recipient.
|
58
|
+
# @api public
|
59
|
+
def update(attributes = {})
|
60
|
+
load_attributes(Core::RestApi.instance.put(path, attributes, if_match_header))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/crm/type.rb
CHANGED
@@ -66,11 +66,10 @@ module Crm
|
|
66
66
|
# @!parse extend Core::Mixins::Modifiable::ClassMethods
|
67
67
|
|
68
68
|
# Returns all types.
|
69
|
-
# @param include_deleted [Boolean] whether to include deleted types. Default: +false+.
|
70
69
|
# @return [Array<Type>]
|
71
70
|
# @api public
|
72
|
-
def self.all
|
73
|
-
Core::RestApi.instance.get('types'
|
71
|
+
def self.all
|
72
|
+
Core::RestApi.instance.get('types').map do |item|
|
74
73
|
new(item)
|
75
74
|
end
|
76
75
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: infopark_webcrm_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Infopark AG
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -119,6 +119,8 @@ files:
|
|
119
119
|
- lib/crm/event.rb
|
120
120
|
- lib/crm/event_contact.rb
|
121
121
|
- lib/crm/mailing.rb
|
122
|
+
- lib/crm/mailing_delivery.rb
|
123
|
+
- lib/crm/mailing_recipient.rb
|
122
124
|
- lib/crm/template_set.rb
|
123
125
|
- lib/crm/type.rb
|
124
126
|
- lib/infopark_webcrm_sdk.rb
|
@@ -126,7 +128,7 @@ homepage: https://github.com/infopark/webcrm_sdk
|
|
126
128
|
licenses:
|
127
129
|
- LGPL-3.0
|
128
130
|
metadata: {}
|
129
|
-
post_install_message:
|
131
|
+
post_install_message:
|
130
132
|
rdoc_options: []
|
131
133
|
require_paths:
|
132
134
|
- lib
|
@@ -141,10 +143,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
143
|
- !ruby/object:Gem::Version
|
142
144
|
version: '0'
|
143
145
|
requirements: []
|
144
|
-
|
145
|
-
|
146
|
-
signing_key:
|
146
|
+
rubygems_version: 3.0.3
|
147
|
+
signing_key:
|
147
148
|
specification_version: 4
|
148
149
|
summary: Infopark WebCRM SDK
|
149
150
|
test_files: []
|
150
|
-
has_rdoc:
|