lib/alma/user.rb in alma-0.3.3 vs lib/alma/user.rb in alma-0.4.0
- old
+ new
@@ -24,11 +24,10 @@
args.merge!({ op: "auth" })
response = HTTParty.post("#{users_base_path}/#{user_id}", query: args, headers: headers, timeout: timeout)
response.code == 204
end
-
# The User object can respond directly to Hash like access of attributes
def_delegators :response, :[], :[]=, :has_key?, :keys, :to_json
def initialize(response)
@raw_response = response
@@ -56,49 +55,45 @@
def id
self["primary_id"]
end
def total_fines
- response.dig("fees", "value") || "0"
+ response.dig("fees", "value") || 0.0
end
def total_requests
response.dig("requests", "value") || "0"
end
def total_loans
response.dig("loans", "value") || "0"
end
-
# Access the top level JSON attributes as object methods
def method_missing(name)
return response[name.to_s] if has_key?(name.to_s)
super.method_missing name
end
def respond_to_missing?(name, include_private = false)
has_key?(name.to_s) || super
end
-
# Persist the user in it's current state back to Alma
def save!
response = HTTParty.put("#{users_base_path}/#{id}", timeout: timeout, headers: headers, body: to_json)
get_body_from(response)
end
-
def fines
Alma::Fine.where_user(id)
end
def requests
Alma::UserRequest.where_user(id)
end
-
def loans(args = {})
@loans ||= Alma::Loan.where_user(id, args)
end
def renew_loan(loan_id)
@@ -106,11 +101,10 @@
if response.renewed?
@recheck_loans ||= true
end
end
-
def renew_multiple_loans(loan_ids)
loan_ids.map { |id| renew_loan(id) }
end
def renew_all_loans
@@ -146,12 +140,10 @@
def preferred_name
"#{preferred_first_name} #{preferred_middle_name} #{preferred_last_name} #{preferred_suffix}"
end
-
-
private
# Attempts to renew a single item for a user
# @param [Hash] args
# @option args [String] :user_id The unique id of the user
@@ -175,13 +167,22 @@
def self.send_multiple_loan_renewal_requests(args)
loan_ids = args.delete(:loan_ids) { raise ArgumentError }
loan_ids.map { |id| Alma::User.send_loan_renewal_request(args.merge(loan_id: id)) }
end
+ # Attempts to pay total fines for a user
+ # @param [Hash] args
+ # @option args [String] :user_id The unique id of the user
+ def self.send_payment(args)
+ user_id = args.delete(:user_id) { raise ArgumentError }
+ params = { op: "pay", amount: "ALL", method: "ONLINE" }
+ response = HTTParty.post("#{users_base_path}/#{user_id}/fees/all", query: params, headers: headers)
+ PaymentResponse.new(response)
+ end
+
def get_body_from(response)
JSON.parse(response.body)
end
-
def self.users_base_path
"https://api-na.hosted.exlibrisgroup.com/almaws/v1/users"
end