kuma-giyomu/rsync_config

View on GitHub
lib/rsync_config/parser/secrets_file.treetop

Summary

Maintainability
Test Coverage

module RsyncConfig

  grammar RsyncSecretsFile

    rule start
      lines
      {
        def to_hash
          users = {}
          crawl users

          users
        end
      }
    end

    rule lines
      line? (EOL+ lines)?
    end

    rule line
      comment
      / user_record
      / whitespace+
    end

    rule comment
      '#' [^\n]*
    end

    rule user_record
      user:([^:]+) ':' password:([^\t\r\n\ ]+)
      {
        def action users
          users[user_value] = password_value
        end

        def user_value
          user.text_value
        end

        def password_value
          password.text_value
        end
      }
    end

    rule whitespace
      [ \t\r\n]
    end

    rule EOL
      "\r\n" / "\n"
    end

  end
end