uaparser 1.0.0.pre.beta

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MTY0MzVjNGZlNzdhNjVkOTEyZGUyZDVmMTk0YWU3ODdhMTk4Y2FkNg==
5
+ data.tar.gz: !binary |-
6
+ NWZlNjJlOTgxMTg4OGRlYjZlYTkwNDM3Yjk1YjE4ZWU4NTMyNGRlNA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZjMxMzZiZjUyZjQwY2Q0YjhiZDEwYWE4MGYwNzViZjk0MjdlNGI3ZGIwNTYz
10
+ YTEzODVlZmEwZGYyYzUyODEyOTc0ZjQyOGVjOThjYzM3M2FiYjY5MGJmNGNh
11
+ OTc3NGQyNmUyZDZiNGQ1N2ViODZjNjMwODQwYzhmNmI4YmY4ZjM=
12
+ data.tar.gz: !binary |-
13
+ NzdhYjk1MjJmNGZjZTEwNThkZjVhY2M1ZDk2M2ZhYzE3ODk5NmZiZTkyMTM5
14
+ OGYzMGQxN2RmNzBkZjJiODIzYWE4Yzk3ZWNjMTk3ODVmOGZlNGVhNjdhYjAw
15
+ YzIyYTFmYmIzMjQ0NjE2ZTkxZjAxMWUzOWIyODk1MDNlNTI5ZDI=
data/.codeclimate.yml ADDED
@@ -0,0 +1,3 @@
1
+ languages:
2
+ Ruby: true
3
+
data/.gitignore ADDED
@@ -0,0 +1,27 @@
1
+ pecific to RubyMotion:
2
+ .dat*
3
+ .repl_history
4
+ build/
5
+
6
+ ## Documentation cache and generated files:
7
+ /.yardoc/
8
+ /_yardoc/
9
+ /doc/
10
+ /rdoc/
11
+
12
+ ## Environment normalisation:
13
+ /.bundle/
14
+ /vendor/bundle
15
+ /lib/bundler/man/
16
+
17
+ # for a library or gem, you might want to ignore these files since the code is
18
+ # intended to run in multiple environments; otherwise, check them in:
19
+ Gemfile.lock
20
+ .ruby-version
21
+ .ruby-gemset
22
+
23
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
24
+ .rvmrc
25
+
26
+ # Gems:
27
+ *.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem "codeclimate-test-reporter", group: :test, require: nil
6
+ gem 'rspec', :require => 'spec'
7
+
data/README.md ADDED
@@ -0,0 +1,48 @@
1
+ uaparser
2
+ ========
3
+
4
+ [![Gem Version](https://badge.fury.io/rb/uaparser.svg)](http://badge.fury.io/rb/uaparser)
5
+ [![Build Status](https://travis-ci.org/rfguri/uaparser.svg)](https://travis-ci.org/rfguri/uaparser)
6
+ [![Code Climate](https://codeclimate.com/github/rfguri/uaparser/badges/gpa.svg)](https://codeclimate.com/github/rfguri/uaparser)
7
+ [![Test Coverage](https://codeclimate.com/github/rfguri/uaparser/badges/coverage.svg)](https://codeclimate.com/github/rfguri/uaparser/coverage)
8
+ [![Documentation Status](http://inch-ci.org/github/rfguri/uaparser.png)](https://inch-ci.org/github/rfguri/uaparser)
9
+
10
+ uaparser is an apple user agent identifier build with Ruby to identify Apple device, model and iOS version based on User Agent strings.
11
+ This gem comes with a configuration file [`config.yaml`](https://github.com/rfguri/uaparser/blob/master/config/config.yml) updated
12
+ every time Apple issues a new User Agent string based on product releases.
13
+
14
+ Usage
15
+ ----
16
+
17
+ First of all install the gem with:
18
+
19
+ ```Shell
20
+ gem install uaparser
21
+ ```
22
+ or if you have a `Gemfile` run:
23
+ ```Shell
24
+ bundle install
25
+ ```
26
+ After installation you can require the gem with:
27
+
28
+ ```Ruby
29
+ require 'uaparser'
30
+ ```
31
+
32
+ Example
33
+ -------
34
+
35
+ ```Ruby
36
+ require 'uaparser'
37
+
38
+ parser = UAParser::Parser.new
39
+
40
+ puts parser.identify("Apple-iPhone7C2/1202.466") # This will output: "iPhone 6 CDMA iOS 8.1.3"
41
+ ```
42
+
43
+ License
44
+ -------
45
+
46
+ uaparser is Copyright © 2015 Roger Fernandez Guri. It is free software, and may be
47
+ redistributed under the terms specified in the [LICENCE](https://github.com/rfguri/uaparser/blob/master/LICENSE) file.
48
+
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec) do |t|
7
+ t.verbose = false
8
+ t.rspec_opts = "-fd"
9
+ end
10
+
11
+ task :default => :spec
data/config/config.yml ADDED
@@ -0,0 +1,105 @@
1
+ iphone: &iphone
2
+ prefix: &prefix
3
+ "Apple-iPhone": "iPhone 3G"
4
+ "Apple-iPhone1C2": "iPhone 3G"
5
+ "Apple-iPhone2C1": "iPhone 3GS"
6
+ "Apple-iPhone3C1": "iPhone 4 GSM"
7
+ "Apple-iPhone3C2": "iPhone 4 GSM"
8
+ "Apple-iPhone3C3": "iPhone 4 CDMA"
9
+ "Apple-iPhone4C1": "iPhone 4S"
10
+ "Apple-iPhone5C1": "iPhone 5 GSM"
11
+ "Apple-iPhone5C2": "iPhone 5 CDMA"
12
+ "Apple-iPhone5C3": "iPhone 5C GSM"
13
+ "Apple-iPhone5C4": "iPhone 5C CDMA"
14
+ "Apple-iPhone6C1": "iPhone 5S GSM"
15
+ "Apple-iPhone6C2": "iPhone 5S CDMA"
16
+ "Apple-iPhone7C1": "iPhone 6+ CDMA"
17
+ "Apple-iPhone7C2": "iPhone 6 CDMA"
18
+ id: &id
19
+ "501.347": "2.0"
20
+ "502.108": "2.0.1"
21
+ "503.001": "2.0.2"
22
+ "506.136": "2.1"
23
+ "505.138": "2.1.1"
24
+ "507.077": "2.2"
25
+ "508.11": "2.2.1"
26
+ "701.341": "3.0"
27
+ "701.400": "3.0.1"
28
+ "703.144": "3.1"
29
+ "704.011": "3.1.2"
30
+ "705.018": "3.1.3"
31
+ "801.293": "4.0"
32
+ "801.306": "4.0.1"
33
+ "801.400": "4.0.2"
34
+ "802.117": "4.1"
35
+ "803.148": "4.2.1"
36
+ "803.14800001": "4.2.1"
37
+ "805.128": "4.2.5"
38
+ "805.200": "4.2.6"
39
+ "805.303": "4.2.7"
40
+ "805.401": "4.2.8"
41
+ "805.501": "4.2.9"
42
+ "805.600": "4.2.10"
43
+ "807.4": "4.3.1"
44
+ "808.7": "4.3.2"
45
+ "810.2": "4.3.3"
46
+ "811.2": "4.3.4"
47
+ "812.1": "4.3.5"
48
+ "901.334": "5.0"
49
+ "901.405": "5.0.1"
50
+ "901.406": "5.0.1"
51
+ "902.179": "5.1"
52
+ "902.206": "5.1.1"
53
+ "1001.403": "6.0"
54
+ "1001.405": "6.0"
55
+ "1001.406": "6.0"
56
+ "1001.523": "6.0.1"
57
+ "1001.525": "6.0.1"
58
+ "1202.440": "8.1.2"
59
+ "1202.466": "8.1.3"
60
+ ipod:
61
+ prefix:
62
+ "Apple-iPod": "iPod touch 1st generation"
63
+ "Apple-iPod2C1": "iPod touch 2nd generation"
64
+ "Apple-iPod3C1": "iPod touch 3rd generation"
65
+ "Apple-iPod4C1": "iPod touch 4th generation"
66
+ "Apple-iPod5C1": "iPod touch 5th generation"
67
+ id:
68
+ <<: *id
69
+ "506.137": "2.1"
70
+ "507.07700001": "2.2"
71
+ "508.01100001": "2.2.1"
72
+ "703.145": "3.1"
73
+ "703.146": "3.1"
74
+ ipad:
75
+ prefix:
76
+ "Apple-iPad": "iPad"
77
+ "Apple-iPad1C1": "iPad"
78
+ "Apple-iPad2C1": "iPad 2 WiFi"
79
+ "Apple-iPad2C2": "iPad 2 WiFi 3G GSM"
80
+ "Apple-iPad2C3": "iPad 2 WiFi 3G CDMA"
81
+ "Apple-iPad2C4": "iPad Mini WiFi"
82
+ "Apple-iPad2C5": "iPad Mini WiFi LTE"
83
+ "Apple-iPad3C1": "iPad 3rd generation WiFi"
84
+ "Apple-iPad3C2": "iPad 3rd generation WiFi 4G Verizon / International"
85
+ "Apple-iPad3C3": "iPad 3rd generation WiFi 4G AT&T / International"
86
+ "Apple-iPad3C4": "iPad 4th generation WiFi"
87
+ "Apple-iPad3C5": "iPad 4th generation 4G GSM NA LTE"
88
+ "Apple-iPad3C6": "iPad 4th generation 4G CDMA LTE"
89
+ "Apple-iPad4C1": "iPad Air WiFi"
90
+ "Apple-iPad4C2": "iPad Air WiFi LTE"
91
+ "Apple-iPad4C4": "iPad Mini Retina WiFi"
92
+ "Apple-iPad4C5": "iPad Mini Retina WiFi LTE"
93
+ id:
94
+ <<: *id
95
+ "702.367": "3.2.2"
96
+ "702.405": "3.2.1"
97
+ "702.500": "3.2.2"
98
+ "803.148": "4.2.1"
99
+ "806.190": "4.3"
100
+ "806.191": "4.3"
101
+ "806.191": "4.3"
102
+ "806.191": "4.3"
103
+ "808.8": "4.3.2"
104
+ "810.3": "4.3.3"
105
+
data/example/Gemfile ADDED
@@ -0,0 +1 @@
1
+ gem 'uaparser', git:'git@github.com:rfguri/uaparser.git'
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'uaparser'
4
+
5
+ parser = UAParser::Parser.new
6
+
7
+ puts parser.identify("Apple-iPhone7C2/1202.466") # This will output: "iPhone 6 CDMA iOS 8.1.3"
@@ -0,0 +1,29 @@
1
+ # This module holds the classes to load
2
+ # configuration data and also identify
3
+ # user agent strings.
4
+ module UAParser
5
+
6
+ # This class holds the configuration funtions.
7
+ # The config method allows us to return a hash
8
+ # with all possible combinations of user agent
9
+ # strings with devices models and iOS versions.
10
+ class Config
11
+
12
+ # Constructor
13
+ def initialize
14
+ @config = YAML::load_file(File.expand_path('../../../config/config.yml', __FILE__))
15
+ end
16
+
17
+ # Return a hash with all configuration
18
+ # values.
19
+ #
20
+ # @return [Hash] instance of configuration
21
+ # hash.
22
+ def config
23
+ @config
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
@@ -0,0 +1,37 @@
1
+ # This module holds the classes to load
2
+ # configuration data and also identify
3
+ # user agent strings.
4
+ module UAParser
5
+
6
+ # This class holds the parsing funtions. The
7
+ # identify method allows us to identify model
8
+ # and version of the device and its operative
9
+ # system.
10
+ class Parser
11
+
12
+ # Constructor
13
+ def initialize
14
+ @config = UAParser::Config.new
15
+ end
16
+
17
+ # Runs a hash search, identifies the user
18
+ # agent strings and returns the device model
19
+ # and its iOS version.
20
+ #
21
+ # @param str [String] user agent string
22
+ # used to identify model and ios version.
23
+ # @return [String] the user agent string
24
+ # converted to model and iOS version.
25
+ def identify(str)
26
+ hash = @config.config
27
+ prefix, id = str.split("/")
28
+ device = prefix[/iPhone|iPod|iPad/,0].downcase
29
+ model = hash[device]["prefix"][prefix]
30
+ version = hash[device]["id"][id]
31
+ info = "#{model} iOS #{version}"
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
@@ -0,0 +1,6 @@
1
+ # This module holds the classes to load
2
+ # configuration data and also identify
3
+ # user agent strings.
4
+ module UAParser
5
+ VERSION = "1.0.0-beta" # Gem version
6
+ end
data/lib/uaparser.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'yaml'
2
+ require 'uaparser/parser'
3
+ require 'uaparser/config'
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe UAParser::Config do
4
+
5
+ it "loads configuration" do
6
+ config = UAParser::Config.new.config
7
+ expect(config).not_to eql(nil)
8
+ end
9
+
10
+
11
+ end
12
+
13
+ describe UAParser::Parser do
14
+
15
+ it "idenfies user agent strings" do
16
+ parser = UAParser::Parser.new
17
+ config = UAParser::Config.new.config
18
+ config.each do |_, hash|
19
+ hash["prefix"].each do |prefix, model|
20
+ hash["id"].each do |id, version|
21
+ output = "#{model} iOS #{version}"
22
+ info = parser.identify("#{prefix}/#{id}")
23
+ expect(output).to eql(info)
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ end
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require "codeclimate-test-reporter"
4
+ require 'uaparser'
5
+
6
+ CodeClimate::TestReporter.start
7
+
8
+ RSpec.configure do |config|
9
+ end
data/uaparser.gemspec ADDED
@@ -0,0 +1,21 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ require 'uaparser/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.authors = ["Roger Fernandez Guri"]
9
+ spec.email = ["rfguri@gmail.com"]
10
+ spec.summary = %q{Apple user agent parser gem wittern in Ruby.}
11
+ spec.description = %q{uaparser is an apple user agent identifier build with Ruby to identify Apple device, model and iOS version based on User Agent strings.}
12
+ spec.homepage = "https://rubygems.org/gems/uaparser"
13
+ spec.license = "MIT"
14
+ spec.files = `git ls-files`.split("\n")
15
+ spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ spec.name = "uaparser"
18
+ spec.require_paths = ["lib"]
19
+ spec.version = UAParser::VERSION
20
+ end
21
+
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: uaparser
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.pre.beta
5
+ platform: ruby
6
+ authors:
7
+ - Roger Fernandez Guri
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-19 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: uaparser is an apple user agent identifier build with Ruby to identify
14
+ Apple device, model and iOS version based on User Agent strings.
15
+ email:
16
+ - rfguri@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .codeclimate.yml
22
+ - .gitignore
23
+ - .rspec
24
+ - .travis.yml
25
+ - Gemfile
26
+ - README.md
27
+ - Rakefile
28
+ - config/config.yml
29
+ - example/Gemfile
30
+ - example/example.rb
31
+ - lib/uaparser.rb
32
+ - lib/uaparser/config.rb
33
+ - lib/uaparser/parser.rb
34
+ - lib/uaparser/version.rb
35
+ - spec/parser_spec.rb
36
+ - spec/spec_helper.rb
37
+ - uaparser.gemspec
38
+ homepage: https://rubygems.org/gems/uaparser
39
+ licenses:
40
+ - MIT
41
+ metadata: {}
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ! '>'
54
+ - !ruby/object:Gem::Version
55
+ version: 1.3.1
56
+ requirements: []
57
+ rubyforge_project:
58
+ rubygems_version: 2.4.3
59
+ signing_key:
60
+ specification_version: 4
61
+ summary: Apple user agent parser gem wittern in Ruby.
62
+ test_files: []
63
+ has_rdoc: