browserino 2.13.0 → 2.13.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6cd18f87571cf993db2a622396ebbbcf1dd5285f
4
- data.tar.gz: c075f89285dc8b08654ddd29d468b2932d57e73f
3
+ metadata.gz: f7199d14c4ac2db60bbc6ba1be03789ea29567cb
4
+ data.tar.gz: 5b028cf38dbc8d9ea29f68ba5ef60cafced8c931
5
5
  SHA512:
6
- metadata.gz: 3cfa196f9d7225e8876513b8857cedda14880b3693751fd9d46c887e47ed8ebd7787a65e44b973c3e4fa4dac08610c4d0d5a921c29b4512011a7ee9f7a948aa8
7
- data.tar.gz: aa6bb6cfbb1e7f3cda0dde31497ba723c55ab98fa31d4fe613b51406013c67bd6ea0aa098298287f6eb5d7d5515c002f5525df6b5df7e40c0415b2270bed13b6
6
+ metadata.gz: b23a6c4211ab6e8875e72e9fdf908a71b442ccee3a77cb846c76e8fb3729bdf3110bc359422a8537da628e0e44544e3c529bc5919325a4715dd8d4c6236a2cfe
7
+ data.tar.gz: c7b454d7eb0d602b634a6cddd73cccc4df9950cf3a62343b674939fc2da2caf31153c5bde1774ae3eb9f036be7f8f7f5b957ffdb488d72a248be1c4596ad52e9
data/README.md CHANGED
@@ -1,684 +1,3 @@
1
- # Browserino
1
+ # Readme
2
2
 
