forgeplus/app/libs/util.rb

84 lines
2.0 KiB
Ruby

require 'open-uri'
module Util
module_function
def days_between(time, other_time)
raise ArgumentError if time.blank? || other_time.blank?
Date.parse(time.to_s) - Date.parse(other_time.to_s)
end
def convert_base64_image(str, **opts)
return if str.blank?
Base64ImageConverter.new(**opts).convert(str)
end
def write_file(io, path)
dir = File.dirname(path)
FileUtils.mkdir_p(dir) unless File.directory?(dir)
Rails.logger.info("### save file #{path}, size: #{io.size} ~")
File.open(path, 'wb') do |file|
if io.respond_to?(:read)
io.rewind
while buffer = io.read(8192)
file.write(buffer)
end
else
file.write(io)
end
end
true
end
def download_file(url, save_path)
data = open(url, &:read)
file = File.new(save_path, 'w+')
file.binmode
file << data
file.flush
file.close
file
end
def logger_error(exception)
Rails.logger.error(exception.message)
exception.backtrace.each { |message| Rails.logger.error(message) }
end
def map_or_pluck(relation, name)
relation.is_a?(Array) || relation.loaded? ? relation.map(&name.to_sym) : relation.pluck(name)
end
def extract_content(str)
return '' if str.blank?
str.gsub(/<\/?.*?>/, '').gsub(/[\n\t\r]/, '').gsub(/&nbsp;/, '')
end
def conceal(str, type = nil)
str = str.to_s
return if str.blank?
case type
when :phone then "#{str[0..2]}****#{str[-4..-1]}"
when :email then "#{str[0]}***#{str[(str.rindex('@')-1)..-1]}"
else "#{str[0..2]}***#{str[-3..-1]}"
end
end
def display_cost_time(time)
time = time.to_i
return if time.zero? || time < 60
day = time / (24 * 60 * 60)
hour = (time % (24 * 60 * 60)) / (60 * 60)
minute = (time % (60 * 60)) / 60
str = ''
str += "#{day}" unless day.zero?
str += "#{hour}小时" unless hour.zero?
str += "#{minute}" unless minute.zero?
str
end
end