qualtrics 0.6.0 → 0.6.1

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
2
  SHA1:
3
- metadata.gz: 9d2a904a2949091deeca7ce3767804fa303fc9f1
4
- data.tar.gz: 7267ee130f72423946a688f950a329eafb89e94a
3
+ metadata.gz: be834a55988ab40b72e6965929937c2dd41a07fb
4
+ data.tar.gz: bf6d9f735800c64921ffcfe051c73c92eba99f43
5
5
  SHA512:
6
- metadata.gz: 312789a9a387de64ee65633938054e0b2a19909ea73b056c97614594c74d4d62da25cf587bad9ff5f132d110589026f9d103f1204a2118fb3045c0f8d21e4296
7
- data.tar.gz: 0ded16f030cb49c95d82b7eda232a9f29f05716171c78c0fdbb278d8ee7cbab789f19c5c59290f5a17c9024ed3e111385ffbe7e9d5e5b4fac3a440bd75462d0e
6
+ metadata.gz: 118bc5617532aa6fea1f706d705588cd895e1922520ac9ba3162e0e898f299e9b91d0330e5d0fb7767432749272c78152acbd67c036d57cd8447d24b9bee0e70
7
+ data.tar.gz: 7fc42f68e519f6c0e8bc494d3a45e608b850323bf9c150bdea1ee210288f0fc92b7b8002a7e19f0c4782780423528389ebf70f9ae6f2738c5f765f3082846e4e
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.2
data/README.md CHANGED
@@ -1,35 +1,83 @@
1
- # Qualtrics
1
+ [![Code Climate](https://codeclimate.com/github/sunkev/qualtrics/badges/gpa.svg)](https://codeclimate.com/github/sunkev/qualtrics) [![Build Status](https://travis-ci.org/sunkev/qualtrics.svg?branch=master)](https://travis-ci.org/sunkev/qualtrics) [![Coverage Status](https://coveralls.io/repos/sunkev/qualtrics/badge.svg)](https://coveralls.io/r/sunkev/qualtrics) [![Gem Version](https://badge.fury.io/rb/qualtrics.svg)](http://badge.fury.io/rb/qualtrics)
2
2
 
3
- TODO: Write a gem description
3
+ # Qualtrics
4
4
 
5
- ## Installation
5
+ A nice wrapper for the Qualtrics REST API. Currently under fast iterations.
6
+ Full functional, but may see many changes before 1.0 release.
7
+ Not recommended for production use before then.
6
8
 
7
- Add this line to your application's Gemfile:
9
+ Just add the gem.
8
10
 
9
11
  gem 'qualtrics'
12
+
13
+ ## Configuration
14
+
15
+ Set the user, token and default library id
10
16
 
11
- And then execute:
17
+ Qualtrics.configure do |config|
18
+ config.user = ENV['QUALTRICS_USER']
19
+ config.token = ENV['QUALTRICS_TOKEN']
20
+ config.default_library_id = ENV['QUALTRICS_LIBRARY_ID']
21
+ end
12
22
 
13
- $ bundle
23
+ ## Example usage
14
24
 
15
- Or install it yourself as:
25
+ Add/remove a panel to Qualtrics
16
26
 
17
- $ gem install qualtrics
27
+ panel = Qualtrics::Panel.new({
28
+ name: 'My first panel'
29
+ })
18
30
 
19
- Qualtrics.configure do |config|
20
- config.user = ENV['QUALTRICS_USER']
21
- config.token = ENV['QUALTRICS_TOKEN']
22
- config.default_library_id = ENV['QUALTRICS_LIBRARY_ID']
23
- end
31
+ panel.save
32
+ panel.destroy
33
+
34
+ Add/remove recipients to panel
35
+
36
+ recipient = Qualtrics::Recipient.new({
37
+ panel_id: panel.id
38
+ })
39
+
40
+ recipient.save
41
+ recipient.delete
42
+
43
+ Retrieve all survey and messages in Qualtrics
44
+
45
+ Qualtrics::Survey.all -> returns array of Qualtrics::Survey objects
46
+ Qualtrics::Message.all
47
+
48
+ Send a survey to a panel or individual with the Mailer object
24
49
 
25
- ## Usage
50
+ mailer = Qualtrics::Mailer.new({
51
+ from_email: 'from_email',
52
+ from_name: 'from_name',
53
+ subject: 'subject'
54
+ })
55
+
56
+ mailer.send_survey_to_individual(recipient, message, survey)
57
+ mailer.send_survey_to_panel(panel, message, survey)
58
+
59
+ Retrieve submission results if you know the Qualtrics response_qid
60
+
61
+ submission = Qualtrics::Submission.new({
62
+ id: 'response_qid',
63
+ survey_id: 'survey_id'
64
+ })
65
+
66
+ submission.raw_csv
67
+
68
+ ## Interesting features
26
69
 
27
- TODO: Write usage instructions here
70
+ Can batch update all the recipients in a panel for efficency.
28
71
 
72
+ ## TODO
73
+
74
+ 1. Allow retrieving responses in different formats.
75
+ 2. Qualtrics does not all deleting library messages, find a way to test around this.
76
+
29
77
  ## Contributing
30
78
 
31
- 1. Fork it ( https://github.com/[my-github-username]/qualtrics/fork )
32
- 2. Create your feature branch (`git checkout -b my-new-feature`)
33
- 3. Commit your changes (`git commit -am 'Add some feature'`)
34
- 4. Push to the branch (`git push origin my-new-feature`)
35
- 5. Create a new Pull Request
79
+ 1. Fork it ( https://github.com/[my-github-username]/qualtrics/fork
80
+ 2. Add tests.
81
+ 3. Make your feature addition or bug fix.
82
+ 4. Send me a pull request.
83
+
@@ -4,6 +4,8 @@ module Qualtrics
4
4
  include ActiveModel::Model
5
5
  include ActiveModel::Validations
6
6
 
7
+ QUALTRICS_POST_TIMEZONE = 'Mountain Time (US & Canada)'
8
+
7
9
  def library_id=(lib_id)
8
10
  @library_id = lib_id
9
11
  end
@@ -51,5 +53,9 @@ module Qualtrics
51
53
  def self.configuration
52
54
  Qualtrics.configuration
53
55
  end
56
+
57
+ def formatted_time(time)
58
+ time.utc.in_time_zone(QUALTRICS_POST_TIMEZONE).strftime("%Y-%m-%d %H:%M:%S")
59
+ end
54
60
  end
55
61
  end
@@ -12,8 +12,6 @@ module Qualtrics
12
12
  validates :from_name, presence: true
13
13
  validates :subject, presence: true
14
14
 
15
- QUALTRICS_POST_TIMEZONE = 'Mountain Time (US & Canada)'
16
-
17
15
  def initialize(options={})
18
16
  @send_date = options[:send_date] || post_time
19
17
  @from_email = options[:from_email]
@@ -92,12 +90,9 @@ module Qualtrics
92
90
  end
93
91
 
94
92
  private
95
- def post_time
96
- formatted_time Time.now.utc.in_time_zone(QUALTRICS_POST_TIMEZONE)
97
- end
98
93
 
99
- def formatted_time(time)
100
- time.strftime("%Y-%m-%d %H:%M:%S")
94
+ def post_time
95
+ formatted_time Time.now
101
96
  end
102
97
 
103
98
  def create_distribution(response, survey_id, message_id)
@@ -50,6 +50,14 @@ module Qualtrics
50
50
  end
51
51
  end
52
52
 
53
+ def add_recipients(recipients)
54
+ panel_import = Qualtrics::PanelImport.new({
55
+ panel: self,
56
+ recipients: recipients
57
+ })
58
+ panel_import.save
59
+ end
60
+
53
61
  def destroy
54
62
  response = post('deletePanel', {
55
63
  'LibraryID' => library_id,
@@ -13,6 +13,7 @@ module Qualtrics
13
13
  payload = headers
14
14
  payload['LibraryID'] = library_id
15
15
  payload['ColumnHeaders'] = 1
16
+ payload['PanelID'] = @panel.id if @panel.persisted?
16
17
  file = Qualtrics::PanelImportFile.new(@recipients)
17
18
  post 'importPanel', payload, File.read(file.temp_file)
18
19
  true
@@ -38,6 +38,22 @@ module Qualtrics
38
38
  end
39
39
  end
40
40
 
41
+ def retrieve_all_raw_responses(start_date, end_date)
42
+ response = get('getLegacyResponseData', {
43
+ 'SurveyID' => id,
44
+ 'StartDate' => formatted_time(start_date),
45
+ 'EndDate' => formatted_time(end_date),
46
+ 'Format' => 'CSV',
47
+ 'ExportTags' => 1
48
+ })
49
+
50
+ if response.status == 200
51
+ response.result
52
+ else
53
+ false
54
+ end
55
+ end
56
+
41
57
  def self.attribute_map
42
58
  {
43
59
  'responses' => :responses,
@@ -1,3 +1,3 @@
1
1
  module Qualtrics
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
@@ -30,4 +30,5 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency 'dotenv'
31
31
  spec.add_development_dependency 'vcr'
32
32
  spec.add_development_dependency 'webmock'
33
+ spec.add_development_dependency 'coveralls'
33
34
  end
@@ -0,0 +1,110 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://survey.qualtrics.com/WRAPI/ControlPanel/api.php
6
+ body:
7
+ encoding: UTF-8
8
+ string: Category=Great+Category&Format=JSON&LibraryID=<QUALTRICS_LIBRARY_ID>&Name=Newest+Panel&Request=createPanel&Token=<QUALTRICS_TOKEN>&User=brookesidedev%40brookeside.com&Version=2.3
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.1
12
+ Content-Type:
13
+ - application/x-www-form-urlencoded
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - Apache
25
+ Cache-Control:
26
+ - max-age=315360000
27
+ Expires:
28
+ - Sun, 09 Mar 2025 20:52:52 GMT
29
+ P3p:
30
+ - CP="CAO DSP COR CURa ADMa DEVa OUR IND PHY ONL UNI COM NAV INT DEM PRE", CP="CAO
31
+ DSP COR CURa ADMa DEVa OUR IND PHY ONL UNI COM NAV INT DEM PRE"
32
+ Servershortname:
33
+ - w634
34
+ X-Cnection:
35
+ - close
36
+ X-Edgeconnect-Midmile-Rtt:
37
+ - '10'
38
+ - '14'
39
+ X-Edgeconnect-Origin-Mex-Latency:
40
+ - '224'
41
+ - '733'
42
+ Content-Length:
43
+ - '82'
44
+ Content-Type:
45
+ - application/json
46
+ Date:
47
+ - Thu, 12 Mar 2015 20:52:52 GMT
48
+ Connection:
49
+ - keep-alive
50
+ body:
51
+ encoding: UTF-8
52
+ string: '{"Meta":{"Status":"Success","Debug":""},"Result":{"PanelID":"ML_5gMUHo4Xfog8K6F"}}'
53
+ http_version:
54
+ recorded_at: Thu, 12 Mar 2015 20:52:52 GMT
55
+ - request:
56
+ method: post
57
+ uri: https://survey.qualtrics.com/WRAPI/ControlPanel/api.php?ColumnHeaders=1&Email=3&EmbeddedData=4&ExternalData=5&FirstName=1&Format=JSON&Language=7&LastName=2&LibraryID=<QUALTRICS_LIBRARY_ID>&PanelID=ML_5gMUHo4Xfog8K6F&Request=importPanel&Token=<QUALTRICS_TOKEN>&Unsubscribed=6&User=<QUALTRICS_USER>&Version=2.3
58
+ body:
59
+ encoding: UTF-8
60
+ string: |
61
+ "FirstName","LastName","Email","EmbeddedData","ExternalData","Unsubscribed","Language"
62
+ "New","Person","example@example.com","","","",""
63
+ "Another","NewPerson","example@example.com","","","",""
64
+ headers:
65
+ User-Agent:
66
+ - Faraday v0.9.1
67
+ Content-Type:
68
+ - application/x-www-form-urlencoded
69
+ Accept-Encoding:
70
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
71
+ Accept:
72
+ - "*/*"
73
+ response:
74
+ status:
75
+ code: 200
76
+ message: OK
77
+ headers:
78
+ Server:
79
+ - Apache
80
+ Cache-Control:
81
+ - max-age=315360000
82
+ Expires:
83
+ - Sun, 09 Mar 2025 20:52:53 GMT
84
+ P3p:
85
+ - CP="CAO DSP COR CURa ADMa DEVa OUR IND PHY ONL UNI COM NAV INT DEM PRE", CP="CAO
86
+ DSP COR CURa ADMa DEVa OUR IND PHY ONL UNI COM NAV INT DEM PRE"
87
+ Servershortname:
88
+ - w202
89
+ X-Cnection:
90
+ - close
91
+ X-Edgeconnect-Midmile-Rtt:
92
+ - '10'
93
+ - '11'
94
+ X-Edgeconnect-Origin-Mex-Latency:
95
+ - '323'
96
+ - '792'
97
+ Content-Length:
98
+ - '214'
99
+ Content-Type:
100
+ - application/json
101
+ Date:
102
+ - Thu, 12 Mar 2015 20:52:53 GMT
103
+ Connection:
104
+ - keep-alive
105
+ body:
106
+ encoding: UTF-8
107
+ string: '{"Meta":{"Status":"Success","Debug":""},"Result":{"PanelID":"ML_5gMUHo4Xfog8K6F","Count":2,"IgnoredCount":0,"Recipients":{"MLRP_9BmlZ9vmPgQ9hGJ":"example@example.com","MLRP_7WlcwPHwkUYPWKx":"example@example.com"}}}'
108
+ http_version:
109
+ recorded_at: Thu, 12 Mar 2015 20:52:53 GMT
110
+ recorded_with: VCR 2.9.2
@@ -11,7 +11,7 @@ describe Qualtrics::Mailer, :vcr do
11
11
  end
12
12
 
13
13
  it 'has a default send date' do
14
- send_date = Time.now.utc.in_time_zone(Qualtrics::Mailer::QUALTRICS_POST_TIMEZONE).strftime("%Y-%m-%d %H:%M:%S")
14
+ send_date = Time.now.utc.in_time_zone(Qualtrics::Entity::QUALTRICS_POST_TIMEZONE).strftime("%Y-%m-%d %H:%M:%S")
15
15
  mailer = Qualtrics::Mailer.new({})
16
16
  expect(mailer.send_date).to eq(send_date)
17
17
  end
@@ -77,4 +77,16 @@ describe Qualtrics::Panel, :vcr => true do
77
77
  panel.save
78
78
  expect(Qualtrics::Panel.all.map{|p| p.id}).to include(panel.id)
79
79
  end
80
+
81
+ context 'updating in qualtrics' do
82
+ it 'adds recipients to an existing panel' do
83
+ panel.save
84
+ expect(panel.persisted?).to be true
85
+ recipients = [
86
+ Qualtrics::Recipient.new(email: 'example@example.com', first_name: 'New', last_name: 'Person'),
87
+ Qualtrics::Recipient.new(email: 'example@example.com', first_name: 'Another', last_name: 'NewPerson')
88
+ ]
89
+ expect(panel.add_recipients(recipients)).to be true
90
+ end
91
+ end
80
92
  end
@@ -1,6 +1,8 @@
1
1
  require 'rspec'
2
2
  require 'pry'
3
3
  require 'qualtrics'
4
+ require 'coveralls'
5
+ Coveralls.wear!
4
6
 
5
7
  Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
6
8
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qualtrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Sun
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-03 00:00:00.000000000 Z
12
+ date: 2015-09-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: configatron
@@ -165,6 +165,20 @@ dependencies:
165
165
  - - ">="
166
166
  - !ruby/object:Gem::Version
167
167
  version: '0'
168
+ - !ruby/object:Gem::Dependency
169
+ name: coveralls
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
168
182
  description: Client for Qualtrics API with Faraday
169
183
  email:
170
184
  - sunkev@brandeis.edu
@@ -176,6 +190,7 @@ files:
176
190
  - ".env.example"
177
191
  - ".gitignore"
178
192
  - ".rspec"
193
+ - ".travis.yml"
179
194
  - Gemfile
180
195
  - LICENSE.txt
181
196
  - README.md
@@ -215,6 +230,7 @@ files:
215
230
  - spec/fixtures/vcr_cassettes/Qualtrics_Panel/destroys_a_panel_that_returns_true_when_successful.yml
216
231
  - spec/fixtures/vcr_cassettes/Qualtrics_Panel/raises_an_error_when_you_attempt_to_save_an_already_presisted_panel.yml
217
232
  - spec/fixtures/vcr_cassettes/Qualtrics_Panel/retrieves_an_array_of_all_panels_in_a_library.yml
233
+ - spec/fixtures/vcr_cassettes/Qualtrics_Panel/updating_in_qualtrics/adds_recipients_to_an_existing_panel.yml
218
234
  - spec/fixtures/vcr_cassettes/Qualtrics_PanelImport/transmits_to_qualtrics.yml
219
235
  - spec/fixtures/vcr_cassettes/Qualtrics_Recipient/creating_to_qualtrics/persists_to_qualtrics.yml
220
236
  - spec/fixtures/vcr_cassettes/Qualtrics_Recipient/creating_to_qualtrics/populates_the_recipient_id_when_successful.yml
@@ -286,6 +302,7 @@ test_files:
286
302
  - spec/fixtures/vcr_cassettes/Qualtrics_Panel/destroys_a_panel_that_returns_true_when_successful.yml
287
303
  - spec/fixtures/vcr_cassettes/Qualtrics_Panel/raises_an_error_when_you_attempt_to_save_an_already_presisted_panel.yml
288
304
  - spec/fixtures/vcr_cassettes/Qualtrics_Panel/retrieves_an_array_of_all_panels_in_a_library.yml
305
+ - spec/fixtures/vcr_cassettes/Qualtrics_Panel/updating_in_qualtrics/adds_recipients_to_an_existing_panel.yml
289
306
  - spec/fixtures/vcr_cassettes/Qualtrics_PanelImport/transmits_to_qualtrics.yml
290
307
  - spec/fixtures/vcr_cassettes/Qualtrics_Recipient/creating_to_qualtrics/persists_to_qualtrics.yml
291
308
  - spec/fixtures/vcr_cassettes/Qualtrics_Recipient/creating_to_qualtrics/populates_the_recipient_id_when_successful.yml