Class: Aua

Inherits:
Object
  • Object
show all
Defined in:
lib/aua.rb,
lib/aua/agents.rb,
lib/aua/version.rb,
lib/aua/operating_systems.rb

Defined Under Namespace

Modules: Agents, OperatingSystems, StackBase

Constant Summary collapse

MATCHER =
%r{
  ^([^\s/]+)        # Product
  /?([^\s]*)        # Version
  (\s\(([^\)]*)\))? # Comment
}x.freeze
MAJOR_VERSION =
/^([\d]+)\.([\d]+[a-z]*)/
VERSION =
"0.2.3"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(string = "") ⇒ Aua

Returns a new instance of Aua.



8
9
10
11
# File 'lib/aua.rb', line 8

def initialize(string="")
  @raw = string.to_s
  parse
end

Instance Attribute Details

#os_nameObject (readonly)

Returns the value of attribute os_name.



29
30
31
# File 'lib/aua.rb', line 29

def os_name
  @os_name
end

#os_versionObject (readonly)

Returns the value of attribute os_version.



29
30
31
# File 'lib/aua.rb', line 29

def os_version
  @os_version
end

#partsObject (readonly)

Returns the value of attribute parts.



29
30
31
# File 'lib/aua.rb', line 29

def parts
  @parts
end

#platformObject (readonly)

Returns the value of attribute platform.



29
30
31
# File 'lib/aua.rb', line 29

def platform
  @platform
end

#rawObject (readonly)

Returns the value of attribute raw.



29
30
31
# File 'lib/aua.rb', line 29

def raw
  @raw
end

#versionObject (readonly)

Returns the value of attribute version.



29
30
31
# File 'lib/aua.rb', line 29

def version
  @version
end

Class Method Details

.parse(raw) ⇒ Object



13
14
15
# File 'lib/aua.rb', line 13

def self.parse(raw)
  new(raw)
end

Instance Method Details

#appObject



66
67
68
# File 'lib/aua.rb', line 66

def app
  products[0]
end

#app_commentsObject



74
75
76
# File 'lib/aua.rb', line 74

def app_comments
  @app_comments ||= (comments.first || []) + [""]*5
end

#app_comments_stringObject



78
79
80
# File 'lib/aua.rb', line 78

def app_comments_string
  @app_comments_string ||= (comments.first || []).join(";")
end

#commentsObject



70
71
72
# File 'lib/aua.rb', line 70

def comments
  @comments ||= parts.map{|p| p[2] }
end

#comments_stringObject



82
83
84
# File 'lib/aua.rb', line 82

def comments_string
  @comments_string ||= comments.flatten.join(";")
end

#major_versionObject



50
51
52
# File 'lib/aua.rb', line 50

def major_version
  @major_version ||= (version || "") =~ MAJOR_VERSION ? "#{$1}.#{$2}" : version
end

#nameObject



31
32
33
34
35
36
37
38
# File 'lib/aua.rb', line 31

def name
  @name unless unknown?
  if simple?
    app
  else
    raw
  end
end

#os_major_versionObject



54
55
56
# File 'lib/aua.rb', line 54

def os_major_version
  @os_major_version ||= (os_version || "") =~ MAJOR_VERSION ? "#{$1}.#{$2}" : os_version
end

#os_stringObject



95
96
97
# File 'lib/aua.rb', line 95

def os_string
  @os_string ||= comments.first && comments.first[2]
end

#parseObject



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/aua.rb', line 17

def parse
  string = @raw.dup
  @parts = []
  while m = string.match(MATCHER)
    @parts << [m[1] ? m[1].sub(/;$/,"") : m[1], m[2], m[4] ? m[4].split(/\s?;\s?/) : []]
    string = string.sub(m[0], '').strip
  end

  Aua::Agents.extend_agent(self)
  Aua::OperatingSystems.extend_agent(self)
end

#platform_stringObject



91
92
93
# File 'lib/aua.rb', line 91

def platform_string
  @platform_string ||= comments.first && comments.first.first
end

#productsObject



58
59
60
# File 'lib/aua.rb', line 58

def products
  @products ||= parts.map{|p| p[0] }
end

#simple?Boolean

Returns:

  • (Boolean)


103
104
105
# File 'lib/aua.rb', line 103

def simple?
  products.size == 1 && versions.size <= 1 && comments == [[]]
end

#to_sObject



107
108
109
110
# File 'lib/aua.rb', line 107

def to_s
  return "Unknown: #{raw}#{" (simple)" if simple?}" if unknown?
  "#{type} #{name}/#{version} #{os_name}/#{os_version} #{platform}"
end

#typeObject



40
41
42
# File 'lib/aua.rb', line 40

def type
  @type || :Unknown
end

#unknown?Boolean

Returns:

  • (Boolean)


99
100
101
# File 'lib/aua.rb', line 99

def unknown?
  type == :Unknown
end

#version_of(product) ⇒ Object



86
87
88
89
# File 'lib/aua.rb', line 86

def version_of(product)
  i = products.index(product.to_s)
  versions[i] if i && versions[i] != ""
end

#versionsObject



62
63
64
# File 'lib/aua.rb', line 62

def versions
  @versions ||= parts.map{|p| p[1] != "" ? p[1] : nil }
end