class Persian::Number

Number class

Persian Number class Init an instance with pass a number Basic operators works with persian string of numbers

Constants

AR_EN_NUM
AR_FA_NUM
DECIMAL
EN_AR_NUM
EN_FA_NUM
FA_AR_NUM
FA_EN_NUM
HUNDREDS
LONGSCALE
ONES
TEENS

Public Class Methods

new(num) click to toggle source
# File lib/persian/number.rb, line 8
def initialize(num)
  @value = Persian::Number.number(num)
end
number(num, opts = { lang: 'fa', return: 'string' }) click to toggle source
# File lib/persian/number.rb, line 28
def self.number(num, opts = { lang: 'fa', return: 'string' })
  opts[:lang] = 'fa' if opts[:lang].nil?
  opts[:return] = 'string' if opts[:return].nil?
  num = num.to_s if num.is_a? Numeric

  if opts[:lang] == 'fa' || opts[:lang].nil?
    nums = EN_FA_NUM.merge(AR_FA_NUM)
  elsif opts[:lang] == 'en'
    nums = FA_EN_NUM.merge(AR_EN_NUM)
  elsif opts[:lang] == 'ar'
    nums = FA_AR_NUM.merge(EN_AR_NUM)
  end

  nums.each { |k, v| num.gsub!(k, v) }

  if opts[:return]
    case opts[:return]
    when 'string'
      num
    when 'int'
      num.to_i
    end
  else
    num
  end
end
number_with_colon(num) click to toggle source
# File lib/persian/number.rb, line 55
def self.number_with_colon(num)
  num = number(num)
  num.reverse.gsub(/(\S{3})(?=\S)/, '\\1,').reverse
end
random(params = nil) click to toggle source
# File lib/persian/number.rb, line 76
def self.random(params = nil)
  number(rand(params))
end
to_arabic(num) click to toggle source
# File lib/persian/number.rb, line 68
def self.to_arabic(num)
  number(num, lang: 'ar')
end
to_english(num) click to toggle source
# File lib/persian/number.rb, line 64
def self.to_english(num)
  number(num, lang: 'en')
end
to_i(num) click to toggle source
# File lib/persian/number.rb, line 72
def self.to_i(num)
  number(num, lang: 'en', return: 'int')
end
to_persian(num) click to toggle source
# File lib/persian/number.rb, line 60
def self.to_persian(num)
  number(num, lang: 'fa')
end

Public Instance Methods

*(other) click to toggle source
# File lib/persian/number.rb, line 20
def *(other)
  Number.to_persian(Number.to_i(@value) * Number.to_i(other))
end
+(other) click to toggle source
# File lib/persian/number.rb, line 12
def +(other)
  Number.to_persian(Number.to_i(@value) + Number.to_i(other))
end
-(other) click to toggle source
# File lib/persian/number.rb, line 16
def -(other)
  Number.to_persian(Number.to_i(@value) - Number.to_i(other))
end
/(other) click to toggle source
# File lib/persian/number.rb, line 24
def /(other)
  Number.to_persian(Number.to_i(@value) / Number.to_i(other))
end