<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="firebaserules_v1.html">Firebase Rules API</a> . <a href="firebaserules_v1.projects.html">projects</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="firebaserules_v1.projects.releases.html">releases()</a></code>
</p>
<p class="firstline">Returns the releases Resource.</p>

<p class="toc_element">
  <code><a href="firebaserules_v1.projects.rulesets.html">rulesets()</a></code>
</p>
<p class="firstline">Returns the rulesets Resource.</p>

<p class="toc_element">
  <code><a href="#test">test(name=None, body, x__xgafv=None)</a></code></p>
<p class="firstline">Test `Source` for syntactic and semantic correctness. Issues present in the</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="test">test(name=None, body, x__xgafv=None)</code>
  <pre>Test `Source` for syntactic and semantic correctness. Issues present in the
rules, if any, will be returned to the caller with a description, severity,
and source location.

The test method will typically be executed with a developer provided
`Source`, but if regression testing is desired, this method may be
executed against a `Ruleset` resource name and the `Source` will be
retrieved from the persisted `Ruleset`.

The following is an example of `Source` that permits users to upload images
to a bucket bearing their user id and matching the correct metadata:

_*Example*_

    // Users are allowed to subscribe and unsubscribe to the blog.
    service firebase.storage {
      match /users/{userId}/images/{imageName} {
          allow write: if userId == request.userId
              && (imageName.endsWith('.png') || imageName.endsWith('.jpg'))
              && resource.mimeType.startsWith('image/')
      }
    }

Args:
  name: string, Name of the project.

Format: `projects/{project_id}` (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request for FirebaseRulesService.TestRuleset.
    "source": { # `Source` is one or more `File` messages comprising a logical set of rules. # `Source` to be checked for correctness.
      "files": [ # `File` set constituting the `Source` bundle.
        { # `File` containing source content.
          "content": "A String", # Textual Content.
          "name": "A String", # File name.
          "fingerprint": "A String", # Fingerprint (e.g. github sha) associated with the `File`.
        },
      ],
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response for FirebaseRulesService.TestRuleset.
    "issues": [ # Syntactic and semantic `Source` issues of varying severity. Issues of
        # `ERROR` severity will prevent tests from executing.
      { # Issues include warnings, errors, and deprecation notices.
        "sourcePosition": { # Position in the `Source` content including its line, column number, and an # Position of the issue in the `Source`.
            # index of the `File` in the `Source` message. Used for debug purposes.
          "column": 42, # First column on the source line associated with the source fragment.
          "line": 42, # Line number of the source fragment. 1-based.
          "fileName": "A String", # Name of the `File`.
        },
        "description": "A String", # Short error description.
        "severity": "A String", # The severity of the issue.
      },
    ],
  }</pre>
</div>

</body></html>