Class: LimeSurvey::Api

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/lime_survey/api.rb

Defined Under Namespace

Classes: AuthenticationError

Constant Summary collapse

URL_ENDPOINT =
ENV.fetch("LIMESURVEY_API_URL", "not-implemented")

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Api

Returns a new instance of Api.



9
10
11
12
13
# File 'lib/lime_survey/api.rb', line 9

def initialize(options = {})
  @username = options.fetch(:username, default_username)
  @password = options.fetch(:password, default_password)
  @token = options.dig(:token)
end

Instance Attribute Details

#passwordObject

Returns the value of attribute password.



7
8
9
# File 'lib/lime_survey/api.rb', line 7

def password
  @password
end

#tokenObject

Returns the value of attribute token.



7
8
9
# File 'lib/lime_survey/api.rb', line 7

def token
  @token
end

#usernameObject

Returns the value of attribute username.



7
8
9
# File 'lib/lime_survey/api.rb', line 7

def username
  @username
end

Instance Method Details

#activate_survey(survey_id:) ⇒ Object

LimeSurvey::Api.new.activate_survey survey_id: 1



16
17
18
# File 'lib/lime_survey/api.rb', line 16

def activate_survey(survey_id:)
  authenticated_post "activate_survey", [survey_id].compact
end

#activate_tokens(survey_id:, attribute_fields: []) ⇒ Object

LimeSurvey::Api.new.activate_tokens survey_id: 1, attribute_fields: [3,5,7]



21
22
23
# File 'lib/lime_survey/api.rb', line 21

def activate_tokens(survey_id:, attribute_fields: [])
  authenticated_post "activate_tokens", [survey_id, attribute_fields]
end

#add_group(survey_id:, group_title:, group_description: '') ⇒ Object

LimeSurvey::Api.new.add_group



26
27
28
# File 'lib/lime_survey/api.rb', line 26

def add_group(survey_id:, group_title: , group_description: '' )
  authenticated_post "add_group", [survey_id, group_title, group_description]
end

#add_language(survey_id:, language:) ⇒ Object



30
31
32
# File 'lib/lime_survey/api.rb', line 30

def add_language(survey_id: , language: )
  authenticated_post "add_language", [survey_id, language]
end

#add_participants(survey_id:, participant_data: [], create_token: true) ⇒ Object



34
35
36
# File 'lib/lime_survey/api.rb', line 34

def add_participants(survey_id: , participant_data: [], create_token: true)
  authenticated_post "add_participants", [survey_id, participant_data, create_token]
end

#add_response(survey_id:, response_data: []) ⇒ Object



38
39
40
# File 'lib/lime_survey/api.rb', line 38

def add_response(survey_id: , response_data: [])
  authenticated_post "add_response", [survey_id, response_data]
end

#add_survey(survey_id:, survey_title:, survey_language:, format: 'G') ⇒ Object

Format can be A|G|S LimeSurvey::Api.new.add_survey survey_id: 1234, survey_title: “Survey 1234”, survey_language: “en”, format: “A”



44
45
46
# File 'lib/lime_survey/api.rb', line 44

def add_survey(survey_id: , survey_title: , survey_language: , format: 'G' )
  authenticated_post "add_survey", [survey_id, survey_title, survey_language, format]
end

#authenticated_post(method_name, params = []) ⇒ Object



217
218
219
220
# File 'lib/lime_survey/api.rb', line 217

def authenticated_post(method_name, params = [])
  check_authentication
  post method_name, params
end

#check_authenticationObject



227
228
229
230
231
232
233
# File 'lib/lime_survey/api.rb', line 227

def check_authentication
  if token
    return self
  else
    authenticate!
  end
end

#copy_survey(survey_id:, survey_name:) ⇒ Object



48
49
50
# File 'lib/lime_survey/api.rb', line 48

def copy_survey(survey_id: , survey_name: )
  authenticated_post "copy_survey", [survey_id, survey_name]
end

#cpd_import_participants(participants: []) ⇒ Object



52
53
54
# File 'lib/lime_survey/api.rb', line 52

def cpd_import_participants(participants: [])
  authenticated_post "cpd_importParticipants", [participants]
end

#delete_group(survey_id:, group_id:) ⇒ Object



56
57
58
# File 'lib/lime_survey/api.rb', line 56

def delete_group(survey_id: , group_id: )
  authenticated_post "delete_group", [survey_id, group_id]
end

#delete_language(survey_id:, language:) ⇒ Object



60
61
62
# File 'lib/lime_survey/api.rb', line 60

def delete_language(survey_id: , language: )
  authenticated_post "delete_language", [survey_id, language]
end

#delete_participants(survey_id:, participants: []) ⇒ Object



64
65
66
# File 'lib/lime_survey/api.rb', line 64

def delete_participants(survey_id: , participants: [])
  authenticated_post "delete_participants", [survey_id, participants]
end

#delete_question(question_id:) ⇒ Object



68
69
70
# File 'lib/lime_survey/api.rb', line 68

def delete_question(question_id: )
  authenticated_post "delete_question", [question_id]
end

#delete_survey(survey_id:) ⇒ Object



72
73
74
# File 'lib/lime_survey/api.rb', line 72

def delete_survey(survey_id: )
  authenticated_post "delete_survey", [survey_id]
end

#export_responses(survey_id:, document_type: 'json', language_code: 'en', completion_status: 'complete', heading_type: nil, response_type: nil, from_response_id: 0, to_response_id: 1_000_000, fields: nil) ⇒ Object

document types: pdf, csv, xls, doc, json-rpc



77
78
79
# File 'lib/lime_survey/api.rb', line 77

def export_responses(survey_id: , document_type: 'json', language_code: 'en', completion_status: 'complete', heading_type: nil, response_type: nil, from_response_id: 0, to_response_id: 1_000_000, fields: nil)
  authenticated_post "export_responses", [survey_id, document_type, language_code, completion_status, heading_type, response_type, from_response_id, to_response_id, fields]
end

#export_responses_by_token(survey_id:, document_type: 'json', token:, language_code: 'en', completion_status: 'complete', heading_type: 'code', response_type: 'long', fields: nil) ⇒ Object



81
82
83
# File 'lib/lime_survey/api.rb', line 81

def export_responses_by_token(survey_id: , document_type: 'json', token: , language_code: 'en', completion_status: 'complete', heading_type: 'code', response_type: 'long', fields: nil)
  authenticated_post "export_responses_by_token", [survey_id, document_type, token, language_code, completion_status, heading_type, response_type, fields]
end

#export_statistics(survey_id:, document_type:, token:, language_code:, graph: 'no', group_ids: nil) ⇒ Object



85
86
87
# File 'lib/lime_survey/api.rb', line 85

def export_statistics(survey_id: , document_type: , token: , language_code: , graph: 'no', group_ids: nil)
  authenticated_post "export_statistics", [survey_id, document_type, token, language_code, graph, group_ids]
end

#export_timeline(survey_id:, survey_type: 'day', start_time:, end_time:) ⇒ Object



89
90
91
# File 'lib/lime_survey/api.rb', line 89

def export_timeline(survey_id: , survey_type: 'day', start_time: , end_time: )
  authenticated_post "export_timeline", [survey_id, survey_type, start_time, end_time]
end

#get_group_properties(group_id:, group_settings: []) ⇒ Object



93
94
95
# File 'lib/lime_survey/api.rb', line 93

def get_group_properties(group_id: , group_settings: [])
  authenticated_post "get_group_properties", [group_id, group_settings]
end

#get_language_properties(survey_id:, survey_locale_settings: nil, language: nil) ⇒ Object



97
98
99
# File 'lib/lime_survey/api.rb', line 97

def get_language_properties(survey_id: , survey_locale_settings: nil, language: nil)
  authenticated_post "get_language_properties", [survey_id, survey_locale_settings, language]
end

#get_participant_properties(survey_id:, token_query_properties: nil, token_properties: nil) ⇒ Object



101
102
103
# File 'lib/lime_survey/api.rb', line 101

def get_participant_properties(survey_id: , token_query_properties: nil, token_properties: nil)
  authenticated_post "get_participant_properties", [survey_id, token_query_properties, token_properties]
end

#get_question_properties(question_id:, question_settings: [], language: nil) ⇒ Object



105
106
107
# File 'lib/lime_survey/api.rb', line 105

def get_question_properties(question_id: , question_settings: [], language: nil)
  authenticated_post "get_question_properties", [question_id, question_settings, language]
end

#get_response_ids(survey_id:, token:) ⇒ Object



109
110
111
# File 'lib/lime_survey/api.rb', line 109

def get_response_ids(survey_id: , token:  )
  authenticated_post "get_response_ids", [survey_id, token]
end

#get_session_keyObject



113
114
115
# File 'lib/lime_survey/api.rb', line 113

def get_session_key
  response = post "get_session_key", [username, password]
end

#get_site_settings(setting_name:) ⇒ Object



117
118
119
# File 'lib/lime_survey/api.rb', line 117

def get_site_settings(setting_name: )
  authenticated_post "get_site_settings", [setting_name]
end

#get_summary(survey_id:, stat_name: nil) ⇒ Object



121
122
123
# File 'lib/lime_survey/api.rb', line 121

def get_summary(survey_id: , stat_name: nil)
  authenticated_post "get_summary", [survey_id, stat_name].compact
end

#get_survey_properties(survey_id:, survey_settings: nil) ⇒ Object



125
126
127
# File 'lib/lime_survey/api.rb', line 125

def get_survey_properties(survey_id: , survey_settings: nil)
  authenticated_post "get_survey_properties", [survey_id, survey_settings].compact
end

#get_uploaded_files(survey_id:, token:) ⇒ Object



129
130
131
# File 'lib/lime_survey/api.rb', line 129

def get_uploaded_files(survey_id: , token:  )
  authenticated_post "get_uploaded_files", [survey_id, token]
end

#import_group(survey_id:, import_data:, import_data_type:, new_group_name: nil, new_group_description: nil) ⇒ Object



133
134
135
# File 'lib/lime_survey/api.rb', line 133

def import_group(survey_id: , import_data: , import_data_type: , new_group_name: nil, new_group_description: nil)
  authenticated_post "import_group", [survey_id, import_data, import_data_type, new_group_name, new_group_description]
end

#import_question(survey_id:, group_id:, import_data:, import_data_type:, mandatory: 'no', new_question_title: nil, new_q_question: nil, new_question_help: nil) ⇒ Object



137
138
139
# File 'lib/lime_survey/api.rb', line 137

def import_question(survey_id: , group_id: , import_data: , import_data_type: , mandatory: 'no', new_question_title: nil, new_q_question: nil, new_question_help: nil)
  authenticated_post "import_question", [survey_id, group_id, import_data, import_data_type, mandatory, new_question_title, new_q_question, new_question_help]
end

#import_survey(import_data:, import_data_type:, new_survey_name: nil, destination_survey_id: nil) ⇒ Object



141
142
143
# File 'lib/lime_survey/api.rb', line 141

def import_survey(import_data: , import_data_type: , new_survey_name: nil, destination_survey_id: nil)
  authenticated_post "import_survey", [import_data, import_data_type, new_survey_name, destination_survey_id]
end

#invite_participants(survey_id:, token_ids: [], email:) ⇒ Object

email: TRUE / FALSE



145
146
147
# File 'lib/lime_survey/api.rb', line 145

def invite_participants(survey_id: , token_ids: [], email: )
  authenticated_post "invite_participants", [survey_id, token_ids, email]
end

#list_groups(survey_id:) ⇒ Object



149
150
151
# File 'lib/lime_survey/api.rb', line 149

def list_groups(survey_id: )
  authenticated_post "list_groups", [survey_id]
end

#list_participants(survey_id:, start: 0, limit: 10_000, unused: false, attributes: [], conditions: []) ⇒ Object



153
154
155
# File 'lib/lime_survey/api.rb', line 153

def list_participants(survey_id: , start: 0, limit: 10_000, unused: false, attributes: [], conditions: [])
  authenticated_post "list_participants", [survey_id, start, limit, unused, attributes, conditions]
end

#list_questions(survey_id:, group_id: nil, language: nil) ⇒ Object



157
158
159
# File 'lib/lime_survey/api.rb', line 157

def list_questions(survey_id: , group_id: nil, language: nil)
  authenticated_post "list_questions", [survey_id, group_id, language]
end

#list_surveys(username: nil) ⇒ Object

LimeSurvey::Api.new.list_surveys



162
163
164
# File 'lib/lime_survey/api.rb', line 162

def list_surveys(username: nil)
  authenticated_post "list_surveys", [username].compact
end

#list_users(user_id: nil) ⇒ Object



166
167
168
# File 'lib/lime_survey/api.rb', line 166

def list_users(user_id: nil)
  authenticated_post "list_users", [user_id].compact
end

#mail_registered_participants(survey_id:, override_all_conditions: []) ⇒ Object



170
171
172
# File 'lib/lime_survey/api.rb', line 170

def mail_registered_participants(survey_id: , override_all_conditions: [])
  authenticated_post "mail_registered_participants", [survey_id, override_all_conditions]
end

#post(method_name, params = []) ⇒ Object



222
223
224
225
# File 'lib/lime_survey/api.rb', line 222

def post(method_name, params = [])
  response = self.class.post(url_endpoint, body: modify_body(method_name, params), timeout: 60, headers: headers)
  OpenStruct.new body: JSON::parse(response.body), request: response.request, code: response.code
end

#release_session_keyObject



174
175
176
177
# File 'lib/lime_survey/api.rb', line 174

def release_session_key
  authenticated_post "release_session_key"
  @token = nil
end

#remind_participants(survey_id:, min_days_between: nil, max_reminders: nil, token_ids: nil) ⇒ Object



179
180
181
# File 'lib/lime_survey/api.rb', line 179

def remind_participants(survey_id: , min_days_between: nil, max_reminders: nil, token_ids: nil)
  authenticated_post "remind_participants", [survey_id, min_days_between, max_reminders, token_ids]
end

#set_group_properties(group_id:, group_data: []) ⇒ Object



183
184
185
# File 'lib/lime_survey/api.rb', line 183

def set_group_properties(group_id: , group_data: [])
  authenticated_post "set_group_properties", [group_id, group_data]
end

#set_language_properties(survey_id:, survey_locale_data: [], language: nil) ⇒ Object



187
188
189
# File 'lib/lime_survey/api.rb', line 187

def set_language_properties(survey_id: , survey_locale_data: [], language: nil)
  authenticated_post "set_language_properties", [survey_id, survey_locale_data, language]
end

#set_participant_properties(survey_id:, token_query_properties:, token_data:) ⇒ Object



191
192
193
# File 'lib/lime_survey/api.rb', line 191

def set_participant_properties(survey_id: , token_query_properties: , token_data: )
  authenticated_post "set_participant_properties", [survey_id, token_query_properties, token_data]
end

#set_question_properties(question_id:, question_data:, language:) ⇒ Object



195
196
197
# File 'lib/lime_survey/api.rb', line 195

def set_question_properties(question_id: , question_data: , language: )
  authenticated_post "set_question_properties", [question_id, question_data, language]
end

#set_quota_properties(quota_id:, quota_data:) ⇒ Object



199
200
201
# File 'lib/lime_survey/api.rb', line 199

def set_quota_properties(quota_id: , quota_data: )
  authenticated_post "set_quota_properties", [quota_id, quota_data]
end

#set_survey_properties(survey_id:, survey_data:) ⇒ Object



203
204
205
# File 'lib/lime_survey/api.rb', line 203

def set_survey_properties(survey_id: , survey_data: )
  authenticated_post "set_survey_properties", [survey_id, suvey_data]
end

#update_response(survey_id:, response_data:) ⇒ Object



207
208
209
# File 'lib/lime_survey/api.rb', line 207

def update_response(survey_id: , response_data: )
  authenticated_post "update_response", [survey_id, response_data]
end

#upload_file(survey_id:, field_name:, file_name:, file_data:) ⇒ Object

file_data is BASE64



212
213
214
# File 'lib/lime_survey/api.rb', line 212

def upload_file(survey_id: , field_name: , file_name: , file_data: )
  authenticated_post "upload_file", params
end