rack-user_agent 0.2.1

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.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +97 -0
  7. data/Rakefile +7 -0
  8. data/lib/rack/user_agent.rb +25 -0
  9. data/lib/rack/user_agent/checker.rb +29 -0
  10. data/lib/rack/user_agent/detector.rb +49 -0
  11. data/lib/rack/user_agent/railtie.rb +9 -0
  12. data/lib/rack/user_agent/result.rb +35 -0
  13. data/lib/rack/user_agent/version.rb +5 -0
  14. data/rack-user_agent.gemspec +29 -0
  15. data/rails_sample/.gitignore +16 -0
  16. data/rails_sample/Gemfile +15 -0
  17. data/rails_sample/Gemfile.lock +142 -0
  18. data/rails_sample/README.rdoc +28 -0
  19. data/rails_sample/Rakefile +6 -0
  20. data/rails_sample/app/assets/images/.keep +0 -0
  21. data/rails_sample/app/assets/javascripts/application.js +16 -0
  22. data/rails_sample/app/assets/stylesheets/application.css +15 -0
  23. data/rails_sample/app/controllers/application_controller.rb +14 -0
  24. data/rails_sample/app/controllers/concerns/.keep +0 -0
  25. data/rails_sample/app/helpers/application_helper.rb +2 -0
  26. data/rails_sample/app/mailers/.keep +0 -0
  27. data/rails_sample/app/models/.keep +0 -0
  28. data/rails_sample/app/models/concerns/.keep +0 -0
  29. data/rails_sample/app/views/application/index.html.erb +4 -0
  30. data/rails_sample/app/views/layouts/application.html.erb +14 -0
  31. data/rails_sample/bin/bundle +3 -0
  32. data/rails_sample/bin/rails +8 -0
  33. data/rails_sample/bin/rake +8 -0
  34. data/rails_sample/bin/spring +18 -0
  35. data/rails_sample/config.ru +4 -0
  36. data/rails_sample/config/application.rb +24 -0
  37. data/rails_sample/config/boot.rb +4 -0
  38. data/rails_sample/config/database.yml +25 -0
  39. data/rails_sample/config/environment.rb +5 -0
  40. data/rails_sample/config/environments/development.rb +37 -0
  41. data/rails_sample/config/environments/production.rb +82 -0
  42. data/rails_sample/config/environments/test.rb +39 -0
  43. data/rails_sample/config/initializers/assets.rb +8 -0
  44. data/rails_sample/config/initializers/backtrace_silencers.rb +7 -0
  45. data/rails_sample/config/initializers/cookies_serializer.rb +3 -0
  46. data/rails_sample/config/initializers/filter_parameter_logging.rb +4 -0
  47. data/rails_sample/config/initializers/inflections.rb +16 -0
  48. data/rails_sample/config/initializers/mime_types.rb +4 -0
  49. data/rails_sample/config/initializers/session_store.rb +3 -0
  50. data/rails_sample/config/initializers/wrap_parameters.rb +14 -0
  51. data/rails_sample/config/locales/en.yml +23 -0
  52. data/rails_sample/config/routes.rb +3 -0
  53. data/rails_sample/config/secrets.yml +22 -0
  54. data/rails_sample/db/seeds.rb +7 -0
  55. data/rails_sample/lib/assets/.keep +0 -0
  56. data/rails_sample/lib/tasks/.keep +0 -0
  57. data/rails_sample/log/.keep +0 -0
  58. data/rails_sample/public/404.html +67 -0
  59. data/rails_sample/public/422.html +67 -0
  60. data/rails_sample/public/500.html +66 -0
  61. data/rails_sample/public/favicon.ico +0 -0
  62. data/rails_sample/public/robots.txt +5 -0
  63. data/rails_sample/test/controllers/.keep +0 -0
  64. data/rails_sample/test/fixtures/.keep +0 -0
  65. data/rails_sample/test/helpers/.keep +0 -0
  66. data/rails_sample/test/integration/.keep +0 -0
  67. data/rails_sample/test/mailers/.keep +0 -0
  68. data/rails_sample/test/models/.keep +0 -0
  69. data/rails_sample/test/test_helper.rb +10 -0
  70. data/rails_sample/vendor/assets/javascripts/.keep +0 -0
  71. data/rails_sample/vendor/assets/stylesheets/.keep +0 -0
  72. data/sinatra_sample/Gemfile +5 -0
  73. data/sinatra_sample/Gemfile.lock +33 -0
  74. data/sinatra_sample/app.rb +15 -0
  75. data/sinatra_sample/config.ru +3 -0
  76. data/spec/lib/rack/user_agent/checker_spec.rb +60 -0
  77. data/spec/lib/rack/user_agent/detector_spec.rb +165 -0
  78. data/spec/lib/rack/user_agent/result_spec.rb +31 -0
  79. data/spec/lib/rack/user_agent_spec.rb +18 -0
  80. data/spec/spec_helper.rb +6 -0
  81. metadata +226 -0
