Code Duplication    Length = 16-18 lines in 2 locations

src/visits/services/VisitsParser.js 2 locations

@@ 20-37 (lines=18) @@
17
  }
18
};
19
20
const browserFromUserAgent = (userAgent) => {
21
  const lowerUserAgent = userAgent.toLowerCase();
22
23
  switch (true) {
24
    case lowerUserAgent.indexOf('opera') >= 0 || lowerUserAgent.indexOf('opr') >= 0:
25
      return 'Opera';
26
    case lowerUserAgent.indexOf('firefox') >= 0:
27
      return 'Firefox';
28
    case lowerUserAgent.indexOf('chrome') >= 0:
29
      return 'Chrome';
30
    case lowerUserAgent.indexOf('safari') >= 0:
31
      return 'Safari';
32
    case lowerUserAgent.indexOf('msie') >= 0:
33
      return 'Internet Explorer';
34
    default:
35
      return 'Others';
36
  }
37
};
38
39
const extractDomain = (url) => {
40
  const domain = url.indexOf('://') > -1 ? url.split('/')[2] : url.split('/')[0];
@@ 3-18 (lines=16) @@
1
import { isNil, isEmpty, memoizeWith, prop } from 'ramda';
2
3
const osFromUserAgent = (userAgent) => {
4
  const lowerUserAgent = userAgent.toLowerCase();
5
6
  switch (true) {
7
    case lowerUserAgent.indexOf('linux') >= 0:
8
      return 'Linux';
9
    case lowerUserAgent.indexOf('windows') >= 0:
10
      return 'Windows';
11
    case lowerUserAgent.indexOf('mac') >= 0:
12
      return 'MacOS';
13
    case lowerUserAgent.indexOf('mobi') >= 0:
14
      return 'Mobile';
15
    default:
16
      return 'Others';
17
  }
18
};
19
20
const browserFromUserAgent = (userAgent) => {
21
  const lowerUserAgent = userAgent.toLowerCase();