Class: Travis::EnvVars::String

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/travis/env_vars/string.rb

Constant Summary collapse

KEY =
%r([^\s=]+)
WORD =
%r((\\.*|[^'"\s])+)
QUOTE =
%r((['"`]{1}))
SPACE =
%r(\s+)
EQUAL =
%r(=)
SUBSH =
%r(\$\(.*?\))

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(str) ⇒ String

Returns a new instance of String.



19
20
21
# File 'lib/travis/env_vars/string.rb', line 19

def initialize(str)
  @str = StringScanner.new(str)
end

Instance Attribute Details

#strObject (readonly)

Returns the value of attribute str.



17
18
19
# File 'lib/travis/env_vars/string.rb', line 17

def str
  @str
end

Instance Method Details

#equalObject



43
44
45
# File 'lib/travis/env_vars/string.rb', line 43

def equal
  scan(EQUAL) || err('=')
end

#err(char) ⇒ Object

Raises:



69
70
71
# File 'lib/travis/env_vars/string.rb', line 69

def err(char)
  raise ParseError, "expected #{char} at position #{pos} in: #{string.inspect}"
end

#keyObject



39
40
41
# File 'lib/travis/env_vars/string.rb', line 39

def key
  scan(KEY)
end

#pairObject



33
34
35
36
37
# File 'lib/travis/env_vars/string.rb', line 33

def pair
  return unless key = self.key
  parts = [key, equal, value]
  [parts.first, parts.last]
end

#pairsObject



27
28
29
30
31
# File 'lib/travis/env_vars/string.rb', line 27

def pairs
  pairs = [pair]
  pairs += self.pairs while space
  pairs.tap { err('end of string') unless eos? }
end

#parseObject



23
24
25
# File 'lib/travis/env_vars/string.rb', line 23

def parse
  pairs.to_h
end

#quotedObject



59
60
61
62
63
# File 'lib/travis/env_vars/string.rb', line 59

def quoted
  return unless peek(1) =~ QUOTE
  err($1) if check(/#{$1}\\#{$1}($|\s)/)
  scan(/#{$1}(\\#{$1}|[^#{$1}])*#{$1}/)
end

#spaceObject



65
66
67
# File 'lib/travis/env_vars/string.rb', line 65

def space
  scan(SPACE)
end

#subshellObject



55
56
57
# File 'lib/travis/env_vars/string.rb', line 55

def subshell
  scan(SUBSH)
end

#valueObject



47
48
49
# File 'lib/travis/env_vars/string.rb', line 47

def value
  quoted || subshell || word
end

#wordObject



51
52
53
# File 'lib/travis/env_vars/string.rb', line 51

def word
  scan(WORD)
end