limeade 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +4 -1
- data/lib/limeade/client.rb +3 -4
- data/lib/limeade/errors.rb +2 -2
- data/lib/limeade/json_rpc.rb +12 -12
- data/lib/limeade/methods.rb +54 -52
- data/lib/limeade/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3ee2d420faf14714fd02821cc10675bde3faf0a9
|
4
|
+
data.tar.gz: a4a9ff39e5955422972da6374c790bcc57229d78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 495c68105ebcf8dcb3a9e0645cd985906347841958e0f20d9f9c6257ef9fecf983a5c90d7232a9dac2b66acacd0258efbb0c7ebea4f5b4abfd3846ca230133f8
|
7
|
+
data.tar.gz: c94203f90122ee29c86224e0912f9353a7339e84d128fc71855b5fcde5b43b37a50b2f5548d4c46e4b0f1430a15c16b8b47c87638f59bae44565071fa967ec7e
|
data/README.md
CHANGED
@@ -42,7 +42,10 @@ require 'limeade'
|
|
42
42
|
```
|
43
43
|
|
44
44
|
Instantiate a client and start invoking API methods on it. The API methods are documented
|
45
|
-
[here](https://api.limesurvey.org/classes/remotecontrol_handle.html).
|
45
|
+
[here](https://api.limesurvey.org/classes/remotecontrol_handle.html). Do not specify the
|
46
|
+
`$sSessionKey`, as it is added as the first argument automatically. (Recall that the session is
|
47
|
+
managed for you transparently.)
|
48
|
+
|
46
49
|
|
47
50
|
```ruby
|
48
51
|
client = Limeade::Client.new(api_uri, username, password)
|
data/lib/limeade/client.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
require 'limeade/methods'
|
2
2
|
|
3
3
|
module Limeade
|
4
|
-
|
5
4
|
# Client for accessing the LimeSurvey RemoteControl API from Ruby.
|
6
5
|
class Client
|
7
|
-
|
8
6
|
#
|
9
7
|
# Instantiate a client and setup a connection to the LimeSurvey RemoteControl API.
|
10
8
|
# Passes configuration for the Faraday::Request::Retry mechanism.
|
@@ -100,7 +98,7 @@ module Limeade
|
|
100
98
|
def process_request(method_name, *arguments)
|
101
99
|
raise DisconnectedError unless connected?
|
102
100
|
result = @json_rpc.invoke(method_name, @session_key, *arguments)
|
103
|
-
if result.is_a?
|
101
|
+
if result.is_a?(Hash) && result['status']
|
104
102
|
case result['status']
|
105
103
|
when 'OK'
|
106
104
|
true
|
@@ -108,6 +106,8 @@ module Limeade
|
|
108
106
|
[]
|
109
107
|
when 'No Tokens found'
|
110
108
|
[]
|
109
|
+
when 'No survey participants table'
|
110
|
+
false
|
111
111
|
when /(left to send)|(No candidate tokens)$/
|
112
112
|
result
|
113
113
|
when /Invalid surveyid$/i
|
@@ -153,5 +153,4 @@ module Limeade
|
|
153
153
|
|
154
154
|
# Private exception raised only in the context of #process_request.
|
155
155
|
class NoSessionError < Error; end
|
156
|
-
|
157
156
|
end
|
data/lib/limeade/errors.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
+
module Limeade
|
3
4
|
class Error < StandardError; end
|
4
5
|
|
5
6
|
class InvalidResponseError < Error; end
|
@@ -27,5 +28,4 @@ module Limeade
|
|
27
28
|
super("LimeSurvey API '#{method}' returned a failure status: #{status}")
|
28
29
|
end
|
29
30
|
end
|
30
|
-
|
31
31
|
end
|
data/lib/limeade/json_rpc.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'faraday'
|
2
4
|
require 'multi_json'
|
3
5
|
|
4
6
|
module Limeade
|
5
|
-
|
6
7
|
# An implementation of JSON RPC version 1. This is inspired by jsonrpc-client, which implements
|
7
8
|
# version 2 of the spec. This implementation adds retry capability via Faraday::Request::Retry.
|
8
9
|
|
9
10
|
class JSON_RPC
|
10
|
-
|
11
|
-
JSON_RPC_VERSION = '1.0'.freeze
|
11
|
+
JSON_RPC_VERSION = '1.0'
|
12
12
|
|
13
13
|
#
|
14
14
|
# Instantiate a client and setup a connection to the endpoint.
|
@@ -69,7 +69,7 @@ module Limeade
|
|
69
69
|
|
70
70
|
private
|
71
71
|
|
72
|
-
STANDARD_HEADERS = {content_type: 'application/json'}.freeze
|
72
|
+
STANDARD_HEADERS = { content_type: 'application/json' }.freeze
|
73
73
|
|
74
74
|
def connection
|
75
75
|
@connection ||= ::Faraday.new do |connection|
|
@@ -84,6 +84,7 @@ module Limeade
|
|
84
84
|
payload = payload_from(response)
|
85
85
|
verify_payload(payload, request_id)
|
86
86
|
raise ServerError.new(payload['error']['code'], payload['error']['message']) if payload['error']
|
87
|
+
|
87
88
|
payload['result']
|
88
89
|
end
|
89
90
|
|
@@ -97,30 +98,29 @@ module Limeade
|
|
97
98
|
def verify_payload(payload, request_id)
|
98
99
|
Limeade.logger.debug "verify_payload: #{payload.inspect}"
|
99
100
|
raise(InvalidResponseError, 'Response body is not a Hash') unless payload.is_a?(::Hash)
|
100
|
-
raise(InvalidResponseError, 'Response body is missing the id') unless payload.
|
101
|
-
raise(InvalidResponseError, "Response id (#{payload['id']}) does not match request id (#{request_id})") unless
|
102
|
-
raise(InvalidResponseError, 'Response body must have a result and an error') unless
|
101
|
+
raise(InvalidResponseError, 'Response body is missing the id') unless payload.key?('id')
|
102
|
+
raise(InvalidResponseError, "Response id (#{payload['id']}) does not match request id (#{request_id})") unless payload['id'] == request_id
|
103
|
+
raise(InvalidResponseError, 'Response body must have a result and an error') unless payload.key?('error') && payload.key?('result')
|
103
104
|
|
104
105
|
if payload['error']
|
105
106
|
error = payload['error']
|
106
107
|
raise(InvalidResponseError, 'Response error is not a Hash') unless error.is_a?(::Hash)
|
107
|
-
raise(InvalidResponseError, 'Response error is missing the code') unless error.
|
108
|
+
raise(InvalidResponseError, 'Response error is missing the code') unless error.key?('code')
|
108
109
|
raise(InvalidResponseError, 'Response error code is not a number') unless error['code'].is_a?(::Integer)
|
109
|
-
raise(InvalidResponseError, 'Response error is missing the message') unless error.
|
110
|
+
raise(InvalidResponseError, 'Response error is missing the message') unless error.key?('message')
|
110
111
|
raise(InvalidResponseError, 'Response error message is not a string') unless error['message'].is_a?(::String)
|
111
112
|
end
|
112
113
|
end
|
113
114
|
|
114
115
|
def payload_from(response)
|
115
116
|
::MultiJson.decode(response.body)
|
116
|
-
rescue =>
|
117
|
+
rescue StandardError => e
|
117
118
|
Limeade.logger.info "Failed to parse JSON from:\n#{response.body}"
|
118
|
-
raise InvalidResponseError,
|
119
|
+
raise InvalidResponseError, e.message
|
119
120
|
end
|
120
121
|
|
121
122
|
def make_id
|
122
123
|
rand(10**12)
|
123
124
|
end
|
124
|
-
|
125
125
|
end
|
126
126
|
end
|
data/lib/limeade/methods.rb
CHANGED
@@ -1,53 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Limeade
|
2
|
-
API_METHODS =
|
3
|
-
activate_survey
|
4
|
-
activate_tokens
|
5
|
-
add_group
|
6
|
-
add_language
|
7
|
-
add_participants
|
8
|
-
add_response
|
9
|
-
add_survey
|
10
|
-
copy_survey
|
11
|
-
cpd_importParticipants
|
12
|
-
delete_group
|
13
|
-
delete_language
|
14
|
-
delete_participants
|
15
|
-
delete_question
|
16
|
-
delete_survey
|
17
|
-
export_responses
|
18
|
-
export_responses_by_token
|
19
|
-
export_statistics
|
20
|
-
export_timeline
|
21
|
-
get_group_properties
|
22
|
-
get_language_properties
|
23
|
-
get_participant_properties
|
24
|
-
get_question_properties
|
25
|
-
get_response_ids
|
26
|
-
get_session_key
|
27
|
-
get_site_settings
|
28
|
-
get_summary
|
29
|
-
get_survey_properties
|
30
|
-
get_uploaded_files
|
31
|
-
import_group
|
32
|
-
import_question
|
33
|
-
import_survey
|
34
|
-
invite_participants
|
35
|
-
list_groups
|
36
|
-
list_participants
|
37
|
-
list_questions
|
38
|
-
list_surveys
|
39
|
-
list_users
|
40
|
-
mail_registered_participants
|
41
|
-
release_session_key
|
42
|
-
remind_participants
|
43
|
-
set_group_properties
|
44
|
-
set_language_properties
|
45
|
-
set_participant_properties
|
46
|
-
set_question_properties
|
47
|
-
set_quota_properties
|
48
|
-
set_survey_properties
|
49
|
-
update_response
|
50
|
-
upload_file
|
51
|
-
_API_METHODS
|
52
|
-
|
53
|
-
end
|
4
|
+
API_METHODS = <<~_API_METHODS
|
5
|
+
activate_survey
|
6
|
+
activate_tokens
|
7
|
+
add_group
|
8
|
+
add_language
|
9
|
+
add_participants
|
10
|
+
add_response
|
11
|
+
add_survey
|
12
|
+
copy_survey
|
13
|
+
cpd_importParticipants
|
14
|
+
delete_group
|
15
|
+
delete_language
|
16
|
+
delete_participants
|
17
|
+
delete_question
|
18
|
+
delete_survey
|
19
|
+
export_responses
|
20
|
+
export_responses_by_token
|
21
|
+
export_statistics
|
22
|
+
export_timeline
|
23
|
+
get_group_properties
|
24
|
+
get_language_properties
|
25
|
+
get_participant_properties
|
26
|
+
get_question_properties
|
27
|
+
get_response_ids
|
28
|
+
get_session_key
|
29
|
+
get_site_settings
|
30
|
+
get_summary
|
31
|
+
get_survey_properties
|
32
|
+
get_uploaded_files
|
33
|
+
import_group
|
34
|
+
import_question
|
35
|
+
import_survey
|
36
|
+
invite_participants
|
37
|
+
list_groups
|
38
|
+
list_participants
|
39
|
+
list_questions
|
40
|
+
list_surveys
|
41
|
+
list_users
|
42
|
+
mail_registered_participants
|
43
|
+
release_session_key
|
44
|
+
remind_participants
|
45
|
+
set_group_properties
|
46
|
+
set_language_properties
|
47
|
+
set_participant_properties
|
48
|
+
set_question_properties
|
49
|
+
set_quota_properties
|
50
|
+
set_survey_properties
|
51
|
+
update_response
|
52
|
+
upload_file
|
53
|
+
_API_METHODS
|
54
|
+
.split("\n").map(&:to_sym).freeze
|
55
|
+
end
|
data/lib/limeade/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: limeade
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Pellegrini
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -119,7 +119,7 @@ licenses:
|
|
119
119
|
metadata:
|
120
120
|
allowed_push_host: https://rubygems.org
|
121
121
|
homepage_uri: https://github.com/spokesoftware/limeade
|
122
|
-
documentation_uri: https://www.rubydoc.info/gems/limeade/0.1.
|
122
|
+
documentation_uri: https://www.rubydoc.info/gems/limeade/0.1.2
|
123
123
|
bug_tracker_uri: https://github.com/spokesoftware/limeade/issues
|
124
124
|
source_code_uri: https://github.com/spokesoftware/limeade
|
125
125
|
changelog_uri: https://github.com/spokesoftware/limeade/releases
|
@@ -138,7 +138,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '0'
|
140
140
|
requirements: []
|
141
|
-
|
141
|
+
rubyforge_project:
|
142
|
+
rubygems_version: 2.5.2
|
142
143
|
signing_key:
|
143
144
|
specification_version: 4
|
144
145
|
summary: A Ruby interface to the LimeSurvey API.
|