rails-browser_detector 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: acaf6eb2758cb3e8e2802e900973be558fb6dc56
4
+ data.tar.gz: 9ba80b2d4a37efa6daa8590b8e4c5efb1cfe3d23
5
+ SHA512:
6
+ metadata.gz: 6ef58855a997be05b085647936b231dbf9049ea317e78d7a75af28558fded6a2a69aceee30eb5d86846081921ad523e549ea8b27d41c4c268c681c2975fcb1fa
7
+ data.tar.gz: 2a273f9f4db3171b36ea61d24c78bbb4d5893524b785679645ca4d917f6e43b78b9b75c3326496496bf2564520ecf7316bbe1a2db376055ff0e763debd23f8cf
@@ -0,0 +1,5 @@
1
+ Gemfile.lock
2
+ coverage
3
+ .idea/
4
+ .ruby-version
5
+ /gemfiles
data/.rspec ADDED
@@ -0,0 +1,5 @@
1
+ --color
2
+ --tty
3
+ --format progress
4
+ --order random
5
+ --backtrace
@@ -0,0 +1,13 @@
1
+ appraise 'rails3.1' do
2
+ gem 'rails', '~> 3.1.0'
3
+ end
4
+
5
+ appraise 'rails3.2' do
6
+ gem 'rails', '~> 3.2.0'
7
+ end
8
+
9
+ appraise 'rails4.0' do
10
+ gem 'rails', '~> 4.0.0'
11
+ gem 'protected_attributes'
12
+ gem 'rails-observers'
13
+ end
File without changes
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,18 @@
1
+ BUNDLE = bundle
2
+ BUNDLE_OPTIONS = --jobs=2
3
+ RSPEC = rspec
4
+ APPRAISAL = appraisal
5
+
6
+ all: test
7
+
8
+ test: bundler appraisal
9
+ ${BUNDLE} exec ${APPRAISAL} ${RSPEC} spec 2>&1
10
+
11
+ bundler:
12
+ if ! gem list bundler -i > /dev/null; then \
13
+ gem install bundler; \
14
+ fi
15
+ ${BUNDLE} install ${BUNDLE_OPTIONS}
16
+
17
+ appraisal:
18
+ ${BUNDLE} exec ${APPRAISAL} install
@@ -0,0 +1,43 @@
1
+ # Rails::BrowserDetector
2
+
3
+ <a href="http://dolly.railsc.ru/projects/146/builds/latest/?ref=master"><img src="http://dolly.railsc.ru/badges/abak-press/rails-browser_detector/master" height="18"></a>
4
+
5
+ Identification of outdated browsers.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'rails-browser_detector'
13
+ ```
14
+
15
+ Add `congig/initializers/rails-browser_detector.rb` and include BrowserCompatible into needed controllers:
16
+
17
+ ```ruby
18
+ ::ApplicationController.send :include, ::Rails::BrowserDetector::BrowserCompatible
19
+
20
+ Rails.application.config.compatible_browsers = {
21
+ 'Chrome' => 45,
22
+ 'Yandex Browser' => 13,
23
+ 'Opera' => 32,
24
+ 'Firefox' => 42,
25
+ 'IE' => 10,
26
+ 'Safari' => 8
27
+ }
28
+ ```
29
+
30
+ ## Usage
31
+
32
+ Use controller/helper methods:
33
+ ```ruby
34
+ browser_old? #=> true
35
+ ```
36
+
37
+ ## Contributing
38
+
39
+ 1. Fork it ( https://github.com/abak-press/rails-browser_detector/fork )
40
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
41
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
42
+ 4. Push to the branch (`git push origin my-new-feature`)
43
+ 5. Create a new Pull Request
@@ -0,0 +1,5 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
@@ -0,0 +1,28 @@
1
+ module Rails
2
+ module BrowserDetector
3
+ module BrowserCompatible
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ helper_method :browser_old?
8
+ end
9
+
10
+ protected
11
+
12
+ def browser_old?
13
+ return @browser_old if defined? @browser_old
14
+
15
+ @browser_old =
16
+ Rails.application.config.compatible_browsers.any? do |browser, version|
17
+ current_browser.family == browser && current_browser.version && current_browser.version.major.to_i < version
18
+ end
19
+ end
20
+
21
+ def current_browser
22
+ return @current_browser if defined? @current_browser
23
+
24
+ @current_browser = ::Rails::BrowserDetector.detect(request.user_agent)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,59 @@
1
+ # This file is light version of regexes.yaml from https://github.com/ua-parser/uap-core
2
+
3
+ user_agent_parsers:
4
+ #### SPECIAL CASES TOP ####
5
+
6
+ # Opera will stop at 9.80 and hide the real version in the Version string.
7
+ # see: http://dev.opera.com/articles/view/opera-ua-string-changes/
8
+ - regex: '(Opera)/9.80.*Version/(\d+)\.(\d+)(?:\.(\d+))?'
9
+
10
+ # Opera >=15 for Desktop is similar to Chrome but includes an "OPR" Version string.
11
+ - regex: '(?:Chrome).*(OPR)/(\d+)\.(\d+)\.(\d+)'
12
+ family_replacement: 'Opera'
13
+
14
+ # Yandex Browser
15
+ - regex: '(YaBrowser)/(\d+)\.(\d+)\.(\d+)'
16
+ family_replacement: 'Yandex Browser'
17
+ #### END SPECIAL CASES TOP ####
18
+
19
+ #### MAIN CASES - this catches > 50% of all browsers ####
20
+
21
+ # Edge/major_version.minor_version
22
+ - regex: '(Edge)/(\d+)\.(\d+)'
23
+
24
+ # Chrome/Chromium/major_version.minor_version.beta_version
25
+ - regex: '(Chromium|Chrome)/(\d+)\.(\d+)\.(\d+)'
26
+
27
+ # Browser/major_version.minor_version
28
+ - regex: '(Chrome|Opera)/(\d+)\.(\d+)\.?(\d+)?'
29
+
30
+ # Chrome/Chromium/major_version.minor_version
31
+ - regex: '(Chromium|Chrome)/(\d+)\.(\d+)'
32
+
33
+ # Browser major_version.minor_version (space instead of slash)
34
+ - regex: '(Opera) (\d+)\.(\d+)\.?(\d+)?'
35
+
36
+ #### END MAIN CASES ####
37
+
38
+ #### SPECIAL CASES ####
39
+ # Safari
40
+ - regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/'
41
+ family_replacement: 'Safari'
42
+ # Safari didn't provide "Version/d.d.d" prior to 3.0
43
+ - regex: '(Safari)/\d+'
44
+
45
+ # AFTER THE EDGE CASES ABOVE!
46
+ # AFTER IE11
47
+ # BEFORE all other IE
48
+ - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+)'
49
+ - regex: '(Firefox)/(\d+)\.(\d+)(pre|[ab]\d+[a-z]*)?'
50
+
51
+ - regex: '([MS]?IE) (\d+)\.(\d+)'
52
+ family_replacement: 'IE'
53
+
54
+ os_parsers:
55
+ - regex: 'Must be at least one regular expression'
56
+
57
+ device_parsers:
58
+ - regex: 'Must be at least one regular expression'
59
+
@@ -0,0 +1,33 @@
1
+ require 'rails/browser_detector/version'
2
+ require 'rails/browser_detector/engine'
3
+
4
+ require 'user_agent_parser'
5
+
6
+ module Rails
7
+ module BrowserDetector
8
+ class << self
9
+ def detect(user_agent)
10
+ user_agent_parser.parse(user_agent)
11
+ end
12
+
13
+ private
14
+
15
+ # Internal: Возвращает экземпляр парсера, использующий кастомный файл с регулярками.
16
+ # Дефолтный файл не используется, потому что в нем содержится много правил.
17
+ # Кастомный файл - это дефолтный, из которого вырезаны ненужные для нас правила.
18
+ #
19
+ # Examples
20
+ # browser = Rails::BrowserDetector.user_agent_parser.parse(request.user_agent)
21
+ # browser.family #=> 'IE'
22
+ # browser.version.major #=> 10
23
+ #
24
+ # Returns an instance of UserAgentParser::Parser.
25
+ def user_agent_parser
26
+ return @user_agent_parser if defined? @user_agent_parser
27
+
28
+ patterns_path = "#{Gem.loaded_specs['rails-browser_detector'].gem_dir}/config/regexes.yml"
29
+ @user_agent_parser = ::UserAgentParser::Parser.new(patterns_path: patterns_path)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,11 @@
1
+ # coding: utf-8
2
+ require 'rails'
3
+
4
+ module Rails
5
+ module BrowserDetector
6
+ class Engine < ::Rails::Engine
7
+ config.autoload_paths << "#{config.root}/lib"
8
+ config.autoload_paths << "#{config.root}/app/controllers/concerns" if Rails.version.to_i < 4
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ module Rails
2
+ module BrowserDetector
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'rails/browser_detector/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
9
+
10
+ spec.name = 'rails-browser_detector'
11
+ spec.version = ::Rails::BrowserDetector::VERSION
12
+ spec.authors = %w(Fyodor Parmanchukov)
13
+ spec.email = %w(rezerbit@gmail.com)
14
+ spec.summary = %q{Browser detector}
15
+ spec.description = %q{Browser compatibility definition}
16
+ spec.homepage = 'https://github.com/abak-press/rails-browser_detector'
17
+
18
+ spec.files = `git ls-files -z`.split("\x0")
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = %w(lib)
22
+
23
+ spec.add_runtime_dependency 'rails', '>= 3.1.12', '< 4.1'
24
+ spec.add_runtime_dependency 'user_agent_parser', '~> 2.3'
25
+
26
+ spec.add_development_dependency 'bundler', '>= 1.7'
27
+ spec.add_development_dependency 'rake'
28
+ spec.add_development_dependency 'rspec', '>= 3.1'
29
+ spec.add_development_dependency 'rspec-rails', '>= 2.14.0'
30
+ spec.add_development_dependency 'appraisal', '>= 1.0.2'
31
+ spec.add_development_dependency 'combustion'
32
+ spec.add_development_dependency 'factory_girl_rails'
33
+ spec.add_development_dependency 'pry-debugger'
34
+ spec.add_development_dependency 'simplecov', '>= 0.10.0'
35
+ end
@@ -0,0 +1,230 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Rails::BrowserDetector::BrowserCompatible do
4
+ let(:controller) { Object.new }
5
+
6
+ before do
7
+ Rails.application.config.compatible_browsers = {
8
+ 'Chrome' => 45,
9
+ 'Yandex Browser' => 13,
10
+ 'Opera' => 32,
11
+ 'Firefox' => 42,
12
+ 'IE' => 10,
13
+ 'Safari' => 7
14
+ }
15
+
16
+ controller.extend(Rails::BrowserDetector::BrowserCompatible)
17
+ end
18
+
19
+ describe '#browser_old?' do
20
+ shared_examples_for 'not old browser' do |user_agent|
21
+ before { allow(controller).to receive_message_chain(:request, :user_agent).and_return user_agent }
22
+
23
+ it { expect(controller.send(:browser_old?)).to eq false }
24
+ end
25
+
26
+ shared_examples_for 'old browser' do |user_agent|
27
+ before { allow(controller).to receive_message_chain(:request, :user_agent).and_return user_agent }
28
+
29
+ it { expect(controller.send(:browser_old?)).to eq true }
30
+ end
31
+
32
+ context 'when used default compatible browsers' do
33
+ context 'when browser is Chrome' do
34
+ context 'when browser has old version' do
35
+ user_agents = [
36
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64)
37
+ AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36',
38
+ 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36',
39
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0)
40
+ AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36',
41
+ 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.517 Safari/537.36',
42
+ 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/4E423F',
43
+ 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'
44
+ ]
45
+
46
+ user_agents.each { |user_agent| it_behaves_like 'old browser', user_agent }
47
+ end
48
+
49
+ context 'when browser has minimal compatible version' do
50
+ it_behaves_like 'not old browser',
51
+ 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)
52
+ Chrome/45.0.2228.0 Safari/537.36'
53
+ end
54
+
55
+ context 'when browser has compatible version' do
56
+ it_behaves_like 'not old browser',
57
+ 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)
58
+ Chrome/45.0.2228.0 Safari/537.36'
59
+ end
60
+ end
61
+
62
+ context 'when browser is Firefox' do
63
+ context 'when browser has old version' do
64
+ user_agents = [
65
+ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9',
66
+ 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-AU; rv:1.9.2.14) Gecko/20110218 Firefox/3.6.14',
67
+ 'Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8',
68
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0',
69
+ 'Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0',
70
+ 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0',
71
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'
72
+ ]
73
+
74
+ user_agents.each { |user_agent| it_behaves_like 'old browser', user_agent }
75
+ end
76
+
77
+ context 'when browser has minimal compatible version' do
78
+ it_behaves_like 'not old browser',
79
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/42.3'
80
+ end
81
+
82
+ context 'when browser has compatible version' do
83
+ it_behaves_like 'not old browser',
84
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/44.1'
85
+ end
86
+ end
87
+
88
+ context 'when browser is Yandex Browser' do
89
+ context 'when browser has old version' do
90
+ user_agents = [
91
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.5 (KHTML, like Gecko)
92
+ YaBrowser/1.0.1084.5402 Chrome/19.0.1084.5402 Safari/536.5',
93
+ 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko)
94
+ YaBrowser/1.0.1084.5402 Chrome/19.0.1084.5402 Safari/536.5',
95
+ 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/536.5 (KHTML, like Gecko)
96
+ YaBrowser/1.0.1084.5402 Chrome/19.0.1084.5402 Safari/536.5',
97
+ 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.12785
98
+ YaBrowser/12.12.1599.12785 Safari/537.36',
99
+ 'Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95
100
+ YaBrowser/12.7.1916.15705 Safari/537.36'
101
+ ]
102
+
103
+ user_agents.each { |user_agent| it_behaves_like 'old browser', user_agent }
104
+ end
105
+
106
+ context 'when browser has minimal compatible version' do
107
+ it_behaves_like 'not old browser',
108
+ 'Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
109
+ Chrome/39.0.2171.95 YaBrowser/13.7.1916.15705 Safari/537.36'
110
+ end
111
+
112
+ context 'when browser has compatible version' do
113
+ it_behaves_like 'not old browser',
114
+ 'Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
115
+ Chrome/39.0.2171.95 YaBrowser/14.7.1916.15705 Safari/537.36'
116
+ end
117
+ end
118
+
119
+ context 'when browser is Opera' do
120
+ context 'when browser has old version' do
121
+ user_agents = [
122
+ 'Opera/7.03 (Windows NT 5.0; U) [en]',
123
+ 'Opera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10',
124
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko)
125
+ Chrome/44.0.2376.0 Safari/537.36 OPR/31.0.1857.0',
126
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
127
+ Chrome/45.0.2454.85 Safari/537.36 OPR/31.0.1948.25'
128
+ ]
129
+
130
+ user_agents.each { |user_agent| it_behaves_like 'old browser', user_agent }
131
+ end
132
+
133
+ context 'when browser has minimal compatible version' do
134
+ it_behaves_like 'not old browser',
135
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
136
+ Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25'
137
+ end
138
+
139
+ context 'when browser has compatible version' do
140
+ it_behaves_like 'not old browser',
141
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
142
+ Chrome/45.0.2454.85 Safari/537.36 OPR/33.0.1948.25'
143
+ end
144
+ end
145
+
146
+ context 'when browser is IE' do
147
+ context 'when browser has old version' do
148
+ user_agents = [
149
+ 'Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)',
150
+ 'Mozilla/3.0 (compatible; MSIE 3.0; Windows NT 5.0)',
151
+ 'Mozilla/4.0 WebTV/2.6 (compatible; MSIE 4.0)',
152
+ 'Mozilla/4.0 (compatible; MSIE 5.15; Mac_PowerPC)',
153
+ 'Mozilla/4.08 (compatible; MSIE 6.0; Windows NT 5.1)',
154
+ 'Mozilla/5.0 (MSIE 7.0; Macintosh; U; SunOS; X11; gu; SV1; InfoPath.2;
155
+ .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)',
156
+ 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4;
157
+ InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)',
158
+ 'Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)'
159
+ ]
160
+
161
+ user_agents.each { |user_agent| it_behaves_like 'old browser', user_agent }
162
+ end
163
+
164
+ context 'when browser has minimal compatible version' do
165
+ it_behaves_like 'not old browser',
166
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)'
167
+ end
168
+
169
+ context 'when browser has compatible version' do
170
+ it_behaves_like 'not old browser',
171
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'
172
+ end
173
+ end
174
+
175
+ context 'when browser is Safari' do
176
+ context 'when browser has old version' do
177
+ user_agents = [
178
+ 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru-RU)
179
+ AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16',
180
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4)
181
+ AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2',
182
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5)
183
+ AppleWebKit/537.75.14 (KHTML, like Gecko) Version/6.1.3 Safari/537.75.14'
184
+ ]
185
+
186
+ user_agents.each { |user_agent| it_behaves_like 'old browser', user_agent }
187
+ end
188
+
189
+ context 'when browser has minimal compatible version' do
190
+ it_behaves_like 'not old browser',
191
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3)
192
+ AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A'
193
+ end
194
+
195
+ context 'when browser has compatible version' do
196
+ it_behaves_like 'not old browser',
197
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11)
198
+ AppleWebKit/601.1.39 (KHTML, like Gecko) Version/9.0 Safari/601.1.39'
199
+ end
200
+ end
201
+
202
+ context 'when browser or version is not identified' do
203
+ it_behaves_like 'not old browser', 'blabla'
204
+ it_behaves_like 'not old browser', 'Links (2.7; Linux 3.7.9-2-ARCH x86_64; GNU C 4.7.1; text)'
205
+ end
206
+
207
+ context 'when browser is Firefox Alfa with not compatible version' do
208
+ it_behaves_like 'old browser', 'Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20120405 Firefox/14.0a1'
209
+ end
210
+ end
211
+ end
212
+
213
+ describe '#current_browser' do
214
+ let(:user_agent) do
215
+ 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2228.0 Safari/537.36'
216
+ end
217
+
218
+ before { allow(controller).to receive_message_chain(:request, :user_agent).and_return user_agent }
219
+
220
+ it { expect(controller.send(:current_browser).family).to eq 'Chrome' }
221
+ it { expect(controller.send(:current_browser).version.major).to eq '47' }
222
+
223
+ context 'when browser is not identified' do
224
+ let(:user_agent) { 'blabla' }
225
+
226
+ it { expect(controller.send(:current_browser).family).to eq 'Other' }
227
+ it { expect(controller.send(:current_browser).version).to be_nil }
228
+ end
229
+ end
230
+ end
@@ -0,0 +1,2 @@
1
+ # coding: utf-8
2
+ require File.expand_path('../../../config/hosts', __FILE__)
File without changes
@@ -0,0 +1,4 @@
1
+ # coding: utf-8
2
+ Rails.application.routes.draw do
3
+ #
4
+ end
@@ -0,0 +1 @@
1
+ *.log
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ require 'bundler/setup'
3
+ require 'rails/browser_detector'
4
+
5
+ require 'simplecov'
6
+ SimpleCov.start do
7
+ minimum_coverage 85
8
+
9
+ add_filter '/spec/'
10
+ add_filter 'lib/rails-browser_detector/engine.rb'
11
+ add_filter 'lib/rails-browser_detector/version.rb'
12
+ add_filter 'lib/rails-browser_detector.rb'
13
+ end
14
+
15
+ require 'factory_girl_rails'
16
+
17
+ require 'combustion'
18
+ Combustion.initialize! :action_controller
19
+
20
+ RSpec.configure do |config|
21
+ config.include FactoryGirl::Syntax::Methods
22
+
23
+ config.backtrace_exclusion_patterns = [%r{lib/rspec/(core|expectations|matchers|mocks)}]
24
+ config.color = true
25
+ config.order = 'random'
26
+ end
metadata ADDED
@@ -0,0 +1,231 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails-browser_detector
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Fyodor
8
+ - Parmanchukov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-03-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ prerelease: false
16
+ name: rails
17
+ version_requirements: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.1.12
22
+ - - <
23
+ - !ruby/object:Gem::Version
24
+ version: '4.1'
25
+ requirement: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.1.12
30
+ - - <
31
+ - !ruby/object:Gem::Version
32
+ version: '4.1'
33
+ type: :runtime
34
+ - !ruby/object:Gem::Dependency
35
+ prerelease: false
36
+ name: user_agent_parser
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: '2.3'
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '2.3'
47
+ type: :runtime
48
+ - !ruby/object:Gem::Dependency
49
+ prerelease: false
50
+ name: bundler
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '1.7'
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '1.7'
61
+ type: :development
62
+ - !ruby/object:Gem::Dependency
63
+ prerelease: false
64
+ name: rake
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :development
76
+ - !ruby/object:Gem::Dependency
77
+ prerelease: false
78
+ name: rspec
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '3.1'
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '3.1'
89
+ type: :development
90
+ - !ruby/object:Gem::Dependency
91
+ prerelease: false
92
+ name: rspec-rails
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '>='
96
+ - !ruby/object:Gem::Version
97
+ version: 2.14.0
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - '>='
101
+ - !ruby/object:Gem::Version
102
+ version: 2.14.0
103
+ type: :development
104
+ - !ruby/object:Gem::Dependency
105
+ prerelease: false
106
+ name: appraisal
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: 1.0.2
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '>='
115
+ - !ruby/object:Gem::Version
116
+ version: 1.0.2
117
+ type: :development
118
+ - !ruby/object:Gem::Dependency
119
+ prerelease: false
120
+ name: combustion
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - '>='
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ type: :development
132
+ - !ruby/object:Gem::Dependency
133
+ prerelease: false
134
+ name: factory_girl_rails
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ type: :development
146
+ - !ruby/object:Gem::Dependency
147
+ prerelease: false
148
+ name: pry-debugger
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ type: :development
160
+ - !ruby/object:Gem::Dependency
161
+ prerelease: false
162
+ name: simplecov
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - '>='
166
+ - !ruby/object:Gem::Version
167
+ version: 0.10.0
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - '>='
171
+ - !ruby/object:Gem::Version
172
+ version: 0.10.0
173
+ type: :development
174
+ description: Browser compatibility definition
175
+ email:
176
+ - rezerbit@gmail.com
177
+ executables: []
178
+ extensions: []
179
+ extra_rdoc_files: []
180
+ files:
181
+ - .gitignore
182
+ - .rspec
183
+ - Appraisals
184
+ - CHANGELOG.md
185
+ - Gemfile
186
+ - Makefile
187
+ - README.md
188
+ - Rakefile
189
+ - app/controllers/concerns/rails/browser_detector/browser_compatible.rb
190
+ - config/regexes.yml
191
+ - lib/rails/browser_detector.rb
192
+ - lib/rails/browser_detector/engine.rb
193
+ - lib/rails/browser_detector/version.rb
194
+ - rails-browser_detector.gemspec
195
+ - spec/concerns/browser_compatible_spec.rb
196
+ - spec/internal/config/environments/test.rb
197
+ - spec/internal/config/hosts.rb
198
+ - spec/internal/config/routes.rb
199
+ - spec/internal/log/.gitignore
200
+ - spec/spec_helper.rb
201
+ homepage: https://github.com/abak-press/rails-browser_detector
202
+ licenses: []
203
+ metadata:
204
+ allowed_push_host: https://rubygems.org
205
+ post_install_message:
206
+ rdoc_options: []
207
+ require_paths:
208
+ - lib
209
+ required_ruby_version: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ required_rubygems_version: !ruby/object:Gem::Requirement
215
+ requirements:
216
+ - - '>='
217
+ - !ruby/object:Gem::Version
218
+ version: '0'
219
+ requirements: []
220
+ rubyforge_project:
221
+ rubygems_version: 2.2.2
222
+ signing_key:
223
+ specification_version: 4
224
+ summary: Browser detector
225
+ test_files:
226
+ - spec/concerns/browser_compatible_spec.rb
227
+ - spec/internal/config/environments/test.rb
228
+ - spec/internal/config/hosts.rb
229
+ - spec/internal/config/routes.rb
230
+ - spec/internal/log/.gitignore
231
+ - spec/spec_helper.rb