Class: UserAgent::Version

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/user_agent/version.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(str) ⇒ Version

Returns a new instance of Version.


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/user_agent/version.rb', line 18

def initialize(str)
  @str = str

  if @str =~ /^\s*$/
    @nil        = true
    @sequences  = []
    @comparable = false
  elsif str =~ /^\d+$/ || str =~ /^\d+\./
    @nil        = false
    @sequences  = str.scan(/\d+|[A-Za-z][0-9A-Za-z-]*$/).map { |s| s =~ /^\d+$/ ? s.to_i : s }
    @comparable = true
  else
    @nil        = false
    @sequences  = [str]
    @comparable = false
  end
end

Class Method Details

.new(obj = nil) ⇒ Object


5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/user_agent/version.rb', line 5

def self.new(obj = nil)
  case obj
  when Version
    obj
  when String
    super
  when NilClass
    super("")
  else
    raise ArgumentError, "invalid value for Version: #{obj.inspect}"
  end
end

Instance Method Details

#<=>(other) ⇒ Object


65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/user_agent/version.rb', line 65

def <=>(other)
  case other
  when Version
    if @comparable
      ([0]*6).zip(to_a, other.to_a).each do |dump, a, b|
        a ||= 0
        b ||= 0

        if a.is_a?(String) && b.is_a?(Integer)
          return -1
        elsif a.is_a?(Integer) && b.is_a?(String)
          return 1
        elsif a == b
          next
        else
          return a <=> b
        end
      end
      0
    elsif to_s == other.to_s
      return 0
    else
      return -1
    end
  when String, NilClass
    self <=> self.class.new(other)
  else
    nil
  end
end

#==(other) ⇒ Object


52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/user_agent/version.rb', line 52

def ==(other)
  case other
  when Version
    eql?(other)
  when String
    eql?(self.class.new(other))
  when NilClass
    nil?
  else
    false
  end
end

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)

48
49
50
# File 'lib/user_agent/version.rb', line 48

def eql?(other)
  other.is_a?(self.class) && to_s == other.to_s
end

#inspectObject


100
101
102
# File 'lib/user_agent/version.rb', line 100

def inspect
  "#<#{self.class} #{to_s}>"
end

#nil?Boolean

Returns:

  • (Boolean)

36
37
38
# File 'lib/user_agent/version.rb', line 36

def nil?
  @nil
end

#to_aObject


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

def to_a
  @sequences.dup
end

#to_sObject


96
97
98
# File 'lib/user_agent/version.rb', line 96

def to_s
  to_str
end

#to_strObject


44
45
46
# File 'lib/user_agent/version.rb', line 44

def to_str
  @str.dup
end