Class: Persian::Number

Inherits:
Object
  • Object
show all
Includes:
Alphabet
Defined in:
lib/persian/number.rb,
lib/persian/list/number.rb

Overview

Number class

Direct Known Subclasses

NumText

Constant Summary collapse

EN_FA_NUM =
{
  # english numbers
  ZERO    => SEFR,
  ONE     => YEK,
  TWO     => DOW,
  THREE   => SE,
  FOUR    => CHAHAR,
  FIVE    => PANJ,
  SIX     => SHESH,
  SEVEN   => HAFT,
  EIGHT   => HASHT,
  NINE    => NOH
}.freeze
FA_EN_NUM =
{
  # english numbers
  SEFR    => ZERO,
  YEK     => ONE,
  DOW     => TWO,
  SE      => THREE,
  CHAHAR  => FOUR,
  PANJ    => FIVE,
  SHESH   => SIX,
  HAFT    => SEVEN,
  HASHT   => EIGHT,
  NOH     => NINE
}.freeze
AR_FA_NUM =
{
  # arabic numbers
  SIFR    => SEFR,
  WAHID   => YEK,
  ATHNAN  => DOW,
  THALETH => SE,
  ARBE    => CHAHAR,
  KHAMSE  => PANJ,
  SETE    => SHESH,
  SABE    => HAFT,
  THMANY  => HASHT,
  LAYS    => NOH
}.freeze
FA_AR_NUM =
{
  # arabic numbers
  SEFR    => SIFR,
  YEK     => WAHID,
  DOW     => ATHNAN,
  SE      => THALETH,
  CHAHAR  => ARBE,
  PANJ    => KHAMSE,
  SHESH   => SETE,
  HAFT    => SABE,
  HASHT   => THMANY,
  NOH     => LAYS
}.freeze
AR_EN_NUM =
{
  SIFR    => ZERO,
  WAHID   => ONE,
  ATHNAN  => TWO,
  THALETH => THREE,
  ARBE    => FOUR,
  KHAMSE  => FIVE,
  SETE    => SIX,
  SABE    => SEVEN,
  THMANY  => EIGHT,
  LAYS    => NINE
}.freeze
EN_AR_NUM =
{
  ZERO    => SIFR,
  ONE     => WAHID,
  TWO     => ATHNAN,
  THREE   => THALETH,
  FOUR    => ARBE,
  FIVE    => KHAMSE,
  SIX     => SETE,
  SEVEN   => SABE,
  EIGHT   => THMANY,
  NINE    => LAYS
}.freeze
ONES =
[
  'صفر',
  'یک',
  'دو',
  'سه',
  'چهار',
  'پنج',
  'شش',
  'هفت',
  'هشت',
  'نه'
].freeze
TEENS =
[
  'ده',
  'یازده',
  'دوازده',
  'سیزده',
  'چهارده',
  'پانزده',
  'شانزده',
  'هفده',
  'هجده',
  'نوزده'
].freeze
DECIMAL =
[
  '',
  '',
  'بیست',
  'سی',
  'چهل',
  'پنجاه',
  'شصت',
  'هفتاد',
  'هشتاد',
  'نود'
].freeze
HUNDREDS =
[
  '',
  'صد',
  'دویست',
  'سیصد',
  'چهارصد',
  'پانصد',
  'ششصد',
  'هفتصد',
  'هشتصد',
  'نهصد'
].freeze
LONGSCALE =
[
  '',
  'هزار',
  'میلیون',
  'میلیارد',
  'بیلیون',
  'بیلیارد',
  'تریلیون',
  'تریلیارد',
  'کوآدریلیون',
  'کادریلیارد',
  'کوینتیلیون',
  'کوانتینیارد',
  'سکستیلیون',
  'سکستیلیارد',
  'سپتیلیون',
  'سپتیلیارد',
  'اکتیلیون',
  'اکتیلیارد',
  'نانیلیون',
  'نانیلیارد',
  'دسیلیون',
  'دسیلیارد'
].freeze

Constants included from Alphabet

Alphabet::AA, Alphabet::ALEF, Alphabet::ALEF_MAD, Alphabet::AN, Alphabet::ARBE, Alphabet::ATHNAN, Alphabet::BE, Alphabet::BEALAVE, Alphabet::CHAHAR, Alphabet::CHE, Alphabet::DAL, Alphabet::DARSAD, Alphabet::DONOGHTE, Alphabet::DOW, Alphabet::EE, Alphabet::EIGHT, Alphabet::EIN, Alphabet::EN, Alphabet::FE, Alphabet::FIVE, Alphabet::FOUR, Alphabet::GAF, Alphabet::GHEIN, Alphabet::HAFT, Alphabet::HASHT, Alphabet::HE_DOCHESHM, Alphabet::HE_JIMI, Alphabet::JIM, Alphabet::KAF, Alphabet::KAF_ARABIC, Alphabet::KESH, Alphabet::KHAMSE, Alphabet::KHE, Alphabet::LAM, Alphabet::LAYS, Alphabet::MAD, Alphabet::MENHA, Alphabet::MIM, Alphabet::MOSAVI, Alphabet::NINE, Alphabet::NOGHTE, Alphabet::NOGHTEVIRGOOL, Alphabet::NOH, Alphabet::NOON, Alphabet::ON, Alphabet::ONE, Alphabet::OO, Alphabet::PANJ, Alphabet::PE, Alphabet::QAF, Alphabet::RE, Alphabet::SABE, Alphabet::SAD, Alphabet::SAKEN, Alphabet::SE, Alphabet::SEFR, Alphabet::SETE, Alphabet::SEVEN, Alphabet::SHESH, Alphabet::SHIN, Alphabet::SIFR, Alphabet::SIN, Alphabet::SIX, Alphabet::SOAL, Alphabet::SPACE, Alphabet::TA, Alphabet::TAAJOB, Alphabet::TAGHSIM, Alphabet::TASHDID, Alphabet::TE, Alphabet::THALETH, Alphabet::THE, Alphabet::THMANY, Alphabet::THREE, Alphabet::TWO, Alphabet::VAV, Alphabet::VIRGOOL, Alphabet::WAHID, Alphabet::YE, Alphabet::YEK, Alphabet::YE_ARABIC, Alphabet::ZA, Alphabet::ZAD, Alphabet::ZAL, Alphabet::ZARBDAR, Alphabet::ZE, Alphabet::ZERO, Alphabet::ZHE, Alphabet::ZWJ, Alphabet::ZWNJ

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(num) ⇒ Number

Returns a new instance of Number.



9
10
11
# File 'lib/persian/number.rb', line 9

def initialize(num)
  @value = Persian::Number.number(num)
end

Class Method Details

.number(num, opts = { lang: 'fa', return: 'string' }) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/persian/number.rb', line 29

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) ⇒ Object



56
57
58
59
# File 'lib/persian/number.rb', line 56

def self.number_with_colon(num)
  num = number(num)
  num.reverse.gsub(/(\S{3})(?=\S)/, '\\1,').reverse
end

.random(params = nil) ⇒ Object



77
78
79
# File 'lib/persian/number.rb', line 77

def self.random(params = nil)
  number(rand(params))
end

.to_arabic(num) ⇒ Object



69
70
71
# File 'lib/persian/number.rb', line 69

def self.to_arabic(num)
  number(num, lang: 'ar')
end

.to_english(num) ⇒ Object



65
66
67
# File 'lib/persian/number.rb', line 65

def self.to_english(num)
  number(num, lang: 'en')
end

.to_i(num) ⇒ Object



73
74
75
# File 'lib/persian/number.rb', line 73

def self.to_i(num)
  number(num, lang: 'en', return: 'int')
end

.to_persian(num) ⇒ Object



61
62
63
# File 'lib/persian/number.rb', line 61

def self.to_persian(num)
  number(num, lang: 'fa')
end

Instance Method Details

#*(other) ⇒ Object



21
22
23
# File 'lib/persian/number.rb', line 21

def *(other)
  Number.to_persian(Number.to_i(@value) * Number.to_i(other))
end

#+(other) ⇒ Object



13
14
15
# File 'lib/persian/number.rb', line 13

def +(other)
  Number.to_persian(Number.to_i(@value) + Number.to_i(other))
end

#-(other) ⇒ Object



17
18
19
# File 'lib/persian/number.rb', line 17

def -(other)
  Number.to_persian(Number.to_i(@value) - Number.to_i(other))
end

#/(other) ⇒ Object



25
26
27
# File 'lib/persian/number.rb', line 25

def /(other)
  Number.to_persian(Number.to_i(@value) / Number.to_i(other))
end