bizside 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/app/assets/images/jquery-treeTable/images/toggle-collapse-dark.png +0 -0
  3. data/app/assets/images/jquery-treeTable/images/toggle-collapse-light.png +0 -0
  4. data/app/assets/images/jquery-treeTable/images/toggle-expand-dark.png +0 -0
  5. data/app/assets/images/jquery-treeTable/images/toggle-expand-light.png +0 -0
  6. data/app/assets/javascripts/bizside.js +1 -0
  7. data/app/assets/javascripts/jquery-treeTable/jquery.treeTable.js +400 -0
  8. data/app/assets/stylesheets/bizside.css +3 -0
  9. data/app/assets/stylesheets/jquery-treeTable/jquery.treeTable.css.erb +55 -0
  10. data/lib/bizside/acl/access_control_utils.rb +36 -0
  11. data/lib/bizside/acl/available_helper.rb +65 -0
  12. data/lib/bizside/acl/controller_helper.rb +15 -0
  13. data/lib/bizside/acl.rb +6 -0
  14. data/lib/bizside/active_record_logger.rb +3 -0
  15. data/lib/bizside/audit/job_logger.rb +14 -0
  16. data/lib/bizside/audit/logger.rb +35 -0
  17. data/lib/bizside/audit_log.rb +158 -0
  18. data/lib/bizside/cache/entry.rb +112 -0
  19. data/lib/bizside/cache/file_store.rb +167 -0
  20. data/lib/bizside/cache/store.rb +237 -0
  21. data/lib/bizside/cache_util.rb +47 -0
  22. data/lib/bizside/cache_utils.rb +10 -0
  23. data/lib/bizside/carrierwave.rb +48 -0
  24. data/lib/bizside/config.rb +63 -0
  25. data/lib/bizside/configurations/mail.rb +37 -0
  26. data/lib/bizside/configurations/prefix.rb +25 -0
  27. data/lib/bizside/configurations/storage.rb +28 -0
  28. data/lib/bizside/coverage/launch.rb +25 -0
  29. data/lib/bizside/coverage/rcov_formatter.rb +13 -0
  30. data/lib/bizside/cron_validator.rb +62 -0
  31. data/lib/bizside/cucumber.rb +1 -0
  32. data/lib/bizside/engine.rb +4 -0
  33. data/lib/bizside/file_converter.rb +56 -0
  34. data/lib/bizside/file_uploader.rb +71 -0
  35. data/lib/bizside/gengou.rb +46 -0
  36. data/lib/bizside/gengou.yml +5 -0
  37. data/lib/bizside/hanaita_conf.rb +88 -0
  38. data/lib/bizside/implicit_ftps.rb +29 -0
  39. data/lib/bizside/itamae_conf.rb +186 -0
  40. data/lib/bizside/job_utils.rb +285 -0
  41. data/lib/bizside/log_analyzer.rb +122 -0
  42. data/lib/bizside/mailer.rb +56 -0
  43. data/lib/bizside/query_builder.rb +78 -0
  44. data/lib/bizside/railtie.rb +80 -0
  45. data/lib/bizside/record_has_warnings.rb +4 -0
  46. data/lib/bizside/resque.rb +141 -0
  47. data/lib/bizside/rsync.rb +40 -0
  48. data/lib/bizside/safe_pty.rb +17 -0
  49. data/lib/bizside/shib_utils.rb +18 -0
  50. data/lib/bizside/show_exceptions.rb +18 -0
  51. data/lib/bizside/sql_utils.rb +45 -0
  52. data/lib/bizside/string_io.rb +39 -0
  53. data/lib/bizside/string_utils.rb +157 -0
  54. data/lib/bizside/task_helper.rb +263 -0
  55. data/lib/bizside/tasks.rb +6 -0
  56. data/lib/bizside/test_help.rb +17 -0
  57. data/lib/bizside/uploader/content_type_validator.rb +39 -0
  58. data/lib/bizside/uploader/default_extensions.yml +15 -0
  59. data/lib/bizside/uploader/exif.rb +43 -0
  60. data/lib/bizside/uploader/extension_whitelist.rb +26 -0
  61. data/lib/bizside/uploader/filename_validator.rb +31 -0
  62. data/lib/bizside/user_agent/action_view/action_view_4.rb +56 -0
  63. data/lib/bizside/user_agent/action_view/use_variant.rb +4 -0
  64. data/lib/bizside/user_agent/action_view.rb +10 -0
  65. data/lib/bizside/user_agent/controller_helper.rb +51 -0
  66. data/lib/bizside/user_agent.rb +108 -0
  67. data/lib/bizside/validations.rb +8 -0
  68. data/lib/bizside/version.rb +3 -0
  69. data/lib/bizside/view_helper.rb +10 -0
  70. data/lib/bizside/warning.rb +24 -0
  71. data/lib/bizside/yes.rb +16 -0
  72. data/lib/bizside.rb +96 -0
  73. data/lib/cron_validator.rb +3 -0
  74. data/lib/gengou.rb +3 -0
  75. data/lib/job_utils.rb +3 -0
  76. data/lib/query_builder.rb +3 -0
  77. data/lib/record_has_warnings.rb +3 -0
  78. data/lib/sql_utils.rb +3 -0
  79. data/lib/string_utils.rb +3 -0
  80. data/lib/user_agent.rb +3 -0
  81. data/lib/yes.rb +3 -0
  82. data/rails/locales/ja.yml +12 -0
  83. data/validations/collection_presence_validator.rb +15 -0
  84. data/validations/email_validator.rb +1 -0
  85. data/validations/ip_address_validator.rb +22 -0
  86. data/validations/tel_validator.rb +28 -0
  87. data/validations/url_validator.rb +30 -0
  88. data/validations/zip_validator.rb +35 -0
  89. metadata +467 -0
@@ -0,0 +1,263 @@
1
+ require 'rake'
2
+ require 'erb'
3
+ require 'yaml'
4
+ require 'socket'
5
+ require 'bizside'
6
+
7
+ def self.rails_root
8
+ if ENV['RAILS_ROOT'].to_s.empty?
9
+ if interactive?
10
+ case ENV['RAILS_ENV']
11
+ when 'production'
12
+ ret = "/home/#{ENV['USER']}/rails_apps/#{self.add_on_name}/current"
13
+ else
14
+ if defined?(Rails)
15
+ ret = Rails.root.to_s
16
+ else
17
+ ret = `pwd`.strip
18
+ end
19
+ end
20
+
21
+ print "RAILS_ROOT [#{ret}]: "
22
+ answer = STDIN.gets.strip
23
+ ret = answer unless answer.empty?
24
+ else
25
+ case ENV['RAILS_ENV']
26
+ when 'test'
27
+ if defined?(Rails)
28
+ ret = Rails.root.to_s
29
+ else
30
+ ret = `pwd`.strip
31
+ end
32
+ end
33
+ puts "RAILS_ROOT [#{ret}]: "
34
+ end
35
+ else
36
+ ret = ENV['RAILS_ROOT']
37
+ puts "RAILS_ROOT [#{ret}]: "
38
+ end
39
+
40
+ ENV['RAILS_ROOT'] ||= ret
41
+
42
+ if ENV['RAILS_ROOT'].to_s.empty?
43
+ raise "必須です。処理を中止します。"
44
+ end
45
+
46
+ ret
47
+ end
48
+
49
+ def self.rails_env
50
+ ret = 'development'
51
+
52
+ # RAILS_ENV が未指定の時は、BIZSIDE_ENV を利用できるか確認する
53
+ if ENV['RAILS_ENV'].to_s.empty?
54
+ unless ENV['BIZSIDE_ENV'].to_s.empty?
55
+ case ENV['BIZSIDE_ENV']
56
+ when 'production', 'staging'
57
+ ret = ENV['RAILS_ENV'] = 'production'
58
+ else
59
+ ret = ENV['RAILS_ENV'] = ENV['BIZSIDE_ENV']
60
+ end
61
+ end
62
+ end
63
+
64
+ if ENV['RAILS_ENV'].to_s.empty?
65
+ puts 'RAILS_ENVを選択してください。'
66
+ puts ' 1 - production'
67
+ puts '* 2 - development'
68
+ puts ' 3 - test'
69
+ puts
70
+ print '> '
71
+
72
+ if interactive?
73
+ selected = STDIN.gets.strip.to_i
74
+ ret = ['production', 'development', 'test'][selected - 1] if selected > 0
75
+ else
76
+ puts
77
+ raise "必須です。処理を中止します。"
78
+ end
79
+ else
80
+ ret = ENV['RAILS_ENV']
81
+ puts "RAILS_ENV: #{ret}"
82
+ end
83
+
84
+ ENV['RAILS_ENV'] ||= ret
85
+ ret
86
+ end
87
+
88
+ def self.add_on_name
89
+ ret = ENV['ADD_ON_NAME']
90
+ unless ret
91
+ ret = Bizside.config.add_on_name if Bizside.config.add_on_name?
92
+ end
93
+ ret
94
+ end
95
+
96
+ def self.prefix
97
+ ret = ENV['PREFIX']
98
+ unless ret
99
+ ret = Bizside.config.prefix if Bizside.config.prefix?
100
+ end
101
+ raise 'prefix は / から指定してください。' if ret and not ret.start_with?('/')
102
+ ret ||= '/' + add_on_name if Bizside.config.add_on_name?
103
+ ret ||= ask('プリフィックス', :required => true)
104
+ ret
105
+ end
106
+
107
+ def self.interactive?
108
+ yes_confirmed?(ENV['INTERACTIVE'] || 'true')
109
+ end
110
+
111
+ def self.gem_dir
112
+ File.expand_path('../../../..', __FILE__)
113
+ end
114
+
115
+ def self.ask(prompt, options = {})
116
+ raise 'プロンプトは必須です。' if prompt.to_s.empty?
117
+
118
+ if options[:default].to_s.empty?
119
+ print prompt + ': '
120
+ elsif options[:password]
121
+ print prompt + " [FILTERED]: "
122
+ else
123
+ print prompt + " [#{options[:default]}]: "
124
+ end
125
+
126
+ answer = ''
127
+ if answer.empty? and options.has_key?(:env_key)
128
+ answer = ENV[options[:env_key].to_s].to_s
129
+ end
130
+
131
+ if answer.empty?
132
+ if interactive?
133
+ if options[:password]
134
+ system("stty -echo")
135
+ at_exit do
136
+ system("stty echo")
137
+ end
138
+ end
139
+
140
+ answer = STDIN.gets.strip
141
+
142
+ if options[:password]
143
+ system("stty echo")
144
+ puts
145
+ end
146
+ else
147
+ puts
148
+ end
149
+ else
150
+ if options[:password]
151
+ puts 'FILTERED'
152
+ else
153
+ puts answer
154
+ end
155
+ end
156
+
157
+ if answer.empty? and options.has_key?(:default)
158
+ answer = options[:default].to_s
159
+ end
160
+
161
+ if answer.empty? and options[:required]
162
+ raise "必須です。処理を中止します。"
163
+ end
164
+
165
+ if block_given?
166
+ answer = yield answer
167
+ end
168
+
169
+ answer
170
+ end
171
+
172
+ def self.ask_yes(prompt, options = {})
173
+ answer = ask(prompt, options)
174
+ yes_confirmed?(answer, :fail_on_error => true)
175
+ end
176
+
177
+ def self.ask_env(env_key, options = {})
178
+ cache_file = 'tmp/cache/env'
179
+ cache = File.exists?(cache_file) ? YAML.load_file(cache_file) : {}
180
+
181
+ if options.fetch(:cache, false)
182
+ options = options.merge(default: cache.fetch(env_key, options[:default]))
183
+ end
184
+
185
+ ENV[env_key] ||= ask(env_key, options.merge(env_key: env_key))
186
+
187
+ if options.fetch(:cache, false)
188
+ FileUtils.mkdir_p(File.dirname(cache_file))
189
+
190
+ cache[env_key] = ENV[env_key]
191
+ File.write(cache_file, YAML.dump(cache))
192
+ else
193
+ if File.exists?(cache_file) and cache[env_key]
194
+ cache.delete(env_key)
195
+ File.write(cache_file, YAML.dump(cache))
196
+ end
197
+ end
198
+
199
+ ENV[env_key]
200
+ end
201
+
202
+ def self.yes_confirmed?(yes_value, options = {})
203
+ ret = Bizside::Yes.confirmed?(yes_value)
204
+ if ret.nil?
205
+ if options[:fail_on_error]
206
+ fail "yes/no または true/false 形式で入力してください。answer=#{answer}"
207
+ else
208
+ ret = false
209
+ end
210
+ end
211
+
212
+ ret
213
+ end
214
+
215
+ def self.ask_host(prompt, options = {})
216
+ if options.has_key?(:default)
217
+ ask(prompt, options)
218
+ else
219
+ ask(prompt, options.merge(default: dev_default_host))
220
+ end
221
+ end
222
+
223
+ def self.dev_default_host
224
+ ret = nil
225
+
226
+ udp = UDPSocket.new
227
+ begin
228
+ # クラスBの先頭アドレス,echoポート 実際にはパケットは送信されない。
229
+ udp.connect("128.0.0.0", 7)
230
+ ret = Socket.unpack_sockaddr_in(udp.getsockname)[1]
231
+ ensure
232
+ udp.close
233
+ end
234
+
235
+ ret
236
+ end
237
+
238
+ def self.run(*commands)
239
+ commands.each do |c|
240
+ puts c
241
+ fail unless system(c)
242
+ end
243
+ end
244
+
245
+ def self.render(template, options = {})
246
+ FileUtils.mkdir_p(File.dirname(options[:to]))
247
+ File.write(options[:to], ERB.new(File.read(template), 0, '-').result)
248
+ end
249
+
250
+ def self.ip_addresses
251
+ unless @_ip_addresses
252
+ @_ip_addresses = []
253
+ `/sbin/ip route`.split("\n").each do |line|
254
+ elements = line.split.map(&:strip)
255
+ if index = elements.index('src')
256
+ @_ip_addresses << elements[index + 1]
257
+ end
258
+ end
259
+ @_ip_addresses
260
+ end
261
+
262
+ @_ip_addresses
263
+ end
@@ -0,0 +1,6 @@
1
+ unless defined?(Rails) or Rake::Task.task_defined?('tmp:cache:clear')
2
+ desc 'tmp/cache 配下のキャッシュファイルを削除します。'
3
+ task 'tmp:cache:clear' do
4
+ FileUtils.rm_rf('tmp/cache/', secure: true)
5
+ end
6
+ end
@@ -0,0 +1,17 @@
1
+ require 'minitest/reporters'
2
+
3
+ require_relative 'coverage/launch'
4
+
5
+ case ENV['CI'].to_s.downcase
6
+ when 'jenkins'
7
+ MiniTest::Reporters.use! [
8
+ MiniTest::Reporters::DefaultReporter.new,
9
+ MiniTest::Reporters::JUnitReporter.new
10
+ ]
11
+ else
12
+ unless ENV['RM_INFO']
13
+ MiniTest::Reporters.use! [
14
+ MiniTest::Reporters::DefaultReporter.new(color: true)
15
+ ]
16
+ end
17
+ end
@@ -0,0 +1,39 @@
1
+ require 'mimemagic'
2
+
3
+ module Bizside
4
+ module Uploader
5
+ module ContentTypeValidator
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ begin
10
+ require 'carrierwave-magic'
11
+ include CarrierWave::Magic
12
+ process :set_magic_content_type => true
13
+ rescue => e
14
+ raise '[Bizside.gem ERROR] you need to add carrierwave-magic.gem.'
15
+ end
16
+ before :cache, :validate_content_type!
17
+ end
18
+
19
+ def content_type_checklist
20
+ %w(jpg jpeg gif png)
21
+ end
22
+
23
+ private
24
+
25
+ def validate_content_type!(new_file)
26
+ return if new_file.path.nil?
27
+ extension = new_file.extension.to_s
28
+
29
+ if content_type_checklist.include?(extension.downcase)
30
+ by_path = MimeMagic.by_extension(extension).to_s
31
+ unless new_file.content_type == by_path
32
+ raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.content_type_whitelist_error", content_type: new_file.content_type)
33
+ end
34
+ end
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,15 @@
1
+ 1: csv
2
+ 2: doc
3
+ 3: docx
4
+ 4: dwg
5
+ 5: jpg
6
+ 6: pdf
7
+ 7: png
8
+ 8: ppt
9
+ 9: pptx
10
+ 10: txt
11
+ 11: wmv
12
+ 12: xls
13
+ 13: xlsx
14
+ 14: zip
15
+ 15: gz
@@ -0,0 +1,43 @@
1
+ require 'mimemagic'
2
+
3
+ module Bizside
4
+ module Uploader
5
+ module Exif
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ process :auto_orient
10
+ process :strip
11
+ end
12
+
13
+ private
14
+
15
+ def auto_orient
16
+ return unless self.model.valid?
17
+
18
+ mime = MimeMagic.by_path(self.file.path)
19
+ return unless mime and mime.image?
20
+
21
+ manipulate! do |img|
22
+ img.auto_orient
23
+ img = yield(img) if block_given?
24
+ img
25
+ end
26
+ end
27
+
28
+ def strip
29
+ return unless self.model.valid?
30
+
31
+ mime = MimeMagic.by_path(self.file.path)
32
+ return unless mime and mime.image?
33
+
34
+ manipulate! do |img|
35
+ img.strip
36
+ img = yield(img) if block_given?
37
+ img
38
+ end
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,26 @@
1
+ module Bizside
2
+ module Uploader
3
+ module ExtensionWhitelist
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ default_extensions = Bizside.config.file_uploader.extensions_file_path.present? ? Bizside.config.file_uploader.extensions_file_path :
8
+ File.join(File.dirname(__FILE__), 'default_extensions.yml')
9
+ @@extensions = YAML.load_file(default_extensions).values
10
+ end
11
+
12
+ def extension_allowlist
13
+ return nil unless Bizside.config.file_uploader.extension_whitelist_enabled?
14
+
15
+ @@extensions
16
+ end
17
+
18
+ private
19
+
20
+ def rails_logger_available?
21
+ defined?(Rails) && !Rails.logger.nil?
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,31 @@
1
+ module Bizside
2
+ module Uploader
3
+ module FilenameValidator
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ before :cache, :validate_filename!
8
+ end
9
+
10
+ def invalid_filename_regexp
11
+ CARRIERWAVE_SANITIZE_REGEXP
12
+ end
13
+
14
+ private
15
+
16
+ def validate_filename!(new_file)
17
+ if new_file and new_file.respond_to?(:original_filename)
18
+ filename = new_file.original_filename
19
+ else
20
+ filename = File.basename(new_file.path)
21
+ end
22
+
23
+ if invalid_filename_regexp =~ filename
24
+ message = I18n.translate(:'errors.messages.filename_error', filename: filename)
25
+ raise CarrierWave::IntegrityError, message
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,56 @@
1
+ require 'action_view'
2
+
3
+ class ActionView::TemplateRenderer
4
+
5
+ def render(context, options)
6
+ @view = context
7
+ @details = extract_details(options)
8
+ template = get_template_by_user_agent(context, options)
9
+ context = @lookup_context
10
+
11
+ prepend_formats(template.formats)
12
+
13
+ unless context.rendered_format
14
+ context.rendered_format = template.formats.first || formats.first
15
+ end
16
+
17
+ render_template(template, options[:layout], options[:locals])
18
+ end
19
+
20
+ private
21
+
22
+ def get_user_agent(context)
23
+ if context.respond_to?(:user_agent)
24
+ if context.respond_to?(:controller)
25
+ if context.controller.respond_to?(:session)
26
+ context.user_agent
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ def get_template_by_user_agent(context, options)
33
+ ret = nil
34
+ option_for_template = options[:template]
35
+
36
+ ua = get_user_agent(context)
37
+ if ua
38
+ ua.priorities.each do |priority|
39
+ begin
40
+ options[:template] = option_for_template + '.' + priority
41
+ ret = determine_template(options)
42
+ break
43
+ rescue ActionView::MissingTemplate => e
44
+ end
45
+ end
46
+ end
47
+
48
+ unless ret
49
+ options[:template] = option_for_template
50
+ ret = determine_template(options)
51
+ end
52
+
53
+ Rails.logger.debug "UserAgent: #{ua ? ua.name : 'unknown'} => #{ret.identifier}"
54
+ ret
55
+ end
56
+ end
@@ -0,0 +1,4 @@
1
+ require 'action_view/template/resolver'
2
+
3
+ ActionView::PathResolver::EXTENSIONS = { locale: ".", variants: ".", formats: ".", handlers: "." }
4
+ ActionView::PathResolver::DEFAULT_PATTERN = ":prefix/:action{.:locale,}{.:variants,}{.:formats,}{.:handlers,}"
@@ -0,0 +1,10 @@
1
+ case Rails::VERSION::MAJOR
2
+ when 5
3
+ if Bizside.config.user_agent.use_variant?
4
+ load File.expand_path(File.join('action_view', 'use_variant.rb'), __dir__)
5
+ else
6
+ load File.expand_path(File.join('action_view', 'action_view_4.rb'), __dir__)
7
+ end
8
+ else
9
+ raise "Rails#{Rails::VERSION::MAJOR} はサポートしていません。"
10
+ end
@@ -0,0 +1,51 @@
1
+ module Bizside
2
+ class UserAgent
3
+ module ControllerHelper
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ case Rails::VERSION::MAJOR
8
+ when 3
9
+ before_filter :detect_user_agent
10
+ when 4
11
+ before_action :detect_user_agent
12
+ when 5
13
+ before_action :detect_user_agent
14
+ else
15
+ raise "Rails-#{Rails::VERSION::MAJOR} は未対応です。"
16
+ end
17
+
18
+ ::ActionController::Base.helper_method :user_agent
19
+ end
20
+
21
+ protected
22
+
23
+ def detect_user_agent
24
+ if params[:ua].present?
25
+ self.user_agent = ::Bizside::UserAgent.new(params[:ua], request.env['HTTP_USER_AGENT'])
26
+ else
27
+ self.user_agent = ::Bizside::UserAgent.parse(request.env['HTTP_USER_AGENT'])
28
+ end
29
+
30
+ set_request_variant if Bizside.config.user_agent.use_variant?
31
+
32
+ request.env['BIZSIDE_DEVICE'] = self.user_agent.name
33
+ end
34
+
35
+ def set_request_variant
36
+ if self.user_agent.present? && self.user_agent.priorities.present?
37
+ request.variant = self.user_agent.priorities.map(&:to_sym)
38
+ end
39
+ end
40
+
41
+ def user_agent
42
+ @_user_agent
43
+ end
44
+
45
+ def user_agent=(value)
46
+ @_user_agent = value
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,108 @@
1
+ module Bizside
2
+ class UserAgent
3
+
4
+ USER_AGENTS = [
5
+ ANDROID_MOBILE = 'android',
6
+ IPAD = 'ipad',
7
+ IPHONE = 'iphone',
8
+ PC = 'pc',
9
+ SMART_PHONE = 'sp',
10
+ ]
11
+
12
+ def self.parse(http_user_agent)
13
+ case http_user_agent
14
+ when /Android.*Mobile/
15
+ new(ANDROID_MOBILE, http_user_agent)
16
+ when /iPhone/
17
+ new(IPHONE, http_user_agent)
18
+ when /iPad/
19
+ new(IPAD, http_user_agent)
20
+ else
21
+ new(PC, http_user_agent)
22
+ end
23
+ end
24
+
25
+ def initialize(name, http_user_agent = nil)
26
+ @name = name if USER_AGENTS.include?(name)
27
+ @name ||= PC
28
+ @http_user_agent = http_user_agent
29
+ end
30
+
31
+ def name
32
+ @name
33
+ end
34
+
35
+ def actual
36
+ @actual ||= @http_user_agent ? self.class.parse(@http_user_agent) : self
37
+ end
38
+
39
+ def ipad?
40
+ self.name == IPAD
41
+ end
42
+
43
+ def pc?
44
+ self.name == PC
45
+ end
46
+
47
+ def windows?
48
+ case @http_user_agent
49
+ when /.*Windows.*/
50
+ pc?
51
+ else
52
+ false
53
+ end
54
+ end
55
+
56
+ def mac?
57
+ case @http_user_agent
58
+ when /.*Mac.*/
59
+ pc?
60
+ else
61
+ false
62
+ end
63
+ end
64
+
65
+ def sp?
66
+ [ANDROID_MOBILE, IPHONE, SMART_PHONE].include?(self.name)
67
+ end
68
+
69
+ def iphone?
70
+ self.name == IPHONE
71
+ end
72
+
73
+ def android_mobile?
74
+ self.name == ANDROID_MOBILE
75
+ end
76
+
77
+ def priorities
78
+ ret = []
79
+ ret << self.name
80
+ ret << SMART_PHONE if sp?
81
+ ret << PC unless pc?
82
+ ret
83
+ end
84
+
85
+ def ie?
86
+ case @http_user_agent
87
+ when /.* MSIE .* Windows .*/ #IE10以下
88
+ true
89
+ when /.*Windows.*Trident.*/ #IE11
90
+ true
91
+ else
92
+ false
93
+ end
94
+ end
95
+
96
+ def chrome?
97
+ case @http_user_agent
98
+ when /.* Chrome\/.*/
99
+ true
100
+ else
101
+ false
102
+ end
103
+ end
104
+
105
+ end
106
+ end
107
+
108
+ require_relative 'user_agent/controller_helper'
@@ -0,0 +1,8 @@
1
+ validations_dir = File.dirname(File.dirname(File.dirname(__FILE__)))
2
+
3
+ Dir[File.join(validations_dir, 'validations/*.rb')].each do |f|
4
+ begin
5
+ load f
6
+ rescue LoadError
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module Bizside
2
+ VERSION = '2.0.1'
3
+ end
@@ -0,0 +1,10 @@
1
+ module Bizside
2
+ module ViewHelper
3
+
4
+ def html_line_break(s)
5
+ ret = html_escape(s)
6
+ ret.gsub(/\r\n|\r|\n/, "<br/>").html_safe
7
+ end
8
+
9
+ end
10
+ end