delighted 1.7.0 → 1.8.0rc1

Sign up to get free protection for your applications and to get access to all the features.
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