infopark_webcrm_sdk 1.1.0 → 2.3.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.
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
- load_attributes(
14
- RestApi.instance.post("#{path}/merge_and_delete", {"merge_into_id" => merge_into_id}))
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}, {#delete}, and {#undelete} an Infopark WebCRM item.
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
- # Soft-deletes this item (i.e. marks it as deleted).
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
- load_attributes(RestApi.instance.delete(path, nil, if_match_header))
75
- end
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(include_deleted: false)
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.
@@ -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. For example, a deleted item cannot be updated.
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.
@@ -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
@@ -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(include_deleted: false)
73
- Core::RestApi.instance.get('types', { include_deleted: include_deleted }).map do |item|
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: 1.1.0
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: 2016-09-08 00:00:00.000000000 Z
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
- rubyforge_project:
145
- rubygems_version: 2.6.2
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: