wurfl_device 0.1.1 → 0.1.2
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/lib/wurfl_device/constants.rb +3 -0
- data/lib/wurfl_device/user_agent_matcher.rb +29 -25
- data/lib/wurfl_device/version.rb +1 -1
- metadata +23 -23
| @@ -18,6 +18,8 @@ module WurflDevice | |
| 18 18 | 
             
                WURFL_USER_AGENTS             = "wurfl:user_agents"
         | 
| 19 19 | 
             
                WURFL_USER_AGENTS_CACHED      = "wurfl:user_agents_cached"
         | 
| 20 20 |  | 
| 21 | 
            +
                WORST_MATCH                   = 7
         | 
| 22 | 
            +
             | 
| 21 23 | 
             
                MOBILE_BROWSERS   =  [
         | 
| 22 24 | 
             
                  'cldc', 'symbian', 'midp', 'j2me', 'mobile', 'wireless', 'palm', 'phone', 'pocket pc', 'pocketpc', 'netfront',
         | 
| 23 25 | 
             
                  'bolt', 'iris', 'brew', 'openwave', 'windows ce', 'wap2.', 'android', 'opera mini', 'opera mobi', 'maemo', 'fennec',
         | 
| @@ -26,5 +28,6 @@ module WurflDevice | |
| 26 28 |  | 
| 27 29 | 
             
                ROBOTS            = [ 'bot', 'crawler', 'spider', 'novarra', 'transcoder', 'yahoo! searchmonkey', 'yahoo! slurp', 'feedfetcher-google', 'toolbar', 'mowser' ]
         | 
| 28 30 | 
             
                DESKTOP_BROWSERS  = [ 'slcc1', '.net clr', 'wow64', 'media center pc', 'funwebproducts', 'macintosh', 'aol 9.', 'america online browser', 'googletoolbar' ]
         | 
| 31 | 
            +
             | 
| 29 32 | 
             
              end
         | 
| 30 33 | 
             
            end
         | 
| @@ -15,26 +15,25 @@ module WurflDevice | |
| 15 15 | 
             
                  return self if !@device.nil? && @device.is_valid?
         | 
| 16 16 |  | 
| 17 17 | 
             
                  # ris match
         | 
| 18 | 
            -
                  user_agent = @user_agent.cleaned
         | 
| 19 18 | 
             
                  if @device.nil?
         | 
| 20 | 
            -
                    index_matcher = get_index(user_agent)
         | 
| 19 | 
            +
                    index_matcher = get_index(@user_agent)
         | 
| 21 20 | 
             
                    matcher = "matcher_#{index_matcher.downcase}"
         | 
| 22 21 | 
             
                    if self.respond_to?(matcher)
         | 
| 23 | 
            -
                      self.send(matcher, user_agent) 
         | 
| 22 | 
            +
                      self.send(matcher, @user_agent) 
         | 
| 24 23 | 
             
                    else
         | 
| 25 | 
            -
                      if user_agent =~ /^Mozilla/i
         | 
| 24 | 
            +
                      if @user_agent =~ /^Mozilla/i
         | 
| 26 25 | 
             
                        tolerance = 5
         | 
| 27 | 
            -
                        @device = ld_match(user_agent, tolerance)
         | 
| 26 | 
            +
                        @device = ld_match(@user_agent, tolerance)
         | 
| 28 27 | 
             
                      else
         | 
| 29 | 
            -
                        tolerance = user_agent.first_slash
         | 
| 30 | 
            -
                        @device = ris_match(user_agent, tolerance)
         | 
| 28 | 
            +
                        tolerance = @user_agent.first_slash
         | 
| 29 | 
            +
                        @device = ris_match(@user_agent, tolerance)
         | 
| 31 30 | 
             
                      end
         | 
| 32 31 | 
             
                    end
         | 
| 33 32 | 
             
                  end
         | 
| 34 33 |  | 
| 35 34 | 
             
                  # last attempts
         | 
| 36 35 | 
             
                  if @device.nil?
         | 
| 37 | 
            -
                    last_attempts(user_agent)
         | 
| 36 | 
            +
                    last_attempts(@user_agent)
         | 
| 38 37 | 
             
                  end
         | 
| 39 38 |  | 
| 40 39 | 
             
                  WurflDevice.save_device_in_ua_cache(@user_agent, @device)
         | 
| @@ -42,7 +41,8 @@ module WurflDevice | |
| 42 41 | 
             
                  return self
         | 
| 43 42 | 
             
                end
         | 
| 44 43 |  | 
| 45 | 
            -
                def ris_match(user_agent, tolerance)
         | 
| 44 | 
            +
                def ris_match(user_agent, tolerance=nil)
         | 
| 45 | 
            +
                  tolerance = WurflDevice::Constants::WORST_MATCH if tolerance.nil?
         | 
| 46 46 | 
             
                  device = nil
         | 
| 47 47 | 
             
                  user_agent_list = WurflDevice.get_user_agents_in_index(get_index(user_agent))
         | 
| 48 48 | 
             
                  curlen = user_agent.length
         | 
| @@ -62,7 +62,7 @@ module WurflDevice | |
| 62 62 | 
             
                end
         | 
| 63 63 |  | 
| 64 64 | 
             
                def ld_match(user_agent, tolerance=nil)
         | 
| 65 | 
            -
                  tolerance =  | 
| 65 | 
            +
                  tolerance = WurflDevice::Constants::WORST_MATCH if tolerance.nil?
         | 
| 66 66 | 
             
                  device = nil
         | 
| 67 67 | 
             
                  user_agent_list = WurflDevice.get_user_agents_in_index(get_index(user_agent))
         | 
| 68 68 |  | 
| @@ -140,7 +140,7 @@ module WurflDevice | |
| 140 140 | 
             
                  return 'CatchAll'
         | 
| 141 141 | 
             
                end
         | 
| 142 142 |  | 
| 143 | 
            -
               | 
| 143 | 
            +
              protected
         | 
| 144 144 | 
             
                # user agent matchers
         | 
| 145 145 | 
             
                def last_attempts(user_agent)
         | 
| 146 146 | 
             
                  device_id = case
         | 
| @@ -196,12 +196,13 @@ module WurflDevice | |
| 196 196 | 
             
                end
         | 
| 197 197 |  | 
| 198 198 | 
             
                # mobile user agents
         | 
| 199 | 
            -
                def  | 
| 199 | 
            +
                def matcher_nokia(user_agent)
         | 
| 200 200 | 
             
                  tolerance = user_agent.index_of_or_length(['/', ' '], user_agent.index('Nokia'))
         | 
| 201 201 | 
             
                  @device = ris_match(user_agent, tolerance)
         | 
| 202 202 | 
             
                end
         | 
| 203 203 |  | 
| 204 204 | 
             
                def matcher_samsung(user_agent)
         | 
| 205 | 
            +
                  tolerance = 0
         | 
| 205 206 | 
             
                  if user_agent.starts_with('SAMSUNG') || user_agent.starts_with('SEC-') || user_agent.starts_with('SCH-')
         | 
| 206 207 | 
             
                    tolerance = user_agent.first_slash
         | 
| 207 208 | 
             
                  elsif user_agent.starts_with('Samsung') || user_agent.starts_with('SPH') || user_agent.starts_with('SGH')
         | 
| @@ -222,6 +223,7 @@ module WurflDevice | |
| 222 223 | 
             
                end
         | 
| 223 224 |  | 
| 224 225 | 
             
                def matcher_blackberry(user_agent)
         | 
| 226 | 
            +
                  tolerance = 0
         | 
| 225 227 | 
             
                  if user_agent.starts_with('BlackBerry')
         | 
| 226 228 | 
             
                    tolerance = user_agent.ordinal_index_of(';', 3)
         | 
| 227 229 | 
             
                  else
         | 
| @@ -257,13 +259,13 @@ module WurflDevice | |
| 257 259 | 
             
                end
         | 
| 258 260 |  | 
| 259 261 | 
             
                def matcher_sonyericsson(user_agent)
         | 
| 262 | 
            +
                  tolerance = 0
         | 
| 260 263 | 
             
                  if user_agent.starts_with('SonyEricsson')
         | 
| 261 264 | 
             
                    tolerance = user_agent.first_slash - 1
         | 
| 262 | 
            -
                    @device = ris_match(user_agent, tolerance)
         | 
| 263 265 | 
             
                  else
         | 
| 264 266 | 
             
                    tolerance = user_agent.second_slash
         | 
| 265 | 
            -
                    @device = ris_match(user_agent, tolerance)
         | 
| 266 267 | 
             
                  end
         | 
| 268 | 
            +
                  @device = ris_match(user_agent, tolerance)
         | 
| 267 269 | 
             
                  if @device.nil?
         | 
| 268 270 | 
             
                    tolerance = 14
         | 
| 269 271 | 
             
                    @device = ris_match(user_agent, tolerance)
         | 
| @@ -288,11 +290,12 @@ module WurflDevice | |
| 288 290 | 
             
                end
         | 
| 289 291 |  | 
| 290 292 | 
             
                def matcher_apple(user_agent)
         | 
| 293 | 
            +
                  tolerance = 0
         | 
| 291 294 | 
             
                  if user_agent.starts_with('Apple')
         | 
| 292 | 
            -
                    tolerance = user_agent.ordinal_index_of(' ')
         | 
| 295 | 
            +
                    tolerance = user_agent.ordinal_index_of(' ', 3)
         | 
| 293 296 | 
             
                    tolerance = user_agent.length if tolerance == -1
         | 
| 294 297 | 
             
                  else
         | 
| 295 | 
            -
                    tolerance = user_agent.ordinal_index_of(';')
         | 
| 298 | 
            +
                    tolerance = user_agent.ordinal_index_of(';', 0)
         | 
| 296 299 | 
             
                  end
         | 
| 297 300 | 
             
                  @device = ris_match(user_agent, tolerance)
         | 
| 298 301 | 
             
                  if @device.nil?
         | 
| @@ -316,6 +319,7 @@ module WurflDevice | |
| 316 319 | 
             
                end
         | 
| 317 320 |  | 
| 318 321 | 
             
                def matcher_docomo(user_agent)
         | 
| 322 | 
            +
                  tolerance = 0
         | 
| 319 323 | 
             
                  if user_agent.num_slashes >= 2
         | 
| 320 324 | 
             
                    tolerance = user_agent.second_slash
         | 
| 321 325 | 
             
                  else
         | 
| @@ -349,13 +353,13 @@ module WurflDevice | |
| 349 353 | 
             
                end
         | 
| 350 354 |  | 
| 351 355 | 
             
                def matcher_kddi(user_agent)
         | 
| 356 | 
            +
                  tolerance = 0
         | 
| 352 357 | 
             
                  if user_agent.starts_with('KDDI/')
         | 
| 353 358 | 
             
                    tolerance = user_agent.second_slash
         | 
| 354 | 
            -
                    @device = ris_match(user_agent, tolerance)
         | 
| 355 359 | 
             
                  else
         | 
| 356 360 | 
             
                    tolerance = user_agent.first_slash
         | 
| 357 | 
            -
                    @device = ris_match(user_agent, tolerance)
         | 
| 358 361 | 
             
                  end
         | 
| 362 | 
            +
                  @device = ris_match(user_agent, tolerance)
         | 
| 359 363 | 
             
                  if @device.nil?
         | 
| 360 364 | 
             
                    @device = Device.new('opwv_v62_generic')
         | 
| 361 365 | 
             
                  end
         | 
| @@ -412,13 +416,12 @@ module WurflDevice | |
| 412 416 | 
             
                end
         | 
| 413 417 |  | 
| 414 418 | 
             
                def matcher_pantech(user_agent)
         | 
| 415 | 
            -
                   | 
| 416 | 
            -
             | 
| 417 | 
            -
                    @device = ld_match(user_agent, tolerance)
         | 
| 418 | 
            -
                  else
         | 
| 419 | 
            +
                  tolerance = 5
         | 
| 420 | 
            +
                  if !user_agent.starts_with('Pantech')
         | 
| 419 421 | 
             
                    tolerance = user_agent.first_slash
         | 
| 420 422 | 
             
                    @device = ris_match(user_agent, tolerance)
         | 
| 421 423 | 
             
                  end
         | 
| 424 | 
            +
                  @device = ris_match(user_agent, tolerance)
         | 
| 422 425 | 
             
                end
         | 
| 423 426 |  | 
| 424 427 | 
             
                def matcher_philips(user_agent)
         | 
| @@ -540,10 +543,11 @@ module WurflDevice | |
| 540 543 | 
             
                      'msie'
         | 
| 541 544 | 
             
                    end
         | 
| 542 545 | 
             
                    @device = Device.new(device_id)
         | 
| 546 | 
            +
                  else
         | 
| 547 | 
            +
                    user_agent.sub!(/( \.NET CLR [\d\.]+;?| Media Center PC [\d\.]+;?| OfficeLive[a-zA-Z0-9\.\d]+;?| InfoPath[\.\d]+;?)/, '')
         | 
| 548 | 
            +
                    tolerance = user_agent.first_slash
         | 
| 549 | 
            +
                    @device = ris_match(user_agent, tolerance)
         | 
| 543 550 | 
             
                  end
         | 
| 544 | 
            -
                  user_agent.sub!(/( \.NET CLR [\d\.]+;?| Media Center PC [\d\.]+;?| OfficeLive[a-zA-Z0-9\.\d]+;?| InfoPath[\.\d]+;?)/, '')
         | 
| 545 | 
            -
                  tolerance = user_agent.first_slash
         | 
| 546 | 
            -
                  @device = ris_match(user_agent, tolerance)
         | 
| 547 551 | 
             
                  if @device.nil?
         | 
| 548 552 | 
             
                    if user_agent.contains(['SLCC1', 'Media Center PC', '.NET CLR', 'OfficeLiveConnector'])
         | 
| 549 553 | 
             
                      @device = Device.new(WurfDevice::Constants::GENERIC_WEB_BROWSER)
         | 
    
        data/lib/wurfl_device/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: wurfl_device
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.2
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -13,7 +13,7 @@ date: 2011-10-06 00:00:00.000000000 Z | |
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: thor
         | 
| 16 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &254521320 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ! '>='
         | 
| @@ -21,10 +21,10 @@ dependencies: | |
| 21 21 | 
             
                    version: '0'
         | 
| 22 22 | 
             
              type: :runtime
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *254521320
         | 
| 25 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 26 | 
             
              name: nokogiri
         | 
| 27 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &254520740 !ruby/object:Gem::Requirement
         | 
| 28 28 | 
             
                none: false
         | 
| 29 29 | 
             
                requirements:
         | 
| 30 30 | 
             
                - - ! '>='
         | 
| @@ -32,10 +32,10 @@ dependencies: | |
| 32 32 | 
             
                    version: '0'
         | 
| 33 33 | 
             
              type: :runtime
         | 
| 34 34 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *254520740
         | 
| 36 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 37 | 
             
              name: redis
         | 
| 38 | 
            -
              requirement: & | 
| 38 | 
            +
              requirement: &254519960 !ruby/object:Gem::Requirement
         | 
| 39 39 | 
             
                none: false
         | 
| 40 40 | 
             
                requirements:
         | 
| 41 41 | 
             
                - - ! '>='
         | 
| @@ -43,10 +43,10 @@ dependencies: | |
| 43 43 | 
             
                    version: '0'
         | 
| 44 44 | 
             
              type: :runtime
         | 
| 45 45 | 
             
              prerelease: false
         | 
| 46 | 
            -
              version_requirements: * | 
| 46 | 
            +
              version_requirements: *254519960
         | 
| 47 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 48 48 | 
             
              name: text
         | 
| 49 | 
            -
              requirement: & | 
| 49 | 
            +
              requirement: &254519080 !ruby/object:Gem::Requirement
         | 
| 50 50 | 
             
                none: false
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - ! '>='
         | 
| @@ -54,10 +54,10 @@ dependencies: | |
| 54 54 | 
             
                    version: '0'
         | 
| 55 55 | 
             
              type: :runtime
         | 
| 56 56 | 
             
              prerelease: false
         | 
| 57 | 
            -
              version_requirements: * | 
| 57 | 
            +
              version_requirements: *254519080
         | 
| 58 58 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 59 59 | 
             
              name: bundler
         | 
| 60 | 
            -
              requirement: & | 
| 60 | 
            +
              requirement: &254518340 !ruby/object:Gem::Requirement
         | 
| 61 61 | 
             
                none: false
         | 
| 62 62 | 
             
                requirements:
         | 
| 63 63 | 
             
                - - ! '>='
         | 
| @@ -65,10 +65,10 @@ dependencies: | |
| 65 65 | 
             
                    version: 1.0.10
         | 
| 66 66 | 
             
              type: :development
         | 
| 67 67 | 
             
              prerelease: false
         | 
| 68 | 
            -
              version_requirements: * | 
| 68 | 
            +
              version_requirements: *254518340
         | 
| 69 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 70 | 
             
              name: rake
         | 
| 71 | 
            -
              requirement: & | 
| 71 | 
            +
              requirement: &254517820 !ruby/object:Gem::Requirement
         | 
| 72 72 | 
             
                none: false
         | 
| 73 73 | 
             
                requirements:
         | 
| 74 74 | 
             
                - - ! '>='
         | 
| @@ -76,10 +76,10 @@ dependencies: | |
| 76 76 | 
             
                    version: 0.9.2
         | 
| 77 77 | 
             
              type: :development
         | 
| 78 78 | 
             
              prerelease: false
         | 
| 79 | 
            -
              version_requirements: * | 
| 79 | 
            +
              version_requirements: *254517820
         | 
| 80 80 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 81 81 | 
             
              name: rspec-core
         | 
| 82 | 
            -
              requirement: & | 
| 82 | 
            +
              requirement: &254517120 !ruby/object:Gem::Requirement
         | 
| 83 83 | 
             
                none: false
         | 
| 84 84 | 
             
                requirements:
         | 
| 85 85 | 
             
                - - ~>
         | 
| @@ -87,10 +87,10 @@ dependencies: | |
| 87 87 | 
             
                    version: '2.0'
         | 
| 88 88 | 
             
              type: :development
         | 
| 89 89 | 
             
              prerelease: false
         | 
| 90 | 
            -
              version_requirements: * | 
| 90 | 
            +
              version_requirements: *254517120
         | 
| 91 91 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 92 92 | 
             
              name: rspec-expectations
         | 
| 93 | 
            -
              requirement: & | 
| 93 | 
            +
              requirement: &254516080 !ruby/object:Gem::Requirement
         | 
| 94 94 | 
             
                none: false
         | 
| 95 95 | 
             
                requirements:
         | 
| 96 96 | 
             
                - - ~>
         | 
| @@ -98,10 +98,10 @@ dependencies: | |
| 98 98 | 
             
                    version: '2.0'
         | 
| 99 99 | 
             
              type: :development
         | 
| 100 100 | 
             
              prerelease: false
         | 
| 101 | 
            -
              version_requirements: * | 
| 101 | 
            +
              version_requirements: *254516080
         | 
| 102 102 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 103 103 | 
             
              name: rr
         | 
| 104 | 
            -
              requirement: & | 
| 104 | 
            +
              requirement: &254515280 !ruby/object:Gem::Requirement
         | 
| 105 105 | 
             
                none: false
         | 
| 106 106 | 
             
                requirements:
         | 
| 107 107 | 
             
                - - ~>
         | 
| @@ -109,10 +109,10 @@ dependencies: | |
| 109 109 | 
             
                    version: '1.0'
         | 
| 110 110 | 
             
              type: :development
         | 
| 111 111 | 
             
              prerelease: false
         | 
| 112 | 
            -
              version_requirements: * | 
| 112 | 
            +
              version_requirements: *254515280
         | 
| 113 113 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 114 114 | 
             
              name: faker
         | 
| 115 | 
            -
              requirement: & | 
| 115 | 
            +
              requirement: &254493140 !ruby/object:Gem::Requirement
         | 
| 116 116 | 
             
                none: false
         | 
| 117 117 | 
             
                requirements:
         | 
| 118 118 | 
             
                - - ~>
         | 
| @@ -120,10 +120,10 @@ dependencies: | |
| 120 120 | 
             
                    version: '0.9'
         | 
| 121 121 | 
             
              type: :development
         | 
| 122 122 | 
             
              prerelease: false
         | 
| 123 | 
            -
              version_requirements: * | 
| 123 | 
            +
              version_requirements: *254493140
         | 
| 124 124 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 125 125 | 
             
              name: simplecov
         | 
| 126 | 
            -
              requirement: & | 
| 126 | 
            +
              requirement: &254492660 !ruby/object:Gem::Requirement
         | 
| 127 127 | 
             
                none: false
         | 
| 128 128 | 
             
                requirements:
         | 
| 129 129 | 
             
                - - ~>
         | 
| @@ -131,7 +131,7 @@ dependencies: | |
| 131 131 | 
             
                    version: 0.5.3
         | 
| 132 132 | 
             
              type: :development
         | 
| 133 133 | 
             
              prerelease: false
         | 
| 134 | 
            -
              version_requirements: * | 
| 134 | 
            +
              version_requirements: *254492660
         | 
| 135 135 | 
             
            description: Ruby client library for mobile handset detection
         | 
| 136 136 | 
             
            email:
         | 
| 137 137 | 
             
            - ahutalla@gmail.com
         |