rack_detect_platform 0.0.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.
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rake'
4
+ gem 'rack'
5
+ gem 'jeweler'
6
+
7
+ group 'test' do
8
+ gem 'rspec', '2.0.0.beta.20'
9
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,33 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.2)
5
+ gemcutter (0.5.0)
6
+ json_pure
7
+ git (1.2.5)
8
+ jeweler (1.4.0)
9
+ gemcutter (>= 0.1.0)
10
+ git (>= 1.2.5)
11
+ rubyforge (>= 2.0.0)
12
+ json_pure (1.4.3)
13
+ rack (1.2.1)
14
+ rake (0.8.7)
15
+ rspec (2.0.0.beta.20)
16
+ rspec-core (= 2.0.0.beta.20)
17
+ rspec-expectations (= 2.0.0.beta.20)
18
+ rspec-mocks (= 2.0.0.beta.20)
19
+ rspec-core (2.0.0.beta.20)
20
+ rspec-expectations (2.0.0.beta.20)
21
+ diff-lcs (>= 1.1.2)
22
+ rspec-mocks (2.0.0.beta.20)
23
+ rubyforge (2.0.4)
24
+ json_pure (>= 1.1.7)
25
+
26
+ PLATFORMS
27
+ ruby
28
+
29
+ DEPENDENCIES
30
+ jeweler
31
+ rack
32
+ rake
33
+ rspec (= 2.0.0.beta.20)
data/README ADDED
@@ -0,0 +1,3 @@
1
+ Rack::DetectPlatform is a middleware to set the X_PLATFORM env variable based on user agent.
2
+
3
+ It is entirely based on the significantly more robust Rack::MobileDetect (http://github.com/talison/rack-mobile-detect).
data/Rakefile ADDED
@@ -0,0 +1,33 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ desc 'Default: run specs.'
6
+ task :default => :noop
7
+
8
+ desc 'Generate documentation for the spec plugin.'
9
+ Rake::RDocTask.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Rack::DetectPlatform'
12
+ rdoc.options << '--line-numbers' << '--inline-source'
13
+ rdoc.rdoc_files.include('README')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ begin
18
+ require 'jeweler'
19
+ Jeweler::Tasks.new do |gemspec|
20
+ gemspec.name = "rack_detect_platform"
21
+ gemspec.summary = "Very simple Rack middleware to set an env variable based on user agent"
22
+ gemspec.description = "Very simple Rack middleware to set an env variable based on user agent"
23
+ gemspec.email = "brian@heimidal.net"
24
+ gemspec.homepage = "http://github.com/heimidal/rack_detect_platform"
25
+ gemspec.authors = ["Brian Rose"]
26
+ gemspec.add_development_dependency('rspec', '2.0.0.beta.20')
27
+ gemspec.add_dependency('rack')
28
+ end
29
+ rescue LoadError
30
+ puts "Jeweler not available. Install it with: gem install jeweler"
31
+ end
32
+
33
+ Jeweler::GemcutterTasks.new
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,30 @@
1
+ require 'rack'
2
+
3
+ module Rack
4
+ class DetectPlatform
5
+ def initialize(app, options = {})
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ user_agent = env.fetch('HTTP_USER_AGENT', '')
11
+
12
+ platforms.each do |re, platform|
13
+ if user_agent =~ re
14
+ env['X_PLATFORM'] = platform
15
+ break
16
+ end
17
+ end
18
+
19
+ @app.call(env)
20
+ end
21
+
22
+ # For the time being, Android is being identified as an iPhone. We'll split this out later.
23
+ def platforms
24
+ {
25
+ /(iPhone|Android)/ => 'iphone',
26
+ /iPad/ => 'ipad'
27
+ }
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,55 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{rack_detect_platform}
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Brian Rose"]
12
+ s.date = %q{2010-08-31}
13
+ s.description = %q{Very simple Rack middleware to set an env variable based on user agent}
14
+ s.email = %q{brian@heimidal.net}
15
+ s.extra_rdoc_files = [
16
+ "README"
17
+ ]
18
+ s.files = [
19
+ "Gemfile",
20
+ "Gemfile.lock",
21
+ "README",
22
+ "Rakefile",
23
+ "VERSION",
24
+ "lib/rack/detect_platform.rb",
25
+ "rack_detect_platform.gemspec",
26
+ "spec/detect_platform_spec.rb",
27
+ "spec/spec_helper.rb"
28
+ ]
29
+ s.homepage = %q{http://github.com/heimidal/rack_detect_platform}
30
+ s.rdoc_options = ["--charset=UTF-8"]
31
+ s.require_paths = ["lib"]
32
+ s.rubygems_version = %q{1.3.7}
33
+ s.summary = %q{Very simple Rack middleware to set an env variable based on user agent}
34
+ s.test_files = [
35
+ "spec/detect_platform_spec.rb",
36
+ "spec/spec_helper.rb"
37
+ ]
38
+
39
+ if s.respond_to? :specification_version then
40
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
41
+ s.specification_version = 3
42
+
43
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
44
+ s.add_development_dependency(%q<rspec>, ["= 2.0.0.beta.20"])
45
+ s.add_runtime_dependency(%q<rack>, [">= 0"])
46
+ else
47
+ s.add_dependency(%q<rspec>, ["= 2.0.0.beta.20"])
48
+ s.add_dependency(%q<rack>, [">= 0"])
49
+ end
50
+ else
51
+ s.add_dependency(%q<rspec>, ["= 2.0.0.beta.20"])
52
+ s.add_dependency(%q<rack>, [">= 0"])
53
+ end
54
+ end
55
+
@@ -0,0 +1,95 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe Rack::DetectPlatform do
4
+ before do
5
+ @app = test_app
6
+ @rack = Rack::DetectPlatform.new(@app)
7
+ end
8
+
9
+ it 'sets platform to iphone' do
10
+ env = test_env('HTTP_USER_AGENT' => iphone)
11
+ @rack.call(env)
12
+
13
+ env['X_PLATFORM'].should == "iphone"
14
+ end
15
+
16
+ it 'sets platform to iphone when the device is running Android' do
17
+ env = test_env('HTTP_USER_AGENT' => android)
18
+ @rack.call(env)
19
+
20
+ env['X_PLATFORM'].should == "iphone"
21
+ end
22
+
23
+ it 'sets platform to ipad' do
24
+ env = test_env('HTTP_USER_AGENT' => ipad)
25
+ @rack.call(env)
26
+
27
+ env['X_PLATFORM'].should == "ipad"
28
+ end
29
+
30
+ it "doesn't set the platform if it can't find it" do
31
+ env = test_env
32
+ @rack.call(env)
33
+
34
+ env.key?('X_PLATFORM').should be_false
35
+ end
36
+
37
+ it "calls the app" do
38
+ env = test_env
39
+ @app.should_receive(:call).with(env)
40
+
41
+ @rack.call(env)
42
+ end
43
+ end
44
+
45
+ def test_env(overwrite = {})
46
+ {
47
+ 'GATEWAY_INTERFACE'=> 'CGI/1.2',
48
+ 'HTTP_ACCEPT'=> 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
49
+ 'HTTP_ACCEPT_CHARSET'=> 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
50
+ 'HTTP_ACCEPT_ENCODING'=> 'gzip,deflate',
51
+ 'HTTP_ACCEPT_LANGUAGE'=> 'en-us,en;q=0.5',
52
+ 'HTTP_CONNECTION'=> 'keep-alive',
53
+ 'HTTP_HOST'=> 'localhost:4567',
54
+ 'HTTP_KEEP_ALIVE'=> 300,
55
+ 'HTTP_USER_AGENT'=> 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.3) Gecko/20090920 Firefox/3.5.3 (Swiftfox)',
56
+ 'HTTP_VERSION'=> 'HTTP/1.1',
57
+ 'PATH_INFO'=> '/',
58
+ 'QUERY_STRING'=> '',
59
+ 'REMOTE_ADDR'=> '127.0.0.1',
60
+ 'REQUEST_METHOD'=> 'GET',
61
+ 'REQUEST_PATH'=> '/',
62
+ 'REQUEST_URI'=> '/',
63
+ 'SCRIPT_NAME'=> '',
64
+ 'SERVER_NAME'=> 'localhost',
65
+ 'SERVER_PORT'=> '4567',
66
+ 'SERVER_PROTOCOL'=> 'HTTP/1.1',
67
+ 'SERVER_SOFTWARE'=> 'Mongrel 1.1.5',
68
+ 'rack.multiprocess'=> false,
69
+ 'rack.multithread'=> true,
70
+ 'rack.request.form_hash'=> '',
71
+ 'rack.request.form_vars'=> '',
72
+ 'rack.request.query_hash'=> '',
73
+ 'rack.request.query_string'=> '',
74
+ 'rack.run_once'=> false,
75
+ 'rack.url_scheme'=> 'http',
76
+ 'rack.version'=> '1: 0'
77
+ }.merge(overwrite)
78
+ end
79
+
80
+ def test_app
81
+ Class.new { def call(app); true; end }.new
82
+ end
83
+
84
+ # User agents for testing
85
+ def ipad
86
+ 'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10'
87
+ end
88
+
89
+ def iphone
90
+ 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3'
91
+ end
92
+
93
+ def android
94
+ 'Mozilla/5.0 (Linux; U; Android 1.0; en-us; dream) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2'
95
+ end
@@ -0,0 +1,7 @@
1
+ ENV["RACK_ENV"] = 'test'
2
+
3
+ require 'rubygems'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'rack/detect_platform'
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack_detect_platform
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Brian Rose
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-31 00:00:00 -06:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - "="
28
+ - !ruby/object:Gem::Version
29
+ hash: 62196427
30
+ segments:
31
+ - 2
32
+ - 0
33
+ - 0
34
+ - beta
35
+ - 20
36
+ version: 2.0.0.beta.20
37
+ type: :development
38
+ version_requirements: *id001
39
+ - !ruby/object:Gem::Dependency
40
+ name: rack
41
+ prerelease: false
42
+ requirement: &id002 !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ hash: 3
48
+ segments:
49
+ - 0
50
+ version: "0"
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ description: Very simple Rack middleware to set an env variable based on user agent
54
+ email: brian@heimidal.net
55
+ executables: []
56
+
57
+ extensions: []
58
+
59
+ extra_rdoc_files:
60
+ - README
61
+ files:
62
+ - Gemfile
63
+ - Gemfile.lock
64
+ - README
65
+ - Rakefile
66
+ - VERSION
67
+ - lib/rack/detect_platform.rb
68
+ - rack_detect_platform.gemspec
69
+ - spec/detect_platform_spec.rb
70
+ - spec/spec_helper.rb
71
+ has_rdoc: true
72
+ homepage: http://github.com/heimidal/rack_detect_platform
73
+ licenses: []
74
+
75
+ post_install_message:
76
+ rdoc_options:
77
+ - --charset=UTF-8
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ hash: 3
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ hash: 3
95
+ segments:
96
+ - 0
97
+ version: "0"
98
+ requirements: []
99
+
100
+ rubyforge_project:
101
+ rubygems_version: 1.3.7
102
+ signing_key:
103
+ specification_version: 3
104
+ summary: Very simple Rack middleware to set an env variable based on user agent
105
+ test_files:
106
+ - spec/detect_platform_spec.rb
107
+ - spec/spec_helper.rb