3
- A UserAgent sniffer with Rails >= 3.2.0 integration.
4
- The sniffer can currently identify 22 bots (of which 6 social media and 5 search engines), 17 browsers, 11 operating systems, 6 programming language UA's and 4 consoles.
5
-
6
- # DEPRECATION WARNING: Ruby < 2
7
-
8
- Browserino will be dropping support for Ruby versions less than 2 with the release of version `3`
9
- The planned release date for version `3` is on new years day (Jan 01, 2017).
10
-
11
- This breaking update will also remove the deprecated (and no longer used) second value that can be passed to `Browserino.new` which allowed you to return a custom value instead of the default `nil` if a property isn't set.
12
- **Rails** users can simply upgrade their version as long as they use Ruby `>= 2` or above since the custom return value was never used during initialization.
13
-
14
- ## Status
15
-
16
- [![Gem Version](https://badge.fury.io/rb/browserino.svg)](http://badge.fury.io/rb/browserino)
17
- [![Build Status](https://travis-ci.org/SidOfc/browserino.svg?branch=master)](https://travis-ci.org/SidOfc/browserino)
18
- [![Coverage Status](https://coveralls.io/repos/SidOfc/browserino/badge.svg?branch=master&service=github)](https://coveralls.io/github/SidOfc/browserino?branch=master)
19
-
20
- ---
21
-
22
- Useragent references:
23
-
24
- * http://useragentstring.com/
25
- * http://www.zytrax.com/tech/web/mobile_ids.html
26
- * http://www.user-agents.org/
27
-
28
- ## Changelog
29
-
30
- _dates are in dd-mm-yyyy format_
31
- _older changes can be found in the [CHANGELOG.md](CHANGELOG.md)_
32
-
33
- #### 09-12-2016 VERSION 2.13.0
34
-
35
- - Added support for Colibri
36
- - Added `colibri?` method
37
- - Added support for `:colibri` (`Symbol` and `String`) in methods
38
- - Added `agent.internet_explorer?` method as alias for `agent.ie?`
39
- - Added support for `:internet_explorer` (`Symbol` and `String`) in methods
40
- - Test aliasses if they exist for a certain browser (used to be tested by hand)
41
- - Test aliasses if they exist for a certain user (used to be tested by hand)
42
- - Add a roadmap
43
-
44
- #### 14-11-2016 VERSION 2.12.0
45
-
46
- - Added support for SamsungBrowser
47
- - Added `samsungbrowser?` method
48
- - Added support for `:samsungbrowser` (`Symbol` and `String`) in methods
49
- - Added support for Tizen
50
- - Added `tizen?` method
51
- - Added support for `:tizen` (`Symbol` and `String`) in methods
52
- - Added support for WebOS
53
- - Added `webos?` method
54
- - Added support for `:webos` (`Symbol` and `String`) in methods
55
- - Added support for WebOSBrowser
56
- - Added `webosbrowser?` method
57
- - Added support for `:webosbrowser` (`Symbol` and `String`) in methods
58
- - Added Android Nougat (7.0 and 7.1) detection
59
- - merged OS map files into _/core/mappings.rb_ and removed the _lib/maps_ folder
60
- - Reduced amount of (overkill) tests
61
-
62
- #### 13-11-2016 VERSION 2.11.0
63
-
64
- - Add `:macos` alias for `:macintosh` systems.
65
- - Added support for MacOS `:sierra` alias in methods.
66
- - Added deprecation notice for dropping support of Ruby < 2.0.0
67
-
68
- ## Installation
69
-
70
- Add the following to your applications Gemfile:
71
-
72
- ```ruby
73
- gem 'browserino'
74
- ```
75
-
76
- And then execute:
77
-
78
- ```
79
- $ bundle
80
- ```
81
-
82
- Or install it yourself with:
83
-
84
- ```
85
- $ gem install browserino
86
- ```
87
-
88
- Browserino is tested with the following ruby versions
89
-
90
- * 1.9.3 - **SUPPORT WILL BE DROPPED IN THE NEXT MAJOR VERSION RELEASE**
91
- * 2.0.0
92
- * 2.1.0
93
- * 2.2.1
94
- * 2.3.0
95
- * 2.3.1
96
-
97
- ## Usage
98
-
99
- After installing the gem globally or in your application you'll have to `require` the gem before being able to use it.
100
-
101
- ```ruby
102
- require 'browserino'
103
- ```
104
- Afterwards, the gem is loaded and you can proceed by calling:
105
-
106
- ```ruby
107
- Browserino.parse '<user agent>'
108
- ```
109
-
110
- Browserino is also usable in the command line
111
-
112
- ```
113
- ~$ browserino parse <ua>
114
- ```
115
-
116
- Output
117
- ```
118
- name: chrome, browser_version: 50.0.2661.102, engine_name: webkit, engine_version: 537.36, system_name: macintosh, system_architecture: nil
119
- ```
120
-
121
- ### Rails (>= 3.2.0)
122
-
123
- If you're using Rails (>= 3.2.0) you'll have access to an `agent` object. Browserino will initialize itself using the `request.headers['User-Agent']`
124
-
125
-
126
- A quick example on how to get going:
127
- ```ruby
128
- class ApplicationController < ActionController::Base
129
- def some_method
130
- render json: agent
131
- end
132
- end
133
- ```
134
-
135
- ### General
136
-
137
- the `parse` method will **always** return a `Browserino::Agent` object.
138
-
139
- ```ruby
140
- Browserino.parse '<user agent>' # => #<Browserino::Agent:0x007f9b09b1fae8 ... >
141
- ```
142
-
143
- ### Default return values
144
-
145
- If a property isn't available or not known to Browserino it's return value will always be `nil`, this can be tested by supplying an empty string (`''`) to `parse`:
146
-
147
- ```ruby
148
- agent = Browserino.parse ''
149
- agent.name
150
- # => nil
151
- ```
152
-
153
- If a value *is* found then you'll recieve a *lowercase string* containing the information:
154
-
155
- ```ruby
156
- agent = Browserino.parse 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) brave/0.7.7 Chrome/47.0.2526.73 Electron/0.36.2 Safari/537.36'
157
-
158
- agent.name
159
- # => 'brave'
160
-
161
- # or using browser_name
162
-
163
- agent.browser_name
164
- # => 'brave'
165
-
166
- agent.browser_version
167
- # => '0.7.7'
168
-
169
- agent.engine_name
170
- # => 'webkit'
171
- ```
172
-
173
- Browserino also has some question methods, these will always return either `true` or `false`. The exceptions to this rule are methods that can take a name, for instance the `bot?` method:
174
-
175
- ```ruby
176
- agent = Browserino.parse ''
177
- agent.bot?
178
- # => true (empty UA's count as anonymous bots)
179
-
180
- agent.googlebot?
181
- # => false
182
-
183
- agent.non_supported_bot?
184
- # => NoMethodError
185
-
186
- agent.bot? :non_supported_bot
187
- # => NoMethodError
188
- ```
189
-
190
- ### Functions
191
-
192
- The samples below are all valid calls with their respective outputs, using the `agent` defined below.
193
-
194
- ```ruby
195
- agent = Browserino.parse 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'
196
- ```
197
-
198
- #### Note
199
-
200
- The methods `social_media_name`, `search_engine_name`, `bot_name` and `browser_name`
201
- are *all* aliasses of the general `name` method.
202
-
203
- The exceptions to this rule are `system_name` and `console_name`. They each have their own method.
204
-
205
- ##### Quick usage
206
-
207
- ```ruby
208
- agent.name
209
- # => 'ie'
210
-
211
- # always returns real version, also when IE is in compat
212
- agent.browser_version
213
- # => '11.0'
214
-
215
- # to get the compat version that IE is running in
216
- # returns real version if not in compat mode
217
- agent.browser_version compat: true
218
- # => '11.0'
219
-
220
- agent.library_name
221
- # => nil
222
-
223
- agent.library_version
224
- # => nil
225
-
226
- agent.engine_name
227
- # => 'trident'
228
-
229
- agent.engine_version
230
- # => '7.0'
231
-
232
- agent.system_name
233
- # => 'windows'
234
-
235
- # system_name attempts to find the operating systems version name
236
- # when full: true is used
237
- # returning an array with either the version name or nil if not found
238
- agent.system_name full: true
239
- # => ['windows', '7']
240
-
241
- agent.system_version
242
- # => '6.1'
243
-
244
- agent.system_architecture
245
- # => 'x64'
246
-
247
- agent.console_name
248
- # => nil
249
-
250
- # two formats possible: 'aa' or `aa-bb`
251
- agent.locale
252
- # => 'as'
253
- ```
254
-
255
- ##### Question methods
256
-
257
- Browserino also provides some question methods.
258
-
259
- ```ruby
260
- # only for Internet Explorer
261
- agent.compat?
262
- # => false
263
-
264
- # returns true if name is present
265
- agent.known?
266
- # => true
267
-
268
- # returns true if browser is known
269
- agent.browser?
270
- # => true
271
-
272
- # returns true if specific browser
273
- agent.browser? :ie
274
- # => true
275
-
276
- # returns true if specific browser and version
277
- agent.browser? :ie, version: '11.0'
278
-
279
- # returns true if library is known
280
- agent.library?
281
-
282
- # returns true if specific library
283
- agent.library? :php
284
-
285
- # returns true if specific library and version
286
- agent.library? :php, version: '5.9.0'
287
-
288
- # returns true if there is a social media bot on your website
289
- agent.social_media?
290
- # => false
291
-
292
- # returns true if platform is known
293
- agent.platform?
294
- # => true
295
-
296
- # returns true if specific platform
297
- agent.platform? :windows
298
- # => true
299
-
300
- # returns true if specific platform and version
301
- agent.platform? :windows, version: '7'
302
- # => true
303
-
304
- # returns true if console is known
305
- agent.console?
306
- # => false
307
-
308
- # returns true if specific console
309
- agent.console? :xbox
310
- # => false
311
-
312
- # returns true if user agent is empty or a bot is recognized
313
- agent.bot?
314
- # => false
315
-
316
- agent.x64?
317
- # => true
318
-
319
- agent.x32?
320
- # => false
321
-
322
- agent.mobile?
323
- # => false
324
- ```
325
-
326
- The above methods are the base questions you can ask but there are a lot more methods you can call on the `agent`. Every supported browser, operating system or bot is basically a question method so you could do this:
327
-
328
- ```ruby
329
- agent.windows?
330
- # => true
331
-
332
- # based on full name
333
- agent.windows? '7'
334
- # => true
335
-
336
- # NT versions also work
337
- agent.windows? 6.1
338
- # => true
339
- ```
340
-
341
- ##### Transformation
342
-
343
- Browserino implements `to_a`, `to_h` and `to_s` to allow for collected data to be moved around without attaching the entire object with methods.
344
-
345
- **to_s**
346
-
347
- Returns a compiled string of properties based on available information.
348
-
349
- ```ruby
350
- agent.to_s
351
- # => 'ie ie11 trident trident7 windows x64'
352
-
353
- # a seperator can be passed to format the name + version combo's
354
- agent.to_s '-'
355
- # => 'ie ie-11 trident trident-7 windows x64'
356
- ```
357
-
358
- If the agent object can't find a property in the user agent, that property will be excluded from the string.
359
- For instance, if the `browser_version` and `engine_version` of the `agent` object are `nil` then the following will be returned:
360
-
361
- ```ruby
362
- agent.to_s
363
- # => ie trident windows x64
364
- ```
365
-
366
- **to_a**
367
-
368
- Returns an array with key => value pairs.
369
-
370
- ```ruby
371
- agent.to_a
372
- # => [[:name, "ie"],
373
- # [:browser_version, "11.0"],
374
- # [:engine_name, "trident"],
375
- # [:engine_version, "7.0"],
376
- # [:system_name, "windows"],
377
- # [:system_version, "6.1"],
378
- # [:system_architecture, "x64"],
379
- # [:console_name, nil],
380
- # [:locale, "as"]]
381
- ```
382
-
383
- **to_h**
384
-
385
- Returns a hash with key => value pairs.
386
-
387
- ```ruby
388
- agent.to_h
389
- # => {:name=>"ie",
390
- # :browser_version=>"11.0",
391
- # :engine_name=>"trident",
392
- # :engine_version=>"7.0",
393
- # :system_name=>"windows",
394
- # :system_version=>"6.1",
395
- # :system_architecture=>"x64",
396
- # :console_name => nil,
397
- # :locale=>"as"}
398
- ```
399
-
400
- ##### Supplying versions
401
-
402
- Consider this parsed string:
403
-
404
- ```ruby
405
- agent = Browserino.parse 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SM-T210R Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30 UCBrowser/2.3.2.300'
406
-
407
- # output for system_name
408
- agent.system_name
409
- # => 'android'
410
-
411
- # output for system_name full: true
412
- agent.system_name full: true
413
- # => ['android', 'Jelly Bean 16']
414
- ```
415
-
416
- When supplying a version to a method that supports it, you have multiple options for the format of that version.
417
-
418
- * Using a symbol or string without version: `:jelly_bean` or `'jelly_bean'`
419
- * Using a symbol or string with version: `:jelly_bean_16` or `'jelly_bean_16'`
420
- * Using a string: `'4.1.2'`
421
- * Using a float: `4.1`
422
- * Using an int: `4`
423
-
424
- When calling the `platform?` or `android?` functions with the above examples, they would all match since the method that compares versions also checks how specific the version is that you want to compare against.
425
-
426
- If you pass in `4.1` as a version the matcher will look for `x.x` in the extracted version and discard the unspecified value, this allows for you to be explicitly less specific to allow for a greater range of systems to be matched.
427
-
428
- * `4.1.2` will match `4.1.2`
429
- * `4.1` will match `4.1.x`
430
- * `4` will match `4.x.x`
431
-
432
- **Examples using `platform?`**
433
-
434
- ```ruby
435
- agent.platform? :android, version: '4.1.2'
436
- # => true
437
-
438
- agent.platform? :android, version: 4.1
439
- # => true
440
-
441
- agent.platform? :android, version: 4
442
- # => true
443
-
444
- agent.platform? :android, version: :jelly_bean
445
- # => true
446
-
447
- agent.platform? :android, version: :jelly_bean_16
448
- # => true
449
- ```
450
-
451
- ##### `platform?`, `browser?`, `bot?`, `console?`, `search_engine?`, `library` and `social_media?` methods
452
-
453
- As you've seen above, the `platform?` function can take two arguments, a symbol with the system name and optionally a hash with a `:version` key to supply a version, the `browser?` and `library?` method works in exactly the same way.
454
-
455
- The `bot?` and `social_media?` methods however aren't that complex since you don't need to know a bot / social media version or anything other than it's name so inside these methods, only a name can be passed:
456
-
457
- *Every social media match is automatically a bot, but a bot isn't automatically social media, __This is also true for the `search_engine?` method__*
458
-
459
- ```ruby
460
- # when a bot UA gets parsed
461
- agent = Browserino.parse 'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)'
462
-
463
- agent.bot?
464
- # => true
465
-
466
- agent.social_media?
467
- # => true
468
-
469
- agent.bot? :facebook
470
- # => true
471
-
472
- agent.social_media? :facebook
473
- # => true
474
-
475
- agent.bot? :facebook, version: 1.1
476
- # => ArgumentError
477
- ```
478
-
479
- ##### Checking a specific browser, system, bot, library or social media
480
-
481
- Every name you see in the below lists can be passed as symbol or string to their respective method
482
-
483
- **search engine**
484
- * `google`
485
- * `bing`
486
- * `yahoo_slurp`
487
- * `baiduspider`
488
- * `duckduckgo` or `ddg`
489
-
490
- Examples:
491
-
492
- ```ruby
493
- agent.google?
494
- agent.baiduspider?
495
-
496
- # using the search_engine? method
497
- agent.search_engine? :google
498
-
499
- # using shorthand
500
- agent.search_engine? :ddg
501
- ```
502
-
503
- **consoles**
504
-
505
- * `xbox`
506
- * `nintendo_ds`
507
- * `wii`
508
- * `playstation`
509
-
510
- Examples:
511
-
512
- ```ruby
513
- agent.playstation?
514
- agent.wii?
515
-
516
- agent.console?
517
-
518
- agent.console? :facebook
519
- ```
520
-
521
- **social media**
522
-
523
- * `facebook` or `fb`
524
- * `twitter`
525
- * `linkedin`
526
- * `instagram`
527
- * `pinterest`
528
- * `tumblr`
529
-
530
- Examples:
531
-
532
- ```ruby
533
- agent.facebook?
534
- agent.tumblr?
535
-
536
- # using the social_media? method
537
- agent.social_media? :facebook
538
-
539
- # using shorthand
540
- agent.social_media? :fb
541
-
542
- agent.social_media? :tumblr
543
- ```
544
-
545
- **bot**
546
-
547
- * `google`
548
- * `msn`
549
- * `bing`
550
- * `yahoo_slurp`
551
- * `baiduspider`
552
- * `yandex`
553
- * `sosospider`
554
- * `exa`
555
- * `sogou_spider`
556
-
557
- Examples:
558
-
559
- ```ruby
560
- agent.google?
561
- agent.exa?
562
-
563
- # using the bot? method
564
- agent.bot? :google
565
- agent.bot? :exa
566
- ```
567
-
568
- **library**
569
-
570
- * `php`
571
- * `perl`
572
- * `curl`
573
- * `python`
574
- * `java`
575
- * `pycurl`
576
-
577
- Examples:
578
-
579
- ```ruby
580
- agent.php?
581
- agent.pycurl?
582
-
583
- agent.library?
584
-
585
- agent.library? :curl
586
-
587
- agent.library? :curl, version: 7.21
588
- ```
589
-
590
- **browser**
591
-
592
- * `chrome`
593
- * `firefox` or `ff`
594
- * `servo`
595
- * `seamonkey`
596
- * `opera`
597
- * `opera_mini`
598
- * `vivaldi`
599
- * `ucbrowser`
600
- * `maxthon`
601
- * `bolt`
602
- * `brave`
603
- * `safari`
604
- * `ie`
605
- * `edge`
606
- * `samsungbrowser`
607
- * `webosbrowser`
608
- * `colibri`
609
-
610
- Examples:
611
-
612
- ```ruby
613
- agent.firefox?
614
- agent.chrome? 42
615
-
616
- # using the browser? method
617
- agent.browser? :firefox
618
-
619
- # using shorthand
620
- agent.browser? :ff
621
-
622
- agent.browser? :chrome, version: 42
623
- ```
624
-
625
- **operating system**
626
-
627
- * `windows` or `win`
628
- * `macintosh` or `osx`
629
- * `linux`
630
- * `bsd`
631
- * `solaris`
632
- * `android`
633
- * `ios`
634
- * `blackberry` or `bb`
635
- * `windows_phone`
636
- * `tizen`
637
- * `webos`
638
-
639
- Examples:
640
-
641
- ```ruby
642
- agent.macintosh?
643
- agent.windows_phone? 7
644
-
645
- # to check for windows vista one could do
646
- agent.windows? 6
647
-
648
- # a more readable equivelant
649
- agent.windows? :vista
650
-
651
- # using the platform? method
652
- agent.platform? :macintosh
653
-
654
- # using shorthand
655
- agent.platform? :osx
656
-
657
- agent.platform? :windows_phone, version: 7
658
- ```
659
-
660
- Notes:
661
-
662
- * `linux?` doesn't support any versions
663
- * `bsd?` doesn't support any versions
664
- * `solaris?` only supports numeric versions
665
- * *named versions* are only supported if they are present in a [map](https://github.com/SidOfc/browserino/tree/master/lib/browserino/core/mapping.rb)
666
-
667
- ## Roadmap
668
-
669
- Browserino will always be a work in progress, I will do my best to maintain and update the gem regularly as I have so far, below are some points of interest on what could / should be improved, rewritten or removed.
670
- There is no steady schedule for these changes however these are the changes I deemed most important, the value in them being here is that you, as a developer using Browserino have the possibility to see what might be added, changed or removed in the near(est) future of change.
671
-
672
- * Drop ruby `< 2` support and remove custom return value from constructor
673
- * Refactor test suite entirely to improve readability and structure of tests.
674
- * Add more bot identification
675
- * Rewrite aliassing and UA lie detection
676
-
677
- ## Contributing
678
-
679
- Bug reports and pull requests are welcome on GitHub at https://github.com/SidOfc/browserino. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
680
-
681
-
682
- ## License
683
-
684
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
3
+ The documentation has been moved here: [https://sidofc.github.io/projects/browserino/](https://sidofc.github.io/projects/browserino/)
data/browserino.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["sidneyliebrand@gmail.com"]
11
11
 
12
12
  spec.summary = %q{A browser identification gem with command line and Rails (>= 3.2.0) integration}
13
- spec.homepage = "http://sidofc.github.io/browserino/"
13
+ spec.homepage = "https://sidofc.github.io/projects/browserino/"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
@@ -1,3 +1,3 @@
1
1
  module Browserino
2
- VERSION = '2.13.0'.freeze
2
+ VERSION = '2.13.1'.freeze
3
3
  end