rack-override-user-agent 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rack-override-user-agent.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 ryooo321
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,53 @@
1
+ # rack-override-user-agent
2
+
3
+ rack-override-user-agent will override user agent by cookie.
4
+ you can set the cookie by url query.
5
+ you will be free from browser extension that override user agent.
6
+
7
+ * How to use
8
+
9
+ ## Install
10
+
11
+ $ gem install rack-override-user-agent
12
+ $ bundle install
13
+
14
+ ## Default usage
15
+
16
+ ### config.ru
17
+ use Rack::OverrideUserAgent
18
+
19
+ ### access by browser
20
+ http://domain.of.your.app/?rack-override-user-agent="encoded user agent"
21
+
22
+ ex)
23
+ http://localhost:3000/?rack-override-user-agent=Mozilla%2F5.0+%28iPhone%3B+CPU+iPhone+OS+6_0+like+Mac+OS+X%29
24
+
25
+ ## Options usage
26
+
27
+ ### config.ru
28
+ use Rack::OverrideUserAgent,
29
+ :params_key => :ua,
30
+ :preset_ua => {
31
+ :iphone => 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X)',
32
+ }
33
+
34
+ ### access by browser
35
+ http://domain.of.your.app/?ua=iphone
36
+
37
+ ex)
38
+ http://localhost:3000/?ua=iphone
39
+
40
+
41
+ ## Contributing to rack-override-user-agent
42
+
43
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
44
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
45
+ * Fork the project.
46
+ * Start a feature/bugfix branch.
47
+ * Commit and push until you are happy with your contribution.
48
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
49
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
50
+
51
+ ## Copyright
52
+
53
+ Copyright (c) 2013 ryooo321. See LICENSE.txt for further details.
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ task :default => :test
4
+
5
+ desc 'Run the test'
6
+ task :test do
7
+ sh 'ruby test/override_user_agent_test.rb'
8
+ end
@@ -0,0 +1,3 @@
1
+ module Rack
2
+ autoload :OverrideUserAgent, 'rack/override_user_agent'
3
+ end
@@ -0,0 +1,39 @@
1
+ module Rack
2
+ class OverrideUserAgent
3
+ def initialize(app, options = {})
4
+ @app = app
5
+ @params_key = options[:params_key] || 'rack-override-user-agent'
6
+ @params_key = @params_key.to_s
7
+ @preset_ua = options[:preset_ua] || {}
8
+ end
9
+
10
+ def call(env)
11
+ request = Rack::Request.new(env)
12
+ cookie_controll = nil
13
+ if ua = request.params["#{@params_key}-rm"]
14
+ cookie_controll = :delete
15
+ elsif ua = request.params[@params_key]
16
+ ua = @preset_ua[ua.to_sym] || @preset_ua[ua.to_s] || ua
17
+ env['HTTP_USER_AGENT'] = ua
18
+ cookie_controll = :set
19
+ elsif ua = request.cookies[@params_key]
20
+ env['HTTP_USER_AGENT'] = ua
21
+ end
22
+
23
+ status, headers, body = @app.call(env)
24
+ response = Rack::Response.new
25
+ response.status = status
26
+ headers.map {|key, value| response[key] = value}
27
+ response.body = body
28
+
29
+ case cookie_controll
30
+ when :delete
31
+ response.set_cookie(@params_key, {:path => '/'})
32
+ when :set
33
+ response.set_cookie(@params_key, {:value => ua, :path => '/'})
34
+ end
35
+
36
+ response.finish
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "rack-override-user-agent"
7
+ spec.version = "0.1.0"
8
+ spec.authors = ["ryooo321"]
9
+ spec.email = ["ryooo.321@gmail.com"]
10
+ spec.description = %q{Override useragent by cookie, switch agent by query.}
11
+ spec.summary = %q{Override useragent by cookie, switch agent by query.}
12
+ spec.homepage = "https://github.com/ryooo321/rack-override-user-agent"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_development_dependency "rake"
22
+ spec.add_development_dependency "rack/test"
23
+ spec.add_dependency 'rack'
24
+ end
@@ -0,0 +1,76 @@
1
+ $:.unshift File.dirname(__FILE__) + '/../lib'
2
+ require 'rubygems'
3
+ require 'rack'
4
+ require 'cgi'
5
+ require 'rack/test'
6
+ require 'rack/override_user_agent'
7
+ require 'test/unit'
8
+
9
+ IPHONE_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'
10
+ ENC_IPHONE_UA = CGI::escape(IPHONE_UA)
11
+
12
+ class RackOverrideUserAgentTestNoOption < Test::Unit::TestCase
13
+ include Rack::Test::Methods
14
+
15
+ def app
16
+ app = Rack::Builder.new do
17
+ use Rack::OverrideUserAgent
18
+ run lambda {|env| [200, {}, ["ua is #{env['HTTP_USER_AGENT']}"]]}
19
+ end
20
+ app
21
+ end
22
+
23
+ def test_should_override_user_agent_by_query
24
+ get "/?rack-override-user-agent=#{ENC_IPHONE_UA}"
25
+ assert_equal "ua is #{IPHONE_UA}", last_response.body
26
+ assert_equal "rack-override-user-agent=#{ENC_IPHONE_UA}; path=/", last_response.header["Set-Cookie"]
27
+ end
28
+
29
+ def test_should_override_user_agent_by_cookie
30
+ set_cookie "rack-override-user-agent=#{ENC_IPHONE_UA}"
31
+ get "/"
32
+ assert_equal "ua is #{IPHONE_UA}", last_response.body
33
+ assert_equal nil, last_response.header["Set-Cookie"]
34
+ end
35
+
36
+ def test_should_rm_cookie
37
+ get "/?rack-override-user-agent-rm="
38
+ assert_equal "rack-override-user-agent=; path=/", last_response.header["Set-Cookie"]
39
+ end
40
+ end
41
+
42
+
43
+ class RackOverrideUserAgentTestPresetUa < Test::Unit::TestCase
44
+ include Rack::Test::Methods
45
+ def app
46
+ app = Rack::Builder.new do
47
+ use Rack::OverrideUserAgent, :preset_ua => {:my_sp => 'my smart phone ua'}
48
+ run lambda {|env| [200, {}, ["ua is #{env['HTTP_USER_AGENT']}"]]}
49
+ end
50
+ app
51
+ end
52
+
53
+ def test_should_override_user_agent_by_settings_and_query
54
+ get "/?rack-override-user-agent=my_sp"
55
+ assert_equal "ua is my smart phone ua", last_response.body
56
+ assert_equal "rack-override-user-agent=my+smart+phone+ua; path=/", last_response.header["Set-Cookie"]
57
+ end
58
+ end
59
+
60
+
61
+ class RackOverrideUserAgentTestParamsKey < Test::Unit::TestCase
62
+ include Rack::Test::Methods
63
+ def app
64
+ app = Rack::Builder.new do
65
+ use Rack::OverrideUserAgent, :params_key => 'hogehoge'
66
+ run lambda {|env| [200, {}, ["ua is #{env['HTTP_USER_AGENT']}"]]}
67
+ end
68
+ app
69
+ end
70
+
71
+ def test_should_override_user_agent_by_query
72
+ get "/?hogehoge=#{ENC_IPHONE_UA}"
73
+ assert_equal "ua is #{IPHONE_UA}", last_response.body
74
+ assert_equal "hogehoge=#{ENC_IPHONE_UA}; path=/", last_response.header["Set-Cookie"]
75
+ end
76
+ end
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-override-user-agent
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - ryooo321
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-18 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rack/test
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rack
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: Override useragent by cookie, switch agent by query.
79
+ email:
80
+ - ryooo.321@gmail.com
81
+ executables: []
82
+ extensions: []
83
+ extra_rdoc_files: []
84
+ files:
85
+ - .gitignore
86
+ - Gemfile
87
+ - LICENSE.txt
88
+ - README.md
89
+ - Rakefile
90
+ - lib/rack/override/user/agent.rb
91
+ - lib/rack/override_user_agent.rb
92
+ - rack-override-user-agent.gemspec
93
+ - test/override_user_agent_test.rb
94
+ homepage: https://github.com/ryooo321/rack-override-user-agent
95
+ licenses:
96
+ - MIT
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ! '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ requirements: []
114
+ rubyforge_project:
115
+ rubygems_version: 1.8.25
116
+ signing_key:
117
+ specification_version: 3
118
+ summary: Override useragent by cookie, switch agent by query.
119
+ test_files:
120
+ - test/override_user_agent_test.rb
121
+ has_rdoc: