qualtrics_api 0.0.14 → 0.0.15
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 +4 -4
- data/README.md +15 -4
- data/fixtures/vcr_cassettes/panel_member_single_create_failure.yml +39 -0
- data/fixtures/vcr_cassettes/panel_member_single_create_success.yml +82 -0
- data/lib/qualtrics_api/panel.rb +8 -0
- data/lib/qualtrics_api/panel_member.rb +12 -2
- data/lib/qualtrics_api/panel_member_collection.rb +9 -1
- data/lib/qualtrics_api/version.rb +1 -1
- data/spec/lib/panel_member_collection_spec.rb +32 -2
- data/spec/lib/panel_spec.rb +19 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 614308b0a73ec2d9a904703243f2b7ca0828936113122eb8a104aeff1b34e7be
|
4
|
+
data.tar.gz: dd67d5dc10dc3669679f51a368810161f21fe44516e5a0c796da8b56099bfda8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d900c025250a3ff9104ceedb881ebeeff156b43f58b4b898ea3fee86941752f1c59a3f86ee7439a29b39d1efd604f80de557d8d64cf5765127713c9a01cd2698
|
7
|
+
data.tar.gz: 0700d5570105ea93a3ceb7e4c65be6f637a8d239da9d3779929886dbead496ce04a75c872a01c5a5ade6cf1b6d17972c841182e79c448cab65e5aca96bbec848
|
data/README.md
CHANGED
@@ -197,19 +197,20 @@ panel = QualtricsAPI.panels["panelIdHere"]
|
|
197
197
|
|
198
198
|
#### Panel Members
|
199
199
|
|
200
|
-
To
|
200
|
+
To import a batch of panel members:
|
201
201
|
|
202
202
|
```ruby
|
203
203
|
panel = QualtricsAPI.panels.find("panelIdHere")
|
204
204
|
members = [QualtricsAPI::PanelMember.new(first_name: 'John', last_name: 'Doe', email: 'test@test.com')]
|
205
|
-
panel.
|
205
|
+
panel.import_members(members)
|
206
206
|
=> #<QualtricsAPI::PanelImport:0x007fb7db984668 ...>
|
207
207
|
```
|
208
208
|
|
209
|
-
|
209
|
+
A `PanelImport` record is returned, you can use it to check the status of panel import:
|
210
|
+
|
210
211
|
```ruby
|
211
212
|
members = [QualtricsAPI::PanelMember.new(first_name: 'John', last_name: 'Doe', email: 'test@test.com')]
|
212
|
-
panel_import = panel.members.
|
213
|
+
panel_import = panel.members.import_members(members)
|
213
214
|
=> #<QualtricsAPI::PanelImport:0x007fb7db984668 ...>
|
214
215
|
panel_import.status
|
215
216
|
=> "99.99999%"
|
@@ -218,6 +219,16 @@ panel_import.status
|
|
218
219
|
=> "100.0%"
|
219
220
|
```
|
220
221
|
|
222
|
+
To add a single panel member to a panel:
|
223
|
+
|
224
|
+
```ruby
|
225
|
+
panel = QualtricsAPI.panels.find("panelIdHere")
|
226
|
+
member = QualtricsAPI::PanelMember.new(first_name: 'John', last_name: 'Doe', email: 'test@test.com')
|
227
|
+
panel.create(member)
|
228
|
+
```
|
229
|
+
|
230
|
+
A new `PanelMember` record is returned on success; this will give you the ID of the newly created member.
|
231
|
+
|
221
232
|
## Contributing
|
222
233
|
|
223
234
|
1. Fork it ( https://github.com/pallymore/qualtrics_api/fork )
|
@@ -0,0 +1,39 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://co1.qualtrics.com/API/v3/mailinglists/ML_ez0Gj1S4SX4TZjv
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
X-API-TOKEN:
|
11
|
+
- xxx
|
12
|
+
User-Agent:
|
13
|
+
- Faraday v0.13.1
|
14
|
+
response:
|
15
|
+
status:
|
16
|
+
code: 404
|
17
|
+
message:
|
18
|
+
headers:
|
19
|
+
content-type:
|
20
|
+
- application/json
|
21
|
+
content-length:
|
22
|
+
- '129'
|
23
|
+
x-edgeconnect-midmile-rtt:
|
24
|
+
- '12'
|
25
|
+
x-edgeconnect-origin-mex-latency:
|
26
|
+
- '195'
|
27
|
+
date:
|
28
|
+
- Mon, 08 Jan 2018 16:57:07 GMT
|
29
|
+
connection:
|
30
|
+
- close
|
31
|
+
strict-transport-security:
|
32
|
+
- max-age=31536000; includeSubDomains; preload
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: '{"meta":{"httpStatus":"404 - Not Found","error":{"errorMessage":"Mailing
|
36
|
+
List not found","errorCode":"PACC_6"},"requestId":null}}'
|
37
|
+
http_version:
|
38
|
+
recorded_at: Mon, 08 Jan 2018 16:57:07 GMT
|
39
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,82 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://co1.qualtrics.com/API/v3/mailinglists/ML_ez0Gj1S4SX4TZjv
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
X-API-TOKEN:
|
11
|
+
- xxx
|
12
|
+
User-Agent:
|
13
|
+
- Faraday v0.13.1
|
14
|
+
response:
|
15
|
+
status:
|
16
|
+
code: 200
|
17
|
+
message:
|
18
|
+
headers:
|
19
|
+
request-time:
|
20
|
+
- '429'
|
21
|
+
content-type:
|
22
|
+
- application/json
|
23
|
+
content-length:
|
24
|
+
- '228'
|
25
|
+
x-edgeconnect-midmile-rtt:
|
26
|
+
- '14'
|
27
|
+
x-edgeconnect-origin-mex-latency:
|
28
|
+
- '476'
|
29
|
+
date:
|
30
|
+
- Mon, 08 Jan 2018 16:45:15 GMT
|
31
|
+
connection:
|
32
|
+
- close
|
33
|
+
strict-transport-security:
|
34
|
+
- max-age=31536000; includeSubDomains; preload
|
35
|
+
body:
|
36
|
+
encoding: UTF-8
|
37
|
+
string: '{"result":{"id":"ML_ez0Gj1S4SX4TZjv","libraryId":"UR_5dURLpfp5tm43EV","name":"NYC05
|
38
|
+
QN-SPS-NYC-STU-EL-6","category":"Unassigned","folder":null},"meta":{"httpStatus":"200
|
39
|
+
- OK","requestId":"66f0f343-665b-4616-b525-c367fecfc760"}}'
|
40
|
+
http_version:
|
41
|
+
recorded_at: Mon, 08 Jan 2018 16:45:29 GMT
|
42
|
+
- request:
|
43
|
+
method: post
|
44
|
+
uri: https://co1.qualtrics.com/API/v3/mailinglists/ML_ez0Gj1S4SX4TZjv/contacts
|
45
|
+
body:
|
46
|
+
encoding: UTF-8
|
47
|
+
string: '{"firstName":"test","lastName":"member","email":"test@test.com"}'
|
48
|
+
headers:
|
49
|
+
X-API-TOKEN:
|
50
|
+
- xxx
|
51
|
+
User-Agent:
|
52
|
+
- Faraday v0.13.1
|
53
|
+
Content-Type:
|
54
|
+
- application/json
|
55
|
+
response:
|
56
|
+
status:
|
57
|
+
code: 200
|
58
|
+
message:
|
59
|
+
headers:
|
60
|
+
request-time:
|
61
|
+
- '385'
|
62
|
+
content-type:
|
63
|
+
- application/json
|
64
|
+
content-length:
|
65
|
+
- '124'
|
66
|
+
x-edgeconnect-midmile-rtt:
|
67
|
+
- '13'
|
68
|
+
x-edgeconnect-origin-mex-latency:
|
69
|
+
- '438'
|
70
|
+
date:
|
71
|
+
- Mon, 08 Jan 2018 16:45:15 GMT
|
72
|
+
connection:
|
73
|
+
- close
|
74
|
+
strict-transport-security:
|
75
|
+
- max-age=31536000; includeSubDomains; preload
|
76
|
+
body:
|
77
|
+
encoding: UTF-8
|
78
|
+
string: '{"result":{"id":"MLRP_6lo2XeWwEHBhnk9"},"meta":{"httpStatus":"200 -
|
79
|
+
OK","requestId":"b36a2747-33fb-4b73-b559-082d86051939"}}'
|
80
|
+
http_version:
|
81
|
+
recorded_at: Mon, 08 Jan 2018 16:45:30 GMT
|
82
|
+
recorded_with: VCR 3.0.3
|
data/lib/qualtrics_api/panel.rb
CHANGED
@@ -11,6 +11,14 @@ module QualtricsAPI
|
|
11
11
|
@members ||= QualtricsAPI::PanelMemberCollection.new(options.merge(id: id)).propagate_connection(self)
|
12
12
|
end
|
13
13
|
|
14
|
+
def import_members(mbs)
|
15
|
+
members.import_members(mbs)
|
16
|
+
end
|
17
|
+
|
18
|
+
def create(member)
|
19
|
+
members.create(member)
|
20
|
+
end
|
21
|
+
|
14
22
|
private
|
15
23
|
|
16
24
|
def attributes_mappings
|
@@ -15,10 +15,14 @@ module QualtricsAPI
|
|
15
15
|
attributes.to_json
|
16
16
|
end
|
17
17
|
|
18
|
+
def to_create_json
|
19
|
+
attributes(attributes_for_create).select{ |k,v| k }.to_json
|
20
|
+
end
|
21
|
+
|
18
22
|
alias_method :super_attributes, :attributes
|
19
23
|
|
20
|
-
def attributes
|
21
|
-
Hash[super_attributes.map { |k, v| [
|
24
|
+
def attributes(attrs = attributes_for_save)
|
25
|
+
Hash[super_attributes.map { |k, v| [attrs[k], v] }].delete_if { |_k, v| v.nil? }
|
22
26
|
end
|
23
27
|
|
24
28
|
private
|
@@ -36,6 +40,12 @@ module QualtricsAPI
|
|
36
40
|
}
|
37
41
|
end
|
38
42
|
|
43
|
+
def attributes_for_create
|
44
|
+
attrs = attributes_for_save
|
45
|
+
attrs.delete(:id)
|
46
|
+
attrs.merge({ :external_reference => "externalDataRef" })
|
47
|
+
end
|
48
|
+
|
39
49
|
def attributes_mappings
|
40
50
|
{
|
41
51
|
:id => "panelMemberId",
|
@@ -3,8 +3,16 @@ module QualtricsAPI
|
|
3
3
|
values do
|
4
4
|
attribute :id, String
|
5
5
|
end
|
6
|
+
|
7
|
+
def create(panel_member)
|
8
|
+
payload = panel_member.to_create_json
|
9
|
+
res = QualtricsAPI.connection(self)
|
10
|
+
.post("mailinglists/#{id}/contacts", payload)
|
11
|
+
.body["result"]
|
12
|
+
return QualtricsAPI::PanelMember.new(panel_member.attributes.merge({ id: res['id'] }))
|
13
|
+
end
|
6
14
|
|
7
|
-
def
|
15
|
+
def import_members(panel_members)
|
8
16
|
payload = {
|
9
17
|
contacts: Faraday::UploadIO.new(StringIO.new(panel_members.to_json), 'application/json', 'contacts.json')
|
10
18
|
}
|
@@ -53,10 +53,10 @@ describe QualtricsAPI::PanelMemberCollection do
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
describe "#
|
56
|
+
describe "#import_members" do
|
57
57
|
let(:result) do
|
58
58
|
VCR.use_cassette(cassette, record: :once) do
|
59
|
-
QualtricsAPI.panels.find('ML_0APx3C4rmHER6w5').members.
|
59
|
+
QualtricsAPI.panels.find('ML_0APx3C4rmHER6w5').members.import_members(panel_members)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
@@ -86,5 +86,35 @@ describe QualtricsAPI::PanelMemberCollection do
|
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end
|
89
|
+
|
90
|
+
describe '#create' do
|
91
|
+
let(:result) do
|
92
|
+
VCR.use_cassette(cassette, record: :once) do
|
93
|
+
QualtricsAPI.panels.find('ML_ez0Gj1S4SX4TZjv').members.create(panel_member)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe 'when success' do
|
98
|
+
let(:cassette) { 'panel_member_single_create_success' }
|
99
|
+
let(:panel_member) { QualtricsAPI::PanelMember.new(first_name: 'test', last_name: 'member', email: 'test@test.com') }
|
100
|
+
|
101
|
+
it 'returns PanelMember' do
|
102
|
+
expect(result).to be_a QualtricsAPI::PanelMember
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'returns PanelMember with id' do
|
106
|
+
expect(result.id).to match(/^MLRP_/)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe 'when failed' do
|
111
|
+
let(:cassette) { 'panel_member_single_create_failure' }
|
112
|
+
let(:panel_member) { QualtricsAPI::PanelMember.new(first_name: 'test', last_name: 'member', email: 'test@test.com') }
|
113
|
+
|
114
|
+
it 'raises exception' do
|
115
|
+
expect{result}.to raise_error{QualtricsAPI::NotFoundError}
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
89
119
|
end
|
90
120
|
end
|
data/spec/lib/panel_spec.rb
CHANGED
@@ -55,4 +55,23 @@ describe QualtricsAPI::Panel do
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
58
|
+
|
59
|
+
describe '#import_members' do
|
60
|
+
it 'is delegated to the panel member collection' do
|
61
|
+
collection_double = double()
|
62
|
+
allow(subject).to receive(:members) { collection_double }
|
63
|
+
collection_double.should_receive(:import_members).with([])
|
64
|
+
subject.import_members([])
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe '#create' do
|
69
|
+
let(:member) { QualtricsAPI::PanelMember.new }
|
70
|
+
it 'is delegated to the panel member collection' do
|
71
|
+
collection_double = double()
|
72
|
+
allow(subject).to receive(:members) { collection_double }
|
73
|
+
expect(collection_double).to receive(:create).with(member)
|
74
|
+
subject.create(member)
|
75
|
+
end
|
76
|
+
end
|
58
77
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qualtrics_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yurui Zhang
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2018-01-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: faraday
|
@@ -145,6 +145,8 @@ files:
|
|
145
145
|
- fixtures/vcr_cassettes/panel_member_collection_create_success.yml
|
146
146
|
- fixtures/vcr_cassettes/panel_member_collection_fetch_fail.yml
|
147
147
|
- fixtures/vcr_cassettes/panel_member_collection_fetch_success.yml
|
148
|
+
- fixtures/vcr_cassettes/panel_member_single_create_failure.yml
|
149
|
+
- fixtures/vcr_cassettes/panel_member_single_create_success.yml
|
148
150
|
- fixtures/vcr_cassettes/response_export_start_success.yml
|
149
151
|
- fixtures/vcr_cassettes/response_export_update_success.yml
|
150
152
|
- fixtures/vcr_cassettes/survey_collection_fetch_fail.yml
|
@@ -208,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
210
|
version: '0'
|
209
211
|
requirements: []
|
210
212
|
rubyforge_project:
|
211
|
-
rubygems_version: 2.7.
|
213
|
+
rubygems_version: 2.7.4
|
212
214
|
signing_key:
|
213
215
|
specification_version: 4
|
214
216
|
summary: A Ruby wrapper for Qualtrics REST API v3.0
|