spy-vs-spy 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/lib/spy-vs-spy.rb CHANGED
@@ -1,13 +1,25 @@
1
1
  =begin
2
2
  Copyright notice
3
3
  =============================================================================
4
- Copyright (c) 2008-2009 Soldier Of Code
5
-
6
- Material published by Soldier Of Code in this file is copyright Soldier Of Code
7
- and may not be reproduced without permission. Copyright exists in all other
8
- original material published on the internet by employees of Soldier Of Code and
9
- may belong to the author or to Soldier Of Code. depending on the circumstances of
10
- publication.
4
+ Copyright (c) 2009 Kristan 'Krispy' Uccello <krispy@soldierofcode.com> - Soldier Of Code
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in
14
+ all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ THE SOFTWARE.
11
23
  ==============================================================================
12
24
 
13
25
  This middleware is based on work initialy done by Jackson Miller with his
@@ -33,7 +45,7 @@ module SoldierOfCode
33
45
 
34
46
  class SpyVsSpy
35
47
 
36
- def initialize(app)
48
+ def initialize(app=nil)
37
49
  @app = app
38
50
  end
39
51
 
@@ -50,9 +62,7 @@ module SoldierOfCode
50
62
  ParseUserAgent.new.parse(agent)
51
63
  end
52
64
 
53
- end
54
-
55
- class ParseUserAgent
65
+
56
66
 
57
67
  @@safari = {
58
68
  "1.0" => ["85.5", "85.6", "85.7"],
@@ -409,198 +419,5 @@ module SoldierOfCode
409
419
  def process_netscape(agent)
410
420
 
411
421
  end
412
-
413
- =begin
414
-
415
- def known_browser(browser)
416
-
417
- browsers = %w[ Firefox Safari MSIE ]
418
- flag = false
419
- browsers.each do |b|
420
- flag = true if b == browser
421
- end
422
-
423
- flag
424
- end
425
-
426
- def known_safari_agent_string(string)
427
- agents = []
428
- agents << "AppleWebKit"
429
- agents << "iPhone"
430
-
431
- agents.each do |agent|
432
- return true if string.include?(agent)
433
- end
434
- false
435
- end
436
-
437
- def mobile_browser?(string)
438
- agents = []
439
- agents << "iPhone"
440
-
441
- agents.each do |agent|
442
- if string.include?(agent)
443
- @mobile_browser = agent
444
- return true
445
- end
446
- end
447
- false
448
- end
449
-
450
- def console_browser?(string)
451
- agents = []
452
-
453
- agents.each do |agent|
454
- if string.include?(agent)
455
- @console_browser = agent
456
- return true
457
- end
458
- end
459
- false
460
- end
461
-
462
- def is_safari?(str)
463
- s = []
464
- s << "iPhone"
465
- s << "Safari"
466
-
467
- flag = false
468
- s.each do |st|
469
- flag = true if str.include?(st)
470
- end
471
- flag
472
- end
473
-
474
- def parse(user_agent)
475
- if '-' == user_agent
476
- raise 'Invalid User Agent'
477
- end
478
-
479
- @user_agent = user_agent
480
-
481
- # fix Opera
482
- #useragent =~ s/Opera (\d)/Opera\/$1/i;
483
- useragent = @user_agent.gsub(/(Opera [\d])/, 'Opera\1')
484
-
485
- # grab all Agent/version strings as 'agents'
486
- @agents = Array.new
487
- @user_agent.split(/\s+/).each {|string|
488
- if string =~ /\//
489
- @agents<< string
490
- end
491
- }
492
-
493
- # cycle through the agents to set browser and version (MSIE is set later)
494
- if @agents && @agents.length > 0
495
- @agents.each {|agent|
496
-
497
- parts = agent.split('/')
498
- @browser = parts[0]
499
- @browser_version = parts[1]
500
-
501
- if @browser == 'Firefox'
502
- @browser_version_major = parts[1].slice(0, 3)
503
- @browser_version_minor = parts[1].sub(@browser_version_major, '').sub('.', '')
504
-
505
- elsif @browser == 'Safari'
506
- rx = Regexp.new("Version/([0-9]+)\.([0-9]+)\.([0-9]+)")
507
- rx.match(user_agent)
508
-
509
- @browser_version_major = $1
510
- @browser_version_minor = $2
511
- @browser_version_sub = $3
512
-
513
- unless $1
514
-
515
- v1_0_3 = []
516
- v1_0_3 << "85.8.1"
517
- v1_0_3 << "85"
518
- v1_0_3 << "85.8"
519
-
520
-
521
- vs = parts[1].split("\.")
522
- vs1 = vs[0].to_i
523
- if vs1 < 126
524
- @browser_version_major = '1'
525
-
526
- if vs[1].to_i < 8
527
- @browser_version_minor = '0'
528
- @browser_version_sub = '0'
529
- elsif vs[1].to_i >= 8
530
- @browser_version_minor = '0'
531
- @browser_version_sub = '3'
532
- end
533
-
534
- end
535
-
536
- end
537
-
538
- else
539
- # puts "#{__FILE__}:#{__LINE__} #{__method__} here---"
540
- @browser_version_major = parts[1].slice(0, 1)
541
- end
542
- }
543
- end
544
-
545
-
546
- if !known_browser(@browser) then
547
-
548
- @browser = 'Safari' if is_safari?(user_agent) || known_safari_agent_string(user_agent)
549
-
550
- end
551
-
552
- # I'm thinking of making this a lazy call....
553
- mobile_browser?(user_agent)
554
- console_browser?(user_agent)
555
-
556
- # grab all of the properties (within parens)
557
- # should be in relation to the agent if possible
558
- @detail = @user_agent
559
- @user_agent.gsub(/\((.*)\)/, '').split(/\s/).each {|part| @detail = @detail.gsub(part, '')}
560
- @detail = @detail.gsub('(', '').gsub(')', '').lstrip
561
- @properties = @detail.split(/;\s+/)
562
-
563
- # cycle through the properties to set known quantities
564
- @properties.each {|property|
565
- if property =~ /^Win/
566
- @ostype = 'Windows'
567
- @os = property
568
- if parts = property.split(/ /, 2)
569
- if parts[1] =~ /^NT/
570
- @ostype = 'Windows'
571
- subparts = parts[1].split(/ /, 2)
572
- if subparts[1] == '5'
573
- @os_version = '2000'
574
- elsif subparts[1] == '5.1'
575
- @os_version = 'XP'
576
- else
577
- @os_version = subparts[1]
578
- end
579
- end
580
- end
581
- end
582
- if property == 'Macintosh'
583
- @ostype = 'Macintosh'
584
- @os = property
585
- end
586
- if property =~ /OS X/
587
- @ostype = 'Macintosh'
588
- @os_version = 'OS X'
589
- @os = property
590
- end
591
- if property =~ /^Linux/
592
- @ostype = 'Linux'
593
- @os = property
594
- end
595
- if property =~ /^MSIE/
596
- @browser = 'MSIE'
597
- @browser_version = property.gsub('MSIE ', '').lstrip
598
- @browser_version_major, @browser_version_minor = @browser_version.split('.')
599
- end
600
- }
601
- self
602
- end
603
-
604
- =end
605
422
  end
606
423
  end
data/spy-vs-spy.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "spy-vs-spy"
3
- s.version = "0.0.3"
3
+ s.version = "0.0.4"
4
4
  s.date = "2009-11-23"
5
5
  s.summary = "UserAgent Detection Middleware for Rack."
6
6
  s.email = "kaptiankrispy@soldierofcode.com"
data/test/ss-test.rb CHANGED
@@ -35,7 +35,7 @@ class SpyVsSpyTest < Test::Unit::TestCase
35
35
  while (line = file.gets)
36
36
 
37
37
  # puts "#{__FILE__}:#{__LINE__} #{__method__} #{line}"
38
- r = SoldierOfCode::ParseUserAgent.new.parse(line)
38
+ r = SoldierOfCode::SpyVsSpy.new.parse(line)
39
39
  # puts "#{__FILE__}:#{__LINE__} #{__method__} BROWSER: #{r.browser}"
40
40
  assert r.browser == 'Safari'
41
41
 
@@ -82,7 +82,7 @@ class SpyVsSpyTest < Test::Unit::TestCase
82
82
  while (line = file.gets)
83
83
 
84
84
  # puts "#{__FILE__}:#{__LINE__} #{__method__} #{line}"
85
- r = SoldierOfCode::ParseUserAgent.new.parse(line)
85
+ r = SoldierOfCode::SpyVsSpy.new.parse(line)
86
86
  # puts "#{__FILE__}:#{__LINE__} #{__method__} BROWSER: #{r.browser}"
87
87
  assert r.browser == 'Firefox'
88
88
 
@@ -129,7 +129,7 @@ class SpyVsSpyTest < Test::Unit::TestCase
129
129
  while (line = file.gets)
130
130
 
131
131
  # puts "#{__FILE__}:#{__LINE__} #{__method__} #{line}"
132
- r = SoldierOfCode::ParseUserAgent.new.parse(line)
132
+ r = SoldierOfCode::SpyVsSpy.new.parse(line)
133
133
  # puts "#{__FILE__}:#{__LINE__} #{__method__} BROWSER: #{r.browser}"
134
134
  assert r.browser == 'MSIE'
135
135
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spy-vs-spy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kristan 'Krispy' Uccello