roqua-rom-api 0.1.7 → 0.1.8

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: 881dd5c16f0143f91608a347ffb8c53db068158b
4
- data.tar.gz: 46dec1b7bef8b9c165318bca401707dc8cee143b
3
+ metadata.gz: ce8decd48dd3da616e6eb16c463ecc8f8603f104
4
+ data.tar.gz: 2bde7738950a4b361b882a06c50a4752475f6960
5
5
  SHA512:
6
- metadata.gz: dc6f22a64c1b796dd5005ce4d05a623ddce36cf61e5467e3871781759bfbc456b69155527deaaf41b51c59e94c440b591b8bc4693431dfa2de4fd01d2c2d2d64
7
- data.tar.gz: 881c3a68d08afb1eb48eabe34af902b34f3126ea3f10ef7f15e4a7af069af785671d72d0f3b2d0414f4651f52a813fb68f9eaf1e553f5990a1093dc441f3246e
6
+ metadata.gz: c5e0f2e97f3f2f7d17f06b7a45bf4a4d437cb258f17620ce6590effa94ae12e153d06e822c93117a3b08ff55adaa81944bf34535d33842ae8f5cd4c47ac6a8c6
7
+ data.tar.gz: 1ffdcdf567b1372c7e42f6f1fbc86ddcf232e258feb0ee19a7ce92ea6cf63f344efc6f3d0569e9c34d5fd8b5661d538a9d6f4567f0ed85350ac4fe469af3d9ab
data/ChangeLog.md CHANGED
@@ -1,3 +1,7 @@
1
+ ### 0.1.8 / 2014-09-22
2
+
3
+ * Add API endpoint for creating responses
4
+
1
5
  ### 0.1.7 / 2014-07-10
2
6
 
3
7
  * Add id to responses api
data/Guardfile CHANGED
@@ -6,4 +6,3 @@ guard :rspec, cmd: 'bundle exec rspec --format Fuubar --colour', failed_mode: :n
6
6
  watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
7
  watch('spec/spec_helper.rb') { "spec" }
8
8
  end
9
-
data/README.md CHANGED
@@ -25,13 +25,13 @@ To create a fill out request run:
25
25
 
26
26
  #### Parameters
27
27
 
28
- * `dossier_id` [Required] - Unique dossier identifier string for the patient about to fill out questionnaires
29
- * `questionnaire_keys [Required] - Array of keys of questionnaires to fill out
30
- * open_from - Time the patient can start filling out the questionnaires and time.
31
- * open_till - Time the patient can no longer fill in the questionnaire.
32
- * callback_url [Required] - Url for event callbacks
33
- * reminders - Array of durations after which a reminder should be sent if fill_out_request has not been finished.
34
- * respondent_type - Defaults to 'patient_version', each type is a separate list of questionnaires to fill out.
28
+ * `dossier_id:` [Required] - Unique dossier identifier string for the patient about to fill out questionnaires
29
+ * `questionnaire_keys:` [Required] - Array of keys of questionnaires to fill out
30
+ * `open_from:` Time the patient can start filling out the questionnaires and time.
31
+ * `open_till:` Time the patient can no longer fill in the questionnaire.
32
+ * `callback_url:` [Required] - Url for event callbacks
33
+ * `reminders:` Array of durations after which a reminder should be sent if fill_out_request has not been finished.
34
+ * `respondent_type:` Defaults to 'patient_version', each type is a separate list of questionnaires to fill out.
35
35
 
36
36
 
37
37
  ## Fill Out Sessions
@@ -45,8 +45,8 @@ To start filling out a set of questionnaires run:
45
45
  #### Parameters
46
46
 
47
47
  * `dossier_id:` [Required] - Unique dossier identifier for the patient about to fill out a questionnaire.
48
- * `questionnaire_keys:` - Array of keys uniquely identifying the questionnaires to be filled out.
49
- * `response_ids:` - Array of ids uniquely identifying aborted responses for which filling out has to be resumed.
48
+ * `questionnaire_keys:` Array of keys uniquely identifying the questionnaires to be filled out.
49
+ * `response_ids:` Array of ids uniquely identifying aborted responses for which filling out has to be resumed.
50
50
  * `return_to:` [Required] - Address to return to after filling out the questionnaire.
51
51
 
52
52
  When questionnaire keys are provided, a set of blank questionnaires will be filled out. When response ids are provided,
@@ -134,6 +134,8 @@ Else the validation errors can be inspected:
134
134
 
135
135
  ## Responses
136
136
 
137
+ ### Index
138
+
137
139
  To retrieve filled out, pending or scheduled questionnaires run:
138
140
 
139
141
  outcome = Roqua::RomApi::ListResponses.run dossier_id: dossier_id
@@ -153,6 +155,34 @@ Else some validation errors can be shown:
153
155
  log_or_display outcome.errors.full_messages
154
156
  end
155
157
 
158
+ ### Create
159
+
160
+ To store an externally filled out questionnaire run:
161
+
162
+ outcome = Roqua::RomApi::CreateResponse.run questionnaire_key: 'questionnaire_key',
163
+ dossier_id: 'dossier_id',
164
+ answer_data: {some: 'aswer_data'}
165
+
166
+ #### Parameters
167
+
168
+ * `questionnaire_key:` [Required] - Key uniquely identifying the questionnaire in RoQua
169
+ * `dossier_id:` [Required] - Unique dossier identifier for the patient you want to store the questionnaire for
170
+ * `answer_data:` [Required] - Hash storing the answered option key for every question key
171
+ * `filled_out_at:` Timestamp indicating the time the questionnaire was filled out
172
+ * `respondent:` ['patient'(default)|'parent'|'second_parent'|'teacher'|'caregiver']
173
+ - String identifying the respondent which filled out the questionnaire
174
+
175
+ When the request succeeds, the stored response is returned:
176
+
177
+ if outcome.valid?
178
+ responses = outcome.result
179
+
180
+ Else some validation errors are provided:
181
+
182
+ else
183
+ log_or_display outcome.errors.full_messages
184
+ end
185
+
156
186
  ## Contributing to roqua-rom-api
157
187
 
158
188
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
data/lib/i18n/i18n.rb CHANGED
@@ -1,12 +1,15 @@
1
+ # rubocop:disable HandleExceptions
1
2
  begin
2
3
  require 'rails'
3
4
  module I18n
4
5
  class Railtie < ::Rails::Railtie #:nodoc:
5
- initializer 'rails-i18n' do |app|
6
+ initializer 'rails-i18n' do |_app|
6
7
  I18n.load_path << Dir[File.join(File.expand_path(File.dirname(__FILE__) + '/../../config/locales'), '*.yml')]
7
8
  I18n.load_path.flatten!
8
9
  end
9
10
  end
10
11
  end
11
12
  rescue LoadError
13
+ # No I18n is set up as rails is not installed
12
14
  end
15
+ # rubocop:enable HandleExceptions
data/lib/roqua/rom_api.rb CHANGED
@@ -5,10 +5,12 @@ require 'roqua/rom_api/models'
5
5
  require 'roqua/rom_api/endpoint'
6
6
  require 'roqua/rom_api/list_protocol_subscriptions'
7
7
  require 'roqua/rom_api/list_responses'
8
+ require 'roqua/rom_api/create_response'
8
9
  require 'roqua/rom_api/start_fill_out_session'
9
10
  require 'roqua/rom_api/create_fill_out_request'
10
11
  require 'roqua/rom_api/start_protocol_subscription'
11
12
  require 'roqua/rom_api/stop_protocol_subscription'
13
+ require 'roqua/rom_api/report_calculations'
12
14
 
13
15
  module Roqua
14
16
  module RomApi
@@ -3,7 +3,7 @@ module Roqua
3
3
  # @api private
4
4
  class CreateFillOutRequest < Endpoint
5
5
  string :dossier_id
6
- array :questionnaire_keys, default: [] do string end
6
+ array :questionnaire_keys, default: [] { string }
7
7
  string :respondent_type, default: nil
8
8
  string :callback_url
9
9
  array :reminders, default: []
@@ -12,15 +12,16 @@ module Roqua
12
12
 
13
13
  def execute
14
14
  validate_response_for do
15
- RomApi.basic_auth_session.post("/dossiers/#{dossier_id}/fill_out_requests", fill_out_request: {
16
- questionnaire_keys: questionnaire_keys,
17
- respondent_type: respondent_type,
18
- callback_url: callback_url,
19
- reminders: reminders,
20
- open_from: open_from && open_from.to_i,
21
- open_till: open_till && open_till.to_i
22
- }.keep_if { |k, v| v.present? } )
23
-
15
+ fill_out_request = {
16
+ questionnaire_keys: questionnaire_keys,
17
+ respondent_type: respondent_type,
18
+ callback_url: callback_url,
19
+ reminders: reminders,
20
+ open_from: open_from && open_from.to_i,
21
+ open_till: open_till && open_till.to_i
22
+ }.keep_if { |_k, v| v.present? }
23
+ RomApi.basic_auth_session.post("/dossiers/#{dossier_id}/fill_out_requests",
24
+ fill_out_request: fill_out_request)
24
25
  end
25
26
  end
26
27
 
@@ -0,0 +1,26 @@
1
+ module Roqua
2
+ module RomApi
3
+ # @api private
4
+ class CreateResponse < Endpoint
5
+ string :questionnaire_key
6
+ string :dossier_id
7
+ hash :answer_data, strip: false
8
+ time :filled_out_at, default: nil
9
+ string :respondent, default: nil
10
+
11
+ def execute
12
+ validate_response_for do
13
+ RomApi.basic_auth_session.post "/dossiers/#{dossier_id}/responses",
14
+ questionnaire_key: questionnaire_key,
15
+ answer_data: answer_data,
16
+ filled_out_at: filled_out_at.to_i,
17
+ respondent: respondent
18
+ end
19
+ end
20
+
21
+ def response_to_result(response)
22
+ Models::Response.new(response)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -10,7 +10,6 @@ module Roqua
10
10
  attribute :stop_at, DateTime
11
11
  attribute :protocol_key, String
12
12
  attribute :protocol_name, String
13
-
14
13
  end
15
14
  end
16
15
  end
@@ -0,0 +1,39 @@
1
+ module Roqua
2
+ module RomApi
3
+ # @api private
4
+ class ReportCalculations < Endpoint
5
+ string :dossier_id
6
+ string :calculator
7
+ array(:response_ids, default: nil) { string }
8
+ array(:questionnaire_keys, default: nil) { string }
9
+ time :completed_after, default: nil
10
+ time :completed_before, default: nil
11
+
12
+ validates :questionnaire_keys, presence: true, unless: 'response_ids.present?'
13
+
14
+ def execute
15
+ validate_response_for do
16
+ RomApi.basic_auth_session.get "/dossiers/#{dossier_id}/report_calculations", params
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def params
23
+ {calculator: calculator}.merge(filter_params)
24
+ end
25
+
26
+ def filter_params
27
+ if response_ids.present?
28
+ {response_ids: response_ids}
29
+ else
30
+ {filters: {
31
+ questionnaire_keys: questionnaire_keys,
32
+ completed_after: completed_after && completed_after.to_i,
33
+ completed_before: completed_before && completed_before.to_i
34
+ }}.keep_if { |_k, v| v.present? }
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -3,8 +3,8 @@ module Roqua
3
3
  # @api private
4
4
  class StartFillOutSession < Endpoint
5
5
  string :dossier_id
6
- array :questionnaire_keys, default: [] do string end
7
- array :response_ids, default: [] do integer end
6
+ array :questionnaire_keys, default: [] { string }
7
+ array :response_ids, default: [] { integer }
8
8
  string :return_to
9
9
  string :stylesheet, default: nil
10
10
 
@@ -1,5 +1,5 @@
1
1
  module Roqua
2
2
  module RomApi
3
- VERSION = '0.1.7'
3
+ VERSION = '0.1.8'
4
4
  end
5
5
  end
@@ -1,13 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe CreateFillOutRequest do
4
- let(:options) { {dossier_id: 'some_dossier_id',
5
- questionnaire_keys: ['qkey1', 'qkey2'],
6
- respondent_type: 'patient_version',
7
- callback_url: 'http://callback.url',
8
- reminders: [1000, 2000],
9
- open_from: Time.now,
10
- open_till: Time.now + 100_000} }
4
+ let(:options) do
5
+ {
6
+ dossier_id: 'some_dossier_id',
7
+ questionnaire_keys: ['qkey1', 'qkey2'],
8
+ respondent_type: 'patient_version',
9
+ callback_url: 'http://callback.url',
10
+ reminders: [1000, 2000],
11
+ open_from: Time.now,
12
+ open_till: Time.now + 100_000
13
+ }
14
+ end
11
15
  let(:session) { Sessions::BasicAuthSession.new }
12
16
  let(:response) { httparty_response({}) }
13
17
  before do
@@ -15,14 +19,17 @@ describe CreateFillOutRequest do
15
19
  allow(session).to receive(:post).and_return response
16
20
  end
17
21
 
18
- it 'does a post to the rom fill_out_sessions api' do
19
- expect(session).to receive(:post).with("/dossiers/#{options[:dossier_id]}/fill_out_requests", fill_out_request: {
20
- questionnaire_keys: options[:questionnaire_keys],
21
- respondent_type: options[:respondent_type],
22
- callback_url: options[:callback_url],
23
- reminders: options[:reminders],
24
- open_from: options[:open_from].to_i,
25
- open_till: options[:open_till].to_i})
22
+ it 'does a post to the rom fill_out_requests api' do
23
+ fill_out_request = {
24
+ questionnaire_keys: options[:questionnaire_keys],
25
+ respondent_type: options[:respondent_type],
26
+ callback_url: options[:callback_url],
27
+ reminders: options[:reminders],
28
+ open_from: options[:open_from].to_i,
29
+ open_till: options[:open_till].to_i
30
+ }
31
+ expect(session).to receive(:post).with("/dossiers/#{options[:dossier_id]}/fill_out_requests",
32
+ fill_out_request: fill_out_request)
26
33
  CreateFillOutRequest.run!(options)
27
34
  end
28
35
 
@@ -37,7 +44,7 @@ describe CreateFillOutRequest do
37
44
  options[:open_from] = nil
38
45
  options[:open_till] = nil
39
46
  options[:reminders] = nil
40
- expect(session).to receive(:post) do |path, args|
47
+ expect(session).to receive(:post) do |_path, args|
41
48
  expect(args[:fill_out_request][:open_from]).to eq nil
42
49
  expect(args[:fill_out_request][:open_till]).to eq nil
43
50
  expect(args[:fill_out_request][:reminders]).to eq nil
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe CreateResponse do
4
+ let(:session) { Sessions::BasicAuthSession.new }
5
+ let(:response) { httparty_response(questionnaire_name: 'Some Questionnaire') }
6
+ before do
7
+ allow(Sessions::BasicAuthSession).to receive(:new).and_return session
8
+ allow(session).to receive(:post).and_return response
9
+ end
10
+
11
+ it 'does a post to the rom responses api' do
12
+ filled_out_at = Time.now
13
+ expect(session).to receive(:post).with '/dossiers/some_dossier_id/responses',
14
+ questionnaire_key: 'some_questionnaire_key',
15
+ answer_data: {some: 'answer_data'},
16
+ filled_out_at: filled_out_at.to_i,
17
+ respondent: 'patient'
18
+ CreateResponse.run! dossier_id: 'some_dossier_id',
19
+ questionnaire_key: 'some_questionnaire_key',
20
+ answer_data: {some: 'answer_data'},
21
+ filled_out_at: filled_out_at,
22
+ respondent: 'patient'
23
+ end
24
+
25
+ it 'returns a response object' do
26
+ response = CreateResponse.run! dossier_id: 'some_dossier_id',
27
+ questionnaire_key: 'some_questionnaire_key',
28
+ answer_data: {some: 'answer_data'},
29
+ respondent: 'patient'
30
+ expect(response).to be_a(Response)
31
+ expect(response.questionnaire_name).to eq('Some Questionnaire')
32
+ end
33
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe ReportCalculations do
4
+ let(:options) { {dossier_id: '1', calculator: 'calc'} }
5
+ let(:api_path) { "/dossiers/#{options[:dossier_id]}/report_calculations" }
6
+ let(:response) { httparty_response('foo' => 'bar') }
7
+ let(:session) { Fabricate :basic_auth_session }
8
+
9
+ before do
10
+ allow(BasicAuthSession).to receive(:new).and_return session
11
+ allow(session).to receive(:get).and_return response
12
+ end
13
+
14
+ subject { ReportCalculations.run!(options) }
15
+
16
+ describe 'given a list of response_ids' do
17
+ let(:options) { {dossier_id: '1', response_ids: ['1', '2'], calculator: 'calc'} }
18
+
19
+ it 'returns the response' do
20
+ expect(subject).to eq('foo' => 'bar')
21
+ end
22
+
23
+ it 'calls the right url' do
24
+ expect(session).to receive(:get).with(api_path, options.slice(:calculator, :response_ids))
25
+ subject
26
+ end
27
+ end
28
+
29
+ describe 'given a list of questionnaire_keys' do
30
+ let(:filters) { {questionnaire_keys: ['q1', 'q2'],
31
+ completed_after: Time.now - 100_000, completed_before: Time.now} }
32
+ let(:options) { {dossier_id: '1', calculator: 'test'}.merge(filters) }
33
+
34
+ it 'calls the right url' do
35
+ filter_hash = {
36
+ questionnaire_keys: filters[:questionnaire_keys],
37
+ completed_after: filters[:completed_after].to_i,
38
+ completed_before: filters[:completed_before].to_i
39
+ }
40
+ expect(session).to receive(:get).with(api_path, calculator: 'test', filters: filter_hash)
41
+ subject
42
+ end
43
+ end
44
+
45
+ describe 'given neither response_ids or questionnaire_keys' do
46
+ let(:options) { {dossier_id: '1', calculator: 'calc'} }
47
+
48
+ it 'should add an attr missing error' do
49
+ expect { subject }.to raise_error(ActiveInteraction::InvalidInteractionError)
50
+ end
51
+ end
52
+ end
@@ -1,8 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe StartFillOutSession do
4
- let(:options) { {dossier_id: 'some_dossier_id', questionnaire_keys: ['some_key'],
5
- return_to: '/some/return/url', stylesheet: 'https://example.org/stylesheet.css'} }
4
+ let(:options) do
5
+ {
6
+ dossier_id: 'some_dossier_id',
7
+ questionnaire_keys: ['some_key'],
8
+ return_to: '/some/return/url',
9
+ stylesheet: 'https://example.org/stylesheet.css'
10
+ }
11
+ end
6
12
  let(:session) { Sessions::BasicAuthSession.new }
7
13
  let(:response) { httparty_response 'fill_out_url' => 'some_fill_out_url' }
8
14
  before do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roqua-rom-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Esposito
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-10 00:00:00.000000000 Z
11
+ date: 2014-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -142,12 +142,14 @@ files:
142
142
  - lib/roqua-rom-api.rb
143
143
  - lib/roqua/rom_api.rb
144
144
  - lib/roqua/rom_api/create_fill_out_request.rb
145
+ - lib/roqua/rom_api/create_response.rb
145
146
  - lib/roqua/rom_api/endpoint.rb
146
147
  - lib/roqua/rom_api/list_protocol_subscriptions.rb
147
148
  - lib/roqua/rom_api/list_responses.rb
148
149
  - lib/roqua/rom_api/models.rb
149
150
  - lib/roqua/rom_api/models/protocol_subscription.rb
150
151
  - lib/roqua/rom_api/models/response.rb
152
+ - lib/roqua/rom_api/report_calculations.rb
151
153
  - lib/roqua/rom_api/sessions.rb
152
154
  - lib/roqua/rom_api/sessions/basic_auth_session.rb
153
155
  - lib/roqua/rom_api/start_fill_out_session.rb
@@ -157,11 +159,13 @@ files:
157
159
  - roqua_rom_api.gemspec
158
160
  - spec/fabricators/basic_auth_session_fabricator.rb
159
161
  - spec/lib/roqua/rom_api/create_fill_out_request_spec.rb
162
+ - spec/lib/roqua/rom_api/create_response_spec.rb
160
163
  - spec/lib/roqua/rom_api/endpoint_spec.rb
161
164
  - spec/lib/roqua/rom_api/list_protocol_subscriptions_spec.rb
162
165
  - spec/lib/roqua/rom_api/list_responses_spec.rb
163
166
  - spec/lib/roqua/rom_api/models/protocol_subscription_spec.rb
164
167
  - spec/lib/roqua/rom_api/models/response_spec.rb
168
+ - spec/lib/roqua/rom_api/report_calculations_spec.rb
165
169
  - spec/lib/roqua/rom_api/sessions/basic_auth_session_spec.rb
166
170
  - spec/lib/roqua/rom_api/start_fill_out_session_spec.rb
167
171
  - spec/lib/roqua/rom_api/start_protocol_subscription_spec.rb
@@ -197,11 +201,13 @@ summary: API wrapper gem around RoQua's ROM API
197
201
  test_files:
198
202
  - spec/fabricators/basic_auth_session_fabricator.rb
199
203
  - spec/lib/roqua/rom_api/create_fill_out_request_spec.rb
204
+ - spec/lib/roqua/rom_api/create_response_spec.rb
200
205
  - spec/lib/roqua/rom_api/endpoint_spec.rb
201
206
  - spec/lib/roqua/rom_api/list_protocol_subscriptions_spec.rb
202
207
  - spec/lib/roqua/rom_api/list_responses_spec.rb
203
208
  - spec/lib/roqua/rom_api/models/protocol_subscription_spec.rb
204
209
  - spec/lib/roqua/rom_api/models/response_spec.rb
210
+ - spec/lib/roqua/rom_api/report_calculations_spec.rb
205
211
  - spec/lib/roqua/rom_api/sessions/basic_auth_session_spec.rb
206
212
  - spec/lib/roqua/rom_api/start_fill_out_session_spec.rb
207
213
  - spec/lib/roqua/rom_api/start_protocol_subscription_spec.rb