Class: StTools::Human

Inherits:
Object
  • Object
show all
Defined in:
lib/st_tools/human.rb

Class Method Summary collapse

Class Method Details

.bytes(val) ⇒ String

Метод форматирует число, добавляя суффиксы ‘кбайт’, ‘Мбайт’ и др.

Examples:

Примеры использования

StTools::Human.bytes(123)           #=> "123 байта"
StTools::Human.bytes(14563)         #=> "14 кбайт"
StTools::Human.bytes(763552638)     #=> "728.2 Мбайт"

Parameters:

  • val (Integer)

    исходное числовое значение в байтах

Returns:

  • (String)

    строка вида “512,4 Мбайт”



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/st_tools/human.rb', line 38

def self.bytes(val)
  # todo: локлаизовать через i18N
  # noinspection RubyStringKeysInHashInspection
  arr = {'байт' => 1024, 'кбайт' => 1024 * 1024, 'Мбайт' => 1024 * 1024 * 1024,
         'Гбайт' => 1024 * 1024 * 1024 * 1024, 'Тбайт' => 1024 * 1024 * 1024 * 1024 * 1024}

  arr.each_pair do |e, s|
    if val < s
      if %w(байт кбайт).include?(e)
        return "#{(val.to_f / (s / 1024)).round(0)} #{e}"
      else
        return "#{(val.to_f / (s / 1024)).round(1)} #{e}"
      end
    end
  end
end

.format_time(time, what, type) ⇒ String

Метод переводит DateTime в строку на русском или иных языках. Предварительно необходимо вызвать StTools.setup(:ru или :en).

Examples:

Примеры использования

StTools::Setup.setup(:ru)
StTools::Human.format_time(Time.now, :full, :full)       #=> "30 апреля 2015 г. 08:54:34"
StTools::Human.format_time(Time.now, :date, :full)       #=> "30 апреля 2015 г."
StTools::Human.format_time(Time.now, :time, :full)       #=> "08:54:34"
StTools::Human.format_time(Time.now, :full, :short)      #=> "30/04/2015 08:55"
StTools::Human.format_time(Time.now, :date, :short)      #=> "30/04/2015"
StTools::Human.format_time(Time.now, :time, :short)      #=> "08:55"

Parameters:

  • time (DateTime)

    исходные время и дата

  • what (Sym)

    формат возвращаемого результата, принимает одно из следующих значений

  • type (Sym)

    форма в которой возращать результат: длинная (“28 апреля 2015 г. 10:34:52”) или короткая (“28/04/2015 10:34”)

  • :full (Hash)

    a customizable set of options

  • :date (Hash)

    a customizable set of options

  • :time (Hash)

    a customizable set of options

  • :short (Hash)

    a customizable set of options

Returns:

  • (String)

    строка с форматированными датой и временем



127
128
129
130
131
132
133
# File 'lib/st_tools/human.rb', line 127

def self.format_time(time, what, type)
  unless [:full, :date, :time].include?(what)
    warn "WARNING: what ':#{what.to_s}' must be in [:full, :date, :time]. Use ':full' now (at line #{__LINE__} of StTools::#{File.basename(__FILE__)})"
    what = :full
  end
  return I18n.l(time, :format => "#{what.to_s}_#{type.to_s}".to_sym)
end

.human_ago(time, ago = true) ⇒ String

Метод переводит DateTime в строку на русском или иных языках вида “4 дня 23 часа назад”. Предварительно необходимо вызвать StTools.setup(:ru или :en).

Examples:

Примеры использования

StTools::Setup.setup(:ru)
StTools::Human.human_ago(Time.now - 23, true)       #=> "23 секунды назад"
StTools::Human.human_ago(Time.now - 24553, false)   #=> 6 часов 49 минут"
StTools::Human.human_ago(Time.now)                  #=> "сейчас"

Parameters:

  • time (DateTime)

    время и дата

  • ago (Boolean) (defaults to: true)

    true, если надо добавить слово “назад” в конец строки

Returns:

  • (String)

    строка вида “3 дня 12 часов” или “3 дня 12 часов назад”



74
75
76
77
78
79
80
81
82
83
84
# File 'lib/st_tools/human.rb', line 74

def self.human_ago(time, ago = true)
  now = self.to_time(Time.now.strftime('%Y-%m-%d %H:%M:%S UTC'))
  slf = self.to_time(time.strftime('%Y-%m-%d %H:%M:%S UTC'))
  secs = (now - slf).to_i
  return I18n.t('common.ago.very_long') if time.year < 1800
  return I18n.t('common.ago.just_now') if secs > -1 && secs < 1
  return '' if secs <= -1
  pair = self.ago_in_words_pair(secs)
  pair << I18n.t("common.ago.ago_word") if ago == true
  pair.join(' ')
end

.memoryString

Метод возвращает форматированную строку с объемом памяти, занимаемым текущим процессом (pid).

Returns:

  • (String)

    строка вида “512,4 Мбайт”



58
59
60
61
# File 'lib/st_tools/human.rb', line 58

def self.memory
  val = ::StTools::System.memory
  return self.bytes(val)
end

.number(val) ⇒ String

Метод форматирует число, добавляя суффиксы ‘тыс.’, ‘млн.’ и пр.

Examples:

Примеры использования

StTools::Human.number(123)           #=> "123"
StTools::Human.number(14563)         #=> "14 тыс."
StTools::Human.number(763552638)     #=> "763.6 млн."

Parameters:

  • val (Integer)

    исходное числовое значение

Returns:

  • (String)

    строка вида “512,4 тыс.”



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/st_tools/human.rb', line 13

def self.number(val)
  # todo: локлаизовать через i18N
  # noinspection RubyStringKeysInHashInspection
  arr = {'' => 1000, 'тыс.' => 1000 * 1000, 'млн.' => 1000 * 1000 * 1000,
         'млрд.' => 1000 * 1000 * 1000 * 1000, 'трлн.' => 1000 * 1000 * 1000 * 1000 * 1000}

  arr.each_pair do |e, s|
    if val < s
      if ['', ' тыс.'].include?(e)
        return "#{(val.to_f / (s / 1000)).round(0)} #{e}"
      else
        return "#{(val.to_f / (s / 1000)).round(1)} #{e}"
      end
    end
  end
end

.seconds_ago(secs, ago = true) ⇒ String

Метод принимает параметр - количество секунд между двумя любыми событиями в секундах, и переводит их в строку на русском или иных языках вида “4 дня 23 часа назад”. Предварительно необходимо вызвать StTools.setup(:ru или :en).

Examples:

Примеры использования

StTools::Setup.setup(:ru)
StTools::Human.seconds_ago(23, true)       #=> "23 секунды назад"
StTools::Human.seconds_ago(24553, false)   #=> 6 часов 49 минут"
StTools::Human.seconds_ago(0)              #=> "сейчас"

Parameters:

  • sesc (DateTime)

    количество секунд

  • ago (Boolean) (defaults to: true)

    true, если надо добавить слово “назад” в конец строки

Returns:

  • (String)

    строка вида “3 дня 12 часов” или “3 дня 12 часов назад”



98
99
100
101
102
103
104
105
# File 'lib/st_tools/human.rb', line 98

def self.seconds_ago(secs, ago = true)
  secs_i = secs.to_i
  return I18n.t('common.ago.just_now') if secs_i > -1 && secs_i < 1
  return '' if secs_i <= -1
  pair = self.ago_in_words_pair(secs_i)
  pair << I18n.t("common.ago.ago_word") if ago == true
  pair.join(' ')
end