Class: StTools::Human
- Inherits:
-
Object
- Object
- StTools::Human
- Defined in:
- lib/st_tools/human.rb
Class Method Summary collapse
-
.bytes(val) ⇒ String
Метод форматирует число, добавляя суффиксы ‘кбайт’, ‘Мбайт’ и др.
-
.format_time(time, what, type) ⇒ String
Метод переводит DateTime в строку на русском или иных языках.
-
.human_ago(time, ago = true) ⇒ String
Метод переводит DateTime в строку на русском или иных языках вида “4 дня 23 часа назад”.
-
.memory ⇒ String
Метод возвращает форматированную строку с объемом памяти, занимаемым текущим процессом (pid).
-
.number(val) ⇒ String
Метод форматирует число, добавляя суффиксы ‘тыс.’, ‘млн.’ и пр.
-
.seconds_ago(secs, ago = true) ⇒ String
Метод принимает параметр - количество секунд между двумя любыми событиями в секундах, и переводит их в строку на русском или иных языках вида “4 дня 23 часа назад”.
Class Method Details
.bytes(val) ⇒ String
Метод форматирует число, добавляя суффиксы ‘кбайт’, ‘Мбайт’ и др.
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).
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).
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 |
.memory ⇒ String
Метод возвращает форматированную строку с объемом памяти, занимаемым текущим процессом (pid).
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
Метод форматирует число, добавляя суффиксы ‘тыс.’, ‘млн.’ и пр.
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).
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 |