ElectionBuddy Ruby
A Ruby client for interacting with the ElectionBuddy API. Explore the complete documentation at https://electionbuddy.github.io/electionbuddy-ruby.
Installation
Install the gem and add it to the application's Gemfile by executing:
bundle add electionbuddy-ruby
If bundler is not being used to manage dependencies, install the gem by executing:
gem install electionbuddy-ruby
Alternatively, add the gem to the Gemfile:
gem 'electionbuddy-ruby'
Usage
Ensure you have an API key from Electionbuddy. You can configure the API key globally or initialize the client directly with the API key.
Global Configuration
Example in a Rails application
Create an initializer file in config/initializers/electionbuddy.rb
and add the following code:
ElectionBuddy.configure do |config|
config.api_key = Rails.application.credentials.electionbuddy[:api_key]
end
Client Initialization
You can now initialize the client without passing the API key if it has been configured globally:
client = ElectionBuddy::Client.new
Alternatively, you can still pass the API key directly during initialization. If the API key is passed during initialization, it will take precedence over the global configuration.
client = ElectionBuddy::Client.new(api_key: 'your-api-key')
Voter List Importation
To import a voter list for an election, use the voter_list.import(vote_id, voters, append_mode: false)
method:
voters = [
{ email: 'voter1@example.com', label: 'Voter One' },
{ email: 'voter2@example.com', label: 'Voter Two' }
]
import = client.voter_list.import(1, voters, append_mode: false)
if import.done?
puts "Import completed successfully! Identifier: #{import.identifier}"
else
puts "Import failed: #{import.error}"
end
The append_mode
parameter determines whether the voters should be appended to the existing list (true
) or replace the existing list (false
). The default value is false
.
Voter List Validation
To validate a voter list, use the voter_list.validate(vote_id)
method:
validation = client.voter_list.validate(1)
if validation.done?
puts "Validation completed successfully! Identifier: #{validation.identifier}"
else
puts "Validation failed: #{validation.error}"
end
Get the Validation Result
Once you have a validation identifier, you can check the validation results.
begin
validation_result = client.voter_list.validation_result('ae0a1724-9791-4bb2-8331-6d4e55a9b7c8')
if validation_result.valid?
puts "The voter list is valid!"
else
puts "The voter list is invalid!"
puts "Total errors count: #{validation_result.total_errors_count}"
end
rescue ElectionBuddy::Error => e
puts "Something went wrong: #{e.message}"
end
The voter list validation can have two types of errors:
- List-level errors: Affect the entire voter list (e.g., missing required columns)
- Line-level errors: Affect specific lines in the voter list (e.g., invalid email format)
List-Level Errors
List-level errors can be retrieved using the list_errors
method.
if validation_result.list_errors.any?
puts "List-level errors:"
validation_result.list_errors.each do |list_error|
puts "Error message: #{list_error.error_message}"
end
end
Line-Level Errors
Line-level errors are paginated. You can specify the page number and the number of errors per page. If you don't specify the page number and the number of errors per page, the default values are 1 and 10, respectively.
validation_result = client.voter_list.validation_result('ae0a1724-9791-4bb2-8331-6d4e55a9b7c8', page: 2, per_page: 10)
line_errors = validation_result.line_errors
puts "There is a total of #{line_errors.total} line-level errors."
puts "The current page is #{line_errors.page}."
puts "There are #{line_errors.per_page} errors per page."
puts "There are #{line_errors.total_pages} pages in total."
PS: The list_errors
object is always available, regardless of the line-level errors pagination.
To iterate over the line-level errors, you can use the following code:
if line_errors.any?
puts "Line-level errors for page #{line_errors.page}:"
line_errors.each do |line_error|
puts "Line identifier: #{line_error.voter_information_line_id}"
puts "Error messages:"
line_error.each do |line_error|
puts "Error messages #{line_error.error_messages}"
end
end
end
Possible API Errors
The following errors may be raised by the API:
- 400: Malformed request.
- 401: Invalid authentication credentials.
- 403: Unauthorized.
- 404: Resource not found.
- 429: Your request exceeded the API rate limit.
- 500: We were unable to perform the request due to server-side problems.
Each error will raise an Error
exception with a message detailing the status code and the error message returned by the API.
Documentation
The complete documentation for this gem is available at: https://electionbuddy.github.io/electionbuddy-ruby
You can also generate the documentation locally using:
yard doc
yard server
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake test
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and the created tag, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/electionbuddy/electionbuddy-ruby.
License
The gem is available as open source under the terms of the MIT License.