uagent 0.0.3 → 0.0.4

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.
@@ -6,48 +6,85 @@ Helps you to develop web applications for desktop or mobile user agents.
6
6
 
7
7
  $ gem install uagent
8
8
 
9
- == Use
9
+ == Usage
10
10
 
11
- require 'rubygmes'
12
- require 'uagent'
11
+ When a browser sends a request to your web application the request has
12
+ an HTTP_USER_AGENT attribute that identifies the device an
13
+ browser. For example, the next string identifies an particular model
14
+ of iPhone, that uses an specific mobile version for Safari.
13
15
 
14
- # A parser distinguishes between disjoin user agent sets
16
+ Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us)
17
+ AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11
18
+ Safari/528.16
15
19
 
16
- parser = UAgent::Parser.new([:desktop, :mobile])
20
+ Each mobile phone model will send you a particular user agent string,
21
+ thus is a good idea classify the devices in groups an develop a
22
+ specific interface for each group. For each group we define a key, so
23
+ the user agent parser receive the user agent string and returns that
24
+ key. For example, the answer for the string above could be :mobile or
25
+ :iphone, depending on the parser configuration.
17
26
 
18
- ua = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us) " +
19
- "AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11 Safari/528.16"
27
+ If you are developing web applications on top of rack, I recommend
28
+ you to look the uagent_rack[http://github.com/danielhz/uagent_rack]
29
+ gem.
20
30
 
21
- parser.call({ 'HTTP_USER_AGENT' => 'ua }) # gets :mobile
31
+ === Code example
22
32
 
23
- ua = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.10) " +
24
- "Gecko/20100915 Ubuntu/10.04 (lucid) Firefox/3.6.10"
33
+ require 'rubygmes'
34
+ require 'uagent'
25
35
 
36
+ # A parser distinguishes between disjoin user agent sets
37
+
38
+ parser = UAgent::Parser.new
39
+
40
+ env = {
41
+ ...
42
+ "HTTP_USER_AGENT" => "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us) " +
43
+ "AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11 Safari/528.16",
44
+ ...
45
+ }
46
+
47
+ parser.call(env) # gets :mobile
48
+
49
+ env = {
50
+ ...
51
+ "HTTP_USER_AGENT" => "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.10) " +
52
+ "Gecko/20100915 Ubuntu/10.04 (lucid) Firefox/3.6.10"
53
+ ...
54
+ }
55
+
26
56
  parser.call({ 'HTTP_USER_AGENT' => 'ua }) # gets :desktop
27
57
 
28
- Also you can add more keywords to get a more specific device
29
- classification.
58
+ === Using specific user agent groups.
30
59
 
31
- parser = UAgent::Parser.new([:desktop, :mobile, :iphone])
60
+ The basic user agent groups are :desktop and :mobile. You can add more
61
+ groups adding keys in the constructor function.
62
+
63
+ parser = UAgent::Parser.new(:iphone)
32
64
 
33
65
  ua = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us) " +
34
66
  "AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11 Safari/528.16"
35
67
 
36
68
  parser.call({ 'HTTP_USER_AGENT' => 'ua }) # gets :iphone
37
69
 
38
- ua = "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en-US) " +
39
- "AppleWebKit/530.17 (KHTML, like Gecko) Version/6.0.0.62 Mobile Safari/530.17"
70
+ The keys order in the constructor is relevant. Put the most specific
71
+ keys first to indicate the parser to start for them.
72
+
73
+ === Using a custom device database.
40
74
 
41
- parser.call({ 'HTTP_USER_AGENT' => 'ua }) # gets :mobile
75
+ The parser uses a hash that associates terms to the user agent group
76
+ keyword. That terms are searched in the HTTP_USER_AGENT string to
77
+ analyze if a user agent is into a group. Now we support only the
78
+ keywords :iphone and :blackberry, thus change the database if you need
79
+ a more accurate parser.
42
80
 
43
- Now we are working with the keywords :desktop, :mobile, :iphone and
44
- :blackberry. Look the tests for more information.
81
+ parser.set_database my_custom_database
45
82
 
46
83
  == Install from code
47
84
 
48
85
  First download the code from the repository:
49
86
 
50
- $ git clone git@github.com:danielhz/uagent.git
87
+ $ git clone git://github.com/danielhz/uagent.git
51
88
 
52
89
  This project uses jeweler to build the gem, so you can use this commands:
53
90
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -11,9 +11,10 @@ module UAgent
11
11
  'BlackBerry', 'CDM', 'Ericsson', 'LG', 'LGE', 'Motorola', 'MOT',
12
12
  'NEC', 'Nokia', 'Panasonic', 'QCI', 'SAGEM', 'SAMSUNG', 'SEC',
13
13
  'Sanyo', 'Sendo', 'SHARP', 'SonyEricsson', 'Telit',
14
- 'Telit_mobile_Terminals', 'TSM', 'Palm'],
14
+ 'Telit_mobile_Terminals', 'TSM', 'Palm', 'ViewPad'],
15
15
  :iphone => ['iPhone'],
16
- :blackberry => ['BlackBerry']
16
+ :blackberry => ['BlackBerry'],
17
+ :android => ['ViewPad7']
17
18
  }
18
19
 
19
20
  def initialize(*specific_keys)
data/rakefile CHANGED
@@ -1,16 +1,24 @@
1
+ # -*- coding: utf-8 -*-
1
2
  require 'rubygems'
2
3
  require 'rake'
3
- require 'spec/rake/spectask'
4
- require 'rake/rdoctask'
4
+ require 'rspec'
5
+ require 'rspec/core/rake_task'
6
+ require 'yard'
7
+ require 'rcov'
5
8
 
6
9
  desc 'Default: run rspec tests.'
7
10
  task :default => :spec
8
11
 
9
12
  desc 'Run all tests'
10
- Spec::Rake::SpecTask.new(:spec) do |t|
11
- t.spec_files = Dir.glob('test/*_test.rb')
12
- t.spec_opts << '--format specdoc'
13
+ RSpec::Core::RakeTask.new(:specs) do |t|
14
+ t.rspec_opts = ["--colour", "--format", "documentation"]
15
+ end
16
+
17
+ desc 'Coverage for all specs'
18
+ RSpec::Core::RakeTask.new(:rcov) do |t|
13
19
  t.rcov = true
20
+ t.rcov_opts = %q[--exclude "spec"]
21
+ t.verbose = true
14
22
  end
15
23
 
16
24
  begin
@@ -27,25 +35,15 @@ begin
27
35
  rescue LoadError
28
36
  end
29
37
 
30
- begin
31
- require 'darkfish-rdoc'
32
- DARKFISH_ENABLED = true
33
- rescue LoadError => ex
34
- DARKFISH_ENABLED = false
38
+ YARD::Rake::YardocTask.new do |t|
39
+ t.options += ['--title', "Uagent documentation"]
35
40
  end
36
41
 
37
- BASE_RDOC_OPTIONS = [
38
- '--line-numbers', '--inline-source',
39
- '--main' , 'README.rdoc',
40
- '--title', 'uagent'
41
- ]
42
-
43
- rd = Rake::RDocTask.new do |rdoc|
44
- rdoc.rdoc_dir = 'html'
45
- rdoc.title = "uagent"
46
- rdoc.options = BASE_RDOC_OPTIONS.dup
47
- rdoc.options << '-SHN' << '-f' << 'darkfish' if DARKFISH_ENABLED
48
- rdoc.options << '--charset' << 'utf-8'
49
- rdoc.rdoc_files.include('README.rdoc')
50
- rdoc.rdoc_files.include('lib/**/*.rb', 'doc/**/*.rdoc')
42
+ desc 'Build and upload the last gem file'
43
+ task :gem_push => :build do
44
+ gem = Dir['pkg/*.gem'].map { |f|
45
+ [f, File.basename(f).gsub(/.gem$/, '').gsub(/^uagent-/, '').split('.').map{ |x| x.to_i}]
46
+ }.sort.last
47
+ puts "gem push #{gem[0]}"
48
+ system "gem push #{gem[0]}"
51
49
  end
@@ -1,4 +1,5 @@
1
1
  require 'rubygems'
2
+ require 'rspec'
2
3
  require 'uagent'
3
4
 
4
5
  describe 'UAgent::Parser' do
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uagent
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 23
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
8
  - 0
8
- - 3
9
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
10
11
  platform: ruby
11
12
  authors:
12
13
  - "Daniel Hern\xC3\xA1ndez"
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-09-24 00:00:00 -04:00
18
+ date: 2011-09-05 00:00:00 -03:00
18
19
  default_executable:
19
20
  dependencies: []
20
21
 
@@ -31,36 +32,40 @@ files:
31
32
  - VERSION
32
33
  - lib/uagent.rb
33
34
  - rakefile
34
- - test/parser_test.rb
35
+ - spec/parser_spec.rb
35
36
  has_rdoc: true
36
37
  homepage: http://github.com/danielhz/uagent
37
38
  licenses: []
38
39
 
39
40
  post_install_message:
40
- rdoc_options:
41
- - --charset=UTF-8
41
+ rdoc_options: []
42
+
42
43
  require_paths:
43
44
  - lib
44
45
  required_ruby_version: !ruby/object:Gem::Requirement
46
+ none: false
45
47
  requirements:
46
48
  - - ">="
47
49
  - !ruby/object:Gem::Version
50
+ hash: 3
48
51
  segments:
49
52
  - 0
50
53
  version: "0"
51
54
  required_rubygems_version: !ruby/object:Gem::Requirement
55
+ none: false
52
56
  requirements:
53
57
  - - ">="
54
58
  - !ruby/object:Gem::Version
59
+ hash: 3
55
60
  segments:
56
61
  - 0
57
62
  version: "0"
58
63
  requirements: []
59
64
 
60
65
  rubyforge_project: uagent
61
- rubygems_version: 1.3.6
66
+ rubygems_version: 1.5.0
62
67
  signing_key:
63
68
  specification_version: 3
64
69
  summary: Helps you to develop web applications for diferent user agents
65
70
  test_files:
66
- - test/parser_test.rb
71
+ - spec/parser_spec.rb