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