delighted 1.7.0 → 1.8.0rc1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 24e928b7535e1d51f72461238850e824b27b3920
4
- data.tar.gz: 86001bae9ecc475902d0ce5f2d4ed1cc15d6f686
2
+ SHA256:
3
+ metadata.gz: 92ff2bf5264a02443144522c7aa937d879d285414b2f27d5da9a149d8523b851
4
+ data.tar.gz: 0671a5ab613fdf6824dd86527d9fd0592eee37d0f53052a5e1e2b24b55ba3eae
5
5
  SHA512:
6
- metadata.gz: 1c62db83772abc00c2a6c1524c8a18f998b953ca227d8f521eaf2a3cb10e7457b078eac3d8d8473668e83c646e8f515a32700435fbc7a59edf715585f87e4eb7
7
- data.tar.gz: 0cfa475365360aa17f5e7b81c215e07607eed6d10f867ba5269ef840c62aa88ca032944d613d11d7159b224593cbf0e2b67282aa1da5acdcad9621a7a99904fe
6
+ metadata.gz: 8ec727249f7682b0c3bf66fb0bfd921f456a013e775d4f206d98e61fb35807312c6329e105acb9f5ef8c7276839a47c67829e7e7b2626bd0e9a4e3d91d6d8d6d
7
+ data.tar.gz: 9914a4c08a10787c4da9a94d6a7208bc5345cf513535a36945442596a6d0967372a2c1a216b0028e88ee888b06e286c72325fa54c162d9ca7ca4389e486bc861
@@ -1,3 +1,9 @@
1
+ ## 1.8.0rc1 (2018-05-22)
2
+
3
+ Features:
4
+
5
+ - Add `Delighted::Person.delete`
6
+
1
7
  ## 1.7.0 (2017-10-18)
2
8
 
3
9
  Features:
data/README.md CHANGED
@@ -72,6 +72,17 @@ survey_responses_page1 = Delighted::Bounce.all
72
72
  survey_responses_page2 = Delighted::Bounce.all(:page => 2)
73
73
  ```
74
74
 
75
+ Deleting a person and all of the data associated with them:
76
+
77
+ ```ruby
78
+ # Delete by person id
79
+ Delighted::Person.delete(:id => 42)
80
+ # Delete by email address
81
+ Delighted::Person.delete(:email => "test@example.com")
82
+ # Delete by phone number (must be E.164 format)
83
+ Delighted::Person.delete(:phone_number => "+14155551212")
84
+ ```
85
+
75
86
  Deleting pending survey requests
76
87
 
77
88
  ```ruby
@@ -15,6 +15,7 @@ require 'delighted/operations/all'
15
15
  require 'delighted/operations/create'
16
16
  require 'delighted/operations/retrieve'
17
17
  require 'delighted/operations/update'
18
+ require 'delighted/operations/delete'
18
19
 
19
20
  require 'delighted/resources/bounce'
20
21
  require 'delighted/resources/metrics'
@@ -0,0 +1,20 @@
1
+ module Delighted
2
+ module Operations
3
+ module Delete
4
+ def self.included(klass)
5
+ klass.extend(ClassMethods)
6
+ end
7
+
8
+ module ClassMethods
9
+ def path(id = nil)
10
+ id ? "#{@path}/#{CGI.escape(id)}" : @path
11
+ end
12
+
13
+ def delete(id_hash, client = Delighted.shared_client)
14
+ id = identifier_string(id_hash)
15
+ client.delete_json(path(id))
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -11,6 +11,20 @@ module Delighted
11
11
  def singleton_resource?
12
12
  !!@singleton_resource
13
13
  end
14
+
15
+ def identifier_string(identifier_hash)
16
+ raise ArgumentError, "must pass Hash" unless Hash === identifier_hash
17
+ raise ArgumentError, "must pass exactly one identifier name and value" unless identifier_hash.size == 1
18
+
19
+ identifier_key = identifier_hash.keys.first
20
+ identifier_value = identifier_hash.values.first
21
+
22
+ if identifier_key.to_s == "id"
23
+ identifier_value.to_s
24
+ else
25
+ "#{identifier_key}:#{identifier_value}"
26
+ end
27
+ end
14
28
  end
15
29
 
16
30
  undef :id if method_defined?(:id)
@@ -3,5 +3,6 @@ module Delighted
3
3
  self.path = "/people"
4
4
 
5
5
  include Operations::Create
6
+ include Operations::Delete
6
7
  end
7
8
  end
@@ -1,3 +1,3 @@
1
1
  module Delighted
2
- VERSION = "1.7.0"
2
+ VERSION = "1.8.0rc1"
3
3
  end
@@ -80,6 +80,43 @@ class Delighted::PeopleTest < Delighted::TestCase
80
80
  assert_kind_of Hash, result
81
81
  assert_equal({ :ok => true }, result)
82
82
  end
83
+
84
+ def test_deleting_a_person_with_multiple_identifiers
85
+ assert_raises(ArgumentError) { Delighted::Person.delete(:id => 57, :email => "foo@example.com") }
86
+ end
87
+
88
+ def test_deleting_a_person_by_id
89
+ uri = URI.parse("https://api.delightedapp.com/v1/people/57")
90
+ headers = { 'Authorization' => @auth_header, "Accept" => "application/json", 'Content-Type' => 'application/json', 'User-Agent' => "Delighted RubyGem #{Delighted::VERSION}" }
91
+ response = Delighted::HTTPResponse.new(202, {}, Delighted::JSON.dump({ :ok => true }))
92
+ mock_http_adapter.expects(:request).with(:delete, uri, headers, nil).once.returns(response)
93
+
94
+ result = Delighted::Person.delete(:id => 57)
95
+ assert_kind_of Hash, result
96
+ assert_equal({ :ok => true }, result)
97
+ end
98
+
99
+ def test_deleting_a_person_by_email
100
+ uri = URI.parse("https://api.delightedapp.com/v1/people/email%3Afoo%40bar.com")
101
+ headers = { 'Authorization' => @auth_header, "Accept" => "application/json", 'Content-Type' => 'application/json', 'User-Agent' => "Delighted RubyGem #{Delighted::VERSION}" }
102
+ response = Delighted::HTTPResponse.new(202, {}, Delighted::JSON.dump({ :ok => true }))
103
+ mock_http_adapter.expects(:request).with(:delete, uri, headers, nil).once.returns(response)
104
+
105
+ result = Delighted::Person.delete(:email => "foo@bar.com")
106
+ assert_kind_of Hash, result
107
+ assert_equal({ :ok => true }, result)
108
+ end
109
+
110
+ def test_deleting_a_person_by_phone_number
111
+ uri = URI.parse("https://api.delightedapp.com/v1/people/phone_number%3A%2B14155551212")
112
+ headers = { 'Authorization' => @auth_header, "Accept" => "application/json", 'Content-Type' => 'application/json', 'User-Agent' => "Delighted RubyGem #{Delighted::VERSION}" }
113
+ response = Delighted::HTTPResponse.new(202, {}, Delighted::JSON.dump({ :ok => true }))
114
+ mock_http_adapter.expects(:request).with(:delete, uri, headers, nil).once.returns(response)
115
+
116
+ result = Delighted::Person.delete(:phone_number => "+14155551212")
117
+ assert_kind_of Hash, result
118
+ assert_equal({ :ok => true }, result)
119
+ end
83
120
  end
84
121
 
85
122
  class Delighted::SurveyResponseTest < Delighted::TestCase
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delighted
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Dodwell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-18 00:00:00.000000000 Z
11
+ date: 2018-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -90,6 +90,7 @@ files:
90
90
  - lib/delighted/json.rb
91
91
  - lib/delighted/operations/all.rb
92
92
  - lib/delighted/operations/create.rb
93
+ - lib/delighted/operations/delete.rb
93
94
  - lib/delighted/operations/retrieve.rb
94
95
  - lib/delighted/operations/update.rb
95
96
  - lib/delighted/resource.rb
@@ -119,12 +120,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
120
  version: '0'
120
121
  required_rubygems_version: !ruby/object:Gem::Requirement
121
122
  requirements:
122
- - - ">="
123
+ - - ">"
123
124
  - !ruby/object:Gem::Version
124
- version: '0'
125
+ version: 1.3.1
125
126
  requirements: []
126
127
  rubyforge_project:
127
- rubygems_version: 2.6.13
128
+ rubygems_version: 2.7.6
128
129
  signing_key:
129
130
  specification_version: 4
130
131
  summary: Delighted is the fastest and easiest way to gather actionable feedback from