Method: Gitlab::Git::Attributes#parse_attributes

Defined in:
lib/gitlab_git/attributes.rb

#parse_attributes(string) ⇒ Object

Parses an attribute string.

These strings can be in the following formats:

text      # => { "text" => true }
-text     # => { "text" => false }
key=value # => { "key" => "value" }

string - The string to parse.

Returns a Hash containing the attributes and their values.



56
57
58
59
60
61
62
63
64
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
# File 'lib/gitlab_git/attributes.rb', line 56

def parse_attributes(string)
  values = {}
  dash = '-'
  equal = '='
  binary = 'binary'

  string.split(/\s+/).each do |chunk|
    # Data such as "foo = bar" should be treated as "foo" and "bar" being
    # separate boolean attributes.
    next if chunk == equal

    key = chunk

    # Input: "-foo"
    if chunk.start_with?(dash)
      key = chunk.byteslice(1, chunk.length - 1)
      value = false

    # Input: "foo=bar"
    elsif chunk.include?(equal)
      key, value = chunk.split(equal, 2)

    # Input: "foo"
    else
      value = true
    end

    values[key] = value

    # When the "binary" option is set the "diff" option should be set to
    # the inverse. If "diff" is later set it should overwrite the
    # automatically set value.
    values['diff'] = false if key == binary && value
  end

  values
end