Skip to content

Add Customers API #6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,19 @@ client.runsheets.drivers_tasks(driver_id: driver_id, date: "2021-10-14")
client.runsheets.drivers_tasks(driver_id: driver_id, date: "2021-10-14", state: "successful")
```

### Customers

```ruby
# list customers
client.customers.list
# get a customer details
client.customers.retrieve(customer_id: customer_id)
# create customer
client.customers.create(customer: {name: "John Doe", email: "well@example.com"})
# update customer
client.customers.update(customer_id: customer_id, customer: {name: "Bourne"})
```

## TO DO

- [x] Add API Documentation ([#2](https://github.com/maful/versafleet-ruby/pull/2))
Expand All @@ -137,7 +150,7 @@ client.runsheets.drivers_tasks(driver_id: driver_id, date: "2021-10-14", state:
- [x] Add Runsheets API ([#5](https://github.com/maful/versafleet-ruby/pull/5))
- [x] Add Drivers API ([#1](https://github.com/maful/versafleet-ruby/pull/1))
- [x] Add Vehicles API ([#4](https://github.com/maful/versafleet-ruby/pull/4))
- [ ] Add Customers API
- [x] Add Customers API ([#6](https://github.com/maful/versafleet-ruby/pull/6))
- [ ] Add Account API

## 🙏 Contributing
Expand Down
2 changes: 2 additions & 0 deletions lib/versafleet.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@ module Versafleet
autoload :DriversResource, "versafleet/resources/drivers"
autoload :VehiclesResource, "versafleet/resources/vehicles"
autoload :RunsheetsResource, "versafleet/resources/runsheets"
autoload :CustomersResource, "versafleet/resources/customers"

# Classes used to return a nicer object wrapping the response data
autoload :Job, "versafleet/objects/job"
autoload :Task, "versafleet/objects/task"
autoload :Driver, "versafleet/objects/driver"
autoload :Vehicle, "versafleet/objects/vehicle"
autoload :Runsheet, "versafleet/objects/runsheet"
autoload :Customer, "versafleet/objects/customer"
end
7 changes: 7 additions & 0 deletions lib/versafleet/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,13 @@ def runsheets
RunsheetsResource.new(self)
end

# Customers Resource instance
#
# @return [CustomersResource]
def customers
CustomersResource.new(self)
end

# Initializes a new Faraday connection
#
# @return [Faraday::Connection]
Expand Down
4 changes: 4 additions & 0 deletions lib/versafleet/objects/customer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module Versafleet
class Customer < Object
end
end
67 changes: 67 additions & 0 deletions lib/versafleet/resources/customers.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
module Versafleet
class CustomersResource < Resource
# List All Customers
#
# == Examples:
#
# client.customers.list
# # set per page to 20
# client.customers.list(per_page: 20)
# # move to page 2
# client.customers.list(page: 2, per_page: 20)
#
# {https://versafleet.docs.apiary.io/#reference/0/customer-api/list-all-customers VersaFleet API}
#
# @param params [Hash] the filter query
# @return [Collection]
def list(**params)
response = get_request("customers", params: params)
Collection.from_response(response, key: "customers", type: Customer)
end

# Get Customer details
#
# == Example:
#
# client.customers.retrieve(customer_id: 123)
#
# {https://versafleet.docs.apiary.io/#reference/0/customer-api/show-a-customer-detail VersaFleet API}
#
# @param customer_id [Integer|String] Customer ID or Customer GUID
# @return [Customer]
def retrieve(customer_id:)
Customer.new get_request("customers/#{customer_id}").body.dig("customer")
end

# Create a Customer
#
# == Example:
#
# client.customers.create(customer: {name: "John Doe", email: "well@example.com"})
#
# {https://versafleet.docs.apiary.io/#reference/0/customer-api/create-a-customer-detail VersaFleet API}
#
# @param customer [Hash] Customer request payload
# @return [Customer]
def create(customer:)
payload = {customer: customer}
Customer.new post_request("customers", body: payload).body.dig("customer")
end

# Update Customer
#
# == Example:
#
# client.customers.update(customer_id: 123, customer: {name: "Bourne"})
#
# {https://versafleet.docs.apiary.io/#reference/0/customer-api/update-a-customer-detail VersaFleet API}
#
# @param customer_id [Integer|String] Customer ID or Customer GUID
# @param customer [Hash] Customer request payload
# @return [Customer]
def update(customer_id:, customer:)
payload = {customer: customer}
Customer.new put_request("customers/#{customer_id}", body: payload).body.dig("customer")
end
end
end