Module: Rma::Payment::Gateway::Utils
- Defined in:
- lib/rma/payment/gateway/utils.rb
Constant Summary collapse
- BANK_CODES =
Bank codes mapping
{ "1010" => "Bank of Bhutan (BOBL)", "1020" => "Bhutan National Bank (BNBL)", "1030" => "Druk PNB Bank Limited (DPNBL)", "1040" => "Tashi Bank (TBank)", "1050" => "Bhutan Development Bank Limited (BDBL)", "1060" => "Digital Kidu (DK Bank)" }.freeze
Class Method Summary collapse
-
.bank_name(bank_code) ⇒ String?
Get bank name from code.
-
.format_amount(amount) ⇒ String
Format amount to 2 decimal places.
-
.generate_timestamp(time = Time.now) ⇒ String
Generate ISO 8601 timestamp.
-
.mask_sensitive(data, visible_chars = 4) ⇒ String
Mask sensitive data for logging.
-
.parse_date(date_string) ⇒ Date?
Parse date string.
-
.sanitize_string(str) ⇒ String
Sanitize string for API request.
-
.valid_account_number?(account_number) ⇒ Boolean
Validate account number format.
-
.valid_amount?(amount) ⇒ Boolean
Validate amount.
-
.valid_bank_code?(bank_code) ⇒ Boolean
Validate bank code.
-
.valid_date_format?(date_string) ⇒ Boolean
Validate date format (YYYY-MM-DD).
-
.valid_email?(email) ⇒ Boolean
Validate email format.
-
.valid_phone_number?(phone_number) ⇒ Boolean
Validate phone number format (Bhutan).
Class Method Details
.bank_name(bank_code) ⇒ String?
Get bank name from code
117 118 119 |
# File 'lib/rma/payment/gateway/utils.rb', line 117 def self.bank_name(bank_code) BANK_CODES[bank_code.to_s] end |
.format_amount(amount) ⇒ String
Format amount to 2 decimal places
58 59 60 |
# File 'lib/rma/payment/gateway/utils.rb', line 58 def self.format_amount(amount) format("%.2f", amount.to_f) end |
.generate_timestamp(time = Time.now) ⇒ String
Generate ISO 8601 timestamp
13 14 15 |
# File 'lib/rma/payment/gateway/utils.rb', line 13 def self.(time = Time.now) time.utc.strftime("%Y%m%d%H%M%S") end |
.mask_sensitive(data, visible_chars = 4) ⇒ String
Mask sensitive data for logging
95 96 97 98 99 100 101 102 |
# File 'lib/rma/payment/gateway/utils.rb', line 95 def self.mask_sensitive(data, visible_chars = 4) return "" if data.nil? || data.empty? data_str = data.to_s return data_str if data_str.length <= visible_chars * 2 "#{data_str[0...visible_chars]}#{"*" * (data_str.length - visible_chars * 2)}#{data_str[-visible_chars..]}" end |
.parse_date(date_string) ⇒ Date?
Parse date string
74 75 76 77 78 79 80 |
# File 'lib/rma/payment/gateway/utils.rb', line 74 def self.parse_date(date_string) return nil unless valid_date_format?(date_string) Date.parse(date_string) rescue ArgumentError nil end |
.sanitize_string(str) ⇒ String
Sanitize string for API request
85 86 87 88 89 |
# File 'lib/rma/payment/gateway/utils.rb', line 85 def self.sanitize_string(str) return "" if str.nil? str.to_s.strip end |
.valid_account_number?(account_number) ⇒ Boolean
Validate account number format
20 21 22 23 24 25 |
# File 'lib/rma/payment/gateway/utils.rb', line 20 def self.valid_account_number?(account_number) return false if account_number.nil? || account_number.empty? # Account numbers should be numeric and between 8-15 digits account_number.to_s.match?(/^\d{8,15}$/) end |
.valid_amount?(amount) ⇒ Boolean
Validate amount
49 50 51 52 53 |
# File 'lib/rma/payment/gateway/utils.rb', line 49 def self.valid_amount?(amount) return false if amount.nil? amount.is_a?(Numeric) && amount >= 0 end |
.valid_bank_code?(bank_code) ⇒ Boolean
Validate bank code
124 125 126 |
# File 'lib/rma/payment/gateway/utils.rb', line 124 def self.valid_bank_code?(bank_code) BANK_CODES.key?(bank_code.to_s) end |
.valid_date_format?(date_string) ⇒ Boolean
Validate date format (YYYY-MM-DD)
65 66 67 68 69 |
# File 'lib/rma/payment/gateway/utils.rb', line 65 def self.valid_date_format?(date_string) return false if date_string.nil? || date_string.empty? date_string.to_s.match?(/^\d{4}-\d{2}-\d{2}$/) end |
.valid_email?(email) ⇒ Boolean
Validate email format
40 41 42 43 44 |
# File 'lib/rma/payment/gateway/utils.rb', line 40 def self.valid_email?(email) return false if email.nil? || email.empty? email.to_s.match?(/\A[\w+\-.]+@[a-z\d-]+(\.[a-z\d-]+)*\.[a-z]+\z/i) end |
.valid_phone_number?(phone_number) ⇒ Boolean
Validate phone number format (Bhutan)
30 31 32 33 34 35 |
# File 'lib/rma/payment/gateway/utils.rb', line 30 def self.valid_phone_number?(phone_number) return false if phone_number.nil? || phone_number.empty? # Bhutan phone numbers are typically 8 digits phone_number.to_s.match?(/^\d{8}$/) end |