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

Class Method Details

.bank_name(bank_code) ⇒ String?

Get bank name from code

Parameters:

  • bank_code (String)

    Bank code

Returns:

  • (String, nil)

    Bank name or nil if not found



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

Parameters:

  • amount (Numeric)

    Amount to format

Returns:

  • (String)

    Formatted amount



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

Parameters:

  • time (Time) (defaults to: Time.now)

    Optional time object (defaults to current time)

Returns:

  • (String)

    ISO 8601 formatted timestamp



13
14
15
# File 'lib/rma/payment/gateway/utils.rb', line 13

def self.generate_timestamp(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

Parameters:

  • data (String)

    Sensitive data to mask

  • visible_chars (Integer) (defaults to: 4)

    Number of characters to show at start and end

Returns:

  • (String)

    Masked string



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

Parameters:

  • date_string (String)

    Date string in YYYY-MM-DD format

Returns:

  • (Date, nil)

    Parsed date or nil if invalid



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

Parameters:

  • str (String)

    String to sanitize

Returns:

  • (String)

    Sanitized string



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

Parameters:

  • account_number (String)

    Account number to validate

Returns:

  • (Boolean)

    True if valid format



20
21
22
23
24
25
# File 'lib/rma/payment/gateway/utils.rb', line 20

def self.()
  return false if .nil? || .empty?

  # Account numbers should be numeric and between 8-15 digits
  .to_s.match?(/^\d{8,15}$/)
end

.valid_amount?(amount) ⇒ Boolean

Validate amount

Parameters:

  • amount (Numeric)

    Amount to validate

Returns:

  • (Boolean)

    True if valid



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

Parameters:

  • bank_code (String)

    Bank code to validate

Returns:

  • (Boolean)

    True if valid



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)

Parameters:

  • date_string (String)

    Date string to validate

Returns:

  • (Boolean)

    True if valid format



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

Parameters:

  • email (String)

    Email to validate

Returns:

  • (Boolean)

    True if valid 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)

Parameters:

  • phone_number (String)

    Phone number to validate

Returns:

  • (Boolean)

    True if valid format



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