README.md in electionbuddy-ruby-0.2.0 vs README.md in electionbuddy-ruby-0.3.0
- old
+ new
@@ -1,9 +1,9 @@
# ElectionBuddy Ruby
-A Ruby client for interacting with the ElectionBuddy API.
-You can find the API documentation [here](https://api.electionbuddy.com).
+A Ruby client for interacting with the [ElectionBuddy API](https://api.electionbuddy.com).
+Explore the complete documentation at [https://electionbuddy.github.io/electionbuddy-ruby](https://electionbuddy.github.io/electionbuddy-ruby).
## Installation
Install the gem and add it to the application's Gemfile by executing:
@@ -19,43 +19,141 @@
gem 'electionbuddy-ruby'
```
## Usage
-Ensure you have an API key from Electionbuddy, and initialize the client as follows:
+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:
+
```ruby
-client = ElectionBuddy::Client.new('your-api-key')
+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:
+
+```ruby
+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.
+
+```ruby
+client = ElectionBuddy::Client.new(api_key: 'your-api-key')
+```
+
### Voter List Validation
To validate a voter list, use the `voter_list.validate(vote_id)` method:
```ruby
validation = client.voter_list.validate(1)
if validation.done?
puts "Validation completed successfully! Identifier: #{validation.identifier}"
- # "Validation completed successfully! Identifier: ae0a1724-9791-4bb2-8331-6d4e55a9b7c8"
else
puts "Validation failed: #{validation.error}"
- # "Validation failed: Vote: not found"
end
```
-### Possible Errors
+### Get the Validation Result
+Once you have a validation identifier, you can check the validation results.
+
+```ruby
+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:
+
+1. **List-level errors**: Affect the entire voter list (e.g., missing required columns)
+2. **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.
+
+```ruby
+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.
+
+```ruby
+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:
+
+```ruby
+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:
+
+```bash
+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.