Module: RailsCom::Application

Extended by:
ActiveSupport::Concern
Included in:
ApplicationController
Defined in:
app/controllers/rails_com/application.rb

Constant Summary collapse

LOCALE_MAP =
{
  'zh-CN' => 'zh',
  'zh-TW' => 'zh',
  'en-US' => 'en'
}.freeze

Instance Method Summary collapse

Instance Method Details

#current_titleObject



16
17
18
# File 'app/controllers/rails_com/application.rb', line 16

def current_title
  t('.title', default: :site_name)
end

#default_form_paramsObject



105
106
107
# File 'app/controllers/rails_com/application.rb', line 105

def default_form_params
  {}
end

#default_paramsObject



101
102
103
# File 'app/controllers/rails_com/application.rb', line 101

def default_params
  {}
end

#json_format?Boolean

Returns:

  • (Boolean)


109
110
111
# File 'app/controllers/rails_com/application.rb', line 109

def json_format?
  self.request.format.json?
end

#set_countryObject



83
84
85
86
87
88
89
90
91
# File 'app/controllers/rails_com/application.rb', line 83

def set_country
  if params[:country]
    session[:country] = params[:country]
  elsif current_user
    session[:country] = current_user.country
  end

  logger.debug "\e[35m  Country: #{session[:country]}  \e[0m"
end

#set_flashObject



93
94
95
96
97
98
99
# File 'app/controllers/rails_com/application.rb', line 93

def set_flash
  if response.successful?
    flash[:notice] = '操作成功!'
  elsif response.client_error?
    flash[:alert] = '请检查参数!'
  end
end

#set_localeObject

Accept-Language: “en,zh-CN;q=0.9,zh;q=0.8,en-US;q=0.7,zh-TW;q=0.6”



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'app/controllers/rails_com/application.rb', line 50

def set_locale
  request_locales = request.headers['Accept-Language'].to_s.split(',')
  request_locales = request_locales.map do |i|
    l, q = i.split(';')
    q ||= '1'
    [l, q.sub('q=', '').to_f]
  end
  request_locales.sort_by! { |i| i[-1] }
  request_locales.map! do |i|
    r = LOCALE_MAP[i[0]]
    r ? r : i[0]
  end.uniq!
  locales = I18n.available_locales.map(&:to_s) & request_locales

  if locales.include?(I18n.default_locale.to_s)
    q_locale = I18n.default_locale
  else
    q_locale = locales[-1]
  end

  locales = [params[:locale].presence, session[:locale].presence, q_locale].compact
  locale = locales[0]

  I18n.locale = locale
  session[:locale] = locale

  if defined?(current_user) && current_user&.locale.to_s != I18n.locale.to_s
    current_user&.update locale: I18n.locale
  end

  logger.debug "\e[35m  Locale: #{I18n.locale}  \e[0m"
end

#set_timezoneObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'app/controllers/rails_com/application.rb', line 34

def set_timezone
  if session[:zone]
    Time.zone = session[:zone]
  elsif request.headers['HTTP_UTC_OFFSET'].present?
    zone = -(request.headers['HTTP_UTC_OFFSET'].to_i / 60)
    Time.zone = zone
    session[:zone] = zone
  end

  if defined?(current_user) && current_user&.timezone.blank?
    current_user&.update timezone: Time.zone.name
  end
  logger.debug "\e[35m  Zone: #{Time.zone}  \e[0m"
end

#set_variantObject



20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'app/controllers/rails_com/application.rb', line 20

def set_variant
  variant = []
  if request.user_agent =~ /iPad|iPhone|iPod|Android/
    variant << :phone
  end

  if request.user_agent =~ /MicroMessenger/
    variant << :wechat
  end

  request.variant = variant
  logger.debug "\e[35m  Variant: #{request.variant}  \e[0m"
end