@@ -0,0 +1,165 @@
1
+ require_relative "../../../spec_helper"
2
+
3
+ # Vendored from:
4
+ # https://github.com/ihara2525/rack-smartphone_detector/blob/master/spec/rack-smartphone_detector_spec.rb
5
+ describe "Rack::UserAgent::Detector" do
6
+ include Rack::Test::Methods
7
+
8
+ SMARTPHONES = [
9
+ {
10
+ name: "iPhone",
11
+ version: "5.1.1",
12
+ user_agents: [
13
+ "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3",
14
+ ]
15
+ },
16
+ {
17
+ name: "iPhone",
18
+ version: "6.0",
19
+ user_agents: [
20
+ "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25",
21
+ ]
22
+ },
23
+ {
24
+ name: "iPad",
25
+ version: "6.0",
26
+ user_agents: [
27
+ "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25"
28
+ ]
29
+ },
30
+ {
31
+ name: "Android",
32
+ version: "4.0.1",
33
+ user_agents: [
34
+ "Mozilla/5.0 (Linux; U; Android 4.0.1; ja-jp; Galaxy Nexus Build/ITL41D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
35
+ ]
36
+ },
37
+ {
38
+ name: "Android",
39
+ version: "4.2.1",
40
+ user_agents: [
41
+ "Opera/9.80 (Android 4.2.1; Linux; Opera Mobi/ADR-1301080958) Presto/2.11.355 Version/12.10"
42
+ ]
43
+ },
44
+ {
45
+ name: "Android",
46
+ version: nil,
47
+ user_agents: [
48
+ "Mozilla/5.0 (Android; Mobile; rv:18.0) Gecko/18.0 Firefox/18.0",
49
+ ]
50
+ },
51
+ {
52
+ name: "Android Tablet",
53
+ version: "4.1.1",
54
+ user_agents: [
55
+ "Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03S) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19"
56
+ ]
57
+ },
58
+ {
59
+ name: "Windows Phone",
60
+ version: "7.5",
61
+ user_agents: [
62
+ "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; FujitsuToshibaMobileCommun; IS12T; KDDI)"
63
+ ]
64
+ }
65
+ ]
66
+
67
+ let(:app) do
68
+ dummy_app = ->(env) { [200, {}, "Hello World"] }
69
+ Rack::UserAgent.new(dummy_app)
70
+ end
71
+
72
+ describe "#from_smartphone?" do
73
+ it "returns true if the request comes from smartphone" do
74
+ SMARTPHONES.each do |info|
75
+ info[:user_agents].each do |ua|
76
+ header "User-Agent", ua
77
+ get "/"
78
+ last_request.from_smartphone?.must_equal true
79
+ end
80
+ end
81
+ end
82
+
83
+ it "returns false if the request does not come from smartphone" do
84
+ [
85
+ "DoCoMo/2.0 F01E(c500;TB;W24H16)",
86
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.101 Safari/537.11"
87
+ ].each do |ua|
88
+ header "User-Agent", ua
89
+ get "/"
90
+ last_request.from_smartphone?.must_equal false
91
+ end
92
+ end
93
+
94
+ it "returns false if the request comes from device without user-agent" do
95
+ get "/"
96
+ last_request.from_smartphone?.must_equal false
97
+ end
98
+ end
99
+
100
+ describe "#smartphone_version" do
101
+ it "returns version number string if it could be detected" do
102
+ SMARTPHONES.each do |info|
103
+ info[:user_agents].each do |ua|
104
+ header "User-Agent", ua
105
+ get "/"
106
+ last_request.smartphone_version.must_equal info[:version]
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+ describe "#from_iphone?" do
113
+ it "returns true if the request comes from iphone" do
114
+ user_agents("iPhone").each do |ua|
115
+ header "User-Agent", ua
116
+ get "/"
117
+ last_request.from_iphone?.must_equal true
118
+ end
119
+ end
120
+ end
121
+
122
+ describe "#from_ipad?" do
123
+ it "returns true if the request comes from ipad" do
124
+ user_agents("iPad").each do |ua|
125
+ header "User-Agent", ua
126
+ get "/"
127
+ last_request.from_ipad?.must_equal true
128
+ end
129
+ end
130
+ end
131
+
132
+ describe "#from_android?" do
133
+ it "returns true if the request comes from android mobile" do
134
+ user_agents("Android").each do |ua|
135
+ header "User-Agent", ua
136
+ get "/"
137
+ last_request.from_android?.must_equal true
138
+ end
139
+ end
140
+ end
141
+
142
+ describe "#from_android_tablet?" do
143
+ it "returns true if the request comes from android tablet" do
144
+ user_agents("Android Tablet").each do |ua|
145
+ header "User-Agent", ua
146
+ get "/"
147
+ last_request.from_android_tablet?.must_equal true
148
+ end
149
+ end
150
+ end
151
+
152
+ describe "#from_windows_phone?" do
153
+ it "returns true if the request comes from windows phone" do
154
+ user_agents("Windows Phone").each do |ua|
155
+ header "User-Agent", ua
156
+ get "/"
157
+ last_request.from_windows_phone?.must_equal true
158
+ end
159
+ end
160
+ end
161
+
162
+ def user_agents(name)
163
+ SMARTPHONES.find { |info| info[:name] == name }[:user_agents]
164
+ end
165
+ end
@@ -0,0 +1,31 @@
1
+ require_relative "../../../spec_helper"
2
+
3
+ describe "Rack::UserAgent::Result" do
4
+ include Rack::Test::Methods
5
+
6
+ let(:app) do
7
+ dummy_app = ->(env) { [200, {}, "Hello World"] }
8
+ Rack::UserAgent.new(dummy_app)
9
+ end
10
+ let(:ua) { "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25" }
11
+ let(:woothee_result) { ::Woothee.parse(ua) }
12
+ let(:mappings) do
13
+ {
14
+ device_type: :category,
15
+ os: :os,
16
+ os_version: :os_version,
17
+ browser: :name,
18
+ browser_version: :version,
19
+ browser_vendor: :vendor,
20
+ }
21
+ end
22
+
23
+ it "returns proper woothee results" do
24
+ header "User-Agent", ua
25
+ get "/"
26
+
27
+ mappings.each do |method, original|
28
+ last_request.public_send(method).must_equal woothee_result[original]
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+ require_relative "../../spec_helper"
2
+
3
+ describe "Rack::UserAgent" do
4
+ include Rack::Test::Methods
5
+
6
+ let(:app) do
7
+ dummy_app = ->(env) { [200, {}, "Hello World"] }
8
+ Rack::UserAgent.new(dummy_app)
9
+ end
10
+ let(:ua) { "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25" }
11
+ let(:woothee_result) { ::Woothee.parse(ua) }
12
+
13
+ it "assigns woothee parse result to env['rack.woothee']" do
14
+ header "User-Agent", ua
15
+ get "/"
16
+ last_request.env["rack.woothee"].must_equal woothee_result
17
+ end
18
+ end
@@ -0,0 +1,6 @@
1
+ require "minitest/spec"
2
+ require "minitest/autorun"
3
+ require "rack/test"
4
+ require "rack/user_agent"
5
+
6
+ require "pry"
metadata ADDED
@@ -0,0 +1,226 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-user_agent
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
+ platform: ruby
6
+ authors:
7
+ - Takashi Kokubun
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: woothee
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.7'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rack-test
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Rack::Request extension for handling User-Agent.
112
+ email:
113
+ - takashikkbn@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".travis.yml"
120
+ - Gemfile
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - lib/rack/user_agent.rb
125
+ - lib/rack/user_agent/checker.rb
126
+ - lib/rack/user_agent/detector.rb
127
+ - lib/rack/user_agent/railtie.rb
128
+ - lib/rack/user_agent/result.rb
129
+ - lib/rack/user_agent/version.rb
130
+ - rack-user_agent.gemspec
131
+ - rails_sample/.gitignore
132
+ - rails_sample/Gemfile
133
+ - rails_sample/Gemfile.lock
134
+ - rails_sample/README.rdoc
135
+ - rails_sample/Rakefile
136
+ - rails_sample/app/assets/images/.keep
137
+ - rails_sample/app/assets/javascripts/application.js
138
+ - rails_sample/app/assets/stylesheets/application.css
139
+ - rails_sample/app/controllers/application_controller.rb
140
+ - rails_sample/app/controllers/concerns/.keep
141
+ - rails_sample/app/helpers/application_helper.rb
142
+ - rails_sample/app/mailers/.keep
143
+ - rails_sample/app/models/.keep
144
+ - rails_sample/app/models/concerns/.keep
145
+ - rails_sample/app/views/application/index.html.erb
146
+ - rails_sample/app/views/layouts/application.html.erb
147
+ - rails_sample/bin/bundle
148
+ - rails_sample/bin/rails
149
+ - rails_sample/bin/rake
150
+ - rails_sample/bin/spring
151
+ - rails_sample/config.ru
152
+ - rails_sample/config/application.rb
153
+ - rails_sample/config/boot.rb
154
+ - rails_sample/config/database.yml
155
+ - rails_sample/config/environment.rb
156
+ - rails_sample/config/environments/development.rb
157
+ - rails_sample/config/environments/production.rb
158
+ - rails_sample/config/environments/test.rb
159
+ - rails_sample/config/initializers/assets.rb
160
+ - rails_sample/config/initializers/backtrace_silencers.rb
161
+ - rails_sample/config/initializers/cookies_serializer.rb
162
+ - rails_sample/config/initializers/filter_parameter_logging.rb
163
+ - rails_sample/config/initializers/inflections.rb
164
+ - rails_sample/config/initializers/mime_types.rb
165
+ - rails_sample/config/initializers/session_store.rb
166
+ - rails_sample/config/initializers/wrap_parameters.rb
167
+ - rails_sample/config/locales/en.yml
168
+ - rails_sample/config/routes.rb
169
+ - rails_sample/config/secrets.yml
170
+ - rails_sample/db/seeds.rb
171
+ - rails_sample/lib/assets/.keep
172
+ - rails_sample/lib/tasks/.keep
173
+ - rails_sample/log/.keep
174
+ - rails_sample/public/404.html
175
+ - rails_sample/public/422.html
176
+ - rails_sample/public/500.html
177
+ - rails_sample/public/favicon.ico
178
+ - rails_sample/public/robots.txt
179
+ - rails_sample/test/controllers/.keep
180
+ - rails_sample/test/fixtures/.keep
181
+ - rails_sample/test/helpers/.keep
182
+ - rails_sample/test/integration/.keep
183
+ - rails_sample/test/mailers/.keep
184
+ - rails_sample/test/models/.keep
185
+ - rails_sample/test/test_helper.rb
186
+ - rails_sample/vendor/assets/javascripts/.keep
187
+ - rails_sample/vendor/assets/stylesheets/.keep
188
+ - sinatra_sample/Gemfile
189
+ - sinatra_sample/Gemfile.lock
190
+ - sinatra_sample/app.rb
191
+ - sinatra_sample/config.ru
192
+ - spec/lib/rack/user_agent/checker_spec.rb
193
+ - spec/lib/rack/user_agent/detector_spec.rb
194
+ - spec/lib/rack/user_agent/result_spec.rb
195
+ - spec/lib/rack/user_agent_spec.rb
196
+ - spec/spec_helper.rb
197
+ homepage: https://github.com/k0kubun/rack-user_agent
198
+ licenses:
199
+ - MIT
200
+ metadata: {}
201
+ post_install_message:
202
+ rdoc_options: []
203
+ require_paths:
204
+ - lib
205
+ required_ruby_version: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ required_rubygems_version: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ requirements: []
216
+ rubyforge_project:
217
+ rubygems_version: 2.2.2
218
+ signing_key:
219
+ specification_version: 4
220
+ summary: Rack::Request extension for handling User-Agent.
221
+ test_files:
222
+ - spec/lib/rack/user_agent/checker_spec.rb
223
+ - spec/lib/rack/user_agent/detector_spec.rb
224
+ - spec/lib/rack/user_agent/result_spec.rb
225
+ - spec/lib/rack/user_agent_spec.rb
226
+ - spec/spec_helper.rb