class LimeSurvey::Api

Constants

URL_ENDPOINT

Attributes

password[RW]
token[RW]
username[RW]

Public Class Methods

new(options = {}) click to toggle source
# 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

Public Instance Methods

activate_survey(survey_id:) click to toggle source

LimeSurvey::Api.new.activate_survey survey_id: 1

# 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: []) click to toggle source

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

# 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: '' ) click to toggle source

LimeSurvey::Api.new.add_group

# 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: ) click to toggle source
# 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) click to toggle source
# 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: []) click to toggle source
# 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' ) click to toggle source

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

# 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 = []) click to toggle source
# File lib/lime_survey/api.rb, line 217
def authenticated_post(method_name, params = [])
  check_authentication
  post method_name, params
end
check_authentication() click to toggle source
# 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: ) click to toggle source
# 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: []) click to toggle source
# 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: ) click to toggle source
# 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: ) click to toggle source
# 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: []) click to toggle source
# 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: ) click to toggle source
# File lib/lime_survey/api.rb, line 68
def delete_question(question_id: )
  authenticated_post "delete_question", [question_id]
end
delete_survey(survey_id: ) click to toggle source
# 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) click to toggle source

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

# 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) click to toggle source
# 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) click to toggle source
# 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: ) click to toggle source
# 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: []) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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: ) click to toggle source
# 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_key() click to toggle source
# 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: ) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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: ) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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: ) click to toggle source

email: TRUE / FALSE

# 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: ) click to toggle source
# 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: []) click to toggle source
# 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) click to toggle source
# 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) click to toggle source

LimeSurvey::Api.new.list_surveys

# 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) click to toggle source
# 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: []) click to toggle source
# 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 = []) click to toggle source
# 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_key() click to toggle source
# 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) click to toggle source
# 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: []) click to toggle source
# 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) click to toggle source
# 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: ) click to toggle source
# 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: ) click to toggle source
# 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: ) click to toggle source
# 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: ) click to toggle source
# 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: ) click to toggle source
# 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: ) click to toggle source

file_data is BASE64

# 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

Private Instance Methods

argument_cleaner(required_params: , optional_params: , options: ) click to toggle source
# File lib/lime_survey/api.rb, line 248
def argument_cleaner(required_params: , optional_params: , options: )
  missing_required = required_params - options.map {|k,v| k.to_sym }
  raise ArgumentError.new("Missing Required Arguments: #{missing_required.join(', ')}") if missing_required.any?
  all_params = (required_params + optional_params).flatten
  return options.select {|k,v| all_params.include?(k.to_sym)}
end
authenticate!() click to toggle source
# File lib/lime_survey/api.rb, line 241
def authenticate!
  response = get_session_key
  raise AuthenticationError.new(response.body.dig("result", "status")) if response.body.dig("result").is_a?(Hash) && response.body.dig("result", "status") == "Invalid user name or password"
  @token = response.body.dig("result")
  response
end
default_base_url() click to toggle source
# File lib/lime_survey/api.rb, line 284
def default_base_url
  ENV["LIMESURVEY_BASE_URL"]
end
default_password() click to toggle source
# File lib/lime_survey/api.rb, line 280
def default_password
  ENV["LIMESURVEY_PASSWORD"]
end
default_username() click to toggle source
# File lib/lime_survey/api.rb, line 276
def default_username
  ENV["LIMESURVEY_USERNAME"]
end
headers() click to toggle source
# File lib/lime_survey/api.rb, line 268
def headers
  @headers = {
    "Accept" => "application/json",
    "Content-Type" => "application/json",
    "Connection" => "Keep-Alive",
  }
end
modify_body(method_name, params = []) click to toggle source
# File lib/lime_survey/api.rb, line 255
def modify_body(method_name, params = [])

  default_params = {
    method: method_name,
    params: params,
    id: 'json-rpc'
  }

  default_params[:params] = [token] + params if token
  default_params.to_json
end
url_endpoint() click to toggle source
# File lib/lime_survey/api.rb, line 237
def url_endpoint
  ENV.fetch("LIMESURVEY_API_URL", "not-implemented")
end