diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 86d0cb27..00000000 --- a/docs/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/documentation/README.md b/documentation/README.md new file mode 100644 index 00000000..c4ae2977 --- /dev/null +++ b/documentation/README.md @@ -0,0 +1,22 @@ +--- +description: An open-source library for easily syncing with accounting software, general ledgers, ERPs, and other ledgers. +--- + +# LedgerSync v2.3.1 Documentation + +> An open-source library for easily syncing with accounting software, general ledgers, ERPs, and other ledgers. + +[![Build Status](https://travis-ci.org/LedgerSync/ledger_sync.svg?branch=master)](https://travis-ci.org/LedgerSync/ledger_sync) +[![Gem Version](https://badge.fury.io/rb/ledger_sync.svg)](https://badge.fury.io/rb/ledger_sync) +[![Coverage Status](https://coveralls.io/repos/github/LedgerSync/ledger_sync/badge.svg?branch=master)](https://coveralls.io/github/LedgerSync/ledger_sync?branch=master) + +## Join the Conversation + +[Click here](https://join.slack.com/t/ledger-sync/shared_invite/zt-e5nbl8qc-eOA~5k7bg3p16_l3J7OS~Q) to join our public +Slack group. + +## License + +The gem is available as open source under the terms of the licenses detailed +in [`LICENSE.txt`](https://github.com/LedgerSync/ledger_sync/blob/master/LICENSE.txt). + diff --git a/documentation/SUMMARY.md b/documentation/SUMMARY.md new file mode 100644 index 00000000..5217da55 --- /dev/null +++ b/documentation/SUMMARY.md @@ -0,0 +1,14 @@ +# Summary + +* Getting Started + * [Installation](getting-started/01--installation.md) + * [Quick Start](getting-started/02--quick-start.md) + * [Get Help](getting-started/03--get-help.md) + * [Report a bug](getting-started/04--report-a-bug.md) + +* [Architecture](architecture/README.md) + * [Clients](architecture/01--clients.md) + * [Resources](architecture/02--resources.md) + * [Serialization](architecture/03--serialization.md) + * [Operations](architecture/04--operations.md) + * [Searchers](architecture/05--searchers.md) diff --git a/documentation/_book/architecture/01--clients.html b/documentation/_book/architecture/01--clients.html new file mode 100644 index 00000000..2255bc3b --- /dev/null +++ b/documentation/_book/architecture/01--clients.html @@ -0,0 +1,413 @@ + + + + + + + Clients · GitBook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + +
+
+ +
+
+ +
+ +

Clients

+

Overview

+

Clients handle the authentication and requests to the ledger. A ledger may have different authentication strategies, so +clients will accept different arguments. For example, QuickBooks Online utilizes Oauth 2.0 while NetSuite offers Token +Based Authentication. While similar, the required keys are different.

+

How to use

+

Unless you are customizing LedgerSync, you will always pass an instantiated client to an object (e.g. an operation). The +object will handle using the client as needed.

+

As most clients implement basic request functionality (e.g. get, put, post, delete, etc.), you can call these +methods directly to perform custom requests. Refer to the specific Client definitions for what parameters are permitted.

+

Gotchas

+

Oauth 2.0

+

Clients store the authentication details for the ledger. Given that Oauth 2.0 tokens can refresh during a request, these +clients will handle saving credentials back to the client instance. Typically (though some clients offer more automated +solutions), you will want to save any changes back to your database. You can use client.ledger_attributes_to_save to +retrieve a hash of which attributes to save. Your code to do so could look like the following:

+
# Assuming `client` is defined as an instance of a ledger Client class
+client.ledger_attributes_to_save.each do |attribute_to_save, value|
+  # Store value
+end
+
+ + +
+ +
+
+
+ +

results matching ""

+
    + +
    +
    + +

    No results matching ""

    + +
    +
    +
    + +
    +
    + +
    + + + + + + + + + + + + + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/_book/architecture/02--resources.html b/documentation/_book/architecture/02--resources.html new file mode 100644 index 00000000..2461bb0c --- /dev/null +++ b/documentation/_book/architecture/02--resources.html @@ -0,0 +1,426 @@ + + + + + + + Resources · GitBook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + +
    +
    + +
    +
    + +
    + +

    Resources

    +

    Overview

    +

    Resources are named ruby objects (e.g. Customer, Payment, etc.) with strict attributes (e.g. name, amount, etc.) +. LedgerSync provides resources specific to each ledger. While it is possible to create your own resources (see +Customization for more details), this section refers to provided ledger-specific resources.

    +

    The library strives to make each resource and attribute name match the ledger API. This naming convention will help you +more readily match ledger documentation to LedgerSync resources.

    +

    Every resource, regardless of ledger, implements a ledger_id and external_id attribute. The ledger_id is the ID +given by the ledger, while the external_id is your internal ID for the resource.

    +

    How to use

    +

    Resources are primary used as the inputs and outputs of operations and searchers. A resource is passed to an operation +along with a client. Once the operation is successfully performed, a duplicated and updated resource is returned.

    +

    Resources have two layers of validation:

    +
      +
    1. The Resource
    2. +
    3. Operations
    4. +
    +

    When instantiating a resource, validations are performed. These validations include class checks and, if necessary, +value checks (e.g. enums). When performing an operation, validations are performed based on what attributes are required +for the operation to be successful. For example, the ledger_id should be nil on create, but it should be present +on +update.

    +

    Available resources

    +

    You can see all resources available for a given ledger by calling resources on the ledger’s Client like so:

    +

    LedgerSync::Ledgers::QuickBooksOnline::Client.resources

    +

    This returns a hash of resource types to classes, where the resource types are unique (e.g. customer, vendor, etc.).

    +

    You can see all resources available in LedgerSync by calling LedgerSync.resources. This returns an array (note: not a +hash as multiple ledgers have the same types) of resource classes that have been created inheriting the LedgerSync:: +Resource class.

    +

    Resource Attributes

    +

    Resources have defined attributes. Attributes are explicitly defined. An error is thrown if an unknown attribute is +passed to it. You can retrieve the attributes of a resource by calling Customer.attributes.

    +

    A subset of these attributes may be a reference, which is simply a special type of attribute that references another +resource. You can retrieve the references of a resource by calling Customer.references.

    + + +
    + +
    +
    +
    + +

    results matching ""

    +
      + +
      +
      + +

      No results matching ""

      + +
      +
      +
      + +
      +
      + +
      + + + + + + + + + + + + + + +
      + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/_book/architecture/03--serialization.html b/documentation/_book/architecture/03--serialization.html new file mode 100644 index 00000000..15b1f126 --- /dev/null +++ b/documentation/_book/architecture/03--serialization.html @@ -0,0 +1,434 @@ + + + + + + + Serialization · GitBook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + +
      + +
      + +
      + + + + + + + + +
      +
      + +
      +
      + +
      + +

      Serializers

      +

      Serializers take a Resource and output a hash. For example:

      +
      customer = LedgerSync::NetSuite::Customer.new(
      +  companyName: 'Test Company',
      +  external_id: 'ext_123'
      +)
      +serializer = LedgerSync::NetSuite::Customer::Serializer.new
      +serializer.serialize(resource: customer)
      +# Sample output:
      +# {
      +#   "companyName" => "Test Company",
      +#   "externalId" => "ext_123",
      +#   "email" => nil,
      +#   "phone" => nil,
      +#   "firstName" => nil,
      +#   "lastName" => nil,
      +#   "subsidiary" => nil
      +# }
      +end
      +
      +
      +

      Deserializers

      +

      Deserializers take a hash and output a Resource. For example:

      +
      h = {
      +  "companyName" => "Test Company",
      +  "externalId" => "ext_123",
      +  "email" => nil,
      +  "id" => "987654321",
      +  "phone" => nil,
      +  "firstName" => nil,
      +  "lastName" => nil,
      +  "subsidiary" => nil
      +}
      +deserializer = LedgerSync::NetSuite::Customer::Deserializer.new
      +customer = deserializer.deserialize(hash: h, resource: LedgerSync::Ledgers::NetSuite::Customer.new)
      +customer.ledger_id # => "987654321"
      +customer.companyName # => "Test Company"
      +
      +
      +

      How to use

      +

      Serializers and deserializers are automatically inferred by each operation based on the naming convention. It is +possible to create your own serializers. Please see Customization for more.

      + + +
      + +
      +
      +
      + +

      results matching ""

      +
        + +
        +
        + +

        No results matching ""

        + +
        +
        +
        + +
        +
        + +
        + + + + + + + + + + + + + + +
        + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/_book/architecture/04--operations.html b/documentation/_book/architecture/04--operations.html new file mode 100644 index 00000000..83fe12bc --- /dev/null +++ b/documentation/_book/architecture/04--operations.html @@ -0,0 +1,431 @@ + + + + + + + Operations · GitBook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        + + + + + + + + +
        + +
        + +
        + + + + + + + + +
        +
        + +
        +
        + +
        + +

        Operations

        +

        Each ledger defines operations that can be performed on specific resources (e.g. Customer::Operations::Update +, Payment:: +Operations::Create). The operation defines two key things:

        +
          +
        • a Contract class which is used to validate the resource using the dry-validation gem
        • +
        • a perform instance method, which handles the actual API requests and response/error handling.
        • +
        +
        +

        Note: Ledgers may support different operations for each resource type.

        +
        +

        Contracts

        +

        Contracts are dry-validation schemas, which determine if an operation can be performed. You can create custom schemas +and pass them to operations. Assuming you have an operation_class variable and foo is an attribute of a +custom_resource (see above) that is required to be a string, you can implement it with the following:

        +
        
        +class CustomContract < LedgerSync::Contract
        +  params do
        +    required(:foo).filled(:string)
        +  end
        +end
        +
        +# A valid case
        +custom_resource = CustomResource.new(foo: 'asdf')
        +op = operation_class.new(
        +  client: client,
        +  resource: resource,
        +  validation_contract: CustomContract
        +)
        +op.valid? # => true
        +# An invalid case
        +custom_resource = CustomResource.new(foo: nil)
        +operation_class.new(
        +  client: client,
        +  resource: resource,
        +  validation_contract: CustomContract
        +)
        +op.valid? # => false
        +
        + + +
        + +
        +
        +
        + +

        results matching ""

        +
          + +
          +
          + +

          No results matching ""

          + +
          +
          +
          + +
          +
          + +
          + + + + + + + + + + + + + + +
          + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/_book/architecture/05--searchers.html b/documentation/_book/architecture/05--searchers.html new file mode 100644 index 00000000..cabf0556 --- /dev/null +++ b/documentation/_book/architecture/05--searchers.html @@ -0,0 +1,406 @@ + + + + + + + Searchers · GitBook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + +
          + +
          + +
          + + + + + + + + +
          +
          + +
          +
          + +
          + +

          Searchers

          +

          Searchers are used to lookup and scan objects in the ledger. A searcher takes a client, query string and +optional pagination hash. For example, to search customer’s by name:

          +
          searcher = LedgerSync::QuickBooksOnline::Customer::Searcher.new(
          +  client: client, # assuming this is defined,
          +  query: 'test'
          +)
          +result = searcher.search # returns a LedgerSync::SearchResult
          +if result.success?
          +  resources = result.resources
          +  # Do something with found resources
          +else
          +  # result.failure?
          +  raise result.error
          +end
          +# Different ledgers may use different pagination strategies.  In order
          +# to get the next and previous set of results, you can use the following:
          +next_searcher = searcher.next_searcher
          +previous_searcher = searcher.previous_searcher
          +
          + + +
          + +
          +
          +
          + +

          results matching ""

          +
            + +
            +
            + +

            No results matching ""

            + +
            +
            +
            + +
            +
            + +
            + + + + + + + + + + +
            + + +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/_book/architecture/index.html b/documentation/_book/architecture/index.html new file mode 100644 index 00000000..04676c86 --- /dev/null +++ b/documentation/_book/architecture/index.html @@ -0,0 +1,401 @@ + + + + + + + Architecture · GitBook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            +
            + + + + + + + + +
            + +
            + +
            + + + + + + + + +
            +
            + +
            +
            + +
            + +

            LedgerSync consists of the following high-level objects:

            + + + +
            + +
            +
            +
            + +

            results matching ""

            +
              + +
              +
              + +

              No results matching ""

              + +
              +
              +
              + +
              +
              + +
              + + + + + + + + + + + + + + +
              + + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/_book/getting-started/01--installation.html b/documentation/_book/getting-started/01--installation.html new file mode 100644 index 00000000..6d8242a5 --- /dev/null +++ b/documentation/_book/getting-started/01--installation.html @@ -0,0 +1,397 @@ + + + + + + + Installation · GitBook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              +
              + + + + + + + + +
              + +
              + +
              + + + + + + + + +
              +
              + +
              +
              + +
              + +

              Gemfile

              +

              Add this line to your application’s Gemfile:

              +
              gem 'ledger_sync'
              +
              +

              And then execute:

              +
              bundle
              +
              +
              +

              Directly

              +

              Or install it yourself as:

              +
              gem install ledger_sync
              +
              + +
              + +
              +
              +
              + +

              results matching ""

              +
                + +
                +
                + +

                No results matching ""

                + +
                +
                +
                + +
                +
                + +
                + + + + + + + + + + +
                + + +
                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/_book/getting-started/02--quick-start.html b/documentation/_book/getting-started/02--quick-start.html new file mode 100644 index 00000000..95adaeb2 --- /dev/null +++ b/documentation/_book/getting-started/02--quick-start.html @@ -0,0 +1,469 @@ + + + + + + + Quick Start · GitBook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                +
                + + + + + + + + +
                + +
                + +
                + + + + + + + + +
                +
                + +
                +
                + +
                + +

                Quick Start

                +

                Overview

                +

                To use LedgerSync, you must carry out an Operation. The operation will be ledger-specific and will require the +following:

                +
                  +
                1. Client
                2. +
                3. Resource(s)
                4. +
                +

                1. Create a Client

                +

                Clients are responsible for the authentication and requests for a specific ledger. In this example, we will assume you +are using the QuickBooks Online ledger.

                +
                +

                Note: Each ledger has different requirements for authentication. Please visit the ledger-specific pages to learn more.

                +
                +
                client = LedgerSync::QuickBooksOnline::Client.new(
                +  access_token: access_token, # assuming this is defined
                +  client_id: ENV['QUICKBOOKS_ONLINE_CLIENT_ID'],
                +  client_secret: ENV['QUICKBOOKS_ONLINE_CLIENT_SECRET'],
                +  realm_id: ENV['QUICKBOOKS_ONLINE_REALM_ID'],
                +  refresh_token: refresh_token # assuming this is defined
                +)
                +
                +

                2. Create resources(s)

                +

                Create a resource on which to operate. Some resources have references to other resources. You can +use Util::ResourcesBuilder to create resources and relationships from a structured hash.

                +
                +

                Note: Resources are ledger-specific, meaning they may have different attributes and references compared to other

                +
                +
                +

                ledgers. Please visit the Reference to learn about resource attributes.

                +
                +
                resource = LedgerSync::QuickBooksOnline::Customer.new(
                +  DisplayName: 'Sample Customer',
                +  external_id: customer_external_id # A unique ID from your platform
                +)
                +
                +

                3. Create an operation

                +

                Given our client and resource from above, we can now create an Operation. Operations are typically CRUD-like +methods, typically (though not always) only making a single request.

                +

                Operations automatically determine a Serializer and Deserializer. These serializers are used to translate to and the +from the ruby Resource in the format required by the ledger.

                +
                operation = LedgerSync::QuickBooksOnline::Customer::Operations::Create.new(
                +  client: client,
                +  resource: resource
                +)
                +
                +

                4. Perform the operation

                +

                The next step is to perform the operation. You can do this by simply calling perform.

                +
                result = operation.perform # Returns a LedgerSync::OperationResult
                +
                +

                5. Save updates to authentication

                +

                Because QuickBooks Online uses Oauth 2, you must always be sure to save the access_token, refresh_token, and expirations +as they can change with any API call. Operations will always save values back to the client.

                +

                Automatically update values in .env

                +

                If you have a .env file present in the root directory of your project, the client will automatically comment out old +values and update new values.

                +

                If you want to disable this functionality, you can do so by setting update_dotenv to false when instantiating the +object:

                +
                client = LedgerSync::QuickBooksOnline::Client.new(
                +  access_token: access_token, # assuming this is defined
                +  client_id: ENV['QUICKBOOKS_ONLINE_CLIENT_ID'],
                +  client_secret: ENV['QUICKBOOKS_ONLINE_CLIENT_SECRET'],
                +  realm_id: ENV['QUICKBOOKS_ONLINE_REALM_ID'],
                +  refresh_token: refresh_token, # assuming this is defined
                +  update_dotenv: false
                +)
                +
                +

                Manually save values

                +
                result.operation.client.ledger_attributes_to_save.each do |key, value|
                +  # save values
                +end
                +
                +

                Summary

                +

                That’s it! Assuming proper authentication values and valid values on the resource, this will result in a new customer +being created in QuickBooks Online.

                +

                There are many other resources and operations that can be performed in QuickBooks Online. For a complete guide of these +and other ledgers, visit the Reference.

                + + +
                + +
                +
                +
                + +

                results matching ""

                +
                  + +
                  +
                  + +

                  No results matching ""

                  + +
                  +
                  +
                  + +
                  +
                  + +
                  + + + + + + + + + + + + + + +
                  + + +
                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/_book/getting-started/03--get-help.html b/documentation/_book/getting-started/03--get-help.html new file mode 100644 index 00000000..abbb48cf --- /dev/null +++ b/documentation/_book/getting-started/03--get-help.html @@ -0,0 +1,396 @@ + + + + + + + Get Help · GitBook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  +
                  + + + + + + + + +
                  + +
                  + +
                  + + + + + + + + +
                  +
                  + +
                  +
                  + +
                  + +

                  Get Help

                  +

                  There is a group of passionate maintainers happy to help you get started with LedgerSync. There are two main channels +for discussing LedgerSync: Github +and Slack.

                  + + +
                  + +
                  +
                  +
                  + +

                  results matching ""

                  +
                    + +
                    +
                    + +

                    No results matching ""

                    + +
                    +
                    +
                    + +
                    +
                    + +
                    + + + + + + + + + + + + + + +
                    + + +
                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/_book/getting-started/04--report-a-bug.html b/documentation/_book/getting-started/04--report-a-bug.html new file mode 100644 index 00000000..f29989d7 --- /dev/null +++ b/documentation/_book/getting-started/04--report-a-bug.html @@ -0,0 +1,395 @@ + + + + + + + Report a bug · GitBook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                    +
                    + + + + + + + + +
                    + +
                    + +
                    + + + + + + + + +
                    +
                    + +
                    +
                    + +
                    + +

                    Report a bug

                    +

                    Please open an issue on Github to report any bugs. Please +check if the bug has previously been reported and comment on the open issue with your use case.

                    + + +
                    + +
                    +
                    +
                    + +

                    results matching ""

                    +
                      + +
                      +
                      + +

                      No results matching ""

                      + +
                      +
                      +
                      + +
                      +
                      + +
                      + + + + + + + + + + + + + + +
                      + + +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/_book/getting-started/README.md b/documentation/_book/getting-started/README.md new file mode 100644 index 00000000..e5cb0834 --- /dev/null +++ b/documentation/_book/getting-started/README.md @@ -0,0 +1,4 @@ +--- +description: An open-source library for easily syncing with accounting software, general ledgers, ERPs, and other ledgers. +--- + diff --git a/documentation/_book/gitbook/fonts/fontawesome/FontAwesome.otf b/documentation/_book/gitbook/fonts/fontawesome/FontAwesome.otf new file mode 100644 index 00000000..d4de13e8 Binary files /dev/null and b/documentation/_book/gitbook/fonts/fontawesome/FontAwesome.otf differ diff --git a/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot b/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot new file mode 100644 index 00000000..c7b00d2b Binary files /dev/null and b/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot differ diff --git a/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg b/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg new file mode 100644 index 00000000..8b66187f --- /dev/null +++ b/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg @@ -0,0 +1,685 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf b/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf new file mode 100644 index 00000000..f221e50a Binary files /dev/null and b/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf differ diff --git a/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff b/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff new file mode 100644 index 00000000..6e7483cf Binary files /dev/null and b/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff differ diff --git a/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 b/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 new file mode 100644 index 00000000..7eb74fd1 Binary files /dev/null and b/documentation/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 differ diff --git a/documentation/_book/gitbook/gitbook-plugin-code/plugin.css b/documentation/_book/gitbook/gitbook-plugin-code/plugin.css new file mode 100644 index 00000000..a68fcdc0 --- /dev/null +++ b/documentation/_book/gitbook/gitbook-plugin-code/plugin.css @@ -0,0 +1,37 @@ +#code-textarea { + height: 0; + position: fixed; + top: -1000px; + width: 0; +} + +.code-wrapper { + position: relative; +} + +.code-wrapper i { + color: #c1c7cd; + cursor: pointer; + font-size: 12px; + font-weight: bold; + position: absolute; + right: 1em; + top: 1em; +} + +.code-wrapper pre { + background: #f7f8f9; + border-radius: 3px; + counter-reset: line; + font-size: 15px; +} + +.code-wrapper pre > code > span.code-line:before { + counter-increment: line; + color: #c1c7cd; + content: counter(line); + display: inline-block; + font-size: 12px; + margin-right: 1.5em; + width: 1em; +} diff --git a/documentation/_book/gitbook/gitbook-plugin-code/plugin.js b/documentation/_book/gitbook/gitbook-plugin-code/plugin.js new file mode 100644 index 00000000..555d7246 --- /dev/null +++ b/documentation/_book/gitbook/gitbook-plugin-code/plugin.js @@ -0,0 +1,91 @@ +require(['gitbook', 'jQuery'], function(gitbook, $) { + + const TERMINAL_HOOK = '**[terminal]' + + var pluginConfig = {}; + var timeouts = {}; + + function addCopyButton(wrapper) { + wrapper.append( + $('') + .click(function() { + copyCommand($(this)); + }) + ); + } + + function addCopyTextarea() { + + /* Add also the text area that will allow to copy */ + $('body').append('",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Qe=te.documentElement,Je=/^key/,Ke=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ze=/^([^.]*)(?:\.(.+)|)/;de.event={global:{},add:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.get(e);if(m)for(n.handler&&(i=n,n=i.handler,o=i.selector),o&&de.find.matchesSelector(Qe,o),n.guid||(n.guid=de.guid++),(u=m.events)||(u=m.events={}),(s=m.handle)||(s=m.handle=function(t){return"undefined"!=typeof de&&de.event.triggered!==t.type?de.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(qe)||[""],c=t.length;c--;)a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h&&(f=de.event.special[h]||{},h=(o?f.delegateType:f.bindType)||h,f=de.event.special[h]||{},l=de.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&de.expr.match.needsContext.test(o),namespace:d.join(".")},i),(p=u[h])||(p=u[h]=[],p.delegateCount=0,f.setup&&f.setup.call(e,r,d,s)!==!1||e.addEventListener&&e.addEventListener(h,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,l):p.push(l),de.event.global[h]=!0)},remove:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.hasData(e)&&Fe.get(e);if(m&&(u=m.events)){for(t=(t||"").match(qe)||[""],c=t.length;c--;)if(a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){for(f=de.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=u[h]||[],a=a[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=i=p.length;i--;)l=p[i],!o&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(p.splice(i,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(e,l));s&&!p.length&&(f.teardown&&f.teardown.call(e,d,m.handle)!==!1||de.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)de.event.remove(e,h+t[c],n,r,!0);de.isEmptyObject(u)&&Fe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,o,i,s,a=de.event.fix(e),u=new Array(arguments.length),c=(Fe.get(this,"events")||{})[a.type]||[],l=de.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(i=[],s={},n=0;n-1:de.find(o,this,null,[c]).length),s[o]&&i.push(r);i.length&&a.push({elem:c,handlers:i})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,tt=/\s*$/g;de.extend({htmlPrefilter:function(e){return e.replace(et,"<$1>")},clone:function(e,t,n){var r,o,i,s,a=e.cloneNode(!0),u=de.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||de.isXMLDoc(e)))for(s=v(a),i=v(e),r=0,o=i.length;r0&&y(s,!u&&v(e,"script")),a},cleanData:function(e){for(var t,n,r,o=de.event.special,i=0;void 0!==(n=e[i]);i++)if(He(n)){if(t=n[Fe.expando]){if(t.events)for(r in t.events)o[r]?de.event.remove(n,r):de.removeEvent(n,r,t.handle);n[Fe.expando]=void 0}n[Re.expando]&&(n[Re.expando]=void 0)}}}),de.fn.extend({detach:function(e){return q(this,e,!0)},remove:function(e){return q(this,e)},text:function(e){return Le(this,function(e){return void 0===e?de.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.appendChild(e)}})},prepend:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(de.cleanData(v(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return de.clone(this,e,t)})},html:function(e){return Le(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!tt.test(e)&&!Ge[(Xe.exec(e)||["",""])[1].toLowerCase()]){e=de.htmlPrefilter(e);try{for(;n1)}}),de.Tween=I,I.prototype={constructor:I,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||de.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(de.cssNumber[n]?"":"px")},cur:function(){var e=I.propHooks[this.prop];return e&&e.get?e.get(this):I.propHooks._default.get(this)},run:function(e){var t,n=I.propHooks[this.prop];return this.options.duration?this.pos=t=de.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):I.propHooks._default.set(this),this}},I.prototype.init.prototype=I.prototype,I.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=de.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){de.fx.step[e.prop]?de.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[de.cssProps[e.prop]]&&!de.cssHooks[e.prop]?e.elem[e.prop]=e.now:de.style(e.elem,e.prop,e.now+e.unit)}}},I.propHooks.scrollTop=I.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},de.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},de.fx=I.prototype.init,de.fx.step={};var ht,dt,gt=/^(?:toggle|show|hide)$/,mt=/queueHooks$/;de.Animation=de.extend(U,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return d(n.elem,e,$e.exec(t),n),n}]},tweener:function(e,t){de.isFunction(e)?(t=e,e=["*"]):e=e.match(qe);for(var n,r=0,o=e.length;r1)},removeAttr:function(e){return this.each(function(){de.removeAttr(this,e)})}}),de.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return"undefined"==typeof e.getAttribute?de.prop(e,t,n):(1===i&&de.isXMLDoc(e)||(o=de.attrHooks[t.toLowerCase()]||(de.expr.match.bool.test(t)?vt:void 0)),void 0!==n?null===n?void de.removeAttr(e,t):o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):o&&"get"in o&&null!==(r=o.get(e,t))?r:(r=de.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&de.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(qe);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),vt={set:function(e,t,n){return t===!1?de.removeAttr(e,n):e.setAttribute(n,n),n}},de.each(de.expr.match.bool.source.match(/\w+/g),function(e,t){var n=yt[t]||de.find.attr;yt[t]=function(e,t,r){var o,i,s=t.toLowerCase();return r||(i=yt[s],yt[s]=o,o=null!=n(e,t,r)?s:null,yt[s]=i),o}});var xt=/^(?:input|select|textarea|button)$/i,bt=/^(?:a|area)$/i;de.fn.extend({prop:function(e,t){return Le(this,de.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[de.propFix[e]||e]})}}),de.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&de.isXMLDoc(e)||(t=de.propFix[t]||t,o=de.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=de.find.attr(e,"tabindex");return t?parseInt(t,10):xt.test(e.nodeName)||bt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),pe.optSelected||(de.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),de.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){de.propFix[this.toLowerCase()]=this}),de.fn.extend({addClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).addClass(e.call(this,t,X(this)))});if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).removeClass(e.call(this,t,X(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):de.isFunction(e)?this.each(function(n){de(this).toggleClass(e.call(this,n,X(this),t),t)}):this.each(function(){var t,r,o,i;if("string"===n)for(r=0,o=de(this),i=e.match(qe)||[];t=i[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||(t=X(this),t&&Fe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Fe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+z(X(n))+" ").indexOf(t)>-1)return!0;return!1}});var wt=/\r/g;de.fn.extend({val:function(e){var t,n,r,o=this[0];{if(arguments.length)return r=de.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=r?e.call(this,n,de(this).val()):e,null==o?o="":"number"==typeof o?o+="":de.isArray(o)&&(o=de.map(o,function(e){return null==e?"":e+""})),t=de.valHooks[this.type]||de.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))});if(o)return t=de.valHooks[o.type]||de.valHooks[o.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(wt,""):null==n?"":n)}}}),de.extend({valHooks:{option:{get:function(e){var t=de.find.attr(e,"value");return null!=t?t:z(de.text(e))}},select:{get:function(e){var t,n,r,o=e.options,i=e.selectedIndex,s="select-one"===e.type,a=s?null:[],u=s?i+1:o.length;for(r=i<0?u:s?i:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),de.each(["radio","checkbox"],function(){de.valHooks[this]={set:function(e,t){if(de.isArray(t))return e.checked=de.inArray(de(e).val(),t)>-1}},pe.checkOn||(de.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Tt=/^(?:focusinfocus|focusoutblur)$/;de.extend(de.event,{trigger:function(t,n,r,o){var i,s,a,u,c,l,f,p=[r||te],h=ce.call(t,"type")?t.type:t,d=ce.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||te,3!==r.nodeType&&8!==r.nodeType&&!Tt.test(h+de.event.triggered)&&(h.indexOf(".")>-1&&(d=h.split("."),h=d.shift(),d.sort()),c=h.indexOf(":")<0&&"on"+h,t=t[de.expando]?t:new de.Event(h,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=d.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:de.makeArray(n,[t]),f=de.event.special[h]||{},o||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!o&&!f.noBubble&&!de.isWindow(r)){for(u=f.delegateType||h,Tt.test(u+h)||(s=s.parentNode);s;s=s.parentNode)p.push(s),a=s;a===(r.ownerDocument||te)&&p.push(a.defaultView||a.parentWindow||e)}for(i=0;(s=p[i++])&&!t.isPropagationStopped();)t.type=i>1?u:f.bindType||h,l=(Fe.get(s,"events")||{})[t.type]&&Fe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&He(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=h,o||t.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),n)!==!1||!He(r)||c&&de.isFunction(r[h])&&!de.isWindow(r)&&(a=r[c],a&&(r[c]=null),de.event.triggered=h,r[h](),de.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=de.extend(new de.Event,n,{type:e,isSimulated:!0});de.event.trigger(r,null,t)}}),de.fn.extend({trigger:function(e,t){return this.each(function(){de.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return de.event.trigger(e,t,n,!0)}}),de.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){de.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),de.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||de.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){de.event.simulate(t,e.target,de.event.fix(e))};de.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=Fe.access(r,t);o||r.addEventListener(e,n,!0),Fe.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=Fe.access(r,t)-1;o?Fe.access(r,t,o):(r.removeEventListener(e,n,!0),Fe.remove(r,t))}}});var Ct=e.location,jt=de.now(),kt=/\?/;de.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||de.error("Invalid XML: "+t),n};var Et=/\[\]$/,St=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;de.param=function(e,t){var n,r=[],o=function(e,t){var n=de.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(de.isArray(e)||e.jquery&&!de.isPlainObject(e))de.each(e,function(){o(this.name,this.value)});else for(n in e)V(n,e[n],t,o);return r.join("&")},de.fn.extend({serialize:function(){return de.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=de.prop(this,"elements");return e?de.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!de(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!ze.test(e))}).map(function(e,t){var n=de(this).val();return null==n?null:de.isArray(n)?de.map(n,function(e){return{name:t.name,value:e.replace(St,"\r\n")}}):{name:t.name,value:n.replace(St,"\r\n")}}).get()}});var qt=/%20/g,Dt=/#.*$/,Ot=/([?&])_=[^&]*/,Lt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ht=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ft=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Pt={},Mt="*/".concat("*"),$t=te.createElement("a");$t.href=Ct.href,de.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Ht.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":de.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Q(Q(e,de.ajaxSettings),t):Q(de.ajaxSettings,e)},ajaxPrefilter:G(It),ajaxTransport:G(Pt),ajax:function(t,n){function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=void 0,s=a||"",C.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=J(d,C,r)),b=K(d,b,C,c),c?(d.ifModified&&(w=C.getResponseHeader("Last-Modified"),w&&(de.lastModified[i]=w),w=C.getResponseHeader("etag"),w&&(de.etag[i]=w)),204===t||"HEAD"===d.type?T="nocontent":304===t?T="notmodified":(T=b.state,p=b.data,h=b.error,c=!h)):(h=T,!t&&T||(T="error",t<0&&(t=0))),C.status=t,C.statusText=(n||T)+"",c?v.resolveWith(g,[p,T,C]):v.rejectWith(g,[C,T,h]),C.statusCode(x),x=void 0,f&&m.trigger(c?"ajaxSuccess":"ajaxError",[C,d,c?p:h]),y.fireWith(g,[C,T]),f&&(m.trigger("ajaxComplete",[C,d]),--de.active||de.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var o,i,s,a,u,c,l,f,p,h,d=de.ajaxSetup({},n),g=d.context||d,m=d.context&&(g.nodeType||g.jquery)?de(g):de.event,v=de.Deferred(),y=de.Callbacks("once memory"),x=d.statusCode||{},b={},w={},T="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=Lt.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)C.always(e[C.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return o&&o.abort(t),r(0,t),this}};if(v.promise(C),d.url=((t||d.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=(d.dataType||"*").toLowerCase().match(qe)||[""],null==d.crossDomain){c=te.createElement("a");try{c.href=d.url,c.href=c.href,d.crossDomain=$t.protocol+"//"+$t.host!=c.protocol+"//"+c.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=de.param(d.data,d.traditional)),Y(It,d,n,C),l)return C;f=de.event&&d.global,f&&0===de.active++&&de.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ft.test(d.type),i=d.url.replace(Dt,""),d.hasContent?d.data&&d.processData&&0===(d.contentType||"").indexOf("application/x-www-form-urlencoded")&&(d.data=d.data.replace(qt,"+")):(h=d.url.slice(i.length),d.data&&(i+=(kt.test(i)?"&":"?")+d.data,delete d.data),d.cache===!1&&(i=i.replace(Ot,"$1"),h=(kt.test(i)?"&":"?")+"_="+jt++ +h),d.url=i+h),d.ifModified&&(de.lastModified[i]&&C.setRequestHeader("If-Modified-Since",de.lastModified[i]),de.etag[i]&&C.setRequestHeader("If-None-Match",de.etag[i])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",d.contentType),C.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Mt+"; q=0.01":""):d.accepts["*"]);for(p in d.headers)C.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(g,C,d)===!1||l))return C.abort();if(T="abort",y.add(d.complete),C.done(d.success),C.fail(d.error),o=Y(Pt,d,n,C)){if(C.readyState=1,f&&m.trigger("ajaxSend",[C,d]),l)return C;d.async&&d.timeout>0&&(u=e.setTimeout(function(){C.abort("timeout")},d.timeout));try{l=!1,o.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return C},getJSON:function(e,t,n){return de.get(e,t,n,"json")},getScript:function(e,t){return de.get(e,void 0,t,"script")}}),de.each(["get","post"],function(e,t){de[t]=function(e,n,r,o){return de.isFunction(n)&&(o=o||r,r=n,n=void 0),de.ajax(de.extend({url:e,type:t,dataType:o,data:n,success:r},de.isPlainObject(e)&&e))}}),de._evalUrl=function(e){return de.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},de.fn.extend({wrapAll:function(e){var t;return this[0]&&(de.isFunction(e)&&(e=e.call(this[0])),t=de(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return de.isFunction(e)?this.each(function(t){de(this).wrapInner(e.call(this,t))}):this.each(function(){var t=de(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=de.isFunction(e);return this.each(function(n){de(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){de(this).replaceWith(this.childNodes)}),this}}),de.expr.pseudos.hidden=function(e){return!de.expr.pseudos.visible(e)},de.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},de.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Wt={0:200,1223:204},Bt=de.ajaxSettings.xhr();pe.cors=!!Bt&&"withCredentials"in Bt,pe.ajax=Bt=!!Bt,de.ajaxTransport(function(t){var n,r;if(pe.cors||Bt&&!t.crossDomain)return{send:function(o,i){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(s in o)a.setRequestHeader(s,o[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?i(0,"error"):i(a.status,a.statusText):i(Wt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),de.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),de.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return de.globalEval(e),e}}}),de.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),de.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,o){t=de(" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/_book/search_index.json b/documentation/_book/search_index.json new file mode 100644 index 00000000..e836c308 --- /dev/null +++ b/documentation/_book/search_index.json @@ -0,0 +1 @@ +{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["account","avail","click","convers","detail","document","easili","erps,","gem","gener","group.","here","introduct","join","ledgers,","ledgers.","ledgersync","librari","licens","license.txt.","open","public","slack","software,","sourc","sync","term","under","v2.3.1"],"getting-started/01--installation.html":["'ledger_sync'","add","application’","as:","bundl","directli","execute:","gem","gemfil","gemfile:","instal","ledger_sync","line","yourself"],"getting-started/02--quick-start.html":["#","'sampl","(though",")",".env","1.","2,","2.","3.","4.","5.","=","above,","access_token,","access_token:","alway","always)","api","assum","attribut","attributes.","authent","authentication.","automat","back","be","call","call.","carri","chang","client","client,","client.","client:","client_id:","client_secret:","comment","compar","complet","creat","crud","custom","customer',","customer_external_id","defin","deserializer.","determin","differ","directori","disabl","displayname:","each","end","env['quickbooks_online_client_id'],","env['quickbooks_online_client_secret'],","env['quickbooks_online_realm_id'],","example,","expir","external_id:","fals","file","following:","format","functionality,","given","guid","hash.","id","instanti","it!","learn","ledger","ledger.","ledgers,","ledgers.","ledgersync,","ledgersync::operationresult","ledgersync::quickbooksonline::client.new(","ledgersync::quickbooksonline::customer.new(","ledgersync::quickbooksonline::customer::operations::create.new(","make","mani","manual","mean","methods,","more.","new","next","note:","now","oauth","object:","old","onlin","online.","oper","operate.","operation.","operation.perform","out","overview","page","perform","perform.","platform","pleas","present","project,","proper","quick","quickbook","realm_id:","refer","reference.","refresh_token","refresh_token,","refresh_token:","relationship","request","request.","requir","resourc","resource(s)","resource,","resource:","resources(s)","resources.","respons","result","result.operation.client.ledger_attributes_to_save.each","return","root","rubi","save","serial","set","simpli","singl","specif","specific,","start","step","structur","summari","sure","that’","translat","typic","uniqu","updat","update_dotenv","update_dotenv:","us","util::resourcesbuild","valid","valu","values.","value|","visit","want","|key,"],"getting-started/03--get-help.html":["channel","discuss","github","group","happi","help","ledgersync.","ledgersync:","main","maintain","passion","slack.","start","two"],"getting-started/04--report-a-bug.html":["bug","bugs.","case.","check","comment","github","issu","open","pleas","previous","report","us"],"architecture/":["architectur","client","consist","follow","high","ledgersync","level","objects:","oper","resourc","result","searcher","serial"],"architecture/01--clients.html":["#","(e.g.","(though","2.0","`client`","accept","alway","arguments.","assum","attribut","authent","authentication.","autom","back","base","basic","call","chang","class","client","client.ledger_attributes_to_sav","client.ledger_attributes_to_save.each","code","credenti","custom","database.","defin","definit","delete,","detail","differ","different.","directli","dure","end","etc.),","example,","following:","function","get,","given","gotcha","handl","hash","implement","instanc","instance.","instanti","key","ledger","ledger.","ledgersync,","look","method","more","needed.","netsuit","oauth","object","offer","onlin","operation).","overview","paramet","pass","perform","permitted.","post,","put,","quickbook","refer","refresh","request","request,","requests.","requir","retriev","save","save.","similar,","solutions),","specif","store","strategies,","token","typic","unless","us","util","valu","value|","want","|attribute_to_save,"],"architecture/02--resources.html":["(e.g.","(note:","(see",".","along","amount,","and,","anoth","api.","array","attribut","attribute.","attributes.","avail","base","call","check","class","class.","classes,","client","client.","convent","creat","create,","custom","customer,","customer.attributes.","customer.references.","defin","defined.","details),","document","duplic","each","enums).","error","etc.)","etc.).","example,","explicitli","external_id","given","hash","help","id","implement","includ","inherit","input","instanti","intern","it.","layer","ledger","ledger,","ledger.","ledger_id","ledgersync","ledgersync.resources.","ledgersync::","ledgersync::ledgers::quickbooksonline::client.resourc","ledger’","librari","make","match","more","multipl","name","name,","necessary,","nil","object","onc","oper","operation,","output","overview","pass","payment,","perform","performed,","performed.","possibl","present","primari","provid","readili","refer","reference,","regardless","requir","resourc","resource,","resource.","resources.","retriev","return","returned.","rubi","same","searchers.","section","see","simpli","so:","special","specif","strict","strive","subset","successful.","successfulli","thrown","two","type","types)","uniqu","unknown","updat","update.","us","valid","validation:","valu","vendor,"],"architecture/03--serialization.html":["\"987654321\"","\"987654321\",","\"companyname\"","\"email\"","\"ext_123\",","\"externalid\"","\"firstname\"","\"id\"","\"lastname\"","\"phone\"","\"subsidiary\"","\"test","#","'ext_123'","'test",")","=","=>","automat","base","company\"","company\",","company',","companyname:","convention.","creat","custom","customer)","customer.companynam","customer.ledger_id","deseri","deserializer.deserialize(hash:","each","end","example:","external_id:","h","h,","hash","hash.","infer","ledgersync::ledgers::netsuite::customer.new)","ledgersync::netsuite::customer.new(","ledgersync::netsuite::customer::deserializer.new","ledgersync::netsuite::customer::serializer.new","more.","name","nil","nil,","oper","output","output:","pleas","possibl","resourc","resource.","resource:","sampl","see","serial","serializer.serialize(resource:","serializers.","take","us","{","}"],"architecture/04--operations.html":["#","(e.g.","(see",")",",","=","=>","above)","actual","api","assum","attribut","case","class","client,","client:","contract","creat","custom","custom_resourc","customcontract","customer::operations::upd","customresource.new(foo:","defin","determin","differ","dri","each","fals","following:","foo","gem","handl","handling.","implement","instanc","invalid","key","ledger","method,","nil)","note:","op.valid?","oper","operation_class","operation_class.new(","operations.","operations::create).","pass","payment::","perform","performed.","request","requir","resourc","resource,","resource:","response/error","schema","schemas,","specif","string,","support","things:","true","two","type.","us","valid","validation_contract:","variabl"],"architecture/05--searchers.html":["#","'test'",")","=","assum","client,","client:","customer’","defined,","differ","end","example,","following:","found","hash.","ledger","ledger.","ledgersync::quickbooksonline::customer::searcher.new(","ledgersync::searchresult","lookup","name:","next","next_search","object","option","order","pagin","previou","previous_search","queri","query:","rais","resourc","result","result.error","result.failure?","result.resourc","result.success?","results,","return","scan","search","searcher","searcher.next_search","searcher.previous_search","searcher.search","set","someth","strategies.","string","take","us"]},"length":11},"tokenStore":{"root":{"1":{"docs":{},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"2":{"docs":{},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}},".":{"0":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.023622047244094488}}},"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"3":{"docs":{},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"4":{"docs":{},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"5":{"docs":{},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.03125}}}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"_":{"docs":{},"t":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.010869565217391304}}},":":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}}}}}}}}}},"p":{"docs":{},"t":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}},"t":{"docs":{},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}},"v":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.03125},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.014492753623188406}}}}}},"d":{"docs":{},"d":{"docs":{"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":0.0625}}}},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"’":{"docs":{"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":0.0625}}}}}}}}}}}},"i":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}},"s":{"docs":{},":":{"docs":{"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":0.0625}}},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.021739130434782608},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}},"b":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}},")":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}},"l":{"docs":{},"w":{"docs":{},"a":{"docs":{},"y":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}},"s":{"docs":{},")":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.043478260869565216},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.010869565217391304},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.023622047244094488}},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}}}}}}}},"o":{"docs":{},"m":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}},"a":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.010869565217391304},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"architecture/":{"ref":"architecture/","tf":10}}}}}}}}}}},"g":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},".":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}},"m":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}},"n":{"docs":{},"d":{"docs":{},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}},"o":{"docs":{},"t":{"docs":{},"h":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.03125}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.025362318840579712},"architecture/":{"ref":"architecture/","tf":0.08333333333333333},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":10.094488188976378},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.02857142857142857}}},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}},"l":{"docs":{},"e":{"docs":{},"d":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"_":{"docs":{},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"_":{"docs":{},"t":{"docs":{},"o":{"docs":{},"_":{"docs":{},"s":{"docs":{},"a":{"docs":{},"v":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},":":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}}}},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},":":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}}}}}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.02197802197802198}},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{"./":{"ref":"./","tf":0.03125}}}},"n":{"docs":{},"t":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}}}},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"architecture/":{"ref":"architecture/","tf":0.08333333333333333}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.03296703296703297}}}}}}}},"m":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"getting-started/04--report-a-bug.html":{"ref":"getting-started/04--report-a-bug.html","tf":0.05555555555555555}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}},"n":{"docs":{},"y":{"docs":{},"\"":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}},",":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}}}},"'":{"docs":{},",":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}},"d":{"docs":{},"e":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.01932367149758454}},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}},"s":{"docs":{},"e":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}},".":{"docs":{"getting-started/04--report-a-bug.html":{"ref":"getting-started/04--report-a-bug.html","tf":0.05555555555555555}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":0.06666666666666667}}}}}}},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"getting-started/04--report-a-bug.html":{"ref":"getting-started/04--report-a-bug.html","tf":0.05555555555555555},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.025362318840579712},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}},"e":{"docs":{},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}},"u":{"docs":{},"d":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.015748031496062992},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.023255813953488372},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}},"e":{"docs":{},"r":{"docs":{},"'":{"docs":{},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"_":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}}}}}}}}},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227}}},".":{"docs":{},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"d":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}}}}}},")":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}},":":{"docs":{},":":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},":":{"docs":{},":":{"docs":{},"u":{"docs":{},"p":{"docs":{},"d":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}},"’":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}},"_":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.02197802197802198}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.02197802197802198}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},":":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.03125},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}},"s":{"docs":{},")":{"docs":{},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.014492753623188406},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.02197802197802198}},"i":{"docs":{},"t":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}},",":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.031007751937984496}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}},"d":{"docs":{},"e":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"(":{"docs":{},"h":{"docs":{},"a":{"docs":{},"s":{"docs":{},"h":{"docs":{},":":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},",":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.03125},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":0.0625},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.015748031496062992},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.02857142857142857}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}}}}}},"c":{"docs":{},"u":{"docs":{},"s":{"docs":{},"s":{"docs":{"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":0.06666666666666667}}}}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},".":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"e":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}},"r":{"docs":{},"i":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.02197802197802198}}}}},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{},"i":{"docs":{},"l":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.03125}}}}}},"c":{"docs":{},"h":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.02197802197802198}}}}},"r":{"docs":{},"p":{"docs":{},"s":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.03125}}}}},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},":":{"docs":{"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":0.0625}}}}}}}},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}},":":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}}}}}}}},"p":{"docs":{},"i":{"docs":{},"r":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"i":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227}},":":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}}}}}}},"n":{"docs":{},"d":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}},"v":{"docs":{},"[":{"docs":{},"'":{"docs":{},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"s":{"docs":{},"_":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"_":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"'":{"docs":{},"]":{"docs":{},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}}}}}},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"'":{"docs":{},"]":{"docs":{},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"l":{"docs":{},"m":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"'":{"docs":{},"]":{"docs":{},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"m":{"docs":{},"s":{"docs":{},")":{"docs":{},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}},"t":{"docs":{},"c":{"docs":{},".":{"docs":{},")":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227}},",":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}},"g":{"docs":{},"e":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.03125},"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":0.125},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":0.0625}},"e":{"docs":{},":":{"docs":{"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":0.0625}}}}}}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.03125}}}}},"t":{"docs":{},",":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":0.06666666666666667}},".":{"docs":{"./":{"ref":"./","tf":0.03125}}}}}}},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227}}}}},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":0.06666666666666667},"getting-started/04--report-a-bug.html":{"ref":"getting-started/04--report-a-bug.html","tf":0.05555555555555555}}}}}}},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}},"o":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}},"h":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{"./":{"ref":"./","tf":0.03125}}}},"l":{"docs":{},"p":{"docs":{"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":10.133333333333333},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}},"a":{"docs":{},"s":{"docs":{},"h":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}},"p":{"docs":{},"p":{"docs":{},"i":{"docs":{"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":0.06666666666666667}}}}},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.023622047244094488},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}}}},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{"architecture/":{"ref":"architecture/","tf":0.08333333333333333}}}}},",":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":10}}}}}}}},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":10.125}}},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}},"c":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}},"e":{"docs":{},".":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"d":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}},"d":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227}}},"t":{"docs":{},"!":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{"getting-started/04--report-a-bug.html":{"ref":"getting-started/04--report-a-bug.html","tf":0.1111111111111111}}}}},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}}}}},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.0625}}}}}},"l":{"docs":{},"e":{"docs":{},"d":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.014492753623188406},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.015748031496062992},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.024154589371980676},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.02197802197802198},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}},"s":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.03125},"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}},".":{"docs":{"./":{"ref":"./","tf":0.03125},"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{"./":{"ref":"./","tf":0.03125},"architecture/":{"ref":"architecture/","tf":0.08333333333333333},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.014492753623188406}},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}},":":{"docs":{"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":0.06666666666666667}},":":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}}}}}}}}}}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},":":{"docs":{},":":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}},":":{"docs":{},":":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},":":{"docs":{},":":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"d":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},":":{"docs":{},":":{"docs":{},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},":":{"docs":{},":":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"u":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},":":{"docs":{},":":{"docs":{},"c":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},")":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"u":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},":":{"docs":{},":":{"docs":{},"c":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}},":":{"docs":{},":":{"docs":{},"d":{"docs":{},"e":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}}}}}}}}}},".":{"docs":{"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":0.06666666666666667}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}}}}}}}}}},"_":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":0.0625}}}}}},"i":{"docs":{},"d":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.014492753623188406}}}}},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.010869565217391304},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.015748031496062992},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227}}},"’":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}},"a":{"docs":{},"r":{"docs":{},"n":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}}}},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"architecture/":{"ref":"architecture/","tf":0.08333333333333333}}}}}},"i":{"docs":{},"b":{"docs":{},"r":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.03125},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{"./":{"ref":"./","tf":0.0625}},"e":{"docs":{},".":{"docs":{},"t":{"docs":{},"x":{"docs":{},"t":{"docs":{},".":{"docs":{"./":{"ref":"./","tf":0.03125}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":0.0625}}}}},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}},"u":{"docs":{},"p":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}},"a":{"docs":{},"y":{"docs":{},"e":{"docs":{},"r":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.0625},"getting-started/04--report-a-bug.html":{"ref":"getting-started/04--report-a-bug.html","tf":0.1111111111111111}}},"r":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.028985507246376812},"architecture/":{"ref":"architecture/","tf":0.08333333333333333},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.024154589371980676},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":10.054945054945055}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.010869565217391304}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}}}}},")":{"docs":{},".":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}},"_":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}}}}}}},"s":{"docs":{},".":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}},":":{"docs":{},":":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},")":{"docs":{},".":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}}},".":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"?":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}},"a":{"docs":{},"u":{"docs":{},"t":{"docs":{},"h":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.023622047244094488}}}}}},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.015748031496062992},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}},":":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}},"s":{"docs":{},":":{"docs":{"architecture/":{"ref":"architecture/","tf":0.08333333333333333}}}}}}}}},"l":{"docs":{},"d":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"n":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}},"e":{"docs":{},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}}}}}},"c":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}},"u":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}},":":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"e":{"docs":{},"w":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.015748031496062992}}}}}},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}},"p":{"docs":{},"u":{"docs":{},"b":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"./":{"ref":"./","tf":0.03125}}}}}},"t":{"docs":{},",":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}},"i":{"docs":{},"n":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.02857142857142857}}}}},"s":{"docs":{},"s":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":0.06666666666666667}}}}}}},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}},"y":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}},":":{"docs":{},":":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.010869565217391304},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.02197802197802198}},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}}},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}}},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203},"getting-started/04--report-a-bug.html":{"ref":"getting-started/04--report-a-bug.html","tf":0.1111111111111111},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}},"v":{"docs":{},"i":{"docs":{},"o":{"docs":{},"u":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}},"s":{"docs":{"getting-started/04--report-a-bug.html":{"ref":"getting-started/04--report-a-bug.html","tf":0.05555555555555555}},"_":{"docs":{},"s":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}}}}}}}}},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227}}}}}},"i":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},",":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}},"s":{"docs":{},"i":{"docs":{},"b":{"docs":{},"l":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}}},"s":{"docs":{},"l":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.03125}},".":{"docs":{"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":0.06666666666666667}}}}}}},"o":{"docs":{},"f":{"docs":{},"t":{"docs":{},"w":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.03125}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"./":{"ref":"./","tf":0.0625}}}}},"l":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},")":{"docs":{},",":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}}}}},":":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{"./":{"ref":"./","tf":0.03125}}}}},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.018115942028985508},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.015748031496062992}},".":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}},"m":{"docs":{},"e":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}},"p":{"docs":{},"l":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203},"architecture/":{"ref":"architecture/","tf":0.08333333333333333},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":10.031007751937985}},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"(":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},".":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}}}}}},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}},"e":{"docs":{},"r":{"docs":{"architecture/":{"ref":"architecture/","tf":0.08333333333333333},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":10.057142857142857}},"s":{"docs":{},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"_":{"docs":{},"s":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"v":{"docs":{},"i":{"docs":{},"o":{"docs":{},"u":{"docs":{},"s":{"docs":{},"_":{"docs":{},"s":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}}}}}}}}},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}},"e":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}},"i":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},",":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},"i":{"docs":{},"f":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.010869565217391304},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}},"i":{"docs":{},"c":{"docs":{},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}},"a":{"docs":{},"l":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":5.003623188405797},"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":0.06666666666666667}}}}},"e":{"docs":{},"p":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}},".":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}}}},"i":{"docs":{},"c":{"docs":{},"t":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}},"v":{"docs":{},"e":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}},"n":{"docs":{},"g":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}},",":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.015748031496062992}}}}}},"u":{"docs":{},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}},"r":{"docs":{},"e":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"b":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}},"c":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"f":{"docs":{},"u":{"docs":{},"l":{"docs":{},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}},"l":{"docs":{},"i":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}}}}},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}},"s":{"docs":{},",":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}},"a":{"docs":{},"n":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.03125}}}}},"h":{"docs":{},"a":{"docs":{},"t":{"docs":{},"’":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},":":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}}},"u":{"docs":{},"e":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}},"y":{"docs":{},"p":{"docs":{},"i":{"docs":{},"c":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}},"e":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.014492753623188406}},"s":{"docs":{},")":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}},".":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}},"w":{"docs":{},"o":{"docs":{"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":0.06666666666666667},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.015748031496062992}}}}}},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.03125}}}}},"i":{"docs":{},"q":{"docs":{},"u":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}},"p":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.010869565217391304},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}},"e":{"docs":{},"_":{"docs":{},"d":{"docs":{},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"v":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}},":":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}}}}},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}},"s":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.018115942028985508},"getting-started/04--report-a-bug.html":{"ref":"getting-started/04--report-a-bug.html","tf":0.05555555555555555},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.023622047244094488},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.02197802197802198},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.04285714285714286}}},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}},":":{"docs":{},":":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}}}}}}}}}}}}}}}}},"v":{"2":{"docs":{},".":{"3":{"docs":{},".":{"1":{"docs":{"./":{"ref":"./","tf":0.03125}}},"docs":{}}},"docs":{}}},"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.014492753623188406},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.03296703296703297}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},":":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}},"u":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.025362318840579712},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"|":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}},"i":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.010869565217391304}}}}}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"r":{"docs":{},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}},"'":{"docs":{},"l":{"docs":{},"e":{"docs":{},"d":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"_":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"'":{"docs":{"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":0.0625}}}}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"_":{"1":{"2":{"3":{"docs":{},"'":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}},"docs":{}},"docs":{}},"docs":{}}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}},"'":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}},"b":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":0.0625}}}}},"g":{"docs":{"getting-started/04--report-a-bug.html":{"ref":"getting-started/04--report-a-bug.html","tf":5.111111111111111}},"s":{"docs":{},".":{"docs":{"getting-started/04--report-a-bug.html":{"ref":"getting-started/04--report-a-bug.html","tf":0.05555555555555555}}}}}},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.015748031496062992}}}},"s":{"docs":{},"e":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}},"i":{"docs":{},"c":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}},"e":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"y":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{"getting-started/01--installation.html":{"ref":"getting-started/01--installation.html","tf":0.0625}}}}}}}}}},"#":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.025362318840579712},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.015748031496062992},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.09302325581395349},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.02197802197802198},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.08571428571428572}}},"(":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"u":{"docs":{},"g":{"docs":{},"h":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},".":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.015748031496062992},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.01932367149758454},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},":":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}},"s":{"docs":{},"e":{"docs":{},"e":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}},")":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.014492753623188406},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}},"e":{"docs":{},"n":{"docs":{},"v":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}}}}},"=":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.018115942028985508},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.03875968992248062},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.07142857142857142}},">":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.13178294573643412},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"architecture/":{"ref":"architecture/","tf":0.08333333333333333}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},":":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}}}},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}},"o":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}},"n":{"docs":{},"i":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}},"i":{"docs":{},"n":{"docs":{"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":0.06666666666666667}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"getting-started/03--get-help.html":{"ref":"getting-started/03--get-help.html","tf":0.06666666666666667}}}}}}}},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227}}}}}},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}},"s":{"docs":{},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},",":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227}},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"p":{"docs":{},"l":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}},"x":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}},"_":{"docs":{},"s":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}}}}},"e":{"docs":{},"d":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}},"t":{"docs":{},"s":{"docs":{},"u":{"docs":{},"i":{"docs":{},"t":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}}}},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},":":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}},"w":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.014492753623188406},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}},":":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}},"i":{"docs":{},"l":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}},",":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.06201550387596899}}},")":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":5.003623188405797}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.014492753623188406},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}},"y":{"docs":{},":":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"l":{"docs":{},"m":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},":":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}}}}}}},"d":{"docs":{},"i":{"docs":{},"l":{"docs":{},"i":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.010869565217391304},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.014492753623188406}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}},",":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"h":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}},"_":{"docs":{},"t":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}},":":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203}}}}}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"h":{"docs":{},"i":{"docs":{},"p":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}}}}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.015748031496062992},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}},",":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}},"s":{"docs":{},".":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}},"i":{"docs":{},"r":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.010869565217391304},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.036231884057971016},"architecture/":{"ref":"architecture/","tf":0.08333333333333333},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":10.106280193236715},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.03296703296703297},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.02857142857142857}},"e":{"docs":{},"(":{"docs":{},"s":{"docs":{},")":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}},":":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}},"s":{"docs":{},"(":{"docs":{},"s":{"docs":{},")":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}},".":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227}}}},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227},"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}}}}},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}},"e":{"docs":{},"/":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.007246376811594203},"architecture/":{"ref":"architecture/","tf":0.08333333333333333},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}},".":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"l":{"docs":{},"e":{"docs":{},"d":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"_":{"docs":{},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"_":{"docs":{},"t":{"docs":{},"o":{"docs":{},"_":{"docs":{},"s":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"u":{"docs":{},"r":{"docs":{},"e":{"docs":{},"?":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"c":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"?":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}}}}},"s":{"docs":{},",":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227},"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}},"r":{"docs":{},"i":{"docs":{},"e":{"docs":{},"v":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.00966183574879227}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"getting-started/04--report-a-bug.html":{"ref":"getting-started/04--report-a-bug.html","tf":5.166666666666667}}}}}},"g":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}}}}}}}},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}},"u":{"docs":{},"b":{"docs":{},"i":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/02--resources.html":{"ref":"architecture/02--resources.html","tf":0.004830917874396135}}}}},"a":{"docs":{},"i":{"docs":{},"s":{"docs":{"architecture/05--searchers.html":{"ref":"architecture/05--searchers.html","tf":0.014285714285714285}}}}}},"w":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015},"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}},"|":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},",":{"docs":{"getting-started/02--quick-start.html":{"ref":"getting-started/02--quick-start.html","tf":0.0036231884057971015}}}}}},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"_":{"docs":{},"t":{"docs":{},"o":{"docs":{},"_":{"docs":{},"s":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},",":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}}}}}}}}}}}}}}},"`":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"`":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496}}}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"architecture/01--clients.html":{"ref":"architecture/01--clients.html","tf":0.007874015748031496},"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}}},"\"":{"9":{"8":{"7":{"6":{"5":{"4":{"3":{"2":{"1":{"docs":{},"\"":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}},",":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"\"":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}}}}}}}}}}}}}},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"\"":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}}}}}}},"x":{"docs":{},"t":{"docs":{},"_":{"1":{"2":{"3":{"docs":{},"\"":{"docs":{},",":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}}}}},"docs":{}},"docs":{}},"docs":{}},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"\"":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"\"":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}}}}}}}}}}}},"i":{"docs":{},"d":{"docs":{},"\"":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.007751937984496124}}}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"\"":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}}}}}}}}}}},"p":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"\"":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}}}}}}}},"s":{"docs":{},"u":{"docs":{},"b":{"docs":{},"s":{"docs":{},"i":{"docs":{},"d":{"docs":{},"i":{"docs":{},"a":{"docs":{},"r":{"docs":{},"y":{"docs":{},"\"":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.023255813953488372}}}}}}},"{":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}}},"}":{"docs":{"architecture/03--serialization.html":{"ref":"architecture/03--serialization.html","tf":0.015503875968992248}}},",":{"docs":{"architecture/04--operations.html":{"ref":"architecture/04--operations.html","tf":0.01098901098901099}}}},"length":651},"corpusTokens":["\"987654321\"","\"987654321\",","\"companyname\"","\"email\"","\"ext_123\",","\"externalid\"","\"firstname\"","\"id\"","\"lastname\"","\"phone\"","\"subsidiary\"","\"test","#","'ext_123'","'ledger_sync'","'sampl","'test","'test'","(e.g.","(note:","(see","(though",")",",",".",".env","1.","2,","2.","2.0","3.","4.","5.","=","=>","`client`","above)","above,","accept","access_token,","access_token:","account","actual","add","along","alway","always)","amount,","and,","anoth","api","api.","application’","architectur","arguments.","array","as:","assum","attribut","attribute.","attributes.","authent","authentication.","autom","automat","avail","back","base","basic","be","bug","bugs.","bundl","call","call.","carri","case","case.","chang","channel","check","class","class.","classes,","click","client","client,","client.","client.ledger_attributes_to_sav","client.ledger_attributes_to_save.each","client:","client_id:","client_secret:","code","comment","company\"","company\",","company',","companyname:","compar","complet","consist","contract","convent","convention.","convers","creat","create,","credenti","crud","custom","custom_resourc","customcontract","customer',","customer)","customer,","customer.attributes.","customer.companynam","customer.ledger_id","customer.references.","customer::operations::upd","customer_external_id","customer’","customresource.new(foo:","database.","defin","defined,","defined.","definit","delete,","deseri","deserializer.","deserializer.deserialize(hash:","detail","details),","determin","differ","different.","directli","directori","disabl","discuss","displayname:","document","dri","duplic","dure","each","easili","end","enums).","env['quickbooks_online_client_id'],","env['quickbooks_online_client_secret'],","env['quickbooks_online_realm_id'],","erps,","error","etc.)","etc.),","etc.).","example,","example:","execute:","expir","explicitli","external_id","external_id:","fals","file","follow","following:","foo","format","found","function","functionality,","gem","gemfil","gemfile:","gener","get,","github","given","gotcha","group","group.","guid","h","h,","handl","handling.","happi","hash","hash.","help","here","high","id","implement","includ","infer","inherit","input","instal","instanc","instance.","instanti","intern","introduct","invalid","issu","it!","it.","join","key","layer","learn","ledger","ledger,","ledger.","ledger_id","ledger_sync","ledgers,","ledgers.","ledgersync","ledgersync,","ledgersync.","ledgersync.resources.","ledgersync:","ledgersync::","ledgersync::ledgers::netsuite::customer.new)","ledgersync::ledgers::quickbooksonline::client.resourc","ledgersync::netsuite::customer.new(","ledgersync::netsuite::customer::deserializer.new","ledgersync::netsuite::customer::serializer.new","ledgersync::operationresult","ledgersync::quickbooksonline::client.new(","ledgersync::quickbooksonline::customer.new(","ledgersync::quickbooksonline::customer::operations::create.new(","ledgersync::quickbooksonline::customer::searcher.new(","ledgersync::searchresult","ledger’","level","librari","licens","license.txt.","line","look","lookup","main","maintain","make","mani","manual","match","mean","method","method,","methods,","more","more.","multipl","name","name,","name:","necessary,","needed.","netsuit","new","next","next_search","nil","nil)","nil,","note:","now","oauth","object","object:","objects:","offer","old","onc","onlin","online.","op.valid?","open","oper","operate.","operation).","operation,","operation.","operation.perform","operation_class","operation_class.new(","operations.","operations::create).","option","order","out","output","output:","overview","page","pagin","paramet","pass","passion","payment,","payment::","perform","perform.","performed,","performed.","permitted.","platform","pleas","possibl","post,","present","previou","previous","previous_search","primari","project,","proper","provid","public","put,","queri","query:","quick","quickbook","rais","readili","realm_id:","refer","reference,","reference.","refresh","refresh_token","refresh_token,","refresh_token:","regardless","relationship","report","request","request,","request.","requests.","requir","resourc","resource(s)","resource,","resource.","resource:","resources(s)","resources.","respons","response/error","result","result.error","result.failure?","result.operation.client.ledger_attributes_to_save.each","result.resourc","result.success?","results,","retriev","return","returned.","root","rubi","same","sampl","save","save.","scan","schema","schemas,","search","searcher","searcher.next_search","searcher.previous_search","searcher.search","searchers.","section","see","serial","serializer.serialize(resource:","serializers.","set","similar,","simpli","singl","slack","slack.","so:","software,","solutions),","someth","sourc","special","specif","specific,","start","step","store","strategies,","strategies.","strict","string","string,","strive","structur","subset","successful.","successfulli","summari","support","sure","sync","take","term","that’","things:","thrown","token","translat","true","two","type","type.","types)","typic","under","uniqu","unknown","unless","updat","update.","update_dotenv","update_dotenv:","us","util","util::resourcesbuild","v2.3.1","valid","validation:","validation_contract:","valu","values.","value|","variabl","vendor,","visit","want","yourself","{","|attribute_to_save,","|key,","}"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"Introduction","summary":"An open-source library for easily syncing with accounting software, general ledgers, ERPs, and other ledgers.","keywords":"","body":"LedgerSync v2.3.1 Documentation\n\nAn open-source library for easily syncing with accounting software, general ledgers, ERPs, and other ledgers.\n\n\n\n\nJoin the Conversation\nClick here to join our public\nSlack group.\nLicense\nThe gem is available as open source under the terms of the licenses detailed\nin LICENSE.txt.\n"},"getting-started/01--installation.html":{"url":"getting-started/01--installation.html","title":"Installation","keywords":"","body":"Gemfile\nAdd this line to your application’s Gemfile:\ngem 'ledger_sync'\n\nAnd then execute:\nbundle\n\n\nDirectly\nOr install it yourself as:\ngem install ledger_sync\n"},"getting-started/02--quick-start.html":{"url":"getting-started/02--quick-start.html","title":"Quick Start","keywords":"","body":"Quick Start\nOverview\nTo use LedgerSync, you must carry out an Operation. The operation will be ledger-specific and will require the\nfollowing:\n\nClient\nResource(s)\n\n1. Create a Client\nClients are responsible for the authentication and requests for a specific ledger. In this example, we will assume you\nare using the QuickBooks Online ledger.\n\nNote: Each ledger has different requirements for authentication. Please visit the ledger-specific pages to learn more.\n\nclient = LedgerSync::QuickBooksOnline::Client.new(\n access_token: access_token, # assuming this is defined\n client_id: ENV['QUICKBOOKS_ONLINE_CLIENT_ID'],\n client_secret: ENV['QUICKBOOKS_ONLINE_CLIENT_SECRET'],\n realm_id: ENV['QUICKBOOKS_ONLINE_REALM_ID'],\n refresh_token: refresh_token # assuming this is defined\n)\n\n2. Create resources(s)\nCreate a resource on which to operate. Some resources have references to other resources. You can\nuse Util::ResourcesBuilder to create resources and relationships from a structured hash.\n\nNote: Resources are ledger-specific, meaning they may have different attributes and references compared to other\n\n\nledgers. Please visit the Reference to learn about resource attributes.\n\nresource = LedgerSync::QuickBooksOnline::Customer.new(\n DisplayName: 'Sample Customer',\n external_id: customer_external_id # A unique ID from your platform\n)\n\n3. Create an operation\nGiven our client and resource from above, we can now create an Operation. Operations are typically CRUD-like\nmethods, typically (though not always) only making a single request.\nOperations automatically determine a Serializer and Deserializer. These serializers are used to translate to and the\nfrom the ruby Resource in the format required by the ledger.\noperation = LedgerSync::QuickBooksOnline::Customer::Operations::Create.new(\n client: client,\n resource: resource\n)\n\n4. Perform the operation\nThe next step is to perform the operation. You can do this by simply calling perform.\nresult = operation.perform # Returns a LedgerSync::OperationResult\n\n5. Save updates to authentication\nBecause QuickBooks Online uses Oauth 2, you must always be sure to save the access_token, refresh_token, and expirations\nas they can change with any API call. Operations will always save values back to the client.\nAutomatically update values in .env\nIf you have a .env file present in the root directory of your project, the client will automatically comment out old\nvalues and update new values.\nIf you want to disable this functionality, you can do so by setting update_dotenv to false when instantiating the\nobject:\nclient = LedgerSync::QuickBooksOnline::Client.new(\n access_token: access_token, # assuming this is defined\n client_id: ENV['QUICKBOOKS_ONLINE_CLIENT_ID'],\n client_secret: ENV['QUICKBOOKS_ONLINE_CLIENT_SECRET'],\n realm_id: ENV['QUICKBOOKS_ONLINE_REALM_ID'],\n refresh_token: refresh_token, # assuming this is defined\n update_dotenv: false\n)\n\nManually save values\nresult.operation.client.ledger_attributes_to_save.each do |key, value|\n # save values\nend\n\nSummary\nThat’s it! Assuming proper authentication values and valid values on the resource, this will result in a new customer\nbeing created in QuickBooks Online.\nThere are many other resources and operations that can be performed in QuickBooks Online. For a complete guide of these\nand other ledgers, visit the Reference.\n"},"getting-started/03--get-help.html":{"url":"getting-started/03--get-help.html","title":"Get Help","keywords":"","body":"Get Help\nThere is a group of passionate maintainers happy to help you get started with LedgerSync. There are two main channels\nfor discussing LedgerSync: Github\nand Slack.\n"},"getting-started/04--report-a-bug.html":{"url":"getting-started/04--report-a-bug.html","title":"Report a bug","keywords":"","body":"Report a bug\nPlease open an issue on Github to report any bugs. Please\ncheck if the bug has previously been reported and comment on the open issue with your use case.\n"},"architecture/":{"url":"architecture/","title":"Architecture","keywords":"","body":"LedgerSync consists of the following high-level objects:\n\nClients\nResources\nSerialization\nOperations\nSearchers\nResults\n\n"},"architecture/01--clients.html":{"url":"architecture/01--clients.html","title":"Clients","keywords":"","body":"Clients\nOverview\nClients handle the authentication and requests to the ledger. A ledger may have different authentication strategies, so\nclients will accept different arguments. For example, QuickBooks Online utilizes Oauth 2.0 while NetSuite offers Token\nBased Authentication. While similar, the required keys are different.\nHow to use\nUnless you are customizing LedgerSync, you will always pass an instantiated client to an object (e.g. an operation). The\nobject will handle using the client as needed.\nAs most clients implement basic request functionality (e.g. get, put, post, delete, etc.), you can call these\nmethods directly to perform custom requests. Refer to the specific Client definitions for what parameters are permitted.\nGotchas\nOauth 2.0\nClients store the authentication details for the ledger. Given that Oauth 2.0 tokens can refresh during a request, these\nclients will handle saving credentials back to the client instance. Typically (though some clients offer more automated\nsolutions), you will want to save any changes back to your database. You can use client.ledger_attributes_to_save to\nretrieve a hash of which attributes to save. Your code to do so could look like the following:\n# Assuming `client` is defined as an instance of a ledger Client class\nclient.ledger_attributes_to_save.each do |attribute_to_save, value|\n # Store value\nend\n\n"},"architecture/02--resources.html":{"url":"architecture/02--resources.html","title":"Resources","keywords":"","body":"Resources\nOverview\nResources are named ruby objects (e.g. Customer, Payment, etc.) with strict attributes (e.g. name, amount, etc.)\n. LedgerSync provides resources specific to each ledger. While it is possible to create your own resources (see\nCustomization for more details), this section refers to provided ledger-specific resources.\nThe library strives to make each resource and attribute name match the ledger API. This naming convention will help you\nmore readily match ledger documentation to LedgerSync resources.\nEvery resource, regardless of ledger, implements a ledger_id and external_id attribute. The ledger_id is the ID\ngiven by the ledger, while the external_id is your internal ID for the resource.\nHow to use\nResources are primary used as the inputs and outputs of operations and searchers. A resource is passed to an operation\nalong with a client. Once the operation is successfully performed, a duplicated and updated resource is returned.\nResources have two layers of validation:\n\nThe Resource\nOperations\n\nWhen instantiating a resource, validations are performed. These validations include class checks and, if necessary,\nvalue checks (e.g. enums). When performing an operation, validations are performed based on what attributes are required\nfor the operation to be successful. For example, the ledger_id should be nil on create, but it should be present\non\nupdate.\nAvailable resources\nYou can see all resources available for a given ledger by calling resources on the ledger’s Client like so:\nLedgerSync::Ledgers::QuickBooksOnline::Client.resources\nThis returns a hash of resource types to classes, where the resource types are unique (e.g. customer, vendor, etc.).\nYou can see all resources available in LedgerSync by calling LedgerSync.resources. This returns an array (note: not a\nhash as multiple ledgers have the same types) of resource classes that have been created inheriting the LedgerSync::\nResource class.\nResource Attributes\nResources have defined attributes. Attributes are explicitly defined. An error is thrown if an unknown attribute is\npassed to it. You can retrieve the attributes of a resource by calling Customer.attributes.\nA subset of these attributes may be a reference, which is simply a special type of attribute that references another\nresource. You can retrieve the references of a resource by calling Customer.references.\n"},"architecture/03--serialization.html":{"url":"architecture/03--serialization.html","title":"Serialization","keywords":"","body":"Serializers\nSerializers take a Resource and output a hash. For example:\ncustomer = LedgerSync::NetSuite::Customer.new(\n companyName: 'Test Company',\n external_id: 'ext_123'\n)\nserializer = LedgerSync::NetSuite::Customer::Serializer.new\nserializer.serialize(resource: customer)\n# Sample output:\n# {\n# \"companyName\" => \"Test Company\",\n# \"externalId\" => \"ext_123\",\n# \"email\" => nil,\n# \"phone\" => nil,\n# \"firstName\" => nil,\n# \"lastName\" => nil,\n# \"subsidiary\" => nil\n# }\nend\n\n\nDeserializers\nDeserializers take a hash and output a Resource. For example:\nh = {\n \"companyName\" => \"Test Company\",\n \"externalId\" => \"ext_123\",\n \"email\" => nil,\n \"id\" => \"987654321\",\n \"phone\" => nil,\n \"firstName\" => nil,\n \"lastName\" => nil,\n \"subsidiary\" => nil\n}\ndeserializer = LedgerSync::NetSuite::Customer::Deserializer.new\ncustomer = deserializer.deserialize(hash: h, resource: LedgerSync::Ledgers::NetSuite::Customer.new)\ncustomer.ledger_id # => \"987654321\"\ncustomer.companyName # => \"Test Company\"\n\n\nHow to use\nSerializers and deserializers are automatically inferred by each operation based on the naming convention. It is\npossible to create your own serializers. Please see Customization for more.\n"},"architecture/04--operations.html":{"url":"architecture/04--operations.html","title":"Operations","keywords":"","body":"Operations\nEach ledger defines operations that can be performed on specific resources (e.g. Customer::Operations::Update\n, Payment::\nOperations::Create). The operation defines two key things:\n\na Contract class which is used to validate the resource using the dry-validation gem\na perform instance method, which handles the actual API requests and response/error handling.\n\n\nNote: Ledgers may support different operations for each resource type.\n\nContracts\nContracts are dry-validation schemas, which determine if an operation can be performed. You can create custom schemas\nand pass them to operations. Assuming you have an operation_class variable and foo is an attribute of a\ncustom_resource (see above) that is required to be a string, you can implement it with the following:\n\nclass CustomContract true\n# An invalid case\ncustom_resource = CustomResource.new(foo: nil)\noperation_class.new(\n client: client,\n resource: resource,\n validation_contract: CustomContract\n)\nop.valid? # => false\n\n"},"architecture/05--searchers.html":{"url":"architecture/05--searchers.html","title":"Searchers","keywords":"","body":"Searchers\nSearchers are used to lookup and scan objects in the ledger. A searcher takes a client, query string and\noptional pagination hash. For example, to search customer’s by name:\nsearcher = LedgerSync::QuickBooksOnline::Customer::Searcher.new(\n client: client, # assuming this is defined,\n query: 'test'\n)\nresult = searcher.search # returns a LedgerSync::SearchResult\nif result.success?\n resources = result.resources\n # Do something with found resources\nelse\n # result.failure?\n raise result.error\nend\n# Different ledgers may use different pagination strategies. In order\n# to get the next and previous set of results, you can use the following:\nnext_searcher = searcher.next_searcher\nprevious_searcher = searcher.previous_searcher\n\n"}}} \ No newline at end of file diff --git a/documentation/architecture/01--clients.md b/documentation/architecture/01--clients.md new file mode 100644 index 00000000..b05e7e46 --- /dev/null +++ b/documentation/architecture/01--clients.md @@ -0,0 +1,31 @@ +# Clients + +## Overview + +Clients handle the authentication and requests to the ledger. A ledger may have different authentication strategies, so +clients will accept different arguments. For example, QuickBooks Online utilizes Oauth 2.0 while NetSuite offers Token +Based Authentication. While similar, the required keys are different. + +## How to use + +Unless you are customizing LedgerSync, you will always pass an instantiated client to an object (e.g. an operation). The +object will handle using the client as needed. + +As most clients implement basic request functionality (e.g. `get`, `put`, `post`, `delete`, etc.), you can call these +methods directly to perform custom requests. Refer to the specific Client definitions for what parameters are permitted. + +## Gotchas + +### Oauth 2.0 + +Clients store the authentication details for the ledger. Given that Oauth 2.0 tokens can refresh during a request, these +clients will handle saving credentials back to the client instance. Typically (though some clients offer more automated +solutions), you will want to save any changes back to your database. You can use `client.ledger_attributes_to_save` to +retrieve a hash of which attributes to save. Your code to do so could look like the following: + +```ruby +# Assuming `client` is defined as an instance of a ledger Client class +client.ledger_attributes_to_save.each do |attribute_to_save, value| + # Store value +end +``` diff --git a/documentation/architecture/02--resources.md b/documentation/architecture/02--resources.md new file mode 100644 index 00000000..484b5444 --- /dev/null +++ b/documentation/architecture/02--resources.md @@ -0,0 +1,50 @@ +# Resources + +## Overview + +Resources are named ruby objects (e.g. `Customer`, `Payment`, etc.) with strict attributes (e.g. `name`, `amount`, etc.) +. LedgerSync provides resources specific to each ledger. While it is possible to create your own resources (see +Customization for more details), this section refers to provided ledger-specific resources. + +The library strives to make each resource and attribute name match the ledger API. This naming convention will help you +more readily match ledger documentation to LedgerSync resources. + +Every resource, regardless of ledger, implements a `ledger_id` and `external_id` attribute. The `ledger_id` is the ID +given by the ledger, while the `external_id` is your internal ID for the resource. + +## How to use + +Resources are primary used as the inputs and outputs of operations and searchers. A resource is passed to an operation +along with a client. Once the operation is successfully performed, a duplicated and updated resource is returned. + +Resources have two layers of validation: + +1. The Resource +2. Operations + +When instantiating a resource, validations are performed. These validations include class checks and, if necessary, +value checks (e.g. enums). When performing an operation, validations are performed based on what attributes are required +for the operation to be successful. For example, the `ledger_id` should be `nil` on `create`, but it should be present +on +`update`. + +## Available resources + +You can see all resources available for a given ledger by calling `resources` on the ledger’s Client like so: + +`LedgerSync::Ledgers::QuickBooksOnline::Client.resources` + +This returns a hash of resource types to classes, where the resource types are unique (e.g. `customer`, `vendor`, etc.). + +You can see all resources available in LedgerSync by calling `LedgerSync.resources`. This returns an array (note: not a +hash as multiple ledgers have the same types) of resource classes that have been created inheriting the `LedgerSync:: +Resource` class. + +## Resource Attributes + +Resources have defined attributes. Attributes are explicitly defined. An error is thrown if an unknown attribute is +passed to it. You can retrieve the attributes of a resource by calling `Customer.attributes`. + +A subset of these `attributes` may be a `reference`, which is simply a special type of attribute that references another +resource. You can retrieve the references of a resource by calling `Customer.references`. + diff --git a/documentation/site/guides/architecture/serialization.md b/documentation/architecture/03--serialization.md similarity index 50% rename from documentation/site/guides/architecture/serialization.md rename to documentation/architecture/03--serialization.md index d9df4423..e0100b8e 100644 --- a/documentation/site/guides/architecture/serialization.md +++ b/documentation/architecture/03--serialization.md @@ -1,23 +1,13 @@ ---- -title: Serialization -weight: 3 -layout: guides ---- - -## Overview - -LedgerSync leverages serialization and deserialization to convert resources into the necessary hash formats the ledger expects. Generally, each resource will have 1 serializer and 1 deserializer. - -## Serializers +# Serializers -Serializers take a `Resource` and output a hash. For example: +Serializers take a [Resource](02--resources.md) and output a hash. For example: ```ruby -customer = LedgerSync::Ledgers::NetSuite::Customer.new( +customer = LedgerSync::NetSuite::Customer.new( companyName: 'Test Company', external_id: 'ext_123' ) -serializer = LedgerSync::Ledgers::NetSuite::Customer::Serializer.new +serializer = LedgerSync::NetSuite::Customer::Serializer.new serializer.serialize(resource: customer) # Sample output: # { @@ -32,9 +22,11 @@ serializer.serialize(resource: customer) end ``` -## Deserializers +--- + +# Deserializers -Deserializers take a hash and output a `Resource`. For example: +Deserializers take a hash and output a `Resource`. For example: ```ruby h = { @@ -47,13 +39,15 @@ h = { "lastName" => nil, "subsidiary" => nil } - -deserializer = LedgerSync::Ledgers::NetSuite::Customer::Deserializer.new +deserializer = LedgerSync::NetSuite::Customer::Deserializer.new customer = deserializer.deserialize(hash: h, resource: LedgerSync::Ledgers::NetSuite::Customer.new) customer.ledger_id # => "987654321" customer.companyName # => "Test Company" ``` -## How to use +--- + +# How to use -Serializers and deserializers are automatically inferred by each operation based on the naming convention. It is possible to create your own serializers. Please see [Customization](/guides/customization) for more. +Serializers and deserializers are automatically inferred by each operation based on the naming convention. It is +possible to create your own serializers. Please see Customization for more. diff --git a/documentation/site/guides/architecture/operations.md b/documentation/architecture/04--operations.md similarity index 55% rename from documentation/site/guides/architecture/operations.md rename to documentation/architecture/04--operations.md index ae574673..f12b9ea0 100644 --- a/documentation/site/guides/architecture/operations.md +++ b/documentation/architecture/04--operations.md @@ -1,24 +1,23 @@ ---- -title: Operations -weight: 4 -layout: guides ---- +## Operations -Each ledger defines operations that can be performed on specific resources (e.g. `Customer::Operations::Update`, `Payment::Operations::Create`). The operation defines two key things: +Each ledger defines operations that can be performed on specific resources (e.g. `Customer::Operations::Update` +, `Payment:: +Operations::Create`). The operation defines two key things: - a `Contract` class which is used to validate the resource using the `dry-validation` gem - a `perform` instance method, which handles the actual API requests and response/error handling. -
                      Note: - Ledgers may support different operations for each resource type. -
                      +> Note: Ledgers may support different operations for each resource type. -## Contracts +### Contracts -Contracts are dry-validation schemas, which determine if an operation can be performed. You can create custom schemas and pass them to operations. Assuming you have an `operation_class` variable and `foo` is an attribute of a `custom_resource` (see above) that is required to be a string, you can implement it with the following: +Contracts are dry-validation schemas, which determine if an operation can be performed. You can create custom schemas +and pass them to operations. Assuming you have an `operation_class` variable and `foo` is an attribute of a +`custom_resource` (see above) that is required to be a string, you can implement it with the following: ```ruby -class CustomContract < LedgerSync::Ledgers::Contract + +class CustomContract < LedgerSync::Contract params do required(:foo).filled(:string) end @@ -32,7 +31,6 @@ op = operation_class.new( validation_contract: CustomContract ) op.valid? # => true - # An invalid case custom_resource = CustomResource.new(foo: nil) operation_class.new( @@ -41,5 +39,4 @@ operation_class.new( validation_contract: CustomContract ) op.valid? # => false - ``` diff --git a/documentation/site/guides/architecture/searchers.md b/documentation/architecture/05--searchers.md similarity index 53% rename from documentation/site/guides/architecture/searchers.md rename to documentation/architecture/05--searchers.md index 4cf02ce0..a43c4405 100644 --- a/documentation/site/guides/architecture/searchers.md +++ b/documentation/architecture/05--searchers.md @@ -1,26 +1,21 @@ ---- -title: Searchers -weight: 5 -layout: guides ---- +# Searchers -Searchers are used to lookup and scan objects in the ledger. A searcher takes a `client`, `query` string and optional `pagination` hash. For example, to search customer's by name: +Searchers are used to lookup and scan objects in the ledger. A searcher takes a `client`, _query_ string and +optional `pagination` hash. For example, to search customer’s by name: ```ruby -searcher = LedgerSync::Ledgers::QuickBooksOnline::Customer::Searcher.new( - client: client # assuming this is defined, +searcher = LedgerSync::QuickBooksOnline::Customer::Searcher.new( + client: client, # assuming this is defined, query: 'test' ) - result = searcher.search # returns a LedgerSync::SearchResult - if result.success? resources = result.resources # Do something with found resources -else # result.failure? +else + # result.failure? raise result.error end - # Different ledgers may use different pagination strategies. In order # to get the next and previous set of results, you can use the following: next_searcher = searcher.next_searcher diff --git a/documentation/architecture/README.md b/documentation/architecture/README.md new file mode 100644 index 00000000..818cb873 --- /dev/null +++ b/documentation/architecture/README.md @@ -0,0 +1,8 @@ +LedgerSync consists of the following high-level objects: + +- [Clients](01--clients.md) +- [Resources](02--resources.md) +- [Serialization](03--serialization.md) +- [Operations](04--operations.md) +- [Searchers](05--searchers.md) +- [Results]() diff --git a/documentation/book.json b/documentation/book.json new file mode 100644 index 00000000..e579dc0b --- /dev/null +++ b/documentation/book.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + "code" + ] +} \ No newline at end of file diff --git a/documentation/build.sh b/documentation/build.sh deleted file mode 100755 index 81cf25ae..00000000 --- a/documentation/build.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) - -cd "$parent_path" -cd .. -bundle install -cd documentation -ruby generate.rb -cd site -bundle exec jekyll build -d ../../docs \ No newline at end of file diff --git a/documentation/generate.rb b/documentation/generate.rb deleted file mode 100755 index d6465a78..00000000 --- a/documentation/generate.rb +++ /dev/null @@ -1,32 +0,0 @@ -# frozen_string_literal: true - -# Setup -# -# gem install bundler -# Ensure you have http://localhost:5678 (or PORT) as a Redirect URI in QBO. - -require 'bundler/inline' - -gemfile do - source 'https://rubygems.org' - gem 'simply_serializable' - gem 'ledger_sync', path: '../' - gem 'pd_ruby' - gem 'rainbow' - gem 'byebug' -end - -require 'ledger_sync' -require 'pd_ruby' -require 'erb' -require 'fileutils' - -require_relative 'helper_methods' -require_relative 'generators/generator' -require_relative 'generators/guides/generator' -require_relative 'generators/reference/generator' - -Docs::Guides::Generator.new.generate -Docs::Reference::Generator.new.generate - -green 'All done!' diff --git a/documentation/generators/generator.rb b/documentation/generators/generator.rb deleted file mode 100644 index 16417e4f..00000000 --- a/documentation/generators/generator.rb +++ /dev/null @@ -1,80 +0,0 @@ -# frozen_string_literal: true - -require_relative 'template' - -module Docs - class Generator - module Methods - def clear_dir(path, except: []) - dir_path = docs_path(path) - yellow "Clearing: #{dir_path}" - Dir.foreach(dir_path) do |f| - next if except.include?(f) - - fn = File.join(dir_path, f) - next if f == '.' - next if f == '..' - - rm(fn) - end - green "Cleared: #{dir_path}" - nl - end - - def cp(src, dest, *args) - yellow "Copying #{src} to #{dest}" - FileUtils.cp_r(src, dest, *args) - green "Copied #{src} to #{dest}" - nl - end - - def destination_path(*args, **keywords) - docs_path(*args, **{ format: :md }.merge(keywords)) - end - - def docs_path(*path, format: nil) - path = path.map(&:to_s) - - File.join( - docs_root_path, - *path[0..-2], - [path.last, format].flatten.compact.join('.') - ) - end - - def docs_root_path - @docs_root_path ||= ENV.fetch('DOCS_ROOT_PATH', File.join(__dir__, '../site')) - end - - def ledgers - LedgerSync.ledgers - .to_a - .map(&:last) - .uniq - .to_a - .sort_by(&:root_key) - end - - def rm(filename) - yellow "Removing: #{filename}" - FileUtils.rm_rf(filename, secure: true) - green "Removed: #{filename}" - nl - end - - def template_path(*path, format: :md) - path = path.map(&:to_s) - - File.join( - docs_root_path, - '_templates', - *path[0..-2], - "#{path.last}.#{format}.erb" - ) - end - end - - include Methods - extend Methods - end -end diff --git a/documentation/generators/guides/generator.rb b/documentation/generators/guides/generator.rb deleted file mode 100644 index 492f8c2d..00000000 --- a/documentation/generators/guides/generator.rb +++ /dev/null @@ -1,36 +0,0 @@ -# frozen_string_literal: true - -module Docs - module Guides - class Generator < Docs::Generator - def generate - clear_dir( - self.class.destination_folder, - except: [ - 'index.md' - ] - ) - - ledgers.each_with_index do |ledger, i| - Docs::Template.new( - data: { - ledger: ledger, - weight: i + 1 - }, - destination_path: destination_path( - self.class.destination_folder, - ledger.root_key - ), - template_path: template_path(:guides, :ledger) - ).write - - nl - end - end - - def self.destination_folder - 'guides/ledgers' - end - end - end -end diff --git a/documentation/generators/reference/generator.rb b/documentation/generators/reference/generator.rb deleted file mode 100644 index 6883dd57..00000000 --- a/documentation/generators/reference/generator.rb +++ /dev/null @@ -1,76 +0,0 @@ -# frozen_string_literal: true - -require_relative 'ledger/generator' - -module Docs - module Reference - class Generator < Docs::Generator - def generate - ledgers.each do |ledger| - Ledger::Generator.new(ledger: ledger).generate - end - - generate_indexes - generate_layouts - update_nav - end - - private - - def generate_indexes - ledgers.each do |client| - Docs::Template.new( - data: { - client: client.client_class - }, - destination_path: docs_path(:reference, client.root_key, :resources, 'index.md'), - template_path: template_path( - :reference, - :resources, - :index - ) - ).write - end - end - - def generate_layouts - ledgers.each do |ledger| - Docs::Template.new( - data: { - client: ledger - }, - destination_path: docs_path(:_layouts, "reference_#{ledger.root_key}.html"), - template_path: template_path( - :_layouts, - :reference_ledger, - format: :html - ) - ).write - end - end - - def update_nav - config_path = docs_path('_config.yml') - config = YAML.load_file(config_path) - nav_links = config['header']['nav_links'] - nav_links.map do |nav_link| - if nav_link['label'] == 'Reference' - nav_link['subnav_links'] = ledgers.map do |ledger| - { - 'label' => ledger.name, - 'url' => "reference/#{ledger.root_key}", - 'type' => 'link' - } - end - else - nav_link - end - end - - File.open(config_path, 'w') do |h| - h.write config.to_yaml - end - end - end - end -end diff --git a/documentation/generators/reference/ledger/generator.rb b/documentation/generators/reference/ledger/generator.rb deleted file mode 100644 index 8dcd9ba6..00000000 --- a/documentation/generators/reference/ledger/generator.rb +++ /dev/null @@ -1,76 +0,0 @@ -# frozen_string_literal: true - -require 'yaml' - -module Docs - module Reference - module Ledger - class Generator < Docs::Generator - attr_reader :ledger - - def initialize(args = {}) - @ledger = args.fetch(:ledger) - - super - end - - def client_class - @client_class ||= ledger.client_class - end - - def generate - yellow "Generating Reference for #{key}" - remove_current_directory - copy_template_directory - generate_resource_files - green "Generated Reference for #{key}" - end - - def key - @key ||= ledger.root_key - end - - def resources - @resources ||= client_class.resources.to_a.sort - end - - private - - def copy_template_directory - cp(docs_path(:_includes, :reference, key), docs_path(:reference)) - end - - def remove_current_directory - rm(docs_path(:reference, key)) - end - - def generate_resource_files - FileUtils.mkdir(docs_path(:reference, key, :resources)) - - template_path = Generator.template_path(:reference, :resources, :resource) - count = 1 - resources.each do |resource_key, resource| - destination_path = Generator.destination_path( - :reference, - ledger.root_key, - :resources, - resource_key - ) - - Docs::Template.new( - data: { - resource: resource, - client: client_class, - weight: count - }, - destination_path: destination_path, - template_path: template_path - ).write - - count += 1 - end - end - end - end - end -end diff --git a/documentation/generators/template.rb b/documentation/generators/template.rb deleted file mode 100644 index f2cd5d1e..00000000 --- a/documentation/generators/template.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -module Docs - class Template - attr_reader :data, - :destination_path, - :template_path - - def initialize(args = {}) - @data = args.fetch(:data) - @destination_path = args.fetch(:destination_path) - @template_path = args.fetch(:template_path) - end - - def write - template = ERB.new(File.read(template_path), trim_mode: '-') - yellow "Generating template: #{template_path}" - File.open(destination_path, 'w') { |f| f.write template.result_with_hash(data) } - green "Wrote to destination: #{destination_path}" - end - end -end diff --git a/documentation/getting-started/01--installation.md b/documentation/getting-started/01--installation.md new file mode 100644 index 00000000..fbf8dacf --- /dev/null +++ b/documentation/getting-started/01--installation.md @@ -0,0 +1,23 @@ +# Gemfile + +Add this line to your application’s Gemfile: + +```shell +gem 'ledger_sync' +``` + +And then execute: + +```shell +bundle +``` + +--- + +# Directly + +Or install it yourself as: + +``` +gem install ledger_sync +``` \ No newline at end of file diff --git a/documentation/getting-started/02--quick-start.md b/documentation/getting-started/02--quick-start.md new file mode 100644 index 00000000..2c502262 --- /dev/null +++ b/documentation/getting-started/02--quick-start.md @@ -0,0 +1,108 @@ +# Quick Start + +## Overview + +To use LedgerSync, you must carry out an **Operation**. The **operation** will be ledger-specific and will require the +following: + +1. Client +2. Resource(s) + +### 1. Create a Client + +Clients are responsible for the authentication and requests for a specific ledger. In this example, we will assume you +are using the QuickBooks Online ledger. + +> Note: Each ledger has different requirements for authentication. Please visit the ledger-specific pages to learn more. + +```ruby +client = LedgerSync::QuickBooksOnline::Client.new( + access_token: access_token, # assuming this is defined + client_id: ENV['QUICKBOOKS_ONLINE_CLIENT_ID'], + client_secret: ENV['QUICKBOOKS_ONLINE_CLIENT_SECRET'], + realm_id: ENV['QUICKBOOKS_ONLINE_REALM_ID'], + refresh_token: refresh_token # assuming this is defined +) +``` + +### 2. Create resources(s) + +Create a resource on which to operate. Some resources have references to other resources. You can +use `Util::ResourcesBuilder` to create resources and relationships from a structured hash. + +> Note: Resources are ledger-specific, meaning they may have different attributes and references compared to other + +[//]: # (TODO: Fix refereces) + +> ledgers. Please visit [the Reference](/reference) to learn about resource attributes. + +```ruby +resource = LedgerSync::QuickBooksOnline::Customer.new( + DisplayName: 'Sample Customer', + external_id: customer_external_id # A unique ID from your platform +) +``` + +### 3. Create an operation + +Given our `client` and `resource` from above, we can now create an `Operation`. Operations are typically CRUD-like +methods, typically (though not always) only making a single request. + +Operations automatically determine a `Serializer` and `Deserializer`. These serializers are used to translate to and the +from the ruby `Resource` in the format required by the ledger. + +```ruby +operation = LedgerSync::QuickBooksOnline::Customer::Operations::Create.new( + client: client, + resource: resource +) +``` + +### 4. Perform the operation + +The next step is to perform the operation. You can do this by simply calling `perform`. + +```ruby +result = operation.perform # Returns a LedgerSync::OperationResult +``` + +### 5. Save updates to authentication + +Because QuickBooks Online uses Oauth 2, you must always be sure to save the access_token, refresh_token, and expirations +as they can change with any API call. Operations will always save values back to the client. + +#### Automatically update values in .env + +If you have a `.env` file present in the root directory of your project, the client will automatically comment out old +values and update new values. + +If you want to disable this functionality, you can do so by setting `update_dotenv` to `false` when instantiating the +object: + +```ruby +client = LedgerSync::QuickBooksOnline::Client.new( + access_token: access_token, # assuming this is defined + client_id: ENV['QUICKBOOKS_ONLINE_CLIENT_ID'], + client_secret: ENV['QUICKBOOKS_ONLINE_CLIENT_SECRET'], + realm_id: ENV['QUICKBOOKS_ONLINE_REALM_ID'], + refresh_token: refresh_token, # assuming this is defined + update_dotenv: false +) +``` + +#### Manually save values + +```ruby +result.operation.client.ledger_attributes_to_save.each do |key, value| + # save values +end +``` + +### Summary + +That’s it! Assuming proper authentication values and valid values on the resource, this will result in a new customer +being created in QuickBooks Online. + +There are many other resources and operations that can be performed in QuickBooks Online. For a complete guide of these +and other ledgers, visit the Reference. + diff --git a/documentation/getting-started/03--get-help.md b/documentation/getting-started/03--get-help.md new file mode 100644 index 00000000..9fed0705 --- /dev/null +++ b/documentation/getting-started/03--get-help.md @@ -0,0 +1,5 @@ +# Get Help + +There is a group of passionate maintainers happy to help you get started with LedgerSync. There are two main channels +for discussing LedgerSync: [Github](https://github.com/LedgerSync/ledger_sync) +and [Slack](https://join.slack.com/t/ledger-sync/shared_invite/zt-e5nbl8qc-eOA~5k7bg3p16_l3J7OS~Q). diff --git a/documentation/getting-started/04--report-a-bug.md b/documentation/getting-started/04--report-a-bug.md new file mode 100644 index 00000000..26d73c06 --- /dev/null +++ b/documentation/getting-started/04--report-a-bug.md @@ -0,0 +1,4 @@ +# Report a bug + +Please [open an issue on Github](https://www.github.com/LedgerSync/ledger_sync/issues/new) to report any bugs. Please +check if the bug has previously been reported and comment on the open issue with your use case. diff --git a/documentation/getting-started/README.md b/documentation/getting-started/README.md new file mode 100644 index 00000000..e5cb0834 --- /dev/null +++ b/documentation/getting-started/README.md @@ -0,0 +1,4 @@ +--- +description: An open-source library for easily syncing with accounting software, general ledgers, ERPs, and other ledgers. +--- + diff --git a/documentation/helper_methods.rb b/documentation/helper_methods.rb deleted file mode 100644 index 99fcf0c1..00000000 --- a/documentation/helper_methods.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -def green(str) - puts Rainbow(str).green -end - -def yellow(str) - puts Rainbow(str).yellow -end - -def red(str) - puts Rainbow(str).red -end - -def nl - puts "\n" -end diff --git a/documentation/site/CNAME b/documentation/site/CNAME deleted file mode 100644 index b5e3ca23..00000000 --- a/documentation/site/CNAME +++ /dev/null @@ -1 +0,0 @@ -www.ledgersync.dev \ No newline at end of file diff --git a/documentation/site/LICENSE.md b/documentation/site/LICENSE.md deleted file mode 100644 index 1502f082..00000000 --- a/documentation/site/LICENSE.md +++ /dev/null @@ -1,40 +0,0 @@ -# License Agreement -##### Version 1.02 (02/14/2019) - -This Single Project License Agreement (**“Agreement”**) is between you and Stackbit Inc., a Delaware corporation (“Stackbit”) and governs Your right to use the website project including website theme and other media content (the "Project") obtained from or generated using our services available at www.stackbit.com (the "Services"). By clicking on the “Create Account” button (or any similar button) that is presented to you at the time of sign-up or by using the Site to generate a Project, you indicate that you agree to the terms and conditions of this Agreement. If You are accepting this Agreement on behalf of Your employer or other organization, You are agreeing to these terms for the entity and You represent and warrant that You have authority to bind such entity (party bound to this Agreement is referred to as “You”). - -1. **Definitions**. The capitalized terms shall have the meaning given in the relevant paragraph where such term is defined. In addition, the following terms shall have the meaning set forth below. - - **“Client"** means the person or entity whose website you are designing if you are a web developer, web designer, agency or a marketing agent. - - **“Theme”** means the website theme made available on the Site and generated using the Services, in HTML/JS/CSS electronic source code format together with any related developer documentation. - - **“Project”** means any work that includes a Theme or that is derived from or is a ‘derivative work’ of a Theme, as such terms are used under the United States Copyright Act of 1976, as amended. - -2. **License**. Subject to the terms and conditions of this Agreement, Stackbit hereby grants you a perpetual, non-exclusive, non-transferable, non-sublicensable limited license to use, modify, and display the Theme only as incorporated in a single Project as set forth in Section 3 below. All rights not granted herein are expressly reserved by Stackbit. - -3. **Permitted Use** - - You may use the Theme as it is incorporated into a single Project, either your own Project or the Project of your Client, and You may make modifications to the Theme necessary to fit the requirements of the Project provided that the Project and the use of the Project by You or the Client remains subject to this Agreement. You will own the Project you create, but Stackbit retains all right, title and interest in and to the Theme and other media content that are incorporated in your Project. You must retain and include all copyright notices and the terms of this License without modification in the files of the Project. You and Client must use the Project in compliance with all applicable federal, state and local laws, rules and regulations. - -4. **Prohibited Uses** - - You may not, and shall not permit anyone else to, use the Project or do anything with the Project that is not expressly permitted by this Agreement, including, but not limited to, the following strictly prohibited uses: - - 1. resell, sublicense or other transfer the Project or the Theme or other components thereof or your rights to use the Theme as set forth herein or otherwise make available or allows a person to access or reproduce the Theme as an electronic file, except in connection with the single Project and subject to Section 3 above; - - 2. Use, reproduce or display the Theme or Project in any manner that competitive with the Services or our business (e.g. inclusion as part of an online website builder service, or distribution outside the Services such as on a Theme/themes marketplace or a "freebies" website); - - 3. Use, reproduce or display of the Theme in a fashion that we consider as, or under applicable law is considered, pornographic, obscene, immoral, infringing, defamatory or libelous; and - - 4. Use or display of the Theme in an electronic format that enables it to be downloaded or distributed in any file sharing arrangement. - -5. **Ownership**. Stackbit shall retain and own all right, title and interest, including but not limited to copyright, patent, trade secret and all other intellectual property rights, in and to the Themes. You shall own all right, title and interest, including but not limited to copyright, patent, trade secret and all other intellectual property rights, in and to the Project, subject to Stackbit’s ownership of the Theme and the terms of this license agreement. - -6. **Term and Termination**. This Agreement shall commence on the deployment of a Project through Stackbit’s Services to a repository (such as for example to Github) and continue indefinitely until it is terminated in accordance with Section 6. Stackbit may terminate this Agreement if You breach the Agreement and such breach remains uncured for 15 days following Your receipt of written notice from Stackbit. You may terminate this Agreement for convenience and without cause at any time immediately upon written notice to Stackbit. Upon termination of this Agreement for any reason, You and your Client shall a) cease all use of the Theme and the Project b) destroy or delete all copies and archives of the Theme, Projects, and accompanying materials, and c) if requested, confirm to Stackbit in writing that you have complied with these requirements. Any provisions of this Agreement which expressly or by implication are intended to survive its termination will survive and continue to bind the parties. - -7. **Warranty and Disclaimer**. THE SERVICES, SITE, THEME, PROJECT AND ALL CONTENT AVAILABLE THROUGH THE SITE ARE OFFERED “AS IS” AND WITHOUT WARRANTY, AND STACKBIT MAKES NO REPRESENTATION OR WARRANTY OF ANY KIND, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, AND SPECIFICALLY DISCLAIMS ALL WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE. - -8. **Limitation of Liability**. Stackbit’s aggregate liability for all claims, losses, liabilities or damages in connection with this Services, Theme, Project or this Agreement or its subject matter, whether as a result of breach of contract, tort (including negligence) or otherwise, regardless of the theory of liability asserted, is limited to no more than the total amount of fees paid to Stackbit under this Agreement, or $100, whichever is greater. In addition, Stackbit will not be liable in any event for lost profits, consequential, indirect, punitive, exemplary or special damages. - -9. **General**. This Agreement shall be governed by the law of the State of California, without reference to conflict of laws principles. The United Nations Convention on contracts for the International Sales of Goods shall not apply. This Agreement, together with the Stackbit Terms of Service at www.stackbit.com/tos/ represents the entire agreement between the parties with regard to the subject matter thereof and supersedes any prior understandings, proposals or agreements concerning the same subject matter. If any provision of this Agreement is found to be unenforceable or invalid, the remainder of such provision shall be enforced to the maximum extent permitted by law. No amendment or modification of this Agreement shall be valid or binding unless in a writing signed by representatives of both parties. You may not assign this Agreement without Stackbit’s prior written consent. Any attempted assignment in violation of this shall be null and void. This Agreement shall be binding upon and inure to the benefit of the parties hereto and their respective permitted successors and assigns. Any notice required or permitted to be given by either party under this Agreement shall be in writing and may be sent via an active Services account dashboard or shall be personally delivered or sent by commercial courier service, or by first class mail (certified or registered if available), or by telecopy confirmed by first class mail (registered or certified if available), to the other party at its address set forth below, or such new address as may from time-to-time be supplied hereunder by the parties hereto. diff --git a/documentation/site/README.md b/documentation/site/README.md deleted file mode 100644 index abb51140..00000000 --- a/documentation/site/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# LedgerSync Documentation - -## Run locally - -``` -bundle install -bundle exec jekyll serve -``` diff --git a/documentation/site/_config.yml b/documentation/site/_config.yml deleted file mode 100644 index 29626b84..00000000 --- a/documentation/site/_config.yml +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: LedgerSync -baseurl: "/" -permalink: "/:title/" -github_url: https://www.github.com/LedgerSync/ledger_sync -slack_url: https://join.slack.com/t/ledger-sync/shared_invite/zt-e5nbl8qc-eOA~5k7bg3p16_l3J7OS~Q -modern_treasury_url: https://www.moderntreasury.com -collections: - posts: - permalink: "/posts/:title/" -description: An open-source library for easily syncing with accounting software, general - ledgers, ERPs, and other ledgers. -palette: green -palettes: - blue: - sass: - accent1: "#00c6ff" - accent2: "#0072ff" - green: - sass: - accent1: "#12db5d" - accent2: "#11998e" - navy: - sass: - accent1: "#004e92" - accent2: "#000428" - violet: - sass: - accent1: "#8e2de2" - accent2: "#4a00e0" -header: - title: LedgerSync - logo_img: images/logo.svg - has_nav: true - nav_links: - - label: Home - url: "/" - type: link - has_subnav: false - - label: Guides - url: "/guides/" - type: link - has_subnav: false - - label: Reference - url: "/reference" - type: link - has_subnav: true - subnav_links: - - label: NetSuite REST - url: reference/netsuite - type: link - - label: NetSuite SOAP - url: reference/netsuite_soap - type: link - - label: QuickBooks Online - url: reference/quickbooks_online - type: link - - label: Stripe - url: reference/stripe - type: link - - label: Blog - url: "/blog" - type: link - has_subnav: false - - label: Contribute - url: "/guides/contribute" - type: link - has_subnav: false - - label: GitHub - url: https://github.com/LedgerSync/ledger_sync - type: primary - has_subnav: false -footer: - content: "© Modern Treasury Inc. All rights reserved." - links: - - label: Maintained with ❤️ in San Francisco, CA by Modern Treasury - url: https://www.moderntreasury.com - type: link - new_window: true - has_social: true - social_links: - - label: Netlify - url: https://www.netlify.com - type: svg - svg_url: https://www.netlify.com/img/global/badges/netlify-dark.svg - svg_alt: Deploys by Netlify - new_window: true - - label: Twitter - url: https://twitter.com/ModernTreasury - type: icon - icon_class: fa-twitter - new_window: true - - label: LinkedIn - url: https://www.linkedin.com/company/modern-treasury - type: icon - icon_class: fa-linkedin - new_window: true - - label: GitHub - url: https://github.com/LedgerSync/ledger_sync - type: icon - icon_class: fa-github - new_window: true -sass: - indentWidth: 4 - style: nested - precision: 10 -plugins: -- jekyll-menus -exclude: -- Gemfile -- Gemfile.lock -- node_modules -- vendor/bundle/ -- vendor/cache/ -- vendor/gems/ -- vendor/ruby/ -- ssg-build.sh -- LICENSE.md -- README.md diff --git a/documentation/site/_data/guides_sections.yml b/documentation/site/_data/guides_sections.yml deleted file mode 100644 index 547107e4..00000000 --- a/documentation/site/_data/guides_sections.yml +++ /dev/null @@ -1,10 +0,0 @@ -root_folder: /guides/ -sections: - - getting-started - - architecture - - ledgers - - customization - - tips_and_more - - contribute - - community - - modern-treasury \ No newline at end of file diff --git a/documentation/site/_data/reference_sections.yml b/documentation/site/_data/reference_sections.yml deleted file mode 100644 index e4e630e2..00000000 --- a/documentation/site/_data/reference_sections.yml +++ /dev/null @@ -1,5 +0,0 @@ -root_folder: /reference/ -sections: - - authentication - - helpers - - resources \ No newline at end of file diff --git a/documentation/site/_includes/action_link.html b/documentation/site/_includes/action_link.html deleted file mode 100644 index 5d175210..00000000 --- a/documentation/site/_includes/action_link.html +++ /dev/null @@ -1,11 +0,0 @@ -{% assign action = include.action %} - - {% if action.type == 'icon' and action.icon_class %} - {{ action.label }} - {% elsif action.type == 'svg' and action.svg_url %} - {{ action.svg_alt }} - {% else %} - {{ action.label }} - {% endif %} - \ No newline at end of file diff --git a/documentation/site/_includes/alerts/base.html b/documentation/site/_includes/alerts/base.html deleted file mode 100644 index 7215f672..00000000 --- a/documentation/site/_includes/alerts/base.html +++ /dev/null @@ -1,3 +0,0 @@ -
                      - {{ include.title }} {{ include.content }} -
                      \ No newline at end of file diff --git a/documentation/site/_includes/alerts/danger.html b/documentation/site/_includes/alerts/danger.html deleted file mode 100644 index 89385c71..00000000 --- a/documentation/site/_includes/alerts/danger.html +++ /dev/null @@ -1 +0,0 @@ -{% include alerts/base.html content=include.content type="danger" title=include.title %} \ No newline at end of file diff --git a/documentation/site/_includes/alerts/info.html b/documentation/site/_includes/alerts/info.html deleted file mode 100644 index 36ebc33d..00000000 --- a/documentation/site/_includes/alerts/info.html +++ /dev/null @@ -1 +0,0 @@ -{% include alerts/base.html content=include.content type="info" title=include.title %} \ No newline at end of file diff --git a/documentation/site/_includes/alerts/success.html b/documentation/site/_includes/alerts/success.html deleted file mode 100644 index 4e6f4a82..00000000 --- a/documentation/site/_includes/alerts/success.html +++ /dev/null @@ -1 +0,0 @@ -{% include alerts/base.html content=include.content type="success" title=include.title %} \ No newline at end of file diff --git a/documentation/site/_includes/alerts/warning.html b/documentation/site/_includes/alerts/warning.html deleted file mode 100644 index d613bad9..00000000 --- a/documentation/site/_includes/alerts/warning.html +++ /dev/null @@ -1 +0,0 @@ -{% include alerts/base.html content=include.content type="warning" title=include.title %} \ No newline at end of file diff --git a/documentation/site/_includes/cta_buttons.html b/documentation/site/_includes/cta_buttons.html deleted file mode 100644 index c4553e1f..00000000 --- a/documentation/site/_includes/cta_buttons.html +++ /dev/null @@ -1,4 +0,0 @@ -{% assign actions = include.actions %} -{% for action in actions %} -{{ action.label }} -{% endfor %} diff --git a/documentation/site/_includes/example.md b/documentation/site/_includes/example.md deleted file mode 100644 index ffd60148..00000000 --- a/documentation/site/_includes/example.md +++ /dev/null @@ -1,8 +0,0 @@ -{::options parse_block_html="true" /} -
                      -
                      {{ include.content }}
                      - {% if include.result %} - {{ include.result }} - {% endif %} -
                      -{::options parse_block_html="false" /} \ No newline at end of file diff --git a/documentation/site/_includes/footer.html b/documentation/site/_includes/footer.html deleted file mode 100644 index 04e46990..00000000 --- a/documentation/site/_includes/footer.html +++ /dev/null @@ -1,20 +0,0 @@ -
                      -
                      - - -
                      - -
                      - \ No newline at end of file diff --git a/documentation/site/_includes/getting_help.md b/documentation/site/_includes/getting_help.md deleted file mode 100644 index f9f05e2e..00000000 --- a/documentation/site/_includes/getting_help.md +++ /dev/null @@ -1,8 +0,0 @@ -There is a group of passionate maintainers happy to help you get started with LedgerSync. There are two main -channels for discussing LedgerSync: [Github]({{ site.github_url }}) and -[Slack]({{ site.slack_url }}). - -## Report a bug - -Please [open an issue on Github]({{ site.github_url }}/issues/new) to report any bugs. Please check if the bug -has previously been reported and comment on the open issue with your use case. \ No newline at end of file diff --git a/documentation/site/_includes/guides_menu.html b/documentation/site/_includes/guides_menu.html deleted file mode 100644 index bf43ac62..00000000 --- a/documentation/site/_includes/guides_menu.html +++ /dev/null @@ -1,29 +0,0 @@ - - \ No newline at end of file diff --git a/documentation/site/_includes/guides_submenu.html b/documentation/site/_includes/guides_submenu.html deleted file mode 100644 index bf5a63ef..00000000 --- a/documentation/site/_includes/guides_submenu.html +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/documentation/site/_includes/header.html b/documentation/site/_includes/header.html deleted file mode 100644 index df181b06..00000000 --- a/documentation/site/_includes/header.html +++ /dev/null @@ -1,35 +0,0 @@ - - \ No newline at end of file diff --git a/documentation/site/_includes/installation_instructions.md b/documentation/site/_includes/installation_instructions.md deleted file mode 100644 index 0df011cc..00000000 --- a/documentation/site/_includes/installation_instructions.md +++ /dev/null @@ -1,17 +0,0 @@ -Add this line to your application's Gemfile: - -```ruby -gem 'ledger_sync' -``` - -And then execute: - -```bash -$ bundle -``` - -Or install it yourself as: - -```bash -$ gem install ledger_sync -``` \ No newline at end of file diff --git a/documentation/site/_includes/ledgers/netsuite_soap_summary.md b/documentation/site/_includes/ledgers/netsuite_soap_summary.md deleted file mode 100644 index 9e761289..00000000 --- a/documentation/site/_includes/ledgers/netsuite_soap_summary.md +++ /dev/null @@ -1 +0,0 @@ -{% include ledgers/netsuite_summary_shared.md page=page site=site %} \ No newline at end of file diff --git a/documentation/site/_includes/ledgers/netsuite_summary.md b/documentation/site/_includes/ledgers/netsuite_summary.md deleted file mode 100644 index 9e761289..00000000 --- a/documentation/site/_includes/ledgers/netsuite_summary.md +++ /dev/null @@ -1 +0,0 @@ -{% include ledgers/netsuite_summary_shared.md page=page site=site %} \ No newline at end of file diff --git a/documentation/site/_includes/ledgers/netsuite_summary_shared.md b/documentation/site/_includes/ledgers/netsuite_summary_shared.md deleted file mode 100644 index 3114469a..00000000 --- a/documentation/site/_includes/ledgers/netsuite_summary_shared.md +++ /dev/null @@ -1 +0,0 @@ -NetSuite is an enterprise ERP, providing highly scalable and felxible bookkeeping and accounting software. \ No newline at end of file diff --git a/documentation/site/_includes/ledgers/quickbooks_online_summary.md b/documentation/site/_includes/ledgers/quickbooks_online_summary.md deleted file mode 100644 index 46617d84..00000000 --- a/documentation/site/_includes/ledgers/quickbooks_online_summary.md +++ /dev/null @@ -1 +0,0 @@ -QuickBooks Online \ No newline at end of file diff --git a/documentation/site/_includes/ledgers/stripe_summary.md b/documentation/site/_includes/ledgers/stripe_summary.md deleted file mode 100644 index 46617d84..00000000 --- a/documentation/site/_includes/ledgers/stripe_summary.md +++ /dev/null @@ -1 +0,0 @@ -QuickBooks Online \ No newline at end of file diff --git a/documentation/site/_includes/reference/netsuite/authentication/_token_based_authentication.md b/documentation/site/_includes/reference/netsuite/authentication/_token_based_authentication.md deleted file mode 100644 index 555ff716..00000000 --- a/documentation/site/_includes/reference/netsuite/authentication/_token_based_authentication.md +++ /dev/null @@ -1,99 +0,0 @@ -## Overview - -In order to authenticate to NetSuite, you need the following: - -- `account_id` -- `consumer_key` -- `consumer_secret` -- `token_id` -- `token_secret` - -We will walk through how to get each value in the following sections. - -
                      Note: -You need to have sufficient permissions to set up your account for API authentication. -
                      - -## Prerequisites - -### REST Web Services feature - -Enable the feature at Setup > Company > Setup Tasks > Enable Features, in the SuiteTalk (Web Services) section, on the SuiteCloud subtab. To use the feature, you must accept the SuiteCloud Terms of Service. - -### SuiteAnalytics Workbook feature - -Enable the feature at Setup > Company > Setup Tasks > Enable Features, on the Analytics subtab. - -### Permissions - -You will require the following permissions: - -- REST Web Services -- Log in using Access Tokens -- SuiteAnalytics Workbook - -Your permissions vary based on which role you are assigned. You can edit roles in Setup > Users/Roles > User Management > Manage Roles. Ensure your user is assigned a role with the aforementioned permissions in order to complete the setup. - -
                      Note: -

                      - There are two different sets of permissions you will need: -

                      -

                      -

                        -
                      • The permissions mentioned above are to set up your integration.
                      • -
                      • Later when creating a token, you will need to assign a user with a role that has the necessary permissions to access records (e.g. payments, invoices, bills, etc.)
                      • -
                      -

                      - -

                      -These can be the same or different roles. They can be assigned to one or many users. -

                      -
                      - -## Account ID - -The `account_id` can be found in the URL when you are logged into the NetSuite dashboard in your browser. It will look -something like the following: - -``` -https://.app.netsuite.com/app/center/card.nl?sc=-29&whence= -``` - -Example: - -``` -https://123456.app.netsuite.com/app/center/card.nl?sc=-29&whence= -``` - -The Account ID precedes `.app.netsuite.com`, which in this case is `123456`. Note that your ID may include `-sb1` -(representing "Sandbox 1"). Be sure to include the entire ID as it appears in the URL, including any letters, numbers, -and hyphens. - -## Consumer Keys - -The consumer keys are retrieved when you [create an Integration record](https://system.netsuite.com/app/help/helpcenter.nl?fid=bridgehead_4249032125.html&whence=). You can view [the NetSuite documentation](https://system.netsuite.com/app/help/helpcenter.nl?fid=bridgehead_4249032125.html&whence=) for the official documentation. - -At the last step of creating an Integration record, save the consumer key and consumer secret. They will not be shown again once you navigate away from the page. - -## Token - -To obtain your `token_key` and `token_secret`, you will need to [create a Token](https://system.netsuite.com/app/help/helpcenter.nl?fid=bridgehead_4254081947.html). View [the NetSuite documentation](https://system.netsuite.com/app/help/helpcenter.nl?fid=bridgehead_4254081947.html) for the official documentation. - -You will use the integration record you created along with your user (or the user who has the necessary permissions to access records). - -At the last step, save the token key and token secret. - -## Conclusion - -Now with these values, you can successfully authenticate to NetSuite. Simply pass the values into the client: - -{% highlight ruby linenos %} -client = LedgerSync::Ledgers::QuickBooksOnline::Client.new( - account_id: account_id, - consumer_key: consumer_key, - consumer_secret: consumer_secret, - token_id: token_id, - token_secret: token_secret -) -{% endhighlight %} - diff --git a/documentation/site/_includes/reference/netsuite/authentication/index.md b/documentation/site/_includes/reference/netsuite/authentication/index.md deleted file mode 100644 index b3e364fb..00000000 --- a/documentation/site/_includes/reference/netsuite/authentication/index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Authentication -layout: reference_netsuite -ledger: netsuite ---- - -For the REST API, NetSuite offers two types of authentication: - -- Token Based Authentication (TBA) -- Oauth 2.0 - -This client currently uses TBA. While Oauth 2.0 may be available in the future, TBA was chosen for the following reasons: - -1. The SOAP API only supports TBA. -2. NetSuite users will still need to go through a manual setup (e.g. Integration record and Role) regardless of the method. \ No newline at end of file diff --git a/documentation/site/_includes/reference/netsuite/authentication/token_based_authentication.md b/documentation/site/_includes/reference/netsuite/authentication/token_based_authentication.md deleted file mode 100644 index 8361af78..00000000 --- a/documentation/site/_includes/reference/netsuite/authentication/token_based_authentication.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Token Based Authentication -layout: reference_netsuite ---- - -{% include reference/netsuite/authentication/_token_based_authentication.md %} \ No newline at end of file diff --git a/documentation/site/_includes/reference/netsuite/index.md b/documentation/site/_includes/reference/netsuite/index.md deleted file mode 100644 index 5cd716a5..00000000 --- a/documentation/site/_includes/reference/netsuite/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: NetSuite -layout: reference_netsuite -ledger: netsuite ---- - -### Resource Metadata and Schemas - -Due to NetSuites granular user permissions and custom attributes, resources and methods for those resources can vary from one user (a.k.a. token) to another. Because of this variance, there are some helper classes that allow you to retrieve NetSuite records, allowed methods, attributes/parameters, etc. - -To retrieve the metadata for a record: - -```ruby -metadata = LedgerSync::Ledgers::NetSuite::Record::Metadata.new( - client: netsuite_client, # Assuming this is previous defined - record: :customer -) - -puts metadata.http_methods # Returns a list of LedgerSync::Ledgers::NetSuite::Record::HTTPMethod objects -puts metadata.properties # Returns a list of LedgerSync::Ledgers::NetSuite::Record::Property objects -``` - -### Reference - -- [NetSuite REST API Documentation](https://docs.oracle.com/cloud/latest/netsuitecs_gs/NSTRW/NSTRW.pdf) \ No newline at end of file diff --git a/documentation/site/_includes/reference/netsuite_soap/index.md b/documentation/site/_includes/reference/netsuite_soap/index.md deleted file mode 100644 index e17a4505..00000000 --- a/documentation/site/_includes/reference/netsuite_soap/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: NetSuite SOAP -layout: reference_netsuite_soap -ledger: netsuite_soap ---- - -LedgerSync supports the NetSuite SOAP client, leveraging [the NetSuite gem](https://github.com/NetSweet/netsuite). The client and sample operations are provided, though the main NetSuite client uses the REST API. - -### Reference - -- [NetSuite SOAP API Documentation](https://docs.oracle.com/cloud/latest/netsuitecs_gs/NSTWR/NSTWR.pdf) \ No newline at end of file diff --git a/documentation/site/_includes/reference/quickbooks_online/authentication/index.md b/documentation/site/_includes/reference/quickbooks_online/authentication/index.md deleted file mode 100644 index 47487fab..00000000 --- a/documentation/site/_includes/reference/quickbooks_online/authentication/index.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Authentication -layout: reference_quickbooks_online -ledger: quickbooks_online ---- - -### OAuth - -QuickBooks Online utilizes OAuth 2.0, which requires frequent refreshing of the access token. The client will handle this automatically, attempting a single token refresh on any single request authentication failure. Depending on how you use the library, every client has implements a class method `ledger_attributes_to_save`, which is an array of attributes that may change as the client is used. You can also call the instance method `ledger_attributes_to_save` which will be a hash of these values. It is a good practice to always store these attributes if you are saving access tokens in your database. - -#### Retrieve Access Token - -The library contains a lightweight script that is helpful in retrieving and refreshing access tokens. To use, do the following: - -1. Create a `.env` file in the library root. -2. Add values for `QUICKBOOKS_ONLINE_CLIENT_ID` and `QUICKBOOKS_ONLINE_CLIENT_SECRET` (you can copy `.env.template`). -3. Ensure your developer application in [the QuickBooks Online developer portal](https://developer.intuit.com) contains this redirect URI: `http://localhost:5678` (note: no trailing slash and port configurable with `PORT` environment variable) -4. Run `ruby bin/quickbooks_online_oauth_server.rb` from the library root (note: it must run from the root in order to update `.env`). -5. Visit the URL output in the terminal. -6. Upon redirect back to your `localhost`, the new values will be printed to the console and saved back to your `.env` - -#### Ledger Helper Methods - -The client also implements some helper methods for getting tokens. For example, you can set up an client using the following: - -```ruby -# Retrieve the following values from Intuit app settings -client_id = 'ID' -client_secret = 'SECRET' -redirect_uri = 'http://localhost:3000' - -oauth_client = LedgerSync::Ledgers::QuickBooksOnline::OAuthClientHelper.new( - client_id: client_id, - client_secret: client_secret -) - -puts oauth_client.authorization_url(redirect_uri: redirect_uri) - -# Visit on the output URL and authorize a company. -# You will be redirected back to the redirect_uri. -# Copy the full url from your browser: - -uri = 'https://localhost:3000/?code=FOO&state=BAR&realm_id=BAZ' - -client = LedgerSync::Ledgers::QuickBooksOnline::Client.new_from_oauth_client_uri( - oauth_client: oauth_client, - uri: uri -) - -# You can test that the auth works: - -client.refresh! -``` - -**Note: If you have a `.env` file storing your secrets, the client will automatically update the variables and record previous values whenever values change** \ No newline at end of file diff --git a/documentation/site/_includes/reference/quickbooks_online/errors/index.md b/documentation/site/_includes/reference/quickbooks_online/errors/index.md deleted file mode 100644 index bfeac8ed..00000000 --- a/documentation/site/_includes/reference/quickbooks_online/errors/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Errors -layout: reference_quickbooks_online -ledger: quickbooks_online ---- - -While LedgerSync tries to catch and translate errors, not all errors will be caught. In these cases, you can resque a generic `LedgerSync::OperationError` and determine what to do based on the response body. - -[QuickBooks Online Error Documentation](https://developer.intuit.com/app/developer/qbo/docs/develop/troubleshooting/error-codes) \ No newline at end of file diff --git a/documentation/site/_includes/reference/quickbooks_online/index.md b/documentation/site/_includes/reference/quickbooks_online/index.md deleted file mode 100644 index cf833ce8..00000000 --- a/documentation/site/_includes/reference/quickbooks_online/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: QuickBooks Online -layout: reference_quickbooks_online -ledger: quickbooks_online ---- - diff --git a/documentation/site/_includes/reference/quickbooks_online/webhooks/index.md b/documentation/site/_includes/reference/quickbooks_online/webhooks/index.md deleted file mode 100644 index e5fca1c4..00000000 --- a/documentation/site/_includes/reference/quickbooks_online/webhooks/index.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Webhooks -layout: reference_quickbooks_online -ledger: quickbooks_online ---- - -Reference: [QuickBooks Online Webhook Documentation](https://developer.intuit.com/app/developer/qbo/docs/develop/webhooks/managing-webhooks-notifications#validating-the-notification) - -LedgerSync offers an easy way to validate and parse webhook payloads. It also allows you to easily fetch the resources referenced. You can create and use a webhook with the following: - -```ruby -# Assuming `request` is the webhook request received from Quickbooks Online -webhook = LedgerSync::Ledgers::QuickBooksOnline::Webhook.new( - payload: request.body.read # It accepts a JSON string or hash -) - -verification_token = WEBHOOK_VERIFICATION_TOKEN # You get this token when you create webhooks in the QuickBooks Online dashboard -signature = request.headers['intuit-signature'] -raise 'Not valid' unless webhook.valid?(signature: signature, verification_token: verification_token) - -# Although not yet used, webhooks may include notifications for multiple realms -webhook.notifications.each do |notification| - puts notification.realm_id - - # Multiple events may be referenced. - notification.events.each do |event| - puts event.resource # Returns a LedgerSync resource with the `ledger_id` set - - # Other helpful methods - notification.find_operation_class(client: your_quickbooks_client_instance) # The respective Find class - notification.find_operation(client: your_quickbooks_client_instance) # The initialized respective Find operation - notification.find(client: your_quickbooks_client_instance) # Performs a Find operation for the resource retrieving the latest version from QuickBooks Online - end - - # Other helpful methods - notification.resources # All resources for a given webhook across all events -end - -# Other helpful methods -webhook.events # All events for a given webhook across all realms -webhook.resources # All events for a given webhook across all realms and events -``` \ No newline at end of file diff --git a/documentation/site/_includes/reference/stripe/index.md b/documentation/site/_includes/reference/stripe/index.md deleted file mode 100644 index ba31c652..00000000 --- a/documentation/site/_includes/reference/stripe/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Stripe -layout: reference_stripe -ledger: stripe ---- - diff --git a/documentation/site/_includes/section_content.html b/documentation/site/_includes/section_content.html deleted file mode 100644 index 4442960a..00000000 --- a/documentation/site/_includes/section_content.html +++ /dev/null @@ -1,29 +0,0 @@ -{% assign section = include.section %} -
                      -
                      -
                      - {% assign image_is_not_empty = section.image | is_not_empty %} {% if image_is_not_empty %} -
                      - {{ section.title }} -
                      - {% endif %} -
                      - {% assign title_is_not_empty = section.title | is_not_empty %} {% if title_is_not_empty %} -
                      -

                      {{ section.title }}

                      -
                      - {% endif %} {% assign content_is_not_empty = section.content | is_not_empty %} {% if content_is_not_empty %} -
                      - {{ section.content | markdownify }} -
                      - {% endif %} {% assign actions_is_not_empty = section.actions | is_not_empty %} {% if actions_is_not_empty %} -
                      - - {% include cta_buttons.html actions=section.actions %} -
                      - {% endif %} -
                      -
                      -
                      -
                      - \ No newline at end of file diff --git a/documentation/site/_includes/section_cta.html b/documentation/site/_includes/section_cta.html deleted file mode 100644 index fad0b8af..00000000 --- a/documentation/site/_includes/section_cta.html +++ /dev/null @@ -1,24 +0,0 @@ -{% assign section = include.section %} -
                      -
                      -
                      -
                      - {% if section.title or section.subtitle %} -
                      - {% assign title_is_not_empty = section.title | is_not_empty %} {% if title_is_not_empty %} -

                      {{ section.title }}

                      - {% endif %} {% assign subtitle_is_not_empty = section.subtitle | is_not_empty %} {% if subtitle_is_not_empty %} -

                      {{ section.subtitle }}

                      - {% endif %} -
                      - {% endif %} {% assign actions_is_not_empty = section.actions | is_not_empty %} {% if actions_is_not_empty %} -
                      - - {% include cta_buttons.html actions=section.actions %} -
                      - {% endif %} -
                      -
                      -
                      -
                      - \ No newline at end of file diff --git a/documentation/site/_includes/section_grid.html b/documentation/site/_includes/section_grid.html deleted file mode 100644 index 13730e1e..00000000 --- a/documentation/site/_includes/section_grid.html +++ /dev/null @@ -1,45 +0,0 @@ -{% assign section = include.section %} -
                      -
                      - {% if section.title or section.subtitle %} -
                      - {% assign title_is_not_empty = section.title | is_not_empty %} {% if title_is_not_empty %} -

                      {{ section.title }}

                      - {% endif %} {% assign subtitle_is_not_empty = section.subtitle | is_not_empty %} {% if subtitle_is_not_empty %} -

                      {{ section.subtitle }}

                      - {% endif %} -
                      - {% endif %} {% assign grid_items_is_not_empty = section.grid_items | is_not_empty %} {% if grid_items_is_not_empty %} -
                      -
                      - {% for item in section.grid_items %} -
                      -
                      - {% assign image_is_not_empty = item.image | is_not_empty %} {% if image_is_not_empty %} -
                      - {{ item.title }} -
                      - {% endif %} {% assign title_is_not_empty = item.title | is_not_empty %} {% if title_is_not_empty %} -

                      - {% assign title_url_is_not_empty = item.title_url | is_not_empty %} {% if title_url_is_not_empty %} - {{ item.title }} {% else %} {{ item.title }} {% endif %} -

                      - {% endif %} {% assign content_is_not_empty = item.content | is_not_empty %} {% if content_is_not_empty %} -
                      - {{ item.content | markdownify }} -
                      - {% endif %} {% assign actions_is_not_empty = item.actions | is_not_empty %} {% if actions_is_not_empty %} -
                      - - {% include cta_buttons.html actions=item.actions %} -
                      - {% endif %} -
                      -
                      - {% endfor %} -
                      -
                      - {% endif %} -
                      -
                      - \ No newline at end of file diff --git a/documentation/site/_includes/section_guides.html b/documentation/site/_includes/section_guides.html deleted file mode 100644 index d465b771..00000000 --- a/documentation/site/_includes/section_guides.html +++ /dev/null @@ -1,35 +0,0 @@ -{% assign section = include.section %} -
                      -
                      - {% if section.title or section.subtitle %} -
                      - {% assign title_is_not_empty = section.title | is_not_empty %} {% if title_is_not_empty %} -

                      {{ section.title }}

                      - {% endif %} {% assign subtitle_is_not_empty = section.subtitle | is_not_empty %} {% if subtitle_is_not_empty %} -

                      {{ section.subtitle }}

                      - {% endif %} -
                      - {% endif %} -
                      -
                      - {% for doc_section in site.data.guides_sections.sections %} {% assign doc_section_folder = site.data.guides_sections.root_folder | append: doc_section %} {% assign doc_section_page_path = doc_section_folder | append: '/index.md' %} {% assign doc_section_page - = doc_section_page_path | get_page %} -
                      -
                      -

                      {{ doc_section_page.title }}

                      - {% assign excerpt_is_not_empty = doc_section_page.excerpt | is_not_empty %} {% if excerpt_is_not_empty %} -
                      -

                      {{ doc_section_page.excerpt }}

                      -
                      - {% endif %} - -
                      -
                      - {% endfor %} -
                      -
                      -
                      -
                      - \ No newline at end of file diff --git a/documentation/site/_includes/section_hero.html b/documentation/site/_includes/section_hero.html deleted file mode 100644 index c0878502..00000000 --- a/documentation/site/_includes/section_hero.html +++ /dev/null @@ -1,23 +0,0 @@ -{% assign section = include.section %} -
                      - {% assign image_is_not_empty = section.image | is_not_empty %} {% if image_is_not_empty %} -
                      - {% endif %} -
                      - {% assign title_is_not_empty = section.title | is_not_empty %} {% if title_is_not_empty %} -
                      -

                      {{ section.title }}

                      -
                      - {% endif %} {% assign content_is_not_empty = section.content | is_not_empty %} {% if content_is_not_empty %} -
                      - {{ section.content | markdownify }} -
                      - {% endif %} {% assign actions_is_not_empty = section.actions | is_not_empty %} {% if actions_is_not_empty %} -
                      - - {% include cta_buttons.html actions=section.actions %} -
                      - {% endif %} -
                      -
                      - \ No newline at end of file diff --git a/documentation/site/_includes/submenu.html b/documentation/site/_includes/submenu.html deleted file mode 100644 index a9c16a2f..00000000 --- a/documentation/site/_includes/submenu.html +++ /dev/null @@ -1,7 +0,0 @@ -
                        - {% for action in include.submenu %} - - {% endfor %} -
                      \ No newline at end of file diff --git a/documentation/site/_layouts/advanced.html b/documentation/site/_layouts/advanced.html deleted file mode 100644 index c7b44aae..00000000 --- a/documentation/site/_layouts/advanced.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: body ---- - -{% for section in page.sections %} - {% assign component = section.type | append: ".html" %} - {% include {{ component }} section=section site=site %} -{% endfor %} diff --git a/documentation/site/_layouts/base.html b/documentation/site/_layouts/base.html deleted file mode 100644 index c97d1f02..00000000 --- a/documentation/site/_layouts/base.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - LedgerSync - {% assign title_is_not_empty = page.title | is_not_empty %}{% if title_is_not_empty %}{{ page.title }} - {% endif %}{{ site.title }} - - - - - - - - - - - - - - - {{ content }} - - - - - - - \ No newline at end of file diff --git a/documentation/site/_layouts/blog.html b/documentation/site/_layouts/blog.html deleted file mode 100644 index a145996c..00000000 --- a/documentation/site/_layouts/blog.html +++ /dev/null @@ -1,51 +0,0 @@ ---- -layout: body ---- - - - -
                      -
                      - {% assign display_posts = '/posts' | get_pages | sort: 'date' | reverse %} - {% for post in display_posts %} -
                      - {% assign thumb_image_is_not_empty = post.thumb_image | is_not_empty %} - {% if thumb_image_is_not_empty %} - {{ post.title }} - {% endif %} -
                      - -

                      {{ post.title }}

                      -
                      - {% assign excerpt_is_not_empty = post.excerpt | is_not_empty %} - {% if excerpt_is_not_empty %} -

                      {{ post.excerpt }}

                      -

                      Read More

                      - {% endif %} -
                      - {% endfor %} -
                      - - - - -
                      diff --git a/documentation/site/_layouts/body.html b/documentation/site/_layouts/body.html deleted file mode 100644 index d34d711c..00000000 --- a/documentation/site/_layouts/body.html +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: base ---- - -
                      - {% include header.html %} -
                      - {{ content }} -
                      - {% include footer.html %} -
                      diff --git a/documentation/site/_layouts/guides.html b/documentation/site/_layouts/guides.html deleted file mode 100644 index a8bc2886..00000000 --- a/documentation/site/_layouts/guides.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: body ---- - -
                      -
                      - - {% include guides_menu.html page=page site=site sections=site.data.guides_sections.sections root_folder=site.data.guides_sections.root_folder %} -
                      -
                      -
                      -

                      {{ page.title }}

                      -
                      - -
                      - {{ content }} {% assign root_page_path = site.data.guides_sections.root_folder | append: 'index.md' %} {% assign current_page_path = '/' | append: page.path %} {% if root_page_path != current_page_path %} {% assign child_pages_path = '/' | append: page.rel_dir - %} {% assign child_pages = child_pages_path | get_pages | where_exp: "item", "item.basename != 'index.md'" | sort: 'weight' %} {% assign child_count = child_pages | size %} {% if child_count > 0 %} {% assign has_children = true %}{% - else %} {% assign has_children = false %}{% endif %} {% assign has_children_is_not_empty = has_children | is_not_empty %} {% if has_children_is_not_empty %} -
                      - -
                      Related articles:

                      - - - - {% endif %} {% endif %} -
                      - -
                      - -
                      - - - -
                      - -
                      - \ No newline at end of file diff --git a/documentation/site/_layouts/page.html b/documentation/site/_layouts/page.html deleted file mode 100644 index a07fa78d..00000000 --- a/documentation/site/_layouts/page.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: body ---- - -
                      -
                      - {% assign image_is_not_empty = page.image | is_not_empty %} {% if image_is_not_empty %} -
                      - {% endif %} -
                      -

                      {{ page.title }}

                      - {% assign subtitle_is_not_empty = page.subtitle | is_not_empty %} {% if subtitle_is_not_empty %} -
                      - {{ page.subtitle }} -
                      - {% endif %} -
                      -
                      -
                      -
                      - {{ content }} -
                      -
                      - -
                      - \ No newline at end of file diff --git a/documentation/site/_layouts/post.html b/documentation/site/_layouts/post.html deleted file mode 100644 index 291ec390..00000000 --- a/documentation/site/_layouts/post.html +++ /dev/null @@ -1,52 +0,0 @@ ---- -layout: body ---- - -
                      -
                      - {% assign image_is_not_empty = page.image | is_not_empty %} - {% if image_is_not_empty %} -
                      - {% endif %} -
                      - -

                      {{ page.title }}

                      - {% assign subtitle_is_not_empty = page.subtitle | is_not_empty %} - {% if subtitle_is_not_empty %} -
                      - {{ page.subtitle }} -
                      - {% endif %} -
                      -
                      -
                      -
                      - {{ content }} -
                      -
                      -
                      - - - diff --git a/documentation/site/_layouts/reference.html b/documentation/site/_layouts/reference.html deleted file mode 100644 index 5069971b..00000000 --- a/documentation/site/_layouts/reference.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: body ---- - -
                      -
                      - - {% assign root_folder = site.data.reference_sections.root_folder %} {% include guides_menu.html page=page site=site sections=site.data.reference_sections.sections root_folder=root_folder %} -
                      -
                      -
                      -

                      {{ page.title }}

                      -
                      - -
                      - {{ content }} {% assign root_page_path = root_folder | append: 'index.md' %} {% assign current_page_path = '/' | append: page.path %} {% if root_page_path != current_page_path %} {% assign child_pages_path = '/' | append: page.rel_dir %} {% assign child_pages - = child_pages_path | get_pages | where_exp: "item", "item.basename != 'index.md'" | sort: 'weight' %} {% assign child_count = child_pages | size %} {% if child_count > 0 %} {% assign has_children = true %}{% else %} {% assign has_children - = false %}{% endif %} {% assign has_children_is_not_empty = has_children | is_not_empty %} {% if has_children_is_not_empty %} -
                      - -
                      Related articles:

                      - - - - {% endif %} {% endif %} -
                      - -
                      - -
                      - - - -
                      - -
                      - \ No newline at end of file diff --git a/documentation/site/_layouts/reference_netsuite.html b/documentation/site/_layouts/reference_netsuite.html deleted file mode 100644 index df0be83d..00000000 --- a/documentation/site/_layouts/reference_netsuite.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: body ---- - -
                      -
                      - - {% assign root_folder = site.data.reference_sections.root_folder | append: 'netsuite/' %} {% include guides_menu.html page=page site=site sections=site.data.reference_sections.sections root_folder=root_folder %} -
                      -
                      -
                      -

                      {{ page.title }}

                      -
                      - -
                      - {{ content }} {% assign root_page_path = root_folder | append: 'index.md' %} {% assign current_page_path = '/' | append: page.path %} {% if root_page_path != current_page_path %} {% assign child_pages_path = '/' | append: page.rel_dir %} {% assign child_pages - = child_pages_path | get_pages | where_exp: "item", "item.basename != 'index.md'" | sort: 'weight' %} {% assign child_count = child_pages | size %} {% if child_count > 0 %} {% assign has_children = true %}{% else %} {% assign has_children - = false %}{% endif %} {% assign has_children_is_not_empty = has_children | is_not_empty %} {% if has_children_is_not_empty %} -
                      - -
                      Related articles:

                      - - - - {% endif %} {% endif %} -
                      - -
                      - -
                      - - - -
                      - -
                      - \ No newline at end of file diff --git a/documentation/site/_layouts/reference_netsuite_soap.html b/documentation/site/_layouts/reference_netsuite_soap.html deleted file mode 100644 index 3caaecf5..00000000 --- a/documentation/site/_layouts/reference_netsuite_soap.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: body ---- - -
                      -
                      - - {% assign root_folder = site.data.reference_sections.root_folder | append: 'netsuite_soap/' %} {% include guides_menu.html page=page site=site sections=site.data.reference_sections.sections root_folder=root_folder %} -
                      -
                      -
                      -

                      {{ page.title }}

                      -
                      - -
                      - {{ content }} {% assign root_page_path = root_folder | append: 'index.md' %} {% assign current_page_path = '/' | append: page.path %} {% if root_page_path != current_page_path %} {% assign child_pages_path = '/' | append: page.rel_dir %} {% assign child_pages - = child_pages_path | get_pages | where_exp: "item", "item.basename != 'index.md'" | sort: 'weight' %} {% assign child_count = child_pages | size %} {% if child_count > 0 %} {% assign has_children = true %}{% else %} {% assign has_children - = false %}{% endif %} {% assign has_children_is_not_empty = has_children | is_not_empty %} {% if has_children_is_not_empty %} -
                      - -
                      Related articles:

                      - - - - {% endif %} {% endif %} -
                      - -
                      - -
                      - - - -
                      - -
                      - \ No newline at end of file diff --git a/documentation/site/_layouts/reference_quickbooks_online.html b/documentation/site/_layouts/reference_quickbooks_online.html deleted file mode 100644 index 3d09954d..00000000 --- a/documentation/site/_layouts/reference_quickbooks_online.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: body ---- - -
                      -
                      - - {% assign root_folder = site.data.reference_sections.root_folder | append: 'quickbooks_online/' %} {% include guides_menu.html page=page site=site sections=site.data.reference_sections.sections root_folder=root_folder %} -
                      -
                      -
                      -

                      {{ page.title }}

                      -
                      - -
                      - {{ content }} {% assign root_page_path = root_folder | append: 'index.md' %} {% assign current_page_path = '/' | append: page.path %} {% if root_page_path != current_page_path %} {% assign child_pages_path = '/' | append: page.rel_dir %} {% assign child_pages - = child_pages_path | get_pages | where_exp: "item", "item.basename != 'index.md'" | sort: 'weight' %} {% assign child_count = child_pages | size %} {% if child_count > 0 %} {% assign has_children = true %}{% else %} {% assign has_children - = false %}{% endif %} {% assign has_children_is_not_empty = has_children | is_not_empty %} {% if has_children_is_not_empty %} -
                      - -
                      Related articles:

                      - - - - {% endif %} {% endif %} -
                      - -
                      - -
                      - - - -
                      - -
                      - \ No newline at end of file diff --git a/documentation/site/_layouts/reference_stripe.html b/documentation/site/_layouts/reference_stripe.html deleted file mode 100644 index 9f8a754c..00000000 --- a/documentation/site/_layouts/reference_stripe.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: body ---- - -
                      -
                      - - {% assign root_folder = site.data.reference_sections.root_folder | append: 'stripe/' %} {% include guides_menu.html page=page site=site sections=site.data.reference_sections.sections root_folder=root_folder %} -
                      -
                      -
                      -

                      {{ page.title }}

                      -
                      - -
                      - {{ content }} {% assign root_page_path = root_folder | append: 'index.md' %} {% assign current_page_path = '/' | append: page.path %} {% if root_page_path != current_page_path %} {% assign child_pages_path = '/' | append: page.rel_dir %} {% assign child_pages - = child_pages_path | get_pages | where_exp: "item", "item.basename != 'index.md'" | sort: 'weight' %} {% assign child_count = child_pages | size %} {% if child_count > 0 %} {% assign has_children = true %}{% else %} {% assign has_children - = false %}{% endif %} {% assign has_children_is_not_empty = has_children | is_not_empty %} {% if has_children_is_not_empty %} -
                      - -
                      Related articles:

                      - - - - {% endif %} {% endif %} -
                      - -
                      - -
                      - - - -
                      - -
                      - \ No newline at end of file diff --git a/documentation/site/_plugins/filters.rb b/documentation/site/_plugins/filters.rb deleted file mode 100644 index d9fb3892..00000000 --- a/documentation/site/_plugins/filters.rb +++ /dev/null @@ -1,122 +0,0 @@ -# frozen_string_literal: true - -module LedgerSync - module Filters - def if(input, if_true, if_false) - input ? if_true : if_false - end - - def starts_with(input, str) - input.start_with?(str) - end - - def ends_with(input, str) - input.end_with?(str) - end - - def link(input) - relative_path = input.strip - - return relative_path if relative_path.start_with?('#') - - site = @context.registers[:site] - - site.each_site_file do |item| - return item.url if item.relative_path == relative_path - # This takes care of the case for static files that have a leading / - return item.url if item.relative_path == "/#{relative_path}" - end - - raise ArgumentError, <<~MSG - Could not find document '#{relative_path}' in 'link' filter. - - Make sure the document exists and the path is correct. - MSG - end - - def is_empty(input) # rubocop:disable Naming/PredicateName - if input.respond_to?(:empty?) - input.empty? - else - !input - end - end - - def is_not_empty(input) # rubocop:disable Naming/PredicateName - if input.respond_to?(:empty?) - !input.empty? - else - !!input # rubocop:disable Style/DoubleNegation - end - end - - def replace_regexp(input, pattern, replacement) - regexp = /#{pattern}/ - input.gsub(regexp, replacement) - end - - def sprintf(format, argument) - Object.send(:sprintf, format, argument) - end - - def get_page(page_path) - site = @context.registers[:site] - relative_page_path = page_path.sub(%r{^/}, '') - relative_page_parts = relative_page_path.split('/') - - if site.collections.key?(relative_page_parts[0]) - if relative_page_parts.length > 2 - raise ArgumentError, "get_page can not have sub-folders inside collection folder, received #{page_path}" - end - - site.collections[relative_page_parts[0]].docs.find do |doc| - if doc.data.key?('slug') && doc.data.key?('ext') - doc.data['slug'] + doc.data['ext'] == relative_page_parts[1] - else - doc.basename == relative_page_parts[1] - end - end - else - site.pages.find { |page| page.relative_path == relative_page_path } - end - end - - def get_pages(folder_path) - site = @context.registers[:site] - - relative_folder_path = folder_path.sub(%r{^/}, '').sub(%r{/$}, '') - relative_folder_path = '.' if relative_folder_path == '' - - relative_folder_parts = relative_folder_path.split('/') - - if site.collections.key?(relative_folder_parts[0]) - if relative_folder_parts.length != 1 - raise ArgumentError, "get_pages can not have sub-folders inside collection folder, received #{folder_path}" - end - - site.collections[relative_folder_parts[0]].docs - else - site.pages.select { |page| File.dirname(page.path).sub(%r{^/}, '').sub(%r{/$}, '') == relative_folder_path } - end - end - - class Cycler < Liquid::Drop - def initialize(values) - @values = values - @counter = 0 - end - - def next - res = @values[@counter % @values.length] - @counter += 1 - res - end - end - - def cycler(input, delimiter = ' ') - Cycler.new(input.split(delimiter, -1)) - end - end -end - -Liquid::Template.register_filter(LedgerSync::Filters) diff --git a/documentation/site/_plugins/hooks.rb b/documentation/site/_plugins/hooks.rb deleted file mode 100644 index 0e5776b7..00000000 --- a/documentation/site/_plugins/hooks.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -Jekyll::Hooks.register :site, :pre_render do |site, _payload| - site.pages.each do |page| - page.data['rel_dir'] = File.dirname(page.path) - page.data['basename'] = File.basename(page.path) - page.data['filename'] = File.basename(page.path, '.*') - end -end diff --git a/documentation/site/_posts/2020-06-01-introducing-docs.md b/documentation/site/_posts/2020-06-01-introducing-docs.md deleted file mode 100644 index 062c1116..00000000 --- a/documentation/site/_posts/2020-06-01-introducing-docs.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Introducing Documentation -excerpt: >- - Completely re-designed the documentation, including guides, ledger references, and the LedgerSync blog. -date: '2020-06-01' -# thumb_image: images/4.jpg -# image: images/3.jpg -layout: post ---- - -LedgerSync has now grown to support three different ledgers! As LedgerSync grows, we want to ensure the library is easy -to use and understand. Our README was growing quite unwieldy, so we decided to generate this static website. - -These docs contain a mix of manually and automatically generated content. We have developed scripts that keep our -docs in sync with the code. Our goal is to reduce the need to write documentation with each commit. - -If you find any bugs or have any suggestions, please [open an issue on Github](https://github.com/LedgerSync/ledger_sync/issues/new). \ No newline at end of file diff --git a/documentation/site/_posts/2020-06-10-netsuite-authentication.md b/documentation/site/_posts/2020-06-10-netsuite-authentication.md deleted file mode 100644 index 43a47a91..00000000 --- a/documentation/site/_posts/2020-06-10-netsuite-authentication.md +++ /dev/null @@ -1,382 +0,0 @@ ---- -title: How to authenticate to NetSuite's SuiteTalk REST Web Services API -excerpt: >- - A step-by-step guide to authenticating to the new NetSuite REST API. -date: '2020-06-01' -# thumb_image: images/4.jpg -# image: images/3.jpg -layout: post ---- - -Earlier this year, NetSuite released their new REST API called SuiteTalk REST Web Services. While still incomplete, this API provides a much friendlier interface for developers than its predecessors— the SOAP API and RESTlets. We chose to use the new REST API, because we believe it is the future for building integrations to NetSuite. The REST standard is much more intuitive, with many resources across many languages and frameworks. - -{% include alerts/info.html title="Tip:" content="We do our best to write comprehensive unit tests for the entire library. Tests are a great resource for examples on inputs, outputs, and usage, not all of which may be documented here." %} - -## Options for Authentication - -The REST API offers two types of authentication: Token-Based Authentication (TBA) and OAuth 2.0. We chose to use TBA for the REST client. - -Simply put, TBA is based on OAuth 1.0. Ultimately, you need to generate a request header that includes a signature created using tokens retrieved from the NetSuite dashboard and the OAuth 1.0 standard. Unfortunately, at the time of development, we hit a few walls trying to authenticate: - -- The NetSuite documentation was only for their SOAP API and RESTlets -- There were no examples in Ruby -- Code samples relied on libraries or packages, making it hard to understand what was actually happening under the hood. -- The nonce and timestamp were not defined in the inputs of examples we found, so outputs would naturally vary given that these values are meant to change in practice. -- There were very few examples that had both inputs and signature output to test against. - -In the end, the challenge of authenticating to NetSuite in the REST API was computing the signature. No examples we found worked for us, and regardless, we needed it in Ruby. Frustratingly, the only way to know if we were correct was to try API calls after making tweaks to our signature generation algorithm. - -If you’re reading this post, hopefully this will save you a headache or two. We will clearly lay out our solution, break it down step-by-step, and we will give you some real examples. Let’s get going! - -## Our Solution - -Let’s start with the full solution, which can be found in the LedgerSync library class `LedgerSync::Ledgers::NetSuite::Token` (code can be found here). The Token handles creating the authorization header that will be used to sign the request. The request header looks something like this: - -``` -Authorization: OAuth realm="TEST_REALM",oauth_consumer_key="ef40afdd8abaac111b13825dd5e5e2ddddb44f86d5a0dd6dcf38c20aae6b67e4",oauth_token="2b0ce516420110bcbd36b69e99196d1b7f6de3c6234c5afb799b73d87569f5cc",oauth_signature_method="HMAC-SHA256",oauth_timestamp="1508242306",oauth_nonce="fjaLirsIcCGVZWzBX0pg",oauth_version="1.0",oauth_signature="i7MEtGwhCTIZbTsTrNGw9LdcERn4wsjt5C7TxmKWIfU%3D" -``` - -## The Inputs - -To compute a signature, we need a few things first. Let’s walk through each one and how to find it: - -### `method` - -The request method will be one of the following: - -- `POST` -- `PUT` -- `PATCH` -- `GET` -- `DELETE` - -### `consumer_key`, `consumer_secret` - -The consumer key and secret can be retrieved from NetSuite by creating an Integration Record. Note that these values are only shown once at the end of creating a new Integration Record. Once you navigate away, you will no longer be able to see these values. You can reset the key and secret on existing Integration Records should you need to generate a new pair. - -### `signature_method` - -NetSuite supports multiple signature methods. Our library uses HMAC-SHA256. - -### `timestamp` - -We need to include a current timestamp in the signature and header. - -### `nonce` - -We need to include a random alphanumeric string to be used in the signature and header. - -### `oauth_version` - -The OAuth Version is defaults to “1.0” - -### `realm` - -The realm is the NetSuite account ID. You can find this in your account or in the URL: - -`https://.app.netsuite.com/app/center/card.nl` - -If you are using a sandbox or test drive account, your account ID will include a hyphen and some other characters. For example, it may look like this: `9876543-sb1`. - -Once you have the account ID, we will need to transform it to the format the API expects. You replace any hyphens with underscores (a.k.a. `_`) and capitalize all letters. So `9876543-sb1` will become `9876543_SB1`. - -### `token_id`, `token_secret` - -These values can be found in NetSuite when you [create an Access Token](https://system.netsuite.com/app/setup/accesstokens.nl). Like the Integration Record, these values are only visible at the end of creating the token and will not be shown again. You can also reset these values on existing Access Tokens. - -### `url` - -This is the URL of the request, which must include any query string parameters you intend to pass. - -## Example Values - -For this guide, we will use the following values: - -
                      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                      Input values
                      VariableValue
                      method"GET"
                      consumer_key"CONSUMER_KEY_VALUE"
                      consumer_secret"CONSUMER_SECRET_VALUE"
                      signature_methoddefault, "HMAC-SHA256"
                      timestampTypically, you will leave this empty, but we will use 1234567890
                      nonceTypically, you will leave this empty, but we will use "asdfasdf"
                      oauth_versiondefault, "1.0"
                      realm"9876543_SB1"
                      token_id"TOKEN_ID_VALUE"
                      token_secret"TOKEN_SECRET_VALUE"
                      url"https://9876543-sb1.suitetalk.api.netsuite.com/services/rest/record/v1/customer/123?expandSubResources=true"
                      -
                      - -{% capture default_values_note %} -The values for nonce and timestamp should be left nil or unpassed in practice. They are included here for purposes of having a consistent input and output, where typically they would be generated on the fly. -{% endcapture %} - -{% include alerts/info.html title="Note:" content=default_values_note %} - -Throughout this tutorial, examples will appear in the following style. You can copy and paste this code in sequence to get the same results. - -{% capture example_content %} -```ruby -method = 'GET' -consumer_key = 'CONSUMER_KEY_VALUE' -consumer_secret = 'CONSUMER_SECRET_VALUE' -nonce = 'asdfasdf' -oauth_version = '1.0' -realm = '9876543_SB1' -signature_method = 'HMAC-SHA256' -timestamp = 1_234_567_890 -token_id = 'TOKEN_ID_VALUE' -token_secret = 'TOKEN_SECRET_VALUE' -url = 'https://9876543-sb1.suitetalk.api.netsuite.com/services/rest/record/v1/customer/123?expandSubResources=true' -``` -{% endcapture %} - -{% include example.md content=example_content %} - - -## Generating the header - -Now that we have our inputs, we can walk through computing the signature and header. - -Before we dive in, please note that many values need to be escaped. If you see `escape(...)` being used below, it is shorthand for the following: - -```ruby -def escape(str) - CGI.escape(str.to_s).gsub(/\+/, '%20') -end -``` - -Now let's walk through each step: - -### 1. Build data string - -We need to create a string that will be used to compute a digest (a.k.a. signature) from. Using our values above, we can retrieve the string using the following: - -{% capture example_content %} -```ruby -token = LedgerSync::Ledgers::NetSuite::Token.new( - method: method, - consumer_key: consumer_key, - consumer_secret: consumer_secret, - realm: realm, - token_id: token_id, - token_secret: token_secret, - url: url -) - -puts token.signature_data_string -``` -{% endcapture %} - -{% capture example_result %} -```ruby -"GET&https%3A%2F%2F9876543-sb1.suitetalk.api.netsuite.com%2Fservices%2Frest%2Frecord%2Fv1%2Fcustomer%2F123&expandSubResources%3Dtrue%26oauth_consumer_key%3DCONSUMER_KEY_VALUE%26oauth_nonce%3Dasdfasdf%26oauth_signature_method%3DHMAC-SHA256%26oauth_timestamp%3D1234567890%26oauth_token%3DTOKEN_ID_VALUE%26oauth_version%3D1.0" -``` -{% endcapture %} - -{% include example.md content=example_content result=example_result %} - -But how is this created? It is composed of three values that are escaped and joined with `&`. The values are as follows: - -- `method`: Described in the inputs above. -- `url_without_params`: The `url` with all query parameters removed. In our example, this would be `https://9876543-sb1.suitetalk.api.netsuite.com/services/rest/record/v1/customer/123` -- `parameters_string`: A string representation of all URL parameters as well as the oauth parameters. - -Let's dive a level deeper and look into creating the `parameters` string. - -### 1a. Build parameters string - -The parameters string is a sorted list of key/value pairs each joined with an ampersand (`&`). The key/value pairs come from two sources: - -- Query parameters parsed out of the URL, in our case `{ "expandSubResources" => "true }` -- OAuth parameters - -For our example, we would have the following: - -{% capture example_content %} -```ruby -url_params = { - "expandSubResources" => "true" -} - -oauth_parameters_array = { - oauth_consumer_key: consumer_key, - oauth_nonce: nonce, - oauth_signature_method: signature_method, - oauth_timestamp: timestamp, - oauth_token: token_id, - oauth_version: oauth_version -}.to_a - -parameters_string = url_params.to_a - .concat(oauth_parameters_array) - .map { |k, v| [escape(k), escape(v)] } - .sort { |a, b| a <=> b } - .map { |e| "#{e[0]}=#{e[1]}" } - .join('&') - -puts parameters_string -``` -{% endcapture %} - -{% capture example_result %} -```ruby -"expandSubResources=true&oauth_consumer_key=CONSUMER_KEY_VALUE&oauth_nonce=asdfasdf&oauth_signature_method=HMAC-SHA256&oauth_timestamp=1234567890&oauth_token=TOKEN_ID_VALUE&oauth_version=1.0" -``` -{% endcapture %} - -{% include example.md content=example_content result=example_result %} - -### 1b. Put it together - -Now that we have our `parameters_string`, we can generate the following: - -{% capture example_content %} -```ruby -url_without_params = "https://9876543-sb1.suitetalk.api.netsuite.com/services/rest/record/v1/customer/123" - -signature_data_string = [ - method, - escape(url_without_params), - escape(parameters_string) -].join('&') -``` -{% endcapture %} - -{% capture example_result %} -```ruby -"GET&https%3A%2F%2F9876543-sb1.suitetalk.api.netsuite.com%2Fservices%2Frest%2Frecord%2Fv1%2Fcustomer%2F123&expandSubResources%3Dtrue%26oauth_consumer_key%3DCONSUMER_KEY_VALUE%26oauth_nonce%3Dasdfasdf%26oauth_signature_method%3DHMAC-SHA256%26oauth_timestamp%3D1234567890%26oauth_token%3DTOKEN_ID_VALUE%26oauth_version%3D1.0" -``` -{% endcapture %} - -{% include example.md content=example_content result=example_result %} - -## 2. Build signature key - -The final piece needed to generate a signature is the key. Our key is made by joining our `consumer_secret` to `token_secret` with an ampersand (`&`): - -{% capture example_content %} -```ruby -key ||= [ - consumer_secret, - token_secret -].join('&') -``` -{% endcapture %} - -{% capture example_result %} -```ruby -"CONSUMER_SECRET_VALUE&TOKEN_SECRET_VALUE" -``` -{% endcapture %} - -{% include example.md content=example_content result=example_result %} - -## 3. Compute signature - -Now with our `signature_data_string`, we will use the desired `signature_method` to compute a digest. We will assume we are using `HMAC-SHA256`. - -{% capture example_content %} -```ruby -signature ||= Base64.encode64( - OpenSSL::HMAC.digest( - OpenSSL::Digest.new('sha256'), - key, - signature_data_string - ) -).strip -``` -{% endcapture %} - -{% capture example_result %} -```ruby -"cId0B3hP0sFVQw/gjQ/P6YiOSx76u0WfyO8umOlq3gg=" -``` -{% endcapture %} - -{% include example.md content=example_content result=example_result %} - -## 4. Generate Header - -Last but not least, we can now generate our header. The header is made by combining all of the inputs and our signature together in comma-separated, key-value pairs: - -{% capture example_content %} -```ruby -authorization_parts = [ - [:realm, realm], - [:oauth_consumer_key, escape(consumer_key)], - [:oauth_token, escape(token_id)], - [:oauth_signature_method, signature_method], - [:oauth_timestamp, timestamp], - [:oauth_nonce, escape(nonce)], - [:oauth_version, oauth_version], - [:oauth_signature, escape(signature)] -] - -headers = { - 'Authorization' => "OAuth #{authorization_parts.map { |k, v| "#{k}=\"#{v}\"" }.join(',')}" -} - -puts headers -``` - -{% endcapture %} - -{% capture example_result %} -```ruby -{"Authorization"=>"OAuth realm=\"9876543_SB1\",oauth_consumer_key=\"CONSUMER_KEY_VALUE\",oauth_token=\"TOKEN_ID_VALUE\",oauth_signature_method=\"HMAC-SHA256\",oauth_timestamp=\"1234567890\",oauth_nonce=\"asdfasdf\",oauth_version=\"1.0\",oauth_signature=\"cId0B3hP0sFVQw%2FgjQ%2FP6YiOSx76u0WfyO8umOlq3gg%3D\""} -``` -{% endcapture %} - -{% include example.md content=example_content result=example_result %} - -## Wrapping up - -All that is left is to use this header in a request. You will need a new signature (and therefore new header) per-request. And that's it! - -While not difficult in practice, it was by trial-and-error we were ultimately able to authenticate to NetSuite. Hopefully this post saves you some time! - -It is highly recommended that you write comprehensive unit tests for this code. We wrote some tests in RSpec. These test are a great resource for examples you can test against. \ No newline at end of file diff --git a/documentation/site/_sass/imports/_animations.scss b/documentation/site/_sass/imports/_animations.scss deleted file mode 100755 index 0838839b..00000000 --- a/documentation/site/_sass/imports/_animations.scss +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Animations - */ -@-webkit-keyframes fadeIn20 { - 0% { - opacity: 0; - } - 100% { - opacity: 0.2; - } -} -@keyframes fadeIn20 { - 0% { - opacity: 0; - } - 100% { - opacity: 0.2; - } -} diff --git a/documentation/site/_sass/imports/_footer.scss b/documentation/site/_sass/imports/_footer.scss deleted file mode 100755 index dedaad19..00000000 --- a/documentation/site/_sass/imports/_footer.scss +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Site Footer - */ -.site-footer { - background-color: #fff; - padding-bottom: 1.5em; - padding-top: 1.5em; - - a:not(.button) { - color: inherit; - - &:hover, - &:focus { - color: _palette(accent); - } - } -} - -.site-info, -.social-links { - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - font-size: 0.875em; - line-height: 1.2; - - .button:not(.button-icon) { - font-size: inherit; - line-height: 1.2; - padding: 0.3em 1em; - } -} - -.site-info { - margin: 0.25em 0 0; - - .copyright, - a { - margin: 0 8px 0.5em 0; - } -} - -.social-links { - margin-top: 0.9375em; - - a { - margin: 0 15px 0.5em; - } - - .icon { - font-size: 18px; - } -} - -@media only screen and (min-width: 641px) { - .site-footer-inside { - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - } - - .site-info, - .social-links { - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; - } - - .social-links { - -webkit-box-flex: 0; - -ms-flex: 0 0 auto; - flex: 0 0 auto; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - margin-left: auto; - margin-top: 0; - - a { - margin-left: 30px; - margin-right: 0; - } - } -} \ No newline at end of file diff --git a/documentation/site/_sass/imports/_functions.scss b/documentation/site/_sass/imports/_functions.scss deleted file mode 100755 index 5f0dcf19..00000000 --- a/documentation/site/_sass/imports/_functions.scss +++ /dev/null @@ -1,69 +0,0 @@ -/// Removes a specific item from a list. -/// @author Hugo Giraudel -/// @param {list} $list List. -/// @param {integer} $index Index. -/// @return {list} Updated list. -@function remove-nth($list, $index) { - - $result: null; - - @if type-of($index) != number { - @warn "$index: #{quote($index)} is not a number for `remove-nth`."; - } - @else if $index == 0 { - @warn "List index 0 must be a non-zero integer for `remove-nth`."; - } - @else if abs($index) > length($list) { - @warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`."; - } - @else { - - $result: (); - $index: if($index < 0, length($list) + $index + 1, $index); - - @for $i from 1 through length($list) { - - @if $i != $index { - $result: append($result, nth($list, $i)); - } - - } - - } - - @return $result; - -} - -/// Gets a value from a map. -/// @author Hugo Giraudel -/// @param {map} $map Map. -/// @param {string} $keys Key(s). -/// @return {string} Value. -@function val($map, $keys...) { - - @if nth($keys, 1) == null { - $keys: remove-nth($keys, 1); - } - - @each $key in $keys { - $map: map-get($map, $key); - } - - @return $map; - -} - -/// Gets a font value. -/// @param {string} $keys Key(s). -/// @return {string} Value. -@function _font($keys...) { - @return val($font, $keys...); -} - -/// Gets a palette value. -/// @param {string} $keys Key(s). -/// @return {string} Value. -@function _palette($keys...) { - @return val($palette, $keys...); -} diff --git a/documentation/site/_sass/imports/_general.scss b/documentation/site/_sass/imports/_general.scss deleted file mode 100755 index 05e0e79e..00000000 --- a/documentation/site/_sass/imports/_general.scss +++ /dev/null @@ -1,687 +0,0 @@ -/** - * General - */ - -html { - font-family: _font(primary); - font-size: 100%; -} - -body { - background: _palette(bg); - color: _palette(primary); - line-height: 1.75; - text-rendering: optimizeLegibility; - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; -} - -a { - border-bottom: 1px solid currentColor; - color: _palette(accent); - text-decoration: none; - -webkit-transition: .3s ease; - transition: .3s ease; - &:hover, - &:focus { - color: _palette(primary); - } -} - -h1, -h2, -h3, -h4, -h5, -h6 { - color: _palette(secondary); - font-weight: bold; - line-height: 1.2; - margin: 2.25rem 0 1.125rem; - text-rendering: optimizeLegibility; - &:first-child { - margin-top: 0; - } -} - -h1 { - font-size: 2.5em; -} - -h2 { - font-size: 2.125em; -} - -h3 { - font-size: 1.875em; -} - -h4 { - font-size: 1.5em; -} - -h5 { - font-size: 1.25em; -} - -h6 { - font-size: 1.125em; -} - -p { - margin: 0 0 1.875em; -} - -address { - font-style: italic; - margin: 0 0 1.875em; -} - -mark, -ins { - background: lighten(_palette(note), 40%); - color: _palette(secondary); - padding: 0 3px; - text-decoration: none; -} - -pre { - background: _palette(bg); - border-radius: 3px; - color: _palette(secondary); - font-family: _font(monospace); - font-size: 0.875rem; - line-height: 1.5; - margin: 0 0 1.875rem; - overflow: auto; - padding: 1.5rem; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; -} - -:not(pre)>code { - background: _palette(bg); - border-radius: 3px; - font-size: 0.875rem; - padding: 0.1em; - white-space: normal; -} - -blockquote { - border-left: 5px solid _palette(accent); - font-size: 1.5em; - line-height: 1.33333; - margin: 1.5em 0; - padding-left: 1em; - &:first-child { - margin-top: 0; - } - p { - margin-bottom: 0.5em; - &:last-child { - margin-bottom: 0; - } - } - small, - cite { - color: _palette(meta); - display: block; - font-size: 0.75em; - font-style: normal; - font-weight: normal; - line-height: 1.5; - margin-top: 1em; - &:last-child { - margin-bottom: 0; - } - } -} - -dl { - margin: 0; -} - -dt { - font-weight: bold; -} - -dd { - margin: 0 0 1.875em; -} - -ul, -ol { - margin: 0 0 1.875em; - padding: 0 0 0 1.5em; -} - -li>ul, -li>ol { - margin-bottom: 0; -} - -hr { - border: 0; - border-bottom: 1px solid _palette(border); - margin: 1.875em 0; -} - -table { - line-height: 1.5; - margin: 0; - max-width: 100%; - text-align: left; - width: 100%; -} - -caption { - color: _palette(meta); - font-size: 0.875rem; - font-style: normal; - margin-bottom: 0.75rem; - text-align: left; -} - -th, -td { - border-bottom: 1px solid _palette(border); - padding: 0.5em 5px; -} - -th { - color: _palette(secondary); - font-weight: bold; -} - -.responsive-table { - display: block; - margin: 0 0 1.875em; - overflow-x: auto; - width: 100%; -} - -:not(.responsive-table)>table { - display: block; - margin: 0 0 1.875em; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - tbody, - thead { - width: 100%; - } - tr { - width: 100%; - } - td { - min-width: 140px; - } -} - - -/* Form fields */ - -label { - color: _palette(secondary); - font-weight: bold; - line-height: 1.5; - margin-bottom: 0.25em; -} - -input[type=checkbox]+label, -input[type=radio]+label { - cursor: pointer; - padding-left: 0.25em; - padding-right: 1em; -} - -input[type="text"], -input[type="password"], -input[type="email"], -input[type="tel"], -input[type="number"], -input[type="search"], -input[type="url"], -select, -textarea { - background: #fff; - border: 1px solid _palette(border); - border-radius: 3px; - box-shadow: none; - box-sizing: border-box; - color: _palette(primary); - display: block; - font-size: 16px; - font-weight: normal; - line-height: 1.5; - max-width: 100%; - padding: 0.5em 15px; - width: 100%; - &:focus { - outline: 0; - } -} - -.form-group { - margin-bottom: 1em; -} - -.form-submit { - margin-top: 1.66667em; -} - - -/* Buttons */ - -button, -input[type="submit"], -input[type="button"], -input[type="reset"], -.button { - background-color: _palette(accent); - border: 2px solid _palette(accent); - border-radius: 3px; - box-sizing: border-box; - color: #fff; - display: inline-block; - font-size: 14px; - font-weight: bold; - letter-spacing: 0.035em; - line-height: 1.2; - padding: 0.8em 2.75em; - text-align: center; - text-decoration: none; - -webkit-transition: .3s ease; - transition: .3s ease; - vertical-align: middle; - &:hover, - &:focus, - &:active { - background-color: transparent; - color: _palette(accent); - outline: 0; - } -} - -.button-secondary { - background-color: transparent; - color: _palette(accent); - &:hover, - &:focus, - &:active { - background-color: _palette(accent); - color: #fff; - } -} - -.button-icon { - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - background: 0; - border: 0; - color: inherit; - display: -webkit-inline-box; - display: -ms-inline-flexbox; - display: inline-flex; - font-size: 1em; - font-weight: normal; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - letter-spacing: normal; - padding: 0.25em 0; - .icon { - height: 1em; - min-width: 1em; - text-align: center; - } - &:hover, - &:focus, - &:active { - color: _palette(accent); - } -} - -.has-gradient { - .button { - background-color: #fff; - border-color: #fff; - color: _palette(accent); - &:hover, - &:focus, - &:active { - background-color: transparent; - color: #fff; - } - } - .button-secondary { - background-color: transparent; - color: #fff; - &:hover, - &:focus, - &:active { - background-color: #fff; - color: _palette(accent); - } - } -} - -#menu-open, -#menu-close, -.guides-nav .guides-nav-toggle, -.guides-nav .submenu-toggle { - background: 0; - border: 0; - border-radius: 0; - box-shadow: none; - color: inherit; - height: 30px; - padding: 0; - position: relative; - width: 30px; -} - - -/* Placeholder text color */ - -::-webkit-input-placeholder { - color: _palette(meta); -} - -::-moz-placeholder { - color: _palette(meta); - opacity: 1; -} - -:-ms-input-placeholder { - color: _palette(meta); -} - -::-ms-input-placeholder { - color: _palette(meta); -} - -::placeholder { - color: _palette(meta); -} - - -/* Videos, audios and embeds */ - -embed, -iframe, -object, -video { - max-width: 100%; -} - -.js-reframe { - margin: 0 0 1.875em; -} - - -/* Images */ - -img { - height: auto; - max-width: 100%; -} - - -/* Examples */ - -.example-container { - background: _palette(primary); - box-shadow: 5px 5px 5px #999; - padding: 20px; - margin: 20px 0; - &::before { - content: 'Example'; - color: #ffffff; - font-size: 1.2em; - text-transform: uppercase; - } - :nth-child(1) { - margin-top: 10px; - } - .result { - content: 'Result'; - color: #ffffff; - font-size: 1.2em; - text-transform: uppercase; - margin-bottom: 1em; - } - pre { - margin: 0; - } -} - - -/* Notifications */ - -.alert { - border-radius: 5px; - color: _palette(secondary); - margin-bottom: 1.875em; - padding: 1em 1.125em; - &.note { - background: lighten(_palette(note), 40%); - border-left: 5px solid _palette(note); - } - &.success { - background: lighten(_palette(success), 40%); - border-left: 5px solid _palette(success); - } - &.danger { - background: lighten(_palette(danger), 40%); - border-left: 5px solid _palette(danger); - } - &.warning { - background: lighten(_palette(warning), 40%); - border-left: 5px solid _palette(warning); - } - &.info { - background: lighten(_palette(info), 40%); - border-left: 5px solid _palette(info); - } -} - -.important { - background: lighten(_palette(important), 40%); - border-left: 5px solid _palette(important); - border-radius: 5px; - color: _palette(secondary); - margin-bottom: 1.875em; - padding: 1em 1.125em; -} - - -/* Background gradient */ - -.has-gradient { - background: _palette(accent); - background: -webkit-linear-gradient(left, _palette(accent-alt), _palette(accent)); - background: linear-gradient(to right, _palette(accent-alt), _palette(accent)); - color: #fff; - position: relative; -} - - -/* Background Image */ - -.bg-img { - -webkit-animation: fadeIn20 .75s ease-in-out; - animation: fadeIn20 .75s ease-in-out; - background-position: center; - background-size: cover; - bottom: 0; - left: 0; - opacity: 0.2; - position: absolute; - right: 0; - top: 0; -} - - -/* Heading decoration */ - -.line-left { - position: relative; - &:before { - background: _palette(accent); - content: ""; - height: 100%; - left: -1px; - position: absolute; - top: 0; - width: 5px; - } -} - - -/* Grid */ - -.grid { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-left: -0.9375em; - margin-right: -0.9375em; -} - -.grid-item { - box-sizing: border-box; - -webkit-box-flex: 0; - -ms-flex: 0 0 auto; - flex: 0 0 auto; - padding-left: 0.9375em; - padding-right: 0.9375em; -} - -.grid-col-2 { - .grid-item { - -ms-flex-preferred-size: 50%; - flex-basis: 50%; - max-width: 50%; - } -} - -.grid-col-3 { - .grid-item { - -ms-flex-preferred-size: 33.333%; - flex-basis: 33.333%; - max-width: 33.333%; - } -} - -.grid-swap { - -webkit-box-orient: horizontal; - -webkit-box-direction: reverse; - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; -} - -.grid-middle { - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} - -.grid-center { - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; -} - - -/* Text meant only for screen readers */ - -.screen-reader-text { - border: 0; - clip: rect(1px, 1px, 1px, 1px); - height: 1px; - overflow: hidden; - padding: 0; - position: absolute !important; - width: 1px; -} - - -/* Clearing floats */ - -.post-content { - &:after { - clear: both; - } - &:before, - &:after { - content: ""; - display: table; - } -} - -@media only screen and (max-width: 1000px) { - .grid { - margin-left: -1.5vw; - margin-right: -1.5vw; - } - .grid-item { - padding-left: 1.5vw; - padding-right: 1.5vw; - } -} - -@media only screen and (max-width: 760px) { - .grid-col-3 { - .grid-item { - -ms-flex-preferred-size: 100%; - flex-basis: 100%; - max-width: 100%; - } - } -} - -@media only screen and (max-width: 640px) { - h1, - h2, - h3, - h4, - h5, - h6 { - margin: 1.875rem 0 0.9375rem; - } - h1 { - font-size: 2em; - } - h2 { - font-size: 1.75em; - } - h3 { - font-size: 1.5em; - } - h4 { - font-size: 1.25em; - } - h5 { - font-size: 1.125em; - } - h6 { - font-size: 1em; - } - blockquote { - font-size: 1.25em; - line-height: 1.5; - } - .grid-col-2 { - .grid-item { - -ms-flex-preferred-size: 100%; - flex-basis: 100%; - max-width: 100%; - } - } -} \ No newline at end of file diff --git a/documentation/site/_sass/imports/_guides.scss b/documentation/site/_sass/imports/_guides.scss deleted file mode 100755 index dd5a9765..00000000 --- a/documentation/site/_sass/imports/_guides.scss +++ /dev/null @@ -1,300 +0,0 @@ -/** - * Docs - */ - -.guides-content { - padding-top: 2.5em; -} - -.post.type-guides { - margin-bottom: 5.625em; - max-width: 800px; - h1 { - font-size: 1.875rem; - } - h2 { - font-size: 1.5rem; - } - h3 { - font-size: 1.25rem; - } - h4 { - font-size: 1.125rem; - } - h5, - h6 { - font-size: 1rem; - } - .hash-link { - border: 0; - color: _palette(meta); - display: inline-block; - margin-left: -21px; - opacity: 0; - padding-right: 5px; - -webkit-transition: opacity .3s ease; - transition: opacity .3s ease; - .icon-copy { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2367758d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-link'%3E%3Cpath d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'%3E%3C/path%3E%3Cpath d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'%3E%3C/path%3E%3C/svg%3E"); - display: inline-block; - height: 16px; - width: 16px; - } - } - h2, - h3 { - &:hover, - &:focus { - .hash-link { - opacity: 1; - } - } - } - .post-inside { - background: #fff; - border: 1px solid _palette(border); - border-radius: 5px; - box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.08); - box-sizing: border-box; - padding: 2.5em 0; - } - .post-title { - font-size: 1.875rem; - margin: 0 0 2.5rem; - padding: 0 7%; - } - .post-content { - padding: 0 7%; - } -} - -.guides-section-items { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - list-style: none; - margin-left: -0.3125em; - margin-right: -0.3125em; - padding: 0; - .guides-section-item { - -webkit-flex: 1 1 240px; - -ms-flex: 1 1 240px; - flex: 1 1 240px; - margin: 0 0.3125em 0.9375em; - } - .guides-item-link { - border: 1px solid _palette(border); - border-radius: 3px; - color: _palette(secondary); - display: block; - font-weight: bold; - padding: 0.9375em; - position: relative; - &:hover { - border-color: _palette(accent); - color: _palette(accent); - } - } -} - -.guides-nav { - margin-bottom: 1.875em; - .guides-nav-toggle { - color: _palette(secondary); - font-size: 1.125rem; - height: 30px; - margin: 0; - padding-right: 30px; - position: relative; - text-align: left; - width: 100%; - } - .submenu-toggle { - color: _palette(meta); - height: 30px; - position: absolute; - right: 0; - top: 0; - width: 30px; - } -} - -.guides-toc { - color: _palette(secondary); - font-weight: bold; - line-height: 1.5; - list-style: none; - margin: 0; - padding: 0; - &>.toc-item>a { - padding: 0.1875rem 0; - } - a { - border: 0; - color: inherit; - display: block; - &:hover, - &:focus { - color: _palette(accent); - } - } -} - -.toc-submenu { - border-left: 1px solid _palette(border); - color: _palette(primary); - display: none; - font-size: 0.875rem; - font-weight: normal; - list-style: none; - margin-top: 0.625rem; - padding-left: 1.25rem; -} - -.toc-item { - color: inherit; - margin-bottom: 0.625rem; - &.current, - &.current-parent { - color: _palette(accent); - } - &.has-children { - padding-right: 30px; - position: relative; - &.active { - .toc-submenu { - display: block; - } - &>.submenu-toggle { - .icon-angle-right { - -webkit-transform: rotate(135deg); - transform: rotate(135deg); - } - } - } - } -} - -.page-nav { - display: none; - .page-nav-title { - font-size: 1rem; - margin: 0 0 0.625rem; - &:only-child { - display: none; - } - } - ul { - font-size: 0.8125rem; - line-height: 1.5; - list-style: none; - padding: 0; - ul { - border-left: 1px solid _palette(border); - margin-top: 0.625rem; - padding-left: 1.25rem; - } - } - li { - margin-bottom: 0.625rem; - &.active>a { - color: _palette(accent); - } - } - a { - color: _palette(primary); - border: 0; - display: block; - &:hover, - &:focus { - color: _palette(accent); - } - } -} - -@media only screen and (min-width: 801px) { - .guides-content { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - padding-top: 3.75em; - } - .post.type-guides { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - overflow: hidden; - } - .guides-nav, - .page-nav { - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - margin-bottom: 5.625em; - .sticky { - position: -webkit-sticky; - position: sticky; - top: 1.875rem; - } - } - .guides-nav { - padding-right: 1.5em; - width: 12.5em; - } - .page-nav { - padding-left: 1.5em; - width: 9.5em; - } - .guides-nav-toggle { - display: none; - } -} - -@media only screen and (min-width: 1091px) { - .page-nav { - display: block; - } -} - -@media only screen and (max-width: 800px) { - .guides-nav { - background: #fff; - border: 1px solid _palette(border); - border-radius: 5px; - box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.08); - box-sizing: border-box; - margin-bottom: 5%; - padding: 0.75em 1em; - } - .guides-toc-wrap { - display: none; - } - .toc--opened { - .guides-toc-wrap { - display: block; - } - .guides-nav-toggle { - .icon-angle-right { - -webkit-transform: rotate(135deg); - transform: rotate(135deg); - } - } - } - .guides-toc { - border-top: 1px solid _palette(border); - margin-top: 1.25rem; - padding-top: 1.25rem; - } -} - -@media only screen and (max-width: 640px) { - .post.type-guides { - .post-title, - .post-content { - padding: 0 2.25rem; - } - } -} \ No newline at end of file diff --git a/documentation/site/_sass/imports/_header.scss b/documentation/site/_sass/imports/_header.scss deleted file mode 100755 index 2f296033..00000000 --- a/documentation/site/_sass/imports/_header.scss +++ /dev/null @@ -1,358 +0,0 @@ -/** - * Site Header - */ -.site-header { - background: #fff; - padding-bottom: 1.25em; - padding-top: 1.125em; -} - -.site-header-inside { - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - display: -webkit-box; - display: -ms-flexbox; - display: flex; -} - -.site-branding { - -webkit-box-flex: 0; - -ms-flex: 0 1 auto; - flex: 0 1 auto; - - a { - border: 0; - color: inherit; - display: inline-block; - } -} - -.site-title { - color: _palette(secondary); - font-size: 1.75rem; - font-weight: bold; - line-height: 1.2; - margin: 0; -} - -.site-logo { - margin: 0; - - img { - max-height: 36px; - } -} - -.site-navigation { - margin-left: auto; -} - -.menu, -.submenu { - list-style: none; - margin: 0; - padding: 0; -} - -.menu-item { - position: relative; - - &.current-menu-item { - color: _palette(accent); - } - - a { - &:not(.button) { - border: 0; - color: inherit; - display: inline-block; - font-size: 14px; - line-height: 1.5; - - &:hover { - color: _palette(accent); - } - } - } -} - -.menu-toggle { - display: none; -} - -@media only screen and (min-width: 801px) { - .menu { - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - } - - .menu-item { - margin-left: 20px; - padding-bottom: 0.1875em; - padding-top: 0.1875em; - - a { - padding-bottom: 0.5em; - padding-top: 0.5em; - - &.button:not(.button-icon) { - padding-left: 1.25em; - padding-right: 1.25em; - } - } - - &.has-children > a { - padding-right: 15px; - position: relative; - - &:after { - background: 0; - border-color: currentColor; - border-style: solid; - border-width: 1px 1px 0 0; - box-sizing: border-box; - content: ""; - height: 6px; - position: absolute; - right: 0; - top: 50%; - width: 6px; - -webkit-transform: translateY(-50%) rotate(135deg); - transform: translateY(-50%) rotate(135deg); - } - - &.button:not(.button-icon) { - padding-right: 2.25em; - - &:after { - right: 1.25em; - } - } - } - } - - .submenu { - background: #fff; - border: 1px solid _palette(border); - border-radius: 3px; - left: 0; - min-width: 180px; - opacity: 0; - padding: 0.75em 0; - position: absolute; - text-align: left; - top: 100%; - -webkit-transition: opacity .2s, visibility 0s .2s; - transition: opacity .2s, visibility 0s .2s; - visibility: hidden; - width: 100%; - z-index: 99; - } - - .menu-item { - .submenu-toggle { - display: none; - } - - &.has-children:hover > .submenu { - opacity: 1; - -webkit-transition: margin .3s, opacity .2s; - transition: margin .3s, opacity .2s; - visibility: visible; - } - } - - .submenu { - .menu-item { - display: block; - margin: 0; - padding: 0 15px; - } - - a { - &:not(.button-icon) { - display: block; - } - - &.button:not(.button-icon) { - margin: 0.5em 0; - } - } - } -} - -@media only screen and (max-width: 800px) { - .site { - overflow: hidden; - position: relative; - } - - .site-branding { - margin-right: 10px; - } - - .site-header { - &:after { - background: rgba(_palette(primary),.6); - content: ""; - height: 100vh; - left: 0; - opacity: 0; - position: absolute; - top: 0; - -webkit-transition: opacity .15s ease-in-out,visibility 0s ease-in-out .15s; - transition: opacity .15s ease-in-out,visibility 0s ease-in-out .15s; - visibility: hidden; - width: 100%; - z-index: 998; - } - } - - #menu-open { - display: block; - margin-left: auto; - } - - .site-navigation { - background: #fff; - box-sizing: border-box; - height: 100vh; - margin: 0; - max-width: 360px; - -webkit-overflow-scrolling: touch; - position: absolute; - right: -100%; - top: 0; - -webkit-transition: right .3s ease-in-out, visibility 0s .3s ease-in-out; - transition: right .3s ease-in-out, visibility 0s .3s ease-in-out; - visibility: hidden; - width: 100%; - z-index: 999; - } - - .site-nav-inside { - height: 100%; - overflow: auto; - -webkit-overflow-scrolling: touch; - position: relative; - } - - .menu--opened { - .site { - height: 100%; - left: 0; - overflow: hidden; - position: fixed; - top: 0; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - width: 100%; - z-index: 997; - } - - .site-navigation { - right: 0; - -webkit-transition: right .3s ease-in-out; - transition: right .3s ease-in-out; - visibility: visible; - } - - .site-header:after { - opacity: 1; - -webkit-transition-delay: 0s; - transition-delay: 0s; - visibility: visible; - } - } - - #menu-close { - display: block; - position: absolute; - right: 3vw; - top: 1.125rem; - } - - .menu { - padding: 4.5rem 3vw 3rem; - } - - .submenu { - border-top: 1px solid _palette(border); - display: none; - padding-left: 15px; - - &.active { - display: block; - } - } - - .menu-item { - border-top: 1px solid _palette(border); - display: block; - margin: 0; - - &:not(.menu-button):last-child { - border-bottom: 1px solid _palette(border); - } - - a { - &:not(.button), - &.button-icon { - padding: 1em 0; - } - - &:not(.button-icon) { - display: block; - } - } - - &.has-children > a { - margin-right: 30px; - } - - .menu-item { - &:first-child { - border-top: 0; - } - - &:last-child { - border-bottom: 0; - } - } - - .submenu-toggle { - background: 0; - border: 0; - border-radius: 0; - color: _palette(meta); - display: block; - height: 48px; - padding: 0; - position: absolute; - right: 0; - top: 0; - width: 30px; - - &.active .icon-angle-right { - -webkit-transform: rotate(135deg); - transform: rotate(135deg); - } - } - } - - .menu-button { - & > .button:not(.button-icon) { - margin-bottom: 1em; - margin-top: 1em; - } - - & + .menu-button { - border-top: 0; - } - } -} \ No newline at end of file diff --git a/documentation/site/_sass/imports/_icons.scss b/documentation/site/_sass/imports/_icons.scss deleted file mode 100755 index 2c405c65..00000000 --- a/documentation/site/_sass/imports/_icons.scss +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Custom Icons - */ - -.icon-menu, -.icon-close { - background: currentColor; - border-radius: 1px; - color: inherit; - height: 2px; - margin-top: -1px; - margin-left: -12px; - position: absolute; - right: 0; - top: 50%; - width: 24px; - &:before, - &:after { - background: currentColor; - border-radius: 1px; - content: ""; - height: 100%; - left: 0; - position: absolute; - width: 100%; - } -} - -.icon-menu { - &:before { - top: -6px; - } - &:after { - bottom: -6px; - } -} - -.icon-close { - background: 0; - margin-left: -15px; - width: 30px; - &:before { - top: 0; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); - } - &:after { - top: 0; - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - } -} - -.icon-angle-right { - background: 0; - border-color: currentColor; - border-style: solid; - border-width: 1px 1px 0 0; - box-sizing: border-box; - height: 8px; - left: 50%; - margin-left: -4px; - margin-top: -4px; - position: absolute; - top: 50%; - width: 8px; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); -} - -.guides-nav-toggle { - .icon-angle-right { - height: 12px; - left: auto; - margin-left: 0; - margin-right: 9px; - margin-top: -6px; - right: 0; - width: 12px; - } -} - -.guides-section-item { - .icon-angle-right { - left: auto; - margin-left: 0; - margin-right: 15px; - right: 0; - } -} \ No newline at end of file diff --git a/documentation/site/_sass/imports/_post-navigation.scss b/documentation/site/_sass/imports/_post-navigation.scss deleted file mode 100755 index a3205263..00000000 --- a/documentation/site/_sass/imports/_post-navigation.scss +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Post Navigation - */ -.pagination { - margin: 1.875em 0 5em; - text-align: center; -} - -.newer-posts, -.older-posts { - border: 0; - display: inline-block; - margin: 0 0.9375em 0.9375em; -} - -.newer-posts { - &:before { - font-size: 1.125em; - content: "\2190"; - line-height: 1.5; - margin-right: 5px; - } -} - -.older-posts { - &:after { - font-size: 1.125em; - content: "\2192"; - line-height: 1.5; - margin-left: 5px; - } -} - -.read-next { - background: #fff; - border: 1px solid _palette(border); - border-radius: 5px; - box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.08); - margin: 1.875em 0 5em; - padding: 1.875em 0 2.5em; -} - -.read-next-title { - font-size: 1.125em; - margin: 0 0 1.875rem; - padding: 0 7%; -} - -.read-next { - .post { - margin-bottom: 1.875em; - padding: 0 7%; - } - - .post-title { - font-size: 1.5rem; - margin: 0; - } -} - -@media only screen and (max-width: 640px) { - .read-next-title, - .read-next-post { - padding-left: 1.5rem; - padding-right: 1.5rem; - } -} \ No newline at end of file diff --git a/documentation/site/_sass/imports/_posts-pages.scss b/documentation/site/_sass/imports/_posts-pages.scss deleted file mode 100755 index 08a67e82..00000000 --- a/documentation/site/_sass/imports/_posts-pages.scss +++ /dev/null @@ -1,165 +0,0 @@ -/** - * Posts and Pages - */ -.post { - margin-bottom: 2.5em; -} - -.post-full { - &:last-child { - margin-bottom: 5em; - } -} - -.page-header, -.post-full .post-header { - color: #fff; - padding-bottom: 9.5em; - padding-top: 3.75em; - position: relative; - text-align: center; - - .inner-sm { - position: relative; - } -} - -.page-title, -.post-full .post-title { - color: inherit; - font-size: 3em; - margin: 0; - position: relative; -} - -.page-subtitle, -.post-subtitle { - font-size: 1.25em; - line-height: 1.5; - margin: 0.5em 0 0; - position: relative; -} - -.post-title { - a { - border: 0; - color: inherit; - - &:hover { - color: _palette(meta); - } - } -} - -.post-meta { - color: _palette(meta); - font-size: 0.875em; - margin: 0 0 0.5em; -} - -.post-thumbnail { - border: 0; - border-radius: 5px 5px 0 0; - display: block; - margin: 0; - - img { - border-radius: 5px 5px 0 0; - width: 100%; - } -} - -.post-full .post-content, -.post-feed { - margin-top: -5em; - position: relative; -} - -.post-full .post-content, -.post-feed .post { - background: #fff; - border: 1px solid _palette(border); - border-radius: 5px; - box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.08); -} - -.post-full { - .post-content { - padding: 2.5em 7%; - } - - .post-meta { - color: inherit; - font-size: 1.125rem;; - } -} - -.post-feed { - &:last-child { - margin-bottom: 5em; - } - - .post { - padding: 0 0 2.5em; - } - - .post-header { - margin: 0 0 1.25em; - padding-top: 1.875em; - } - - .post-meta, - .post-title, - .post-excerpt, - .read-more { - padding-left: 7%; - padding-right: 7%; - } - - .post-title { - font-size: 1.5em; - margin: 0; - } - - .post-excerpt { - margin-bottom: 1.125em; - } - - .read-more { - margin: 0; - } - - .read-more-link { - border: 0; - color: _palette(accent); - - &:after { - font-size: 1.125em; - content: "\2192"; - line-height: 1.5; - margin-left: 5px; - } - } -} - -@media only screen and (max-width: 1000px) { - .post { - margin-bottom: 3vw; - } -} - -@media only screen and (max-width: 640px) { - .page-title, - .post-full .post-title { - font-size: 2.25rem; - } - - .post-full .post-content, - .post-feed .post-meta, - .post-feed .post-title, - .post-feed .post-excerpt, - .post-feed .read-more { - padding-left: 1.5rem; - padding-right: 1.5rem; - } -} \ No newline at end of file diff --git a/documentation/site/_sass/imports/_prism.scss b/documentation/site/_sass/imports/_prism.scss deleted file mode 100755 index 08546dda..00000000 --- a/documentation/site/_sass/imports/_prism.scss +++ /dev/null @@ -1,174 +0,0 @@ -/* PrismJS 1.16.0 -https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript&plugins=toolbar+copy-to-clipboard */ -/** - * prism.js default theme for JavaScript, CSS and HTML - * Based on dabblet (http://dabblet.com) - * @author Lea Verou - */ - -code[class*="language-"], -pre[class*="language-"] { - color: _palette(secondary); - background: none; - font-family: _font(monospace); - font-size: 0.875rem; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -/* Code blocks */ -pre[class*="language-"] { - margin: 0 0 1.875rem; - overflow: auto; - padding: 1.5rem; -} - -:not(pre) > code[class*="language-"], -pre[class*="language-"] { - background: _palette(bg); -} - -/* Inline code */ -:not(pre) > code[class*="language-"] { - padding: .1em; - border-radius: 3px; - white-space: normal; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: slategray; -} - -.token.punctuation { - color: #999; -} - -.namespace { - opacity: .7; -} - -.token.property, -.token.tag, -.token.boolean, -.token.number, -.token.constant, -.token.symbol, -.token.deleted { - color: #905; -} - -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.builtin, -.token.inserted { - color: #690; -} - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string { - color: #9a6e3a; - background: hsla(0, 0%, 100%, .5); -} - -.token.atrule, -.token.attr-value, -.token.keyword { - color: #07a; -} - -.token.function, -.token.class-name { - color: #DD4A68; -} - -.token.regex, -.token.important, -.token.variable { - color: #e90; -} - -.token.important, -.token.bold { - font-weight: bold; -} - -.token.italic { - font-style: italic; -} - -.token.entity { - cursor: help; -} - -div.code-toolbar { - position: relative; -} - -div.code-toolbar > .toolbar { - position: absolute; - top: 0; - right: 0; -} - -div.code-toolbar > .toolbar .toolbar-item { - display: block; -} - -div.code-toolbar > .toolbar a { - border: 0; - cursor: pointer; -} - -div.code-toolbar > .toolbar button { - background: none; - border: 0; - border-radius: 0; - box-shadow: none; - color: inherit; - font: inherit; - line-height: normal; - overflow: visible; - padding: 0; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; -} - -div.code-toolbar > .toolbar a, -div.code-toolbar > .toolbar button, -div.code-toolbar > .toolbar span { - background: _palette(border); - color: _palette(primary); - display: block; - font-size: .75em; - line-height: 1.5; - padding: .25em .5em; -} - -div.code-toolbar > .toolbar a:hover, -div.code-toolbar > .toolbar a:focus, -div.code-toolbar > .toolbar button:hover, -div.code-toolbar > .toolbar button:focus, -div.code-toolbar > .toolbar span:hover, -div.code-toolbar > .toolbar span:focus { - text-decoration: none; -} diff --git a/documentation/site/_sass/imports/_reset.scss b/documentation/site/_sass/imports/_reset.scss deleted file mode 100755 index 4f1a6204..00000000 --- a/documentation/site/_sass/imports/_reset.scss +++ /dev/null @@ -1,210 +0,0 @@ -/** - * Reset - * normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css - */ -html { - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; -} - -body { - margin: 0; -} - -article, -aside, -details, -figcaption, -figure, -footer, -header, -main, -nav, -section { - display: block; -} - -summary { - display: list-item; -} - -figure { - margin: 0; -} - -pre, -code, -kbd, -samp { - font-family: _font(monospace); - font-size: 1em; -} - -audio, -canvas, -video { - display: inline-block; -} - -audio:not([controls]) { - display: none; - height: 0; -} - -[hidden], -template { - display: none; -} - -a { - background-color: transparent; - -webkit-text-decoration-skip: objects; -} - -a:focus { - outline: thin dotted; -} - -a:active, -a:hover { - outline: 0; -} - -abbr[title] { - border-bottom: none; - text-decoration: underline; - text-decoration: underline dotted; -} - -b, -strong { - font-weight: bold; -} - -dfn { - font-style: italic; -} - -small { - font-size: 80%; -} - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -img { - border: 0; - vertical-align: middle; -} - -svg:not(:root) { - overflow: hidden; -} - -blockquote, -q { - quotes: none; -} - -blockquote:before, -blockquote:after, -q:before, -q:after { - content: ""; - content: none; -} - -button, -input, -optgroup, -select, -textarea { - font: inherit; - margin: 0; -} - -button, -input { - overflow: visible; -} - -button, -select { - text-transform: none; -} - -button, -html [type="button"], -[type="reset"], -[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} - -button[disabled], -html input[disabled] { - cursor: default; -} - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -[type="checkbox"], -[type="radio"] { - box-sizing: border-box; - padding: 0; -} - -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; -} - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -::-webkit-file-upload-button { - -webkit-appearance: button; - font: inherit; -} - -textarea { - overflow: auto; -} - -optgroup { - font-weight: bold; -} - -progress { - display: inline-block; - vertical-align: baseline; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} \ No newline at end of file diff --git a/documentation/site/_sass/imports/_sections.scss b/documentation/site/_sass/imports/_sections.scss deleted file mode 100755 index 8c16cb6e..00000000 --- a/documentation/site/_sass/imports/_sections.scss +++ /dev/null @@ -1,370 +0,0 @@ -/** - * Sections - */ -.block { - padding-top: 3.75em; - - &:not(.block-hero) { - background: _palette(bg); - } - - &:last-child { - padding-bottom: 3.75em; - } -} - -.block-header { - margin-bottom: 1.5em; -} - -.block-title { - font-size: 2.125em; - margin: 0; -} - -.block-subtitle { - color: _palette(meta); - line-height: 1.5; - margin-bottom: 0; - - &:not(:first-child) { - margin-top: 0.5em; - } -} - -.block-buttons, -.grid-item-buttons { - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-bottom: 0.9375em; - - a { - margin-bottom: 1em; - margin-right: 1em; - } -} - -.block-buttons { - a { - &:not(.button) { - border: 0; - font-weight: bold; - } - } -} - -.has-gradient { - .block-title, - .block-subtitle, - .block-buttons a:not(.button) { - color: inherit; - } -} - -/* Content section */ -.block-text { - .grid-item { - &:only-child { - -ms-flex-preferred-size: 100%; - flex-basis: 100%; - max-width: 680px; - text-align: center; - } - } - - .block-content { - font-size: 1.125em; - } -} - -.block-image { - -ms-flex-preferred-size: 50%; - flex-basis: 50%; - max-width: 50%; - margin-bottom: 1.875rem; -} - -.block-body { - -ms-flex-preferred-size: 50%; - flex-basis: 50%; - max-width: 50%; - - &:only-child { - .block-buttons { - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - - a { - margin-left: 0.5em; - margin-right: 0.5em; - } - } - } -} - -/* CTA section */ -.block-cta { - .has-gradient { - border-radius: 5px; - padding: 3.75em 5% 1.875em; - } - - .block-header { - -ms-flex-preferred-size: 66.666%; - flex-basis: 66.666%; - max-width: 66.666%; - } - - .block-subtitle { - font-size: 1.125em; - } - - .block-buttons { - a { - margin-left: 0.5em; - margin-right: 0.5em; - } - } -} - -/* Grid section */ -.block-grid { - &:not(.has-header) { - background: 0; - padding-top: 0; - } - - .block-header { - margin-bottom: 2em; - text-align: center; - } - - .block-title { - font-size: 1.875rem; - } - - .grid-item { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - margin-bottom: 1.875em; - } - - .grid-item-inside { - background: #fff; - border: 1px solid _palette(border); - border-radius: 3px; - box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.08); - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - padding-bottom: 0.25em; - } -} - -.grid-item-image { - border-radius: 3px 3px 0 0; - display: block; - width: 100%; - - img { - border-radius: 3px 3px 0 0; - } -} - -.grid-item-title { - font-size: 1.5em; - margin-bottom: 0.75rem; - margin-top: 1.5rem; - - &:first-child { - margin-top: 1.875rem; - } - - a { - border: 0; - color: inherit; - - &:hover, - &:focus { - color: _palette(meta); - } - } -} - -.grid-item-content { - p { - margin-bottom: 1.5em; - } -} - -.grid-item-buttons { - a { - &:not(.button) { - border: 0; - - &:after { - font-size: 1.125em; - content: "\2192"; - line-height: 1.5; - margin-left: 5px; - } - } - } -} - -.grid-item-title, -.grid-item-content, -.grid-item-buttons { - padding-left: 1.875rem; - padding-right: 1.875rem; -} - -/* Hero Section */ -.block-hero { - color: #fff; - padding-bottom: 7.5em; - padding-top: 3.75em; - position: relative; - text-align: center; - - .inner-sm { - position: relative; - } - - .block-header { - margin-bottom: 0.75em; - } - - .block-title { - font-size: 3em; - } - - .block-content { - font-size: 1.25em; - line-height: 1.5; - } - - .block-buttons { - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - - a { - font-size: 1em; - margin-left: 0.5em; - margin-right: 0.5em; - } - } - - & + .block { - margin-top: -5em; - position: relative; - } -} - - - - - - -@media only screen and (min-width: 1001px) { - .block-image { - &:not(:only-child) { - padding-right: 45px; - } - } - - .grid-swap { - .block-image { - &:not(:only-child) { - padding-left: 45px; - padding-right: 15px; - } - } - } -} - -@media only screen and (max-width: 1000px) { - .block-grid { - .grid-item { - margin-bottom: 3vw; - } - - .grid-item-title, - .grid-item-content, - .grid-item-buttons { - padding-left: 1.5rem; - padding-right: 1.5rem; - } - } -} - -@media only screen and (max-width: 800px) { - .block-cta { - .has-gradient { - padding-left: 3vw; - padding-right: 3vw; - } - } - - .block-cta, - .block-text { - .grid-item { - -ms-flex-preferred-size: 100%; - flex-basis: 100%; - max-width: 680px; - text-align: center; - } - - .block-buttons { - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - - a { - margin-left: 0.5em; - margin-right: 0.5em; - } - } - } -} - -@media only screen and (max-width: 640px) { - .block-title { - font-size: 2em; - } - - .block-hero { - .block-title { - font-size: 2.25em; - } - - .block-content { - font-size: 1.125em; - } - - .block-buttons { - a { - font-size: 14px; - } - } - } - - .block-text { - .block-content { - font-size: 1em; - } - } -} \ No newline at end of file diff --git a/documentation/site/_sass/imports/_structure.scss b/documentation/site/_sass/imports/_structure.scss deleted file mode 100755 index 0afd175f..00000000 --- a/documentation/site/_sass/imports/_structure.scss +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Structure - */ -.outer { - padding-left: 3vw; - padding-right: 3vw; -} - -.inner { - margin-left: auto; - margin-right: auto; - max-width: 1200px; -} - -.inner-md { - margin-left: auto; - margin-right: auto; - max-width: 800px; -} - -.inner-sm { - margin-left: auto; - margin-right: auto; - max-width: 680px; -} - -.site { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - min-height: 100vh; - position: relative; -} - -.site-content { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - width: 100%; -} \ No newline at end of file diff --git a/documentation/site/_templates/_layouts/reference_ledger.html.erb b/documentation/site/_templates/_layouts/reference_ledger.html.erb deleted file mode 100644 index 3226f0bb..00000000 --- a/documentation/site/_templates/_layouts/reference_ledger.html.erb +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: body ---- - -
                      -
                      - - {% assign root_folder = site.data.reference_sections.root_folder | append: '<%= client.root_key %>/' %} {% include guides_menu.html page=page site=site sections=site.data.reference_sections.sections root_folder=root_folder %} -
                      -
                      -
                      -

                      {{ page.title }}

                      -
                      - -
                      - {{ content }} {% assign root_page_path = root_folder | append: 'index.md' %} {% assign current_page_path = '/' | append: page.path %} {% if root_page_path != current_page_path %} {% assign child_pages_path = '/' | append: page.rel_dir %} {% assign child_pages - = child_pages_path | get_pages | where_exp: "item", "item.basename != 'index.md'" | sort: 'weight' %} {% assign child_count = child_pages | size %} {% if child_count > 0 %} {% assign has_children = true %}{% else %} {% assign has_children - = false %}{% endif %} {% assign has_children_is_not_empty = has_children | is_not_empty %} {% if has_children_is_not_empty %} -
                      - -
                      Related articles:

                      - - - - {% endif %} {% endif %} -
                      - -
                      - -
                      - - - -
                      - -
                      - \ No newline at end of file diff --git a/documentation/site/_templates/guides/ledger.md.erb b/documentation/site/_templates/guides/ledger.md.erb deleted file mode 100644 index 33a5be91..00000000 --- a/documentation/site/_templates/guides/ledger.md.erb +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: <%= ledger.name %> -weight: <%= weight %> -layout: guides ---- - -{% include ledgers/<%= ledger.root_key %>_summary.md page=page site=site %} - -Visit [the <%= ledger.name %> reference guide](/reference/<%= ledger.name %>) for more detailed documentation. \ No newline at end of file diff --git a/documentation/site/_templates/reference/resources/index.md.erb b/documentation/site/_templates/reference/resources/index.md.erb deleted file mode 100644 index 081a9b97..00000000 --- a/documentation/site/_templates/reference/resources/index.md.erb +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Resources -weight: 0 -layout: <%= "reference_#{client.root_key}" %> ---- - -<% client.resources.each do |key, _resource| -%> -- [<%= key %>](/reference/<%= client.root_key %>/resources/<%= key %>) -<% end -%> diff --git a/documentation/site/_templates/reference/resources/resource.md.erb b/documentation/site/_templates/reference/resources/resource.md.erb deleted file mode 100644 index 6d16f06c..00000000 --- a/documentation/site/_templates/reference/resources/resource.md.erb +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: <%= resource.resource_type %> -weight: <%= weight %> -layout: <%= "reference_#{client.root_key}" %> ---- - -## <%= resource.name %> - -## Attributes - -| Name | Type | -| ---- | ---- | -<% resource.resource_attributes.each do |key, attribute| -%> -| <%= key %> | <%= attribute.type.class.name %> | -<% end -%> - - -## Operations - -<% resource.operations.each do |key, operation| -%> -### <%= operation.name %> - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -<% end -%> - -## Searchers - -<% searcher_class = begin -%> -<% client.searcher_class_for(resource_type: resource.resource_type) -%> -<% rescue NameError -%> -<% end -%> -<% if searcher_class.present? -%> -| Name | -| ---- | -| `<%= searcher_class %>` | -<% else -%> -There are no searchers for this resource. -<% end -%> \ No newline at end of file diff --git a/documentation/site/assets/css/brands.min.css b/documentation/site/assets/css/brands.min.css deleted file mode 100755 index a4e187b6..00000000 --- a/documentation/site/assets/css/brands.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"} \ No newline at end of file diff --git a/documentation/site/assets/css/fontawesome.min.css b/documentation/site/assets/css/fontawesome.min.css deleted file mode 100755 index e7537cfa..00000000 --- a/documentation/site/assets/css/fontawesome.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto} \ No newline at end of file diff --git a/documentation/site/assets/css/main.scss b/documentation/site/assets/css/main.scss deleted file mode 100644 index 4be77e2a..00000000 --- a/documentation/site/assets/css/main.scss +++ /dev/null @@ -1,45 +0,0 @@ ---- ---- - -// Font. -$font: ( - primary: ("Lato", Helvetica, Arial, sans-serif), - monospace: (Monaco, courier, monospace) -); - -// Palette. -{% assign palette = site.palettes[site.palette].sass %} -$palette: ( - danger: #fc381d, - primary: #424b5f, - secondary: #283040, - meta: #67758d, - border: #dee5ef, - bg: #f7f9fb, - note: #fcb41d, - warning: #fcb41d, - success: #12db5d, - important: #fc381d, - info: #1E90FF, - accent: {{ palette.accent1 }}, - accent-alt: {{ palette.accent2 }}, -); - -@import "imports/functions"; - -@import "fontawesome.min.css"; -@import "brands.min.css"; - -@import "imports/reset"; -@import "imports/general"; -@import "imports/icons"; -@import "imports/animations"; -@import "imports/structure"; -@import "imports/header"; -@import "imports/posts-pages"; -//@import "imports/post-navigation"; -@import "imports/guides"; -@import "imports/sections"; -@import "imports/footer"; -@import "imports/prism"; -@import "monokai.css" \ No newline at end of file diff --git a/documentation/site/assets/css/monokai.css b/documentation/site/assets/css/monokai.css deleted file mode 100644 index 8985b312..00000000 --- a/documentation/site/assets/css/monokai.css +++ /dev/null @@ -1,441 +0,0 @@ -.highlight pre { - background-color: #272822; - color: #fff; -} - -.highlight .hll { - background-color: #272822; -} - -.highlight .c { - color: #75715e -} - - -/* Comment */ - -.highlight .err { - color: #960050; - background-color: #1e0010 -} - - -/* Error */ - -.highlight .k { - color: #66d9ef -} - - -/* Keyword */ - -.highlight .l { - color: #ae81ff -} - - -/* Literal */ - -.highlight .n { - color: #f8f8f2 -} - - -/* Name */ - -.highlight .o { - color: #f92672 -} - - -/* Operator */ - -.highlight .p { - color: #f8f8f2 -} - - -/* Punctuation */ - -.highlight .cm { - color: #75715e -} - - -/* Comment.Multiline */ - -.highlight .cp { - color: #75715e -} - - -/* Comment.Preproc */ - -.highlight .c1 { - color: #75715e -} - - -/* Comment.Single */ - -.highlight .cs { - color: #75715e -} - - -/* Comment.Special */ - -.highlight .ge { - font-style: italic -} - - -/* Generic.Emph */ - -.highlight .gs { - font-weight: bold -} - - -/* Generic.Strong */ - -.highlight .kc { - color: #66d9ef -} - - -/* Keyword.Constant */ - -.highlight .kd { - color: #66d9ef -} - - -/* Keyword.Declaration */ - -.highlight .kn { - color: #f92672 -} - - -/* Keyword.Namespace */ - -.highlight .kp { - color: #66d9ef -} - - -/* Keyword.Pseudo */ - -.highlight .kr { - color: #66d9ef -} - - -/* Keyword.Reserved */ - -.highlight .kt { - color: #66d9ef -} - - -/* Keyword.Type */ - -.highlight .ld { - color: #e6db74 -} - - -/* Literal.Date */ - -.highlight .m { - color: #ae81ff -} - - -/* Literal.Number */ - -.highlight .s { - color: #e6db74 -} - - -/* Literal.String */ - -.highlight .na { - color: #a6e22e -} - - -/* Name.Attribute */ - -.highlight .nb { - color: #f8f8f2 -} - - -/* Name.Builtin */ - -.highlight .nc { - color: #a6e22e -} - - -/* Name.Class */ - -.highlight .no { - color: #66d9ef -} - - -/* Name.Constant */ - -.highlight .nd { - color: #a6e22e -} - - -/* Name.Decorator */ - -.highlight .ni { - color: #f8f8f2 -} - - -/* Name.Entity */ - -.highlight .ne { - color: #a6e22e -} - - -/* Name.Exception */ - -.highlight .nf { - color: #a6e22e -} - - -/* Name.Function */ - -.highlight .nl { - color: #f8f8f2 -} - - -/* Name.Label */ - -.highlight .nn { - color: #f8f8f2 -} - - -/* Name.Namespace */ - -.highlight .nx { - color: #a6e22e -} - - -/* Name.Other */ - -.highlight .py { - color: #f8f8f2 -} - - -/* Name.Property */ - -.highlight .nt { - color: #f92672 -} - - -/* Name.Tag */ - -.highlight .nv { - color: #f8f8f2 -} - - -/* Name.Variable */ - -.highlight .ow { - color: #f92672 -} - - -/* Operator.Word */ - -.highlight .w { - color: #f8f8f2 -} - - -/* Text.Whitespace */ - -.highlight .mf { - color: #ae81ff -} - - -/* Literal.Number.Float */ - -.highlight .mh { - color: #ae81ff -} - - -/* Literal.Number.Hex */ - -.highlight .mi { - color: #ae81ff -} - - -/* Literal.Number.Integer */ - -.highlight .mo { - color: #ae81ff -} - - -/* Literal.Number.Oct */ - -.highlight .sb { - color: #e6db74 -} - - -/* Literal.String.Backtick */ - -.highlight .sc { - color: #e6db74 -} - - -/* Literal.String.Char */ - -.highlight .sd { - color: #e6db74 -} - - -/* Literal.String.Doc */ - -.highlight .s2 { - color: #e6db74 -} - - -/* Literal.String.Double */ - -.highlight .se { - color: #ae81ff -} - - -/* Literal.String.Escape */ - -.highlight .sh { - color: #e6db74 -} - - -/* Literal.String.Heredoc */ - -.highlight .si { - color: #e6db74 -} - - -/* Literal.String.Interpol */ - -.highlight .sx { - color: #e6db74 -} - - -/* Literal.String.Other */ - -.highlight .sr { - color: #e6db74 -} - - -/* Literal.String.Regex */ - -.highlight .s1 { - color: #e6db74 -} - - -/* Literal.String.Single */ - -.highlight .ss { - color: #e6db74 -} - - -/* Literal.String.Symbol */ - -.highlight .bp { - color: #f8f8f2 -} - - -/* Name.Builtin.Pseudo */ - -.highlight .vc { - color: #f8f8f2 -} - - -/* Name.Variable.Class */ - -.highlight .vg { - color: #f8f8f2 -} - - -/* Name.Variable.Global */ - -.highlight .vi { - color: #f8f8f2 -} - - -/* Name.Variable.Instance */ - -.highlight .il { - color: #ae81ff -} - - -/* Literal.Number.Integer.Long */ - -.highlight .gh {} - - -/* Generic Heading & Diff Header */ - -.highlight .gu { - color: #75715e; -} - - -/* Generic.Subheading & Diff Unified/Comment? */ - -.highlight .gd { - color: #f92672; -} - - -/* Generic.Deleted & Diff Deleted */ - -.highlight .gi { - color: #a6e22e; -} - - -/* Generic.Inserted & Diff Inserted */ \ No newline at end of file diff --git a/documentation/site/assets/js/main.js b/documentation/site/assets/js/main.js deleted file mode 100755 index 49e3b7f3..00000000 --- a/documentation/site/assets/js/main.js +++ /dev/null @@ -1,214 +0,0 @@ -/** - * Main JS file for theme behaviours - */ -// Responsive video embeds -let videoEmbeds = [ - 'iframe[src*="youtube.com"]', - 'iframe[src*="vimeo.com"]' -]; -reframe(videoEmbeds.join(',')); - -// Remove nav related classes on page load -document.body.classList.remove('menu--opened', 'toc--opened'); - -// Menu on small screens -let menuToggle = document.querySelectorAll('.menu-toggle'); -if (menuToggle) { - for (let i = 0; i < menuToggle.length; i++) { - menuToggle[i].addEventListener('click', function (e) { - document.body.classList.toggle('menu--opened'); - e.preventDefault(); - }, false); - } -} - -// Dropdown arrow -let mainMenu = document.getElementById('main-navigation'); -let submenu = mainMenu.querySelectorAll('.submenu'); -if (submenu) { - for (let i = 0; i < submenu.length; i++) { - let submenuBtn = document.createElement('button'); - submenuBtn.setAttribute('class','submenu-toggle'); - submenuBtn.innerHTML = 'Sub-menu'; - submenu[i].parentNode.insertBefore(submenuBtn, submenu[i]); - submenuBtn.addEventListener ('click', function() { - this.classList.toggle('active'); - this.nextSibling.classList.toggle('active'); - }); - } - -} - - -let guidesNav = document.getElementById('guides-nav'); -if (guidesNav) { - // Docs nav on small screens - let guidesNavToggle = document.getElementById('guides-nav-toggle'); - guidesNavToggle.addEventListener('click', function (e) { - document.body.classList.toggle('toc--opened'); - e.preventDefault(); - }, false); - - // Submenu toggle - let submenuToggle = guidesNav.querySelectorAll('.submenu-toggle'); - for (let i = 0; i < submenuToggle.length; i++) { - submenuToggle[i].addEventListener('click', function (e) { - submenuToggle[i].parentNode.classList.toggle('active'); - }, false); - } -} - -let pageNav = document.getElementById('page-nav'); -if (pageNav) { - - let pageToc = document.getElementById('page-nav-inside'); - let pageContent = document.querySelector('.type-guides .post-content'); - - // Create in-page navigation - let headerLinks = getHeaderLinks({ - root: pageContent - }); - renderHeaderLinks(pageToc, headerLinks); - - // Scroll to anchors - let scroll = new SmoothScroll('[data-scroll]'); - let hash = window.decodeURI(location.hash.replace('#', '')); - if (hash !== '') { - window.setTimeout( function(){ - let anchor = document.getElementById(hash); - if (anchor) { - scroll.animateScroll(anchor); - } - }, 0); - } - - // Highlight current anchor - let pageTocLinks = pageToc.getElementsByTagName('a'); - if (pageTocLinks.length > 0) { - let spy = new Gumshoe('#page-nav-inside a', { - nested: true, - nestedClass: 'active-parent' - }); - } - - // Add link to page content headings - let pageHeadings = getElementsByTagNames(pageContent, ["h2", "h3"]); - for (let i = 0; i < pageHeadings.length; i++) { - let heading = pageHeadings[i]; - if (typeof heading.id !== "undefined" && heading.id !== "") { - heading.insertBefore(anchorForId(heading.id), heading.firstChild); - } - } - - // Copy link url - let clipboard = new ClipboardJS('.hash-link', { - text: function(trigger) { - return window.location.href.replace(window.location.hash,"") + trigger.getAttribute('href'); - } - }); -} - -function getElementsByTagNames(root, tagNames) { - let elements = []; - for (let i = 0; i < root.children.length; i++) { - let element = root.children[i]; - let tagName = element.nodeName.toLowerCase(); - if (tagNames.includes(tagName)) { - elements.push(element); - } - elements = elements.concat(getElementsByTagNames(element, tagNames)); - } - return elements; -} - -function createLinksForHeaderElements(elements) { - let result = []; - let stack = [ - { - level: 0, - children: result - } - ]; - let re = /^h(\d)$/; - for (let i = 0; i < elements.length; i++) { - let element = elements[i]; - let tagName = element.nodeName.toLowerCase(); - let match = re.exec(tagName); - if (!match) { - console.warn("can not create links to non header element"); - continue; - } - let headerLevel = parseInt(match[1], 10); - if (!element.id) { - if (!element.textContent) { - console.warn( - "can not create link to element without id and without text content" - ); - continue; - } - element.id = element.textContent - .toLowerCase() - .replace(/[^\w]+/g, "_") - .replace(/^_/, "") - .replace(/_$/, ""); - } - let link = document.createElement("a"); - link.href = "#" + element.id; - link.setAttribute('data-scroll', ''); - link.appendChild(document.createTextNode(element.textContent)); - let obj = { - id: element.id, - level: headerLevel, - textContent: element.textContent, - element: element, - link: link, - children: [] - }; - if (headerLevel > stack[stack.length - 1].level) { - stack[stack.length - 1].children.push(obj); - stack.push(obj); - } else { - while (headerLevel <= stack[stack.length - 1].level && stack.length > 1) { - stack.pop(); - } - stack[stack.length - 1].children.push(obj); - stack.push(obj); - } - } - return result; -} - -function getHeaderLinks(options = {}) { - let tagNames = options.tagNames || ["h2", "h3"]; - let root = options.root || document.body; - let headerElements = getElementsByTagNames(root, tagNames); - return createLinksForHeaderElements(headerElements); -} - -function renderHeaderLinks(element, links) { - if (links.length === 0) { - return; - } - let ulElm = document.createElement("ul"); - for (let i = 0; i < links.length; i++) { - let liElm = document.createElement("li"); - liElm.append(links[i].link); - if (links[i].children.length > 0) { - renderHeaderLinks(liElm, links[i].children); - } - ulElm.appendChild(liElm); - } - element.appendChild(ulElm); -} - -function anchorForId(id) { - let anchor = document.createElement("a"); - anchor.setAttribute("class", "hash-link"); - anchor.setAttribute("data-scroll", ""); - anchor.href = "#" + id; - anchor.innerHTML = 'Copy'; - return anchor; -} - -// Syntax Highlighter -Prism.highlightAll(); \ No newline at end of file diff --git a/documentation/site/assets/js/plugins.js b/documentation/site/assets/js/plugins.js deleted file mode 100755 index 92124f21..00000000 --- a/documentation/site/assets/js/plugins.js +++ /dev/null @@ -1,22 +0,0 @@ -/* -reframe.js - Reframe.js: responsive iframes for embedded content -@version v2.2.5 -@link https://github.com/dollarshaveclub/reframe.js#readme -@author Jeff Wainwright (http://jeffry.in) -@license MIT -*/ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.reframe=t()}(this,function(){"use strict";function e(e,t){var i="string"==typeof e?document.querySelectorAll(e):e,n=t||"js-reframe";"length"in i||(i=[i]);for(var o=0;o-1||r.style.width.indexOf("%")>-1)){var a=(d||r.offsetHeight)/(f||r.offsetWidth)*100,s=document.createElement("div");s.className=n;var l=s.style;l.position="relative",l.width="100%",l.paddingTop=a+"%";var p=r.style;p.position="absolute",p.width="100%",p.height="100%",p.left="0",p.top="0",r.parentNode.insertBefore(s,r),r.parentNode.removeChild(r),s.appendChild(r)}}}}return e}); - -/*! smooth-scroll v16.1.0 | (c) 2019 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/smooth-scroll */ -window.Element&&!Element.prototype.closest&&(Element.prototype.closest=function(e){var t,n=(this.document||this.ownerDocument).querySelectorAll(e),o=this;do{for(t=n.length;0<=--t&&n.item(t)!==o;);}while(t<0&&(o=o.parentElement));return o}),(function(){if("function"==typeof window.CustomEvent)return;function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}e.prototype=window.Event.prototype,window.CustomEvent=e})(),(function(){for(var r=0,e=["ms","moz","webkit","o"],t=0;to.durationMax?o.durationMax:o.durationMin&&a=v)return M.cancelScroll(!0),o=t,a=u,0===(n=i)&&document.body.focus(),a||(n.focus(),document.activeElement!==n&&(n.setAttribute("tabindex","-1"),n.focus(),n.style.outline="none"),q.scrollTo(0,o)),H("scrollStop",s,i,c),!(C=m=null)},b=function(e){var t,n,o;m||(m=e),w+=e-m,d=l+y*(n=r=1<(r=0===S?0:w/S)?1:r,"easeInQuad"===(t=s).easing&&(o=n*n),"easeOutQuad"===t.easing&&(o=n*(2-n)),"easeInOutQuad"===t.easing&&(o=n<.5?2*n*n:(4-2*n)*n-1),"easeInCubic"===t.easing&&(o=n*n*n),"easeOutCubic"===t.easing&&(o=--n*n*n+1),"easeInOutCubic"===t.easing&&(o=n<.5?4*n*n*n:(n-1)*(2*n-2)*(2*n-2)+1),"easeInQuart"===t.easing&&(o=n*n*n*n),"easeOutQuart"===t.easing&&(o=1- --n*n*n*n),"easeInOutQuart"===t.easing&&(o=n<.5?8*n*n*n*n:1-8*--n*n*n*n),"easeInQuint"===t.easing&&(o=n*n*n*n*n),"easeOutQuint"===t.easing&&(o=1+--n*n*n*n*n),"easeInOutQuint"===t.easing&&(o=n<.5?16*n*n*n*n*n:1+16*--n*n*n*n*n),t.customEasing&&(o=t.customEasing(n)),o||n),q.scrollTo(0,Math.floor(d)),E(d,g)||(C=q.requestAnimationFrame(b),m=e)};0===q.pageYOffset&&q.scrollTo(0,0),f=i,h=s,u||history.pushState&&h.updateURL&&history.pushState({smoothScroll:JSON.stringify(h),anchor:f.id},document.title,f===document.documentElement?"#top":"#"+f.id),"matchMedia"in q&&q.matchMedia("(prefers-reduced-motion)").matches?q.scrollTo(0,Math.floor(g)):(H("scrollStart",s,i,c),M.cancelScroll(!0),q.requestAnimationFrame(b))}};var t=function(e){if(!e.defaultPrevented&&!(0!==e.button||e.metaKey||e.ctrlKey||e.shiftKey)&&"closest"in e.target&&(a=e.target.closest(o))&&"a"===a.tagName.toLowerCase()&&!e.target.closest(A.ignore)&&a.hostname===q.location.hostname&&a.pathname===q.location.pathname&&/#/.test(a.href)){var t,n=r(a.hash);if("#"===n){if(!A.topOnEmptyHash)return;t=document.documentElement}else t=document.querySelector(n);(t=t||"#top"!==n?t:document.documentElement)&&(e.preventDefault(),(function(e){if(history.replaceState&&e.updateURL&&!history.state){var t=q.location.hash;t=t||"",history.replaceState({smoothScroll:JSON.stringify(e),anchor:t||q.pageYOffset},document.title,t||q.location.href)}})(A),M.animateScroll(t,a))}},n=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(A)){var t=history.state.anchor;"string"==typeof t&&t&&!(t=document.querySelector(r(history.state.anchor)))||M.animateScroll(t,null,{updateURL:!1})}};M.destroy=function(){A&&(document.removeEventListener("click",t,!1),q.removeEventListener("popstate",n,!1),M.cancelScroll(),C=O=a=A=null)};return (function(){if(!("querySelector"in document&&"addEventListener"in q&&"requestAnimationFrame"in q&&"closest"in q.Element.prototype))throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";M.destroy(),A=F(I,e||{}),O=A.header?document.querySelector(A.header):null,document.addEventListener("click",t,!1),A.updateURL&&A.popstate&&q.addEventListener("popstate",n,!1)})(),M}})); - -/*! gumshoejs v5.1.1 | (c) 2019 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/gumshoe */ -Element.prototype.closest || (Element.prototype.matches || (Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector), Element.prototype.closest = function (t) { var e = this; if (!document.documentElement.contains(this)) return null; do { if (e.matches(t)) return e; e = e.parentElement } while (null !== e); return null }), (function () { if ("function" == typeof window.CustomEvent) return !1; function t(t, e) { e = e || { bubbles: !1, cancelable: !1, detail: void 0 }; var n = document.createEvent("CustomEvent"); return n.initCustomEvent(t, e.bubbles, e.cancelable, e.detail), n } t.prototype = window.Event.prototype, window.CustomEvent = t })(), (function (t, e) { "function" == typeof define && define.amd ? define([], (function () { return e(t) })) : "object" == typeof exports ? module.exports = e(t) : t.Gumshoe = e(t) })("undefined" != typeof global ? global : "undefined" != typeof window ? window : this, (function (t) { "use strict"; var e = { navClass: "active", contentClass: "active", nested: !1, nestedClass: "active", offset: 0, reflow: !1, events: !0 }, n = function (t, e, n) { if (n.settings.events) { var o = new CustomEvent(t, { bubbles: !0, cancelable: !0, detail: n }); e.dispatchEvent(o) } }, o = function (t) { var e = 0; if (t.offsetParent) for (; t;)e += t.offsetTop, t = t.offsetParent; return e >= 0 ? e : 0 }, s = function (t) { t && t.sort((function (t, e) { return o(t.content) < o(e.content) ? -1 : 1 })) }, c = function (e, n, o) { var s = e.getBoundingClientRect(), c = (function (t) { return "function" == typeof t.offset ? parseFloat(t.offset()) : parseFloat(t.offset) })(n); return o ? parseInt(s.bottom, 10) < (t.innerHeight || document.documentElement.clientHeight) : parseInt(s.top, 10) <= c }, r = function () { return t.innerHeight + t.pageYOffset >= Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight) }, i = function (t, e) { var n = t[t.length - 1]; if (function (t, e) { return !(!r() || !c(t.content, e, !0)) }(n, e)) return n; for (var o = t.length - 1; o >= 0; o--)if (c(t[o].content, e)) return t[o] }, l = function (t, e) { if (e.nested) { var n = t.parentNode.closest("li"); n && (n.classList.remove(e.nestedClass), l(n, e)) } }, a = function (t, e) { if (t) { var o = t.nav.closest("li"); o && (o.classList.remove(e.navClass), t.content.classList.remove(e.contentClass), l(o, e), n("gumshoeDeactivate", o, { link: t.nav, content: t.content, settings: e })) } }, u = function (t, e) { if (e.nested) { var n = t.parentNode.closest("li"); n && (n.classList.add(e.nestedClass), u(n, e)) } }; return function (o, c) { var r, l, f, d, m, v = {}; v.setup = function () { r = document.querySelectorAll(o), l = [], Array.prototype.forEach.call(r, (function (t) { var e = document.getElementById(decodeURIComponent(t.hash.substr(1))); e && l.push({ nav: t, content: e }) })), s(l) }, v.detect = function () { var t = i(l, m); t ? f && t.content === f.content || (a(f, m), (function (t, e) { if (t) { var o = t.nav.closest("li"); o && (o.classList.add(e.navClass), t.content.classList.add(e.contentClass), u(o, e), n("gumshoeActivate", o, { link: t.nav, content: t.content, settings: e })) } })(t, m), f = t) : f && (a(f, m), f = null) }; var p = function (e) { d && t.cancelAnimationFrame(d), d = t.requestAnimationFrame(v.detect) }, h = function (e) { d && t.cancelAnimationFrame(d), d = t.requestAnimationFrame((function () { s(l), v.detect() })) }; v.destroy = function () { f && a(f, m), t.removeEventListener("scroll", p, !1), m.reflow && t.removeEventListener("resize", h, !1), l = null, r = null, f = null, d = null, m = null }; return m = (function () { var t = {}; return Array.prototype.forEach.call(arguments, (function (e) { for (var n in e) { if (!e.hasOwnProperty(n)) return; t[n] = e[n] } })), t })(e, c || {}), v.setup(), v.detect(), t.addEventListener("scroll", p, !1), m.reflow && t.addEventListener("resize", h, !1), v } })); - -/*! - * clipboard.js v2.0.4 - * https://zenorocha.github.io/clipboard.js - * - * Licensed MIT © Zeno Rocha - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;ne.length)return;if(!(k instanceof M)){if(f&&y!=a.length-1){if(c.lastIndex=v,!(x=c.exec(e)))break;for(var b=x.index+(h?x[1].length:0),w=x.index+x[0].length,A=y,P=v,O=a.length;A"+n.content+""},!g.document)return g.addEventListener&&(C.disableWorkerMessageHandler||g.addEventListener("message",function(e){var a=JSON.parse(e.data),n=a.language,t=a.code,r=a.immediateClose;g.postMessage(C.highlight(t,C.languages[n],n)),r&&g.close()},!1)),C;var e=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return e&&(C.filename=e.src,C.manual||e.hasAttribute("data-manual")||("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(C.highlightAll):window.setTimeout(C.highlightAll,16):document.addEventListener("DOMContentLoaded",C.highlightAll))),C}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); -Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var n={"included-cdata":{pattern://i,inside:s}};n["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var i={};i[a]={pattern:RegExp("(<__[\\s\\S]*?>)(?:\\s*|[\\s\\S])*?(?=<\\/__>)".replace(/__/g,a),"i"),lookbehind:!0,greedy:!0,inside:n},Prism.languages.insertBefore("markup","cdata",i)}}),Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup; -!function(s){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,inside:{rule:/@[\w-]+/}},url:{pattern:RegExp("url\\((?:"+t.source+"|[^\n\r()]*)\\)","i"),inside:{function:/^url/i,punctuation:/^\(|\)$/}},selector:RegExp("[^{}\\s](?:[^{};\"']|"+t.source+")*?(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var e=s.languages.markup;e&&(e.tag.addInlined("style","css"),s.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:e.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:s.languages.css}},alias:"language-css"}},e.tag))}(Prism); -Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/}; -Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.])\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,function:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|[^\\`])*`/,greedy:!0,inside:{interpolation:{pattern:/\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript; -!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var r=[],i={},n=function(){};Prism.plugins.toolbar={};var t=Prism.plugins.toolbar.registerButton=function(t,n){var e;e="function"==typeof n?n:function(t){var e;return"function"==typeof n.onClick?((e=document.createElement("button")).type="button",e.addEventListener("click",function(){n.onClick.call(this,t)})):"string"==typeof n.url?(e=document.createElement("a")).href=n.url:e=document.createElement("span"),e.textContent=n.text,e},t in i?console.warn('There is a button with the key "'+t+'" registered already.'):r.push(i[t]=e)},e=Prism.plugins.toolbar.hook=function(a){var t=a.element.parentNode;if(t&&/pre/i.test(t.nodeName)&&!t.parentNode.classList.contains("code-toolbar")){var e=document.createElement("div");e.classList.add("code-toolbar"),t.parentNode.insertBefore(e,t),e.appendChild(t);var o=document.createElement("div");o.classList.add("toolbar"),document.body.hasAttribute("data-toolbar-order")&&(r=document.body.getAttribute("data-toolbar-order").split(",").map(function(t){return i[t]||n})),r.forEach(function(t){var e=t(a);if(e){var n=document.createElement("div");n.classList.add("toolbar-item"),n.appendChild(e),o.appendChild(n)}}),e.appendChild(o)}};t("label",function(t){var e=t.element.parentNode;if(e&&/pre/i.test(e.nodeName)&&e.hasAttribute("data-label")){var n,a,o=e.getAttribute("data-label");try{a=document.querySelector("template#"+o)}catch(t){}return a?n=a.content:(e.hasAttribute("data-url")?(n=document.createElement("a")).href=e.getAttribute("data-url"):n=document.createElement("span"),n.textContent=o),n}}),Prism.hooks.add("complete",e)}}(); -!function(){if("undefined"!=typeof self&&self.Prism&&self.document)if(Prism.plugins.toolbar){var r=window.ClipboardJS||void 0;r||"function"!=typeof require||(r=require("clipboard"));var i=[];if(!r){var o=document.createElement("script"),e=document.querySelector("head");o.onload=function(){if(r=window.ClipboardJS)for(;i.length;)i.pop()()},o.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js",e.appendChild(o)}Prism.plugins.toolbar.registerButton("copy-to-clipboard",function(e){var t=document.createElement("a");return t.textContent="Copy",r?o():i.push(o),t;function o(){var o=new r(t,{text:function(){return e.code}});o.on("success",function(){t.textContent="Copied",n()}),o.on("error",function(){t.textContent="Press Ctrl+C to copy",n()})}function n(){setTimeout(function(){t.textContent="Copy"},5e3)}})}else console.warn("Copy to Clipboard plugin loaded before Toolbar plugin.")}(); diff --git a/documentation/site/assets/webfonts/fa-brands-400.eot b/documentation/site/assets/webfonts/fa-brands-400.eot deleted file mode 100755 index 4f991ad3..00000000 Binary files a/documentation/site/assets/webfonts/fa-brands-400.eot and /dev/null differ diff --git a/documentation/site/assets/webfonts/fa-brands-400.svg b/documentation/site/assets/webfonts/fa-brands-400.svg deleted file mode 100755 index c5f544c7..00000000 --- a/documentation/site/assets/webfonts/fa-brands-400.svg +++ /dev/null @@ -1,3452 +0,0 @@ - - - - - -Created by FontForge 20190112 at Tue May 7 11:33:44 2019 - By Robert Madole -Copyright (c) Font Awesome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/documentation/site/assets/webfonts/fa-brands-400.ttf b/documentation/site/assets/webfonts/fa-brands-400.ttf deleted file mode 100755 index 8836d9ff..00000000 Binary files a/documentation/site/assets/webfonts/fa-brands-400.ttf and /dev/null differ diff --git a/documentation/site/assets/webfonts/fa-brands-400.woff b/documentation/site/assets/webfonts/fa-brands-400.woff deleted file mode 100755 index d65148db..00000000 Binary files a/documentation/site/assets/webfonts/fa-brands-400.woff and /dev/null differ diff --git a/documentation/site/assets/webfonts/fa-brands-400.woff2 b/documentation/site/assets/webfonts/fa-brands-400.woff2 deleted file mode 100755 index e2bfe667..00000000 Binary files a/documentation/site/assets/webfonts/fa-brands-400.woff2 and /dev/null differ diff --git a/documentation/site/blog/index.md b/documentation/site/blog/index.md deleted file mode 100644 index 0c05c3b4..00000000 --- a/documentation/site/blog/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Blog -subtitle: This is an optional subtitle for the blog page -image: images/5.jpg -layout: blog ---- diff --git a/documentation/site/guides/architecture/clients.md b/documentation/site/guides/architecture/clients.md deleted file mode 100644 index 6d6a00fb..00000000 --- a/documentation/site/guides/architecture/clients.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Clients -weight: 1 -layout: guides ---- - -## Overview - -Clients handle the authentication and requests to the ledger. A ledger may have different authentication strategies, -so clients will accept different arguments. For example, QuickBooks Online utilizes Oauth 2.0 while NetSuite offers -Token Based Authentication. While similar, the required keys are different. - -## How to use - -Unless you are customizing LedgerSync, you will always pass an instantiated client to an object (e.g. an operation). -The object will handle using the client as needed. - -As most clients implement basic request functionality (e.g. `get`, `put`, `post`, `delete`, etc.), you can call these methods directly to perform custom requests. Refer to the specific Client definitions for what parameters are permitted. - -## Gotchas - -### Oauth 2.0 - -Clients store the authentication details for the ledger. Given that Oauth 2.0 tokens can refresh during a request, -these clients will handle saving credentials back to the client instance. Typically (though some clients offer -more automated solutions), you will want to save any changes back to your database. You can use -`client.ledger_attributes_to_save` to retrieve a hash of which attributes to save. Your code to do so could look like -the following: - -{% highlight ruby linenos %} -# Assuming `client` is defined as an instance of a ledger Client class -client.ledger_attributes_to_save.each do |attribute_to_save, value| - # Store value -end -{% endhighlight %} diff --git a/documentation/site/guides/architecture/index.md b/documentation/site/guides/architecture/index.md deleted file mode 100644 index 0e39b1a6..00000000 --- a/documentation/site/guides/architecture/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Architecture -excerpt: Understand the high-level architecture of LedgerSync. -layout: guides ---- - -LedgerSync consists of the following high-level objects: - -- [Clients](/guides/architecture/clients) -- [Resources](/guides/architecture/resources) -- [Serialization](/guides/architecture/serialization) -- [Operations](/guides/architecture/operations) -- [Searchers](/guides/architecture/searchers) -- [Results](/guides/architecture/results) diff --git a/documentation/site/guides/architecture/resources.md b/documentation/site/guides/architecture/resources.md deleted file mode 100644 index e4fdf872..00000000 --- a/documentation/site/guides/architecture/resources.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Resources -weight: 2 -layout: guides ---- - -## Overview - -Resources are named ruby objects (e.g. `Customer`, `Payment`, etc.) with strict attributes (e.g. `name`, `amount`, etc.). LedgerSync provides resources specific to each ledger. While it is possible to create your own resources (see Customization for more details), this section refers to provided ledger-specific resources. - -The library strives to make each resource and attribute name match the ledger API. This naming convention will help you more readily match ledger documentation to LedgerSync resources. - -Every resource, regardless of ledger, implements a `ledger_id` and `external_id` attribute. The `ledger_id` is the ID given by the ledger, while the `external_id` is your internal ID for the resource. - -## How to use - -Resources are primary used as the inputs and outputs of operations and searchers. A resource is passed to an operation along with a client. Once the operation is successfully performed, a duplicated and updated resource is returned. - -Resources have two layers of validation: - -1. The Resource -2. Operations - -When instantiating a resource, validations are performed. These validations include class checks and, if necessary, value checks (e.g. enums). When performing an operation, validations are performed based on what attributes are required for the operation to be successful. For example, the `ledger_id` should be `nil` on `create`, but it should be present on `update`. - -## Available resources - -You can see all resources available for a given ledger by calling `resources` on the ledger's `Client` like so: - -`LedgerSync::Ledgers::QuickBooksOnline::Client.resources` - -This returns a hash of resource types to classes, where the resource types are unique (e.g. `customer`, `vendor`, etc.). - -You can see all resources available in LedgerSync by calling `LedgerSync.resources`. This returns an array (note: not a hash as multiple ledgers have the same types) of resource classes that have been created inheriting the `LedgerSync::Resource` class. - -## Resource Attributes - -Resources have defined attributes. Attributes are explicitly defined. An error is thrown if an unknown attribute is passed to it. You can retrieve the attributes of a resource by calling `Customer.attributes`. - -A subset of these `attributes` may be a `reference`, which is simply a special type of attribute that references another resource. You can retrieve the references of a resource by calling `Customer.references`. \ No newline at end of file diff --git a/documentation/site/guides/architecture/results.md b/documentation/site/guides/architecture/results.md deleted file mode 100644 index bdf6b154..00000000 --- a/documentation/site/guides/architecture/results.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Results -weight: 6 -layout: guides ---- - diff --git a/documentation/site/guides/community/index.md b/documentation/site/guides/community/index.md deleted file mode 100644 index 1638b95b..00000000 --- a/documentation/site/guides/community/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Where To Get Support -excerpt: >- - Connect with the maintainers, contributers, and developers using LedgerSync. -layout: guides ---- - -{% include getting_help.md page=page site=site %} \ No newline at end of file diff --git a/documentation/site/guides/contribute/console.md b/documentation/site/guides/contribute/console.md deleted file mode 100644 index d53296d0..00000000 --- a/documentation/site/guides/contribute/console.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Console -layout: guides ---- - -Run `bundle console` to start and interactive console with the library already loaded. You can also run `bin/console` for an interactive prompt that will allow you to experiment. \ No newline at end of file diff --git a/documentation/site/guides/contribute/deployment.md b/documentation/site/guides/contribute/deployment.md deleted file mode 100644 index 64a1e0ae..00000000 --- a/documentation/site/guides/contribute/deployment.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: New Release -layout: guides ---- - -
                      Note: -Only owners can release new versions of the gem to RubyGems.org. -
                      - -## 1. Pull latest development - -```bash -git checkout development -git pull origin development -``` - -## 3. Start release - -This assumes you are using [the git-flow gem](https://github.com/nvie/gitflow): - -```bash -git flow release start vX.X.X # Replace X.X.X. with new version -``` - -## 2. Update version - -You can use [the bump gem](https://github.com/gregorym/bump) to easily update the gem version: - -```bash -# Version Format: MAJOR.MINOR.PATCH -# Choose one of the following -bundle exec bump patch # to bump X in 1.1.X -bundle exec bump minor # to bump X in 1.X.1 -bundle exec bump major # to bump X in X.1.1 - -git commit -am "Publish version X.X.X" -``` - -## 3. Publish version - -```bash -git flow release publish vX.X.X # Replace X.X.X. with new version -``` - -## 4. Create PR - -Create a PR in the github repo with `master` as the base. - -## 5. Wait for review and tests to pass. - -All releases should be approved and NOT merged using github. - -## 6. Merge release - -Merge the release using git-flow: - -```bash -git flow release finish vX.X.X # Replace X.X.X. with new version -git push origin --tags -``` - -## 7. Deploy new version to rubygems - -```bash -git checkout master -bundle exec build -bundle exec release -``` - -## That's it! - -The version will now be available [on rubygems](https://rubygems.org/gems/ledger_sync). \ No newline at end of file diff --git a/documentation/site/guides/contribute/documentation.md b/documentation/site/guides/contribute/documentation.md deleted file mode 100644 index 26582aeb..00000000 --- a/documentation/site/guides/contribute/documentation.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Documentation -excerpt: >- - Learn how to document and update the documentation site. -layout: guides ---- - -## Overview - -Our documentation is a static website hosted on Github pages. The docs are a mix of static and dynamically-generated -content. The final static site is generated using Jekyll. - -## Install Jekyll - -To run or generate the docs site locally, you need to install Jekyll: - -``` -gem install jekyll bundler -``` - -## Run Jekyll - -To run Jekyll locally to view the site, run the following from the root directory: - -``` -cd docs/site -bundle exec jekyll serve -``` - -## Generate dynamic pages - -Some of the documentation is generated based on the code of LedgerSync (e.g. available operations, resources, etc.). To -generate these pages, run the following from the root directory: - -``` -ruby docs/generate.rb -``` \ No newline at end of file diff --git a/documentation/site/guides/contribute/index.md b/documentation/site/guides/contribute/index.md deleted file mode 100644 index a785262c..00000000 --- a/documentation/site/guides/contribute/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Contribute -excerpt: >- - Help expand LedgerSync coverage. -layout: guides ---- - -Bug reports and pull requests are welcome on GitHub at https://github.com/LedgerSync/ledger_sync. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. - -## Code of Conduct - -Everyone interacting in the LedgerSync project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/LedgerSync/ledger_sync/blob/master/CODE_OF_CONDUCT.md). - -## Installing the gem - -After checking out the repo, run `bin/setup` to install dependencies. - -To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org) - -## Development - -The LedgerSync repo follow [the git flow pattern](https://nvie.com/posts/a-successful-git-branching-model/). You can find [a great cheat sheet here](http://danielkummer.github.io/git-flow-cheatsheet/). Please be sure to follow the naming convention and read our guide to deployment if you are pushing new versions of the gem. \ No newline at end of file diff --git a/documentation/site/guides/contribute/qa.md b/documentation/site/guides/contribute/qa.md deleted file mode 100644 index a32ab2e8..00000000 --- a/documentation/site/guides/contribute/qa.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: QA -layout: guides ---- - -**BE SURE TO USE A TEST ENVIRONMENT ON YOUR LEDGER.** - -To fully test the library against the actual ledgers, you can run `bin/qa` which will run all tests in the `qa/` directory. QA Tests are written in RSpec. Unlike tests in the `spec/` directory, QA tests allow external HTTP requests. - -As these interact with real ledgers, you will need to provide secrets. You can do so in a `.env` file in the root directory. Copy the `.env.template` file to get started. - -**WARNINGS:** - -- **BE SURE TO USE A TEST ENVIRONMENT ON YOUR LEDGER.** -- **NEVER CHECK IN YOUR SECRETS (e.g. the `.env` file).** -- Because these tests actually create and modify resources, they attempt to do "cleanup" by deleting any newly created resources. This process could fail, and you may need to delete these resources manually. \ No newline at end of file diff --git a/documentation/site/guides/contribute/testing.md b/documentation/site/guides/contribute/testing.md deleted file mode 100644 index 2356d409..00000000 --- a/documentation/site/guides/contribute/testing.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Testing -layout: guides ---- - -Run `bundle exec rspec` to run all unit, feature, and integration tests. Unlike [QA Tests](/guides/contribute/qa), all external HTTP requests and responses are stubbed. \ No newline at end of file diff --git a/documentation/site/guides/customization/custom_resources.md b/documentation/site/guides/customization/custom_resources.md deleted file mode 100644 index fd037afc..00000000 --- a/documentation/site/guides/customization/custom_resources.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Custom Resources -layout: guides -weight: 2 ---- - -Some ledgers (e.g. NetSuite) allow for custom attributes (or "fields"), which can vary by account and user. To allow for custom attributes, you can create new resources, ledger serializers (see below), and validation contracts (see below). Assuming your ledger supports the string attribute `foo` for customers, you could do the following: - -```ruby -class CustomCustomer < LedgerSync::Ledgers::QuickBooksOnline::Customer - attribute :foo, type: LedgerSync::Type::String -end -``` - -Depending on your use of LedgerSync, you may need to define resources dynamically with different custom attributes. You could do so using something like the following: - -```ruby -custom_attributes_for_customers = [ - [ - [:foo, LedgerSync::Type::String] - ], - [ - [:foo, LedgerSync::Type::Integer], - [:bar, LedgerSync::Type::Boolean] - ] -] - -custom_customer_classes = custom_attributes_for_customers.map do |attributes| - customer_class = Class.new(LedgerSync::Ledgers::QuickBooksOnline::Customer) - attributes.each do |name, type| - customer_class.attribute name, type: type - end - customer_class -end - -customer_class_1, customer_class_2 = custom_customer_classes - -# First Custom Customer Class -customer_class_1.resource_attributes.include?(:foo) # => true -customer_class_1.resource_attributes[:foo].type # => # -customer_class_1.resource_attributes.include?(:bar) # => false - -# Second Custom Customer Class -customer_class_2.resource_attributes.include?(:foo) # => true -customer_class_2.resource_attributes[:foo].type # => # -customer_class_2.resource_attributes.include?(:bar) # => true -customer_class_2.resource_attributes[:bar].type # => # -``` - -You can now use these custom resources in operations that use or require custom attributes. diff --git a/documentation/site/guides/customization/custom_serializers.md b/documentation/site/guides/customization/custom_serializers.md deleted file mode 100644 index b7c8b2d7..00000000 --- a/documentation/site/guides/customization/custom_serializers.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Custom Serializers -layout: guides -weight: 2 ---- - -When you need to pass new attributes to/from a ledger, you may to to create custom serializers and deserializers. - -For example, given the following: - -- `CustomCustomer` is a custom resource that inherits from `LedgerSync::Ledgers::NetSuite::Customer` and defines a custom attribute string named `foo` -- the attribute `foo` is used in both the request and response bodies -- `client` defines a valid instance of the NetSuite client - - -```ruby -class CustomSerializer < LedgerSync::Ledgers::NetSuite::Customer::Serializer - attribute :foo -end - -class CustomDeserializer < LedgerSync::Ledgers::NetSuite::Customer::Deserializer - attribute :foo -end - -# Serializing -custom_resource = CustomCustomer.new(foo: 'asdf') # See above under Resources -> Custom Attributes -serializer = CustomSerializer.new(resource: custom_resource) -serializer.serialize # => {..., "foo"=>"asdf",...} - -# Deserializing -deserialized_resource = serializer.deserialize(hash: { foo: 'qwerty' }, resource: CustomCustomer.new) -deserialized_resource.foo # => 'qwerty' -custom_resource.foo # => 'asdf' - -op = LedgerSync::Ledgers::NetSuite::Customer::Operations::Create.new( - client: client, - deserializer: CustomSerializer.new, - serializer: CustomSerializer.new, - resource: custom_resource -) -``` - -Note that in the above example, we extend an existing customer serializer in the NetSuite ledger. In most cases, serializers have the following inheritance pattern: `LedgerSync::Ledgers::[ADAPTOR]::[RESOURCE]::Serializer < LedgerSync::Ledgers::[ADAPTOR]::Serializer < LedgerSync::Serializer`. - -So in this example, it would be `LedgerSync::Ledgers::NetSuite::Customer::Serializer < LedgerSync::Ledgers::NetSuite::Serializer < LedgerSync::Serializer`. The more specific the serializer, the more helper methods are available that are ledger and/or resource specific. - -Similarly, deserializers follow the same pattern. diff --git a/documentation/site/guides/customization/index.md b/documentation/site/guides/customization/index.md deleted file mode 100644 index 84052dcd..00000000 --- a/documentation/site/guides/customization/index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Customization -layout: guides ---- - -One of the goals of LedgerSync is to make it easy to customize for your needs. For example, you may need: - -- Resource converters -- Custom resources -- Custom attributes -- Custom operations -- Custom ledgers -- etc. - -We provide some guides for achieving this functionality. \ No newline at end of file diff --git a/documentation/site/guides/customization/resource_converters.md b/documentation/site/guides/customization/resource_converters.md deleted file mode 100644 index 5898b27a..00000000 --- a/documentation/site/guides/customization/resource_converters.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Resource Converters -layout: guides -weight: 1 ---- - -## Overview - -LedgerSync provides ledger-specific resources and operations for you to easily interface with a ledger. Complexity arises for a few reasons, such as the following: - -- Ledgers have different resources. Some ledgers may not even implement the same resources as another ledger. -- Resources for a given ledger have different attributes from their counterparts in other ledgers. -- Operations may not be supported in all ledgers (e.g. deletion is not available for some resources in QuickBooks Online) -- etc. - -Because of this complexity, LedgerSync tries to remain "unopinionated" about ledgers. The goal is to have resources, attributes, and operations that match as closely to the API as possible. The issue here is that it requires a developer to have ledger-specific knowledge for every interaction with LedgerSync or to define new resource, operation, and validation layers entirely. - -To solve this problem, some engineers at [Modern Treasury](site.modern_treasury_url) have created what we call a `ResourceConverter`. This object takes in a `source` and `destination`. It also defines the mapping from source to destination. This makes it easy to take any object and map it to a ledger-specific resource. Having a converter per resource per ledger enables you to create an interface with LedgerSync. After this layer is created, future developers are not required to have ledger-specific knowledge to make updates. - -Let's see how this works. - -## Scenario - -Let's assume that we have a `Customer` model object that we use internally that looks like the following: - -```ruby -class Customer - attr_accessor :name - attr_accessor :email - attr_accessor :id -end -``` - -We want to sync the data on this object (specifically `name`, `email`, and `id`) to QuickBooks Online and NetSuite. We will also assume that we have already handled authentication and have a valid client for each(`quickbooks_online_client` and `netsuite_client`, respectively). Both ledgers implement their own `Customer` object, but the attributes for these objects vary. For example, here are the relevant snippets of these resources: - -```ruby -module LedgerSync - module Ledgers - module QuickBooksOnline - class Customer < QuickBooksOnline::Resource - attribute :DisplayName, type: LedgerSync::Type::String - - references_one :PrimaryEmailAddr, to: PrimaryEmailAddr - end - end - end -end - -module LedgerSync - module Ledgers - module QuickBooksOnline - class PrimaryEmailAddr < QuickBooksOnline::Resource - attribute :Address, type: LedgerSync::Type::String - end - end - end -end -``` - -```ruby -module LedgerSync - module Ledgers - module NetSuite - class Customer < NetSuite::Resource - attribute :email, type: LedgerSync::Type::String - attribute :companyName, type: LedgerSync::Type::String - attribute :firstName, type: LedgerSync::Type::String - attribute :lastName, type: LedgerSync::Type::String - end - end - end -end -``` - -
                      Note: -

                      - We will ignore for the purposes of this guide that NetSuite requires a `subsidiary` for their `Customer` resource. -

                      -
                      \ No newline at end of file diff --git a/documentation/site/guides/getting-started/get-help.md b/documentation/site/guides/getting-started/get-help.md deleted file mode 100644 index abd4677b..00000000 --- a/documentation/site/guides/getting-started/get-help.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Get Help -weight: 3 -layout: guides ---- - -{% include getting_help.md page=page site=site %} \ No newline at end of file diff --git a/documentation/site/guides/getting-started/index.md b/documentation/site/guides/getting-started/index.md deleted file mode 100644 index bce109bc..00000000 --- a/documentation/site/guides/getting-started/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Getting Started -excerpt: In this section you'll find basic information about Libris and how to use it. -layout: guides ---- - -Once you have [installed LedgerSync](/guides/getting-started/installation), visit the -[Quick Start Guide](/guides/getting-started/quick-start) to perform your first operation. diff --git a/documentation/site/guides/getting-started/installation.md b/documentation/site/guides/getting-started/installation.md deleted file mode 100644 index e3e2dc9d..00000000 --- a/documentation/site/guides/getting-started/installation.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Installation -weight: 1 -layout: guides ---- - -{% include installation_instructions.md page=page site=site %} \ No newline at end of file diff --git a/documentation/site/guides/getting-started/quick-start.md b/documentation/site/guides/getting-started/quick-start.md deleted file mode 100644 index 348d3a48..00000000 --- a/documentation/site/guides/getting-started/quick-start.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: Quick Start -weight: 2 -layout: guides ---- - -## Overview - -To use LedgerSync, you must carry out an `Operation`. The operation will be ledger-specific and will require the -following: - -1. Client -2. Resource(s) - -## 1. Create a client - -Clients are responsible for the authentication and requests for a specific ledger. In this example, we will assume you -are using the QuickBooks Online ledger. - -
                      Note: Each ledger has different requirements for authentication. Please visit the -ledger-specific pages to learn more.
                      - -```ruby -client = LedgerSync::Ledgers::QuickBooksOnline::Client.new( - access_token: access_token, # assuming this is defined - client_id: ENV['QUICKBOOKS_ONLINE_CLIENT_ID'], - client_secret: ENV['QUICKBOOKS_ONLINE_CLIENT_SECRET'], - realm_id: ENV['QUICKBOOKS_ONLINE_REALM_ID'], - refresh_token: refresh_token # assuming this is defined -) -``` - -## 2. Create resource(s) - -Create a resource on which to operate. Some resources have references to other resources. You can use -`Util::ResourcesBuilder` to create resources and relationships from a structured hash. - -
                      Note: Resources are ledger-specific, meaning they may have different attributes and -references compared to other ledgers. Please visit [the Reference](/reference) to learn about resource -attributes.
                      - -```ruby -resource = LedgerSync::Ledgers::QuickBooksOnline::Customer.new( - DisplayName: 'Sample Customer', - external_id: customer_external_id # A unique ID from your platform -) -``` - -## 3. Create an operation - -Given our `client` and `resource` from above, we can now create an `Operation`. Operations are typically CRUD-like -methods, typically (though not always) only making a single request. - -Operations automatically determine a `Serializer` and `Deserializer`. These serializers are used to translate to and -the from the ruby `Resource` in the format required by the ledger. - -```ruby -operation = LedgerSync::Ledgers::QuickBooksOnline::Customer::Operations::Create.new( - client: client, - resource: resource -) -``` - -## 4. Perform the operation - -The next step is to perform the operation. You can do this by simply calling `perform`. - -```ruby -result = operation.perform # Returns a LedgerSync::OperationResult -``` - -This method will return a -`LedgerSync::OperationResult` which is a special object allowing you to determine the success of the operation, access -responses values (serialized and deserialized), and investigate failures. - -```ruby -if result.success? - resource = result.operation.resource - # Do something with resource -else # result.failure? - raise result.error -end -``` - -## 5. Save updates to authentication - -Because QuickBooks Online uses Oauth 2, you must always be sure to save the access_token, refresh_token, and expirations -as they can change with any API call. Operations will always save values back to the client. - -### Automatically update values in .env - -If you have a `.env` file present in the root directory of your project, the client will automatically comment out old values and update new -values. - -If you want to disable this functionality, you can do so by setting `update_dotenv` to `false` when instantiating the -object: - -```ruby -client = LedgerSync::Ledgers::QuickBooksOnline::Client.new( - access_token: access_token, # assuming this is defined - client_id: ENV['QUICKBOOKS_ONLINE_CLIENT_ID'], - client_secret: ENV['QUICKBOOKS_ONLINE_CLIENT_SECRET'], - realm_id: ENV['QUICKBOOKS_ONLINE_REALM_ID'], - refresh_token: refresh_token, # assuming this is defined - update_dotenv: false -) -``` - -### Manually save values - -```ruby -result.operation.client.ledger_attributes_to_save.each do |key, value| - # save values -end -``` - -## Summary - -That's it! Assuming proper authentication values and valid values on the resource, this will result in a new customer -being created in QuickBooks Online. - -There are many other resources and operations that can be performed in QuickBooks Online. For a complete guide of these -and other ledgers, visit [the Reference](/reference). diff --git a/documentation/site/guides/index.md b/documentation/site/guides/index.md deleted file mode 100644 index 0bcd5408..00000000 --- a/documentation/site/guides/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Welcome to LedgerSync -layout: guides ---- - -## Join the Conversation - -[Click here]({{ site.slack_url }}) to join our public Slack group. - -## Installation - -{% include installation_instructions.md page=page site=site %} - -## Getting started - -Visit the [Quick Start Guide](/guides/getting-started/quick-start) to perform your first operation. \ No newline at end of file diff --git a/documentation/site/guides/ledgers/index.md b/documentation/site/guides/ledgers/index.md deleted file mode 100644 index 5a4dfe3e..00000000 --- a/documentation/site/guides/ledgers/index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Ledgers -excerpt: LedgerSync allows you to easily connect to multiple ledgers. -layout: guides ---- - -The list on the left are the currently supported ledgers. Visit each to learn more of the following: - -- how to authenticate -- supported resources and attributes -- supported operations -- ledger-specific helpers and utilities diff --git a/documentation/site/guides/ledgers/netsuite.md b/documentation/site/guides/ledgers/netsuite.md deleted file mode 100644 index 285ee5a7..00000000 --- a/documentation/site/guides/ledgers/netsuite.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: NetSuite REST -weight: 1 -layout: guides ---- - -{% include ledgers/netsuite_summary.md page=page site=site %} - -Visit [the NetSuite REST reference guide](/reference/NetSuite REST) for more detailed documentation. \ No newline at end of file diff --git a/documentation/site/guides/ledgers/netsuite_soap.md b/documentation/site/guides/ledgers/netsuite_soap.md deleted file mode 100644 index 1da8ef02..00000000 --- a/documentation/site/guides/ledgers/netsuite_soap.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: NetSuite SOAP -weight: 2 -layout: guides ---- - -{% include ledgers/netsuite_soap_summary.md page=page site=site %} - -Visit [the NetSuite SOAP reference guide](/reference/NetSuite SOAP) for more detailed documentation. \ No newline at end of file diff --git a/documentation/site/guides/ledgers/quickbooks_online.md b/documentation/site/guides/ledgers/quickbooks_online.md deleted file mode 100644 index c7aa28c0..00000000 --- a/documentation/site/guides/ledgers/quickbooks_online.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: QuickBooks Online -weight: 3 -layout: guides ---- - -{% include ledgers/quickbooks_online_summary.md page=page site=site %} - -Visit [the QuickBooks Online reference guide](/reference/QuickBooks Online) for more detailed documentation. \ No newline at end of file diff --git a/documentation/site/guides/ledgers/stripe.md b/documentation/site/guides/ledgers/stripe.md deleted file mode 100644 index 5540df98..00000000 --- a/documentation/site/guides/ledgers/stripe.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Stripe -weight: 4 -layout: guides ---- - -{% include ledgers/stripe_summary.md page=page site=site %} - -Visit [the Stripe reference guide](/reference/Stripe) for more detailed documentation. \ No newline at end of file diff --git a/documentation/site/guides/modern-treasury/index.md b/documentation/site/guides/modern-treasury/index.md deleted file mode 100644 index 1d47f86f..00000000 --- a/documentation/site/guides/modern-treasury/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Modern Treasury -excerpt: >- - LedgerSync is an open-sourced library owned and maintained by Modern Treasury. -layout: guides ---- - -[Modern Treasury]({{ site.modern_treasury_url }}) is the owner and maintainer of LedgerSync. LedgerSync is an -open-source library, so companies are encouraged to use it according to the open-source license. - -Modern Treasury is a user of LedgerSync, allowing the ModernTreasury platform to easily connect to multiple ledgers. -Modern Treasury invests core product and engineering resources to maintaining and expanding LedgerSync. - -If you would like to learn more about Modern Treasury, please visit [www.moderntreasury.com]({{ site.modern_treasury_url }}) \ No newline at end of file diff --git a/documentation/site/guides/tips_and_more/index.md b/documentation/site/guides/tips_and_more/index.md deleted file mode 100644 index 22b4bf52..00000000 --- a/documentation/site/guides/tips_and_more/index.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Tips and More -excerpt: LedgerSync allows you to easily connect to multiple ledgers. -layout: guides ---- - -## Keyword Arguments - -LedgerSync heavily uses ruby keyword arguments so as to make it clear what values are being passed and which attributes are required. When this README says something like "the `fun_function` function takes the argument `foo`" that translates to `fun_function(foo: :some_value)`. - -## Fingerprints - -Most objects in LedgerSync can be fingerprinted by calling the instance method `fingerprint`. For example: - -```ruby -puts LedgerSync::Customer.new.fingerprint # "b3eab7ec00431a4ae0468fee72e5ba8f" - -puts LedgerSync::Customer.new.fingerprint == LedgerSync::Customer.new.fingerprint # true -puts LedgerSync::Customer.new.fingerprint == LedgerSync::Customer.new(name: :foo).fingerprint # false -puts LedgerSync::Customer.new.fingerprint == LedgerSync::Payment.new.fingerprint # false -``` - -Fingerprints are used to compare objects. This method is used in de-duping objects, as it only considers the data inside and not the instance itself (as shown above). - -## Serialization - -Most objects in LedgerSync can be serialized by calling the instance method `serialize`. For example: - -```ruby -puts LedgerSync::Payment.new( - customer: LedgerSync::Customer.new -) - -{ - root: "LedgerSync::Payment/8eed81c0177801a001f2544f0c85e21d", - objects: { - "LedgerSync::Payment/8eed81c0177801a001f2544f0c85e21d": { - id: "LedgerSync::Payment/8eed81c0177801a001f2544f0c85e21d", - object: "LedgerSync::Payment", - fingeprint: "8eed81c0177801a001f2544f0c85e21d", - data: { - currency: nil, - amount: nil, - customer: { - object: "reference", - id: "LedgerSync::Customer/b3eab7ec00431a4ae0468fee72e5ba8f" - }, - external_id: "", - ledger_id: nil, - - } - }, - "LedgerSync::Customer/b3eab7ec00431a4ae0468fee72e5ba8f": { - id: "LedgerSync::Customer/b3eab7ec00431a4ae0468fee72e5ba8f", - object: "LedgerSync::Customer", - fingeprint: "b3eab7ec00431a4ae0468fee72e5ba8f", - data: { - name: nil, - email: nil, - phone_number: nil, - external_id: "", - ledger_id: nil - } - } - } -} -``` - -The serialization of any object follows the same structure. There is a `:root` key that holds the ID of the root object. There is also an `:objects` hash that contains all of the objects for this serialization. As you can see, unique nested objects listed in the `:objects` hash and referenced using a "reference object", in this case: - -```ruby -{ - object: "reference", - id: "LedgerSync::Customer/b3eab7ec00431a4ae0468fee72e5ba8f" -} -``` diff --git a/documentation/site/images/1.jpg b/documentation/site/images/1.jpg deleted file mode 100755 index a8fd723b..00000000 Binary files a/documentation/site/images/1.jpg and /dev/null differ diff --git a/documentation/site/images/10.jpg b/documentation/site/images/10.jpg deleted file mode 100755 index a8e1a00b..00000000 Binary files a/documentation/site/images/10.jpg and /dev/null differ diff --git a/documentation/site/images/2.jpg b/documentation/site/images/2.jpg deleted file mode 100755 index 218ef237..00000000 Binary files a/documentation/site/images/2.jpg and /dev/null differ diff --git a/documentation/site/images/3.jpg b/documentation/site/images/3.jpg deleted file mode 100755 index a9635589..00000000 Binary files a/documentation/site/images/3.jpg and /dev/null differ diff --git a/documentation/site/images/4.jpg b/documentation/site/images/4.jpg deleted file mode 100755 index b1271bcd..00000000 Binary files a/documentation/site/images/4.jpg and /dev/null differ diff --git a/documentation/site/images/5.jpg b/documentation/site/images/5.jpg deleted file mode 100755 index ce07175d..00000000 Binary files a/documentation/site/images/5.jpg and /dev/null differ diff --git a/documentation/site/images/6.jpg b/documentation/site/images/6.jpg deleted file mode 100755 index 5f65659f..00000000 Binary files a/documentation/site/images/6.jpg and /dev/null differ diff --git a/documentation/site/images/7.jpg b/documentation/site/images/7.jpg deleted file mode 100755 index 89a37192..00000000 Binary files a/documentation/site/images/7.jpg and /dev/null differ diff --git a/documentation/site/images/8.jpg b/documentation/site/images/8.jpg deleted file mode 100755 index 56867e57..00000000 Binary files a/documentation/site/images/8.jpg and /dev/null differ diff --git a/documentation/site/images/9.jpg b/documentation/site/images/9.jpg deleted file mode 100755 index da10f4d7..00000000 Binary files a/documentation/site/images/9.jpg and /dev/null differ diff --git a/documentation/site/images/logo.svg b/documentation/site/images/logo.svg deleted file mode 100755 index e1fa04f1..00000000 --- a/documentation/site/images/logo.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/documentation/site/index.md b/documentation/site/index.md deleted file mode 100644 index 625f4d39..00000000 --- a/documentation/site/index.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Home -sections: - - section_id: hero - type: section_hero - title: LedgerSync - image: images/5.jpg - content: An open-source library for easily syncing with accounting software, general ledgers, ERPs, and other ledgers. - actions: - - label: Get Started - url: guides - type: primary - - section_id: features - type: section_grid - col_number: three - grid_items: - - title: Guides - content: >- - Check out our Quick Start guide to start syncing. You can also view other detailed guides for various use cases, ledgers, customizability, and more. - actions: - - label: Get Started - url: /guides - type: link - - title: Reference - content: >- - The Reference gives you detailed information about each ledger, operation, and resource. The Reference will help you know what attributes are required for which operations. - actions: - - label: View Reference - url: /reference - type: link - - title: Contribute - content: >- - Want to help build LedgerSync? Check out our guidelines and resources for extending LedgerSync to new - legders, resources, and more. - actions: - - label: Learn More - url: /guides/contribute - type: link - # - section_id: text-img - # type: section_content - # image: images/10.jpg - # image_position: left - # title: A Section With An Image - # content: >- - # Nam pulvinar ante eu ultricies volutpat. Sed nulla nibh, dapibus sit amet - # cursus quis, fringilla nec sapien. Vestibulum imperdiet nunc bibendum - # consectetur lobortis. - # actions: - # - label: View Demo - # url: /guides/getting-started/index.html - # type: primary - # - label: Get Started - # url: /guides/getting-started/index.html - # type: secondary - # - section_id: features-two-col - # type: section_grid - # title: Sample Layouts - # subtitle: An optional subtitle of the section - # col_number: two - # grid_items: - # - title: Overview - # content: >- - # Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nisl - # ligula, cursus id molestie vel, maximus aliquet risus. Vivamus in nibh - # fringilla, fringilla tortor at, pulvinar orci. - # actions: - # - label: Learn More - # url: /overview.html - # type: link - # - title: Showcase - # content: >- - # Donec lobortis velit sed suscipit lobortis. Ut non quam metus. Nullam - # a maximus mi. Quisque justo nunc, sollicitudin euismod euismod at, - # tincidunt ut tellus. Vivamus rhoncus mattis varius. - # actions: - # - label: Learn More - # url: /showcase.html - # type: link - # - section_id: cta - # type: section_cta - # title: The Title of The Call to Action Block - # subtitle: This is an optional description for the call to action block. - # actions: - # - label: Get Started - # url: /guides/getting-started/installation.html - # type: primary - # - section_id: text-no-img - # type: section_content - # title: A Section Without Image - # content: >- - # Nam pulvinar ante eu ultricies volutpat. Sed nulla nibh, dapibus sit amet - # cursus quis, fringilla nec sapien. Vestibulum imperdiet nunc bibendum - # consectetur lobortis. - # actions: - # - label: Get Started - # url: /guides/getting-started/installation.html - # type: primary -layout: advanced ---- diff --git a/documentation/site/overview.md b/documentation/site/overview.md deleted file mode 100644 index fc59343a..00000000 --- a/documentation/site/overview.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Overview -sections: - - section_id: hero - type: section_hero - title: Overview - image: images/5.jpg - content: An optional subtitle - - section_id: guides-overview - type: section_guides - col_number: three - - section_id: cta - type: section_cta - title: The Title of The Call to Action Block - subtitle: This is an optional description for the call to action block. - actions: - - label: Get Started - url: /guides/getting-started/index.html - type: primary -layout: advanced ---- diff --git a/documentation/site/reference/index.md b/documentation/site/reference/index.md deleted file mode 100644 index aacf8e07..00000000 --- a/documentation/site/reference/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Reference -layout: reference ---- - -Select a ledger from the dropdown in the navigation. \ No newline at end of file diff --git a/documentation/site/reference/netsuite/authentication/_token_based_authentication.md b/documentation/site/reference/netsuite/authentication/_token_based_authentication.md deleted file mode 100644 index 555ff716..00000000 --- a/documentation/site/reference/netsuite/authentication/_token_based_authentication.md +++ /dev/null @@ -1,99 +0,0 @@ -## Overview - -In order to authenticate to NetSuite, you need the following: - -- `account_id` -- `consumer_key` -- `consumer_secret` -- `token_id` -- `token_secret` - -We will walk through how to get each value in the following sections. - -
                      Note: -You need to have sufficient permissions to set up your account for API authentication. -
                      - -## Prerequisites - -### REST Web Services feature - -Enable the feature at Setup > Company > Setup Tasks > Enable Features, in the SuiteTalk (Web Services) section, on the SuiteCloud subtab. To use the feature, you must accept the SuiteCloud Terms of Service. - -### SuiteAnalytics Workbook feature - -Enable the feature at Setup > Company > Setup Tasks > Enable Features, on the Analytics subtab. - -### Permissions - -You will require the following permissions: - -- REST Web Services -- Log in using Access Tokens -- SuiteAnalytics Workbook - -Your permissions vary based on which role you are assigned. You can edit roles in Setup > Users/Roles > User Management > Manage Roles. Ensure your user is assigned a role with the aforementioned permissions in order to complete the setup. - -
                      Note: -

                      - There are two different sets of permissions you will need: -

                      -

                      -

                        -
                      • The permissions mentioned above are to set up your integration.
                      • -
                      • Later when creating a token, you will need to assign a user with a role that has the necessary permissions to access records (e.g. payments, invoices, bills, etc.)
                      • -
                      -

                      - -

                      -These can be the same or different roles. They can be assigned to one or many users. -

                      -
                      - -## Account ID - -The `account_id` can be found in the URL when you are logged into the NetSuite dashboard in your browser. It will look -something like the following: - -``` -https://.app.netsuite.com/app/center/card.nl?sc=-29&whence= -``` - -Example: - -``` -https://123456.app.netsuite.com/app/center/card.nl?sc=-29&whence= -``` - -The Account ID precedes `.app.netsuite.com`, which in this case is `123456`. Note that your ID may include `-sb1` -(representing "Sandbox 1"). Be sure to include the entire ID as it appears in the URL, including any letters, numbers, -and hyphens. - -## Consumer Keys - -The consumer keys are retrieved when you [create an Integration record](https://system.netsuite.com/app/help/helpcenter.nl?fid=bridgehead_4249032125.html&whence=). You can view [the NetSuite documentation](https://system.netsuite.com/app/help/helpcenter.nl?fid=bridgehead_4249032125.html&whence=) for the official documentation. - -At the last step of creating an Integration record, save the consumer key and consumer secret. They will not be shown again once you navigate away from the page. - -## Token - -To obtain your `token_key` and `token_secret`, you will need to [create a Token](https://system.netsuite.com/app/help/helpcenter.nl?fid=bridgehead_4254081947.html). View [the NetSuite documentation](https://system.netsuite.com/app/help/helpcenter.nl?fid=bridgehead_4254081947.html) for the official documentation. - -You will use the integration record you created along with your user (or the user who has the necessary permissions to access records). - -At the last step, save the token key and token secret. - -## Conclusion - -Now with these values, you can successfully authenticate to NetSuite. Simply pass the values into the client: - -{% highlight ruby linenos %} -client = LedgerSync::Ledgers::QuickBooksOnline::Client.new( - account_id: account_id, - consumer_key: consumer_key, - consumer_secret: consumer_secret, - token_id: token_id, - token_secret: token_secret -) -{% endhighlight %} - diff --git a/documentation/site/reference/netsuite/authentication/index.md b/documentation/site/reference/netsuite/authentication/index.md deleted file mode 100644 index b3e364fb..00000000 --- a/documentation/site/reference/netsuite/authentication/index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Authentication -layout: reference_netsuite -ledger: netsuite ---- - -For the REST API, NetSuite offers two types of authentication: - -- Token Based Authentication (TBA) -- Oauth 2.0 - -This client currently uses TBA. While Oauth 2.0 may be available in the future, TBA was chosen for the following reasons: - -1. The SOAP API only supports TBA. -2. NetSuite users will still need to go through a manual setup (e.g. Integration record and Role) regardless of the method. \ No newline at end of file diff --git a/documentation/site/reference/netsuite/authentication/token_based_authentication.md b/documentation/site/reference/netsuite/authentication/token_based_authentication.md deleted file mode 100644 index 8361af78..00000000 --- a/documentation/site/reference/netsuite/authentication/token_based_authentication.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Token Based Authentication -layout: reference_netsuite ---- - -{% include reference/netsuite/authentication/_token_based_authentication.md %} \ No newline at end of file diff --git a/documentation/site/reference/netsuite/index.md b/documentation/site/reference/netsuite/index.md deleted file mode 100644 index 5cd716a5..00000000 --- a/documentation/site/reference/netsuite/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: NetSuite -layout: reference_netsuite -ledger: netsuite ---- - -### Resource Metadata and Schemas - -Due to NetSuites granular user permissions and custom attributes, resources and methods for those resources can vary from one user (a.k.a. token) to another. Because of this variance, there are some helper classes that allow you to retrieve NetSuite records, allowed methods, attributes/parameters, etc. - -To retrieve the metadata for a record: - -```ruby -metadata = LedgerSync::Ledgers::NetSuite::Record::Metadata.new( - client: netsuite_client, # Assuming this is previous defined - record: :customer -) - -puts metadata.http_methods # Returns a list of LedgerSync::Ledgers::NetSuite::Record::HTTPMethod objects -puts metadata.properties # Returns a list of LedgerSync::Ledgers::NetSuite::Record::Property objects -``` - -### Reference - -- [NetSuite REST API Documentation](https://docs.oracle.com/cloud/latest/netsuitecs_gs/NSTRW/NSTRW.pdf) \ No newline at end of file diff --git a/documentation/site/reference/netsuite/resources/account.md b/documentation/site/reference/netsuite/resources/account.md deleted file mode 100644 index 54b8facf..00000000 --- a/documentation/site/reference/netsuite/resources/account.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: account -weight: 1 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::Account - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| name | LedgerSync::Type::String | -| classification | LedgerSync::Type::String | -| account_type | LedgerSync::Type::StringFromSet | -| account_sub_type | LedgerSync::Type::String | -| number | LedgerSync::Type::String | -| description | LedgerSync::Type::String | -| active | LedgerSync::Type::Boolean | -| currency | LedgerSync::Type::ReferenceOne | - - -## Operations - -### LedgerSync::Ledgers::NetSuite::Account::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Account::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::NetSuite::Account::Searcher` | diff --git a/documentation/site/reference/netsuite/resources/check.md b/documentation/site/reference/netsuite/resources/check.md deleted file mode 100644 index f9088918..00000000 --- a/documentation/site/reference/netsuite/resources/check.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: check -weight: 2 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::Check - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| memo | LedgerSync::Type::String | -| trandate | LedgerSync::Type::String | -| account | LedgerSync::Type::ReferenceOne | -| department | LedgerSync::Type::ReferenceOne | -| entity | LedgerSync::Type::ReferenceOne | -| currency | LedgerSync::Type::ReferenceOne | -| line_items | LedgerSync::Type::ReferenceMany | - - -## Operations - -### LedgerSync::Ledgers::NetSuite::Check::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Check::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Check::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Check::Operations::Delete - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::NetSuite::Check::Searcher` | diff --git a/documentation/site/reference/netsuite/resources/check_line_item.md b/documentation/site/reference/netsuite/resources/check_line_item.md deleted file mode 100644 index 8496eafa..00000000 --- a/documentation/site/reference/netsuite/resources/check_line_item.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: check_line_item -weight: 3 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::CheckLineItem - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| account | LedgerSync::Type::ReferenceOne | -| ledger_class | LedgerSync::Type::ReferenceOne | -| department | LedgerSync::Type::ReferenceOne | -| amount | LedgerSync::Type::Float | -| memo | LedgerSync::Type::String | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/netsuite/resources/currency.md b/documentation/site/reference/netsuite/resources/currency.md deleted file mode 100644 index cbfc7de4..00000000 --- a/documentation/site/reference/netsuite/resources/currency.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: currency -weight: 4 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::Currency - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| exchange_rate | LedgerSync::Type::Float | -| name | LedgerSync::Type::String | -| symbol | LedgerSync::Type::String | - - -## Operations - -### LedgerSync::Ledgers::NetSuite::Currency::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Currency::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Currency::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Currency::Operations::Delete - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/netsuite/resources/customer.md b/documentation/site/reference/netsuite/resources/customer.md deleted file mode 100644 index 810e6cd5..00000000 --- a/documentation/site/reference/netsuite/resources/customer.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: customer -weight: 5 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::Customer - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| email | LedgerSync::Type::String | -| companyName | LedgerSync::Type::String | -| firstName | LedgerSync::Type::String | -| lastName | LedgerSync::Type::String | -| phone | LedgerSync::Type::String | -| subsidiary | LedgerSync::Type::ReferenceOne | - - -## Operations - -### LedgerSync::Ledgers::NetSuite::Customer::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Customer::Operations::Delete - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Customer::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Customer::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::NetSuite::Customer::Searcher` | diff --git a/documentation/site/reference/netsuite/resources/customer_deposit.md b/documentation/site/reference/netsuite/resources/customer_deposit.md deleted file mode 100644 index 2e33f6f8..00000000 --- a/documentation/site/reference/netsuite/resources/customer_deposit.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: customer_deposit -weight: 6 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::CustomerDeposit - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| payment | LedgerSync::Type::Float | -| undepFunds | LedgerSync::Type::Boolean | -| account | LedgerSync::Type::ReferenceOne | -| customer | LedgerSync::Type::ReferenceOne | - - -## Operations - -### LedgerSync::Ledgers::NetSuite::CustomerDeposit::Operations::Delete - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::CustomerDeposit::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::CustomerDeposit::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::CustomerDeposit::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::NetSuite::CustomerDeposit::Searcher` | diff --git a/documentation/site/reference/netsuite/resources/department.md b/documentation/site/reference/netsuite/resources/department.md deleted file mode 100644 index 83567e43..00000000 --- a/documentation/site/reference/netsuite/resources/department.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: department -weight: 7 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::Department - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| name | LedgerSync::Type::String | -| fully_qualified_name | LedgerSync::Type::String | -| active | LedgerSync::Type::Boolean | -| sub_department | LedgerSync::Type::Boolean | -| parent | LedgerSync::Type::ReferenceOne | - - -## Operations - -### LedgerSync::Ledgers::NetSuite::Department::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Department::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Department::Operations::Delete - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Department::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::NetSuite::Department::Searcher` | diff --git a/documentation/site/reference/netsuite/resources/deposit.md b/documentation/site/reference/netsuite/resources/deposit.md deleted file mode 100644 index 03f3dabe..00000000 --- a/documentation/site/reference/netsuite/resources/deposit.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: deposit -weight: 8 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::Deposit - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| memo | LedgerSync::Type::String | -| transaction_date | LedgerSync::Type::Date | -| exchange_rate | LedgerSync::Type::Float | -| account | LedgerSync::Type::ReferenceOne | -| department | LedgerSync::Type::ReferenceOne | -| currency | LedgerSync::Type::ReferenceOne | -| line_items | LedgerSync::Type::ReferenceMany | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/netsuite/resources/deposit_line_item.md b/documentation/site/reference/netsuite/resources/deposit_line_item.md deleted file mode 100644 index 97de5d02..00000000 --- a/documentation/site/reference/netsuite/resources/deposit_line_item.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: deposit_line_item -weight: 9 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::DepositLineItem - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| account | LedgerSync::Type::ReferenceOne | -| ledger_class | LedgerSync::Type::ReferenceOne | -| amount | LedgerSync::Type::Integer | -| description | LedgerSync::Type::String | -| entity | LedgerSync::Type::ReferenceOne | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/netsuite/resources/index.md b/documentation/site/reference/netsuite/resources/index.md deleted file mode 100644 index 53536338..00000000 --- a/documentation/site/reference/netsuite/resources/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Resources -weight: 0 -layout: reference_netsuite ---- - -- [resource](/reference/netsuite/resources/resource) -- [currency](/reference/netsuite/resources/currency) -- [account](/reference/netsuite/resources/account) -- [subsidiary](/reference/netsuite/resources/subsidiary) -- [customer](/reference/netsuite/resources/customer) -- [ledger_class](/reference/netsuite/resources/ledger_class) -- [vendor](/reference/netsuite/resources/vendor) -- [deposit_line_item](/reference/netsuite/resources/deposit_line_item) -- [item](/reference/netsuite/resources/item) -- [invoice_line_item](/reference/netsuite/resources/invoice_line_item) -- [invoice](/reference/netsuite/resources/invoice) -- [department](/reference/netsuite/resources/department) -- [journal_entry_line_item](/reference/netsuite/resources/journal_entry_line_item) -- [customer_deposit](/reference/netsuite/resources/customer_deposit) -- [location](/reference/netsuite/resources/location) -- [check_line_item](/reference/netsuite/resources/check_line_item) -- [check](/reference/netsuite/resources/check) -- [deposit](/reference/netsuite/resources/deposit) -- [journal_entry](/reference/netsuite/resources/journal_entry) diff --git a/documentation/site/reference/netsuite/resources/invoice.md b/documentation/site/reference/netsuite/resources/invoice.md deleted file mode 100644 index 273728dd..00000000 --- a/documentation/site/reference/netsuite/resources/invoice.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: invoice -weight: 10 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::Invoice - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| memo | LedgerSync::Type::String | -| transaction_date | LedgerSync::Type::Date | -| deposit | LedgerSync::Type::Integer | -| customer | LedgerSync::Type::ReferenceOne | -| account | LedgerSync::Type::ReferenceOne | -| currency | LedgerSync::Type::ReferenceOne | -| line_items | LedgerSync::Type::ReferenceMany | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/netsuite/resources/invoice_line_item.md b/documentation/site/reference/netsuite/resources/invoice_line_item.md deleted file mode 100644 index 1357cef5..00000000 --- a/documentation/site/reference/netsuite/resources/invoice_line_item.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: invoice_line_item -weight: 11 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::InvoiceLineItem - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| item | LedgerSync::Type::ReferenceOne | -| ledger_class | LedgerSync::Type::ReferenceOne | -| amount | LedgerSync::Type::Integer | -| description | LedgerSync::Type::String | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/netsuite/resources/item.md b/documentation/site/reference/netsuite/resources/item.md deleted file mode 100644 index f57ce8f6..00000000 --- a/documentation/site/reference/netsuite/resources/item.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: item -weight: 12 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::Item - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| name | LedgerSync::Type::String | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/netsuite/resources/journal_entry.md b/documentation/site/reference/netsuite/resources/journal_entry.md deleted file mode 100644 index 6dbc80e8..00000000 --- a/documentation/site/reference/netsuite/resources/journal_entry.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: journal_entry -weight: 13 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::JournalEntry - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| memo | LedgerSync::Type::String | -| trandate | LedgerSync::Type::Date | -| tranId | LedgerSync::Type::String | -| currency | LedgerSync::Type::ReferenceOne | -| subsidiary | LedgerSync::Type::ReferenceOne | -| line_items | LedgerSync::Type::ReferenceMany | - - -## Operations - -### LedgerSync::Ledgers::NetSuite::JournalEntry::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::JournalEntry::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::JournalEntry::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::JournalEntry::Operations::Delete - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/netsuite/resources/journal_entry_line_item.md b/documentation/site/reference/netsuite/resources/journal_entry_line_item.md deleted file mode 100644 index 02464775..00000000 --- a/documentation/site/reference/netsuite/resources/journal_entry_line_item.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: journal_entry_line_item -weight: 14 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::JournalEntryLineItem - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| account | LedgerSync::Type::ReferenceOne | -| line | LedgerSync::Type::Integer | -| credit | LedgerSync::Type::Float | -| debit | LedgerSync::Type::Float | -| entitytype | LedgerSync::Type::String | -| memo | LedgerSync::Type::String | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/netsuite/resources/ledger_class.md b/documentation/site/reference/netsuite/resources/ledger_class.md deleted file mode 100644 index 3af0e681..00000000 --- a/documentation/site/reference/netsuite/resources/ledger_class.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: ledger_class -weight: 15 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::LedgerClass - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| name | LedgerSync::Type::String | -| fully_qualified_name | LedgerSync::Type::String | -| active | LedgerSync::Type::Boolean | -| sub_class | LedgerSync::Type::Boolean | -| parent | LedgerSync::Type::ReferenceOne | - - -## Operations - -### LedgerSync::Ledgers::NetSuite::LedgerClass::Operations::Delete - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::LedgerClass::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::LedgerClass::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::LedgerClass::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::NetSuite::LedgerClass::Searcher` | diff --git a/documentation/site/reference/netsuite/resources/location.md b/documentation/site/reference/netsuite/resources/location.md deleted file mode 100644 index afa796e3..00000000 --- a/documentation/site/reference/netsuite/resources/location.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: location -weight: 16 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::Location - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| name | LedgerSync::Type::String | - - -## Operations - -### LedgerSync::Ledgers::NetSuite::Location::Operations::Delete - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Location::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Location::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Location::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::NetSuite::Location::Searcher` | diff --git a/documentation/site/reference/netsuite/resources/resource.md b/documentation/site/reference/netsuite/resources/resource.md deleted file mode 100644 index a5a368c6..00000000 --- a/documentation/site/reference/netsuite/resources/resource.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: resource -weight: 17 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::Resource - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/netsuite/resources/subsidiary.md b/documentation/site/reference/netsuite/resources/subsidiary.md deleted file mode 100644 index f6199586..00000000 --- a/documentation/site/reference/netsuite/resources/subsidiary.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: subsidiary -weight: 18 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::Subsidiary - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| name | LedgerSync::Type::String | -| state | LedgerSync::Type::String | - - -## Operations - - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::NetSuite::Subsidiary::Searcher` | diff --git a/documentation/site/reference/netsuite/resources/vendor.md b/documentation/site/reference/netsuite/resources/vendor.md deleted file mode 100644 index 8a0ddf89..00000000 --- a/documentation/site/reference/netsuite/resources/vendor.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: vendor -weight: 19 -layout: reference_netsuite ---- - -## LedgerSync::Ledgers::NetSuite::Vendor - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| company_name | LedgerSync::Type::String | -| email | LedgerSync::Type::String | -| display_name | LedgerSync::Type::String | -| first_name | LedgerSync::Type::String | -| last_name | LedgerSync::Type::String | -| phone_number | LedgerSync::Type::String | -| subsidiary | LedgerSync::Type::ReferenceOne | - - -## Operations - -### LedgerSync::Ledgers::NetSuite::Vendor::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Vendor::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Vendor::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuite::Vendor::Operations::Delete - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::NetSuite::Vendor::Searcher` | diff --git a/documentation/site/reference/netsuite_soap/index.md b/documentation/site/reference/netsuite_soap/index.md deleted file mode 100644 index e17a4505..00000000 --- a/documentation/site/reference/netsuite_soap/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: NetSuite SOAP -layout: reference_netsuite_soap -ledger: netsuite_soap ---- - -LedgerSync supports the NetSuite SOAP client, leveraging [the NetSuite gem](https://github.com/NetSweet/netsuite). The client and sample operations are provided, though the main NetSuite client uses the REST API. - -### Reference - -- [NetSuite SOAP API Documentation](https://docs.oracle.com/cloud/latest/netsuitecs_gs/NSTWR/NSTWR.pdf) \ No newline at end of file diff --git a/documentation/site/reference/netsuite_soap/resources/customer.md b/documentation/site/reference/netsuite_soap/resources/customer.md deleted file mode 100644 index 942dd584..00000000 --- a/documentation/site/reference/netsuite_soap/resources/customer.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: customer -weight: 1 -layout: reference_netsuite_soap ---- - -## LedgerSync::Ledgers::NetSuiteSOAP::Customer - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| email | LedgerSync::Type::String | -| name | LedgerSync::Type::String | -| phone_number | LedgerSync::Type::String | -| subsidiary | LedgerSync::Type::ReferenceOne | - - -## Operations - -### LedgerSync::Ledgers::NetSuiteSOAP::Customer::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuiteSOAP::Customer::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/netsuite_soap/resources/index.md b/documentation/site/reference/netsuite_soap/resources/index.md deleted file mode 100644 index 2bf77b81..00000000 --- a/documentation/site/reference/netsuite_soap/resources/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Resources -weight: 0 -layout: reference_netsuite_soap ---- - -- [resource](/reference/netsuite_soap/resources/resource) -- [subsidiary](/reference/netsuite_soap/resources/subsidiary) -- [customer](/reference/netsuite_soap/resources/customer) diff --git a/documentation/site/reference/netsuite_soap/resources/resource.md b/documentation/site/reference/netsuite_soap/resources/resource.md deleted file mode 100644 index c6cb4f11..00000000 --- a/documentation/site/reference/netsuite_soap/resources/resource.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: resource -weight: 2 -layout: reference_netsuite_soap ---- - -## LedgerSync::Ledgers::NetSuiteSOAP::Resource - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/netsuite_soap/resources/subsidiary.md b/documentation/site/reference/netsuite_soap/resources/subsidiary.md deleted file mode 100644 index d17095bb..00000000 --- a/documentation/site/reference/netsuite_soap/resources/subsidiary.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: subsidiary -weight: 3 -layout: reference_netsuite_soap ---- - -## LedgerSync::Ledgers::NetSuiteSOAP::Subsidiary - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| name | LedgerSync::Type::String | -| state | LedgerSync::Type::String | - - -## Operations - -### LedgerSync::Ledgers::NetSuiteSOAP::Subsidiary::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::NetSuiteSOAP::Subsidiary::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/authentication/index.md b/documentation/site/reference/quickbooks_online/authentication/index.md deleted file mode 100644 index 47487fab..00000000 --- a/documentation/site/reference/quickbooks_online/authentication/index.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Authentication -layout: reference_quickbooks_online -ledger: quickbooks_online ---- - -### OAuth - -QuickBooks Online utilizes OAuth 2.0, which requires frequent refreshing of the access token. The client will handle this automatically, attempting a single token refresh on any single request authentication failure. Depending on how you use the library, every client has implements a class method `ledger_attributes_to_save`, which is an array of attributes that may change as the client is used. You can also call the instance method `ledger_attributes_to_save` which will be a hash of these values. It is a good practice to always store these attributes if you are saving access tokens in your database. - -#### Retrieve Access Token - -The library contains a lightweight script that is helpful in retrieving and refreshing access tokens. To use, do the following: - -1. Create a `.env` file in the library root. -2. Add values for `QUICKBOOKS_ONLINE_CLIENT_ID` and `QUICKBOOKS_ONLINE_CLIENT_SECRET` (you can copy `.env.template`). -3. Ensure your developer application in [the QuickBooks Online developer portal](https://developer.intuit.com) contains this redirect URI: `http://localhost:5678` (note: no trailing slash and port configurable with `PORT` environment variable) -4. Run `ruby bin/quickbooks_online_oauth_server.rb` from the library root (note: it must run from the root in order to update `.env`). -5. Visit the URL output in the terminal. -6. Upon redirect back to your `localhost`, the new values will be printed to the console and saved back to your `.env` - -#### Ledger Helper Methods - -The client also implements some helper methods for getting tokens. For example, you can set up an client using the following: - -```ruby -# Retrieve the following values from Intuit app settings -client_id = 'ID' -client_secret = 'SECRET' -redirect_uri = 'http://localhost:3000' - -oauth_client = LedgerSync::Ledgers::QuickBooksOnline::OAuthClientHelper.new( - client_id: client_id, - client_secret: client_secret -) - -puts oauth_client.authorization_url(redirect_uri: redirect_uri) - -# Visit on the output URL and authorize a company. -# You will be redirected back to the redirect_uri. -# Copy the full url from your browser: - -uri = 'https://localhost:3000/?code=FOO&state=BAR&realm_id=BAZ' - -client = LedgerSync::Ledgers::QuickBooksOnline::Client.new_from_oauth_client_uri( - oauth_client: oauth_client, - uri: uri -) - -# You can test that the auth works: - -client.refresh! -``` - -**Note: If you have a `.env` file storing your secrets, the client will automatically update the variables and record previous values whenever values change** \ No newline at end of file diff --git a/documentation/site/reference/quickbooks_online/errors/index.md b/documentation/site/reference/quickbooks_online/errors/index.md deleted file mode 100644 index bfeac8ed..00000000 --- a/documentation/site/reference/quickbooks_online/errors/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Errors -layout: reference_quickbooks_online -ledger: quickbooks_online ---- - -While LedgerSync tries to catch and translate errors, not all errors will be caught. In these cases, you can resque a generic `LedgerSync::OperationError` and determine what to do based on the response body. - -[QuickBooks Online Error Documentation](https://developer.intuit.com/app/developer/qbo/docs/develop/troubleshooting/error-codes) \ No newline at end of file diff --git a/documentation/site/reference/quickbooks_online/index.md b/documentation/site/reference/quickbooks_online/index.md deleted file mode 100644 index cf833ce8..00000000 --- a/documentation/site/reference/quickbooks_online/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: QuickBooks Online -layout: reference_quickbooks_online -ledger: quickbooks_online ---- - diff --git a/documentation/site/reference/quickbooks_online/resources/account.md b/documentation/site/reference/quickbooks_online/resources/account.md deleted file mode 100644 index 1eb62351..00000000 --- a/documentation/site/reference/quickbooks_online/resources/account.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: account -weight: 1 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Account - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| name | LedgerSync::Type::String | -| classification | LedgerSync::Type::String | -| account_type | LedgerSync::Type::StringFromSet | -| account_sub_type | LedgerSync::Type::String | -| number | LedgerSync::Type::String | -| description | LedgerSync::Type::String | -| active | LedgerSync::Type::Boolean | -| currency | LedgerSync::Type::ReferenceOne | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::Account::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Account::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Account::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::QuickBooksOnline::Account::Searcher` | diff --git a/documentation/site/reference/quickbooks_online/resources/bill.md b/documentation/site/reference/quickbooks_online/resources/bill.md deleted file mode 100644 index 599b6099..00000000 --- a/documentation/site/reference/quickbooks_online/resources/bill.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: bill -weight: 2 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Bill - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| memo | LedgerSync::Type::String | -| transaction_date | LedgerSync::Type::Date | -| due_date | LedgerSync::Type::Date | -| reference_number | LedgerSync::Type::String | -| vendor | LedgerSync::Type::ReferenceOne | -| account | LedgerSync::Type::ReferenceOne | -| department | LedgerSync::Type::ReferenceOne | -| currency | LedgerSync::Type::ReferenceOne | -| line_items | LedgerSync::Type::ReferenceMany | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::Bill::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Bill::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Bill::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::QuickBooksOnline::Bill::Searcher` | diff --git a/documentation/site/reference/quickbooks_online/resources/bill_line_item.md b/documentation/site/reference/quickbooks_online/resources/bill_line_item.md deleted file mode 100644 index e124e38f..00000000 --- a/documentation/site/reference/quickbooks_online/resources/bill_line_item.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: bill_line_item -weight: 3 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::BillLineItem - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| account | LedgerSync::Type::ReferenceOne | -| ledger_class | LedgerSync::Type::ReferenceOne | -| amount | LedgerSync::Type::Integer | -| description | LedgerSync::Type::String | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/bill_payment.md b/documentation/site/reference/quickbooks_online/resources/bill_payment.md deleted file mode 100644 index 762af1c2..00000000 --- a/documentation/site/reference/quickbooks_online/resources/bill_payment.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: bill_payment -weight: 4 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::BillPayment - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| amount | LedgerSync::Type::Integer | -| memo | LedgerSync::Type::String | -| transaction_date | LedgerSync::Type::Date | -| exchange_rate | LedgerSync::Type::Float | -| reference_number | LedgerSync::Type::String | -| payment_type | LedgerSync::Type::StringFromSet | -| account | LedgerSync::Type::ReferenceOne | -| currency | LedgerSync::Type::ReferenceOne | -| department | LedgerSync::Type::ReferenceOne | -| vendor | LedgerSync::Type::ReferenceOne | -| bank_account | LedgerSync::Type::ReferenceOne | -| credit_card_account | LedgerSync::Type::ReferenceOne | -| line_items | LedgerSync::Type::ReferenceMany | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::BillPayment::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::BillPayment::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::BillPayment::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/bill_payment_line_item.md b/documentation/site/reference/quickbooks_online/resources/bill_payment_line_item.md deleted file mode 100644 index 6c262e05..00000000 --- a/documentation/site/reference/quickbooks_online/resources/bill_payment_line_item.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: bill_payment_line_item -weight: 5 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::BillPaymentLineItem - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| amount | LedgerSync::Type::Integer | -| ledger_transactions | LedgerSync::Type::ReferenceMany | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/currency.md b/documentation/site/reference/quickbooks_online/resources/currency.md deleted file mode 100644 index eca8a71f..00000000 --- a/documentation/site/reference/quickbooks_online/resources/currency.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: currency -weight: 6 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Currency - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| exchange_rate | LedgerSync::Type::Float | -| name | LedgerSync::Type::String | -| symbol | LedgerSync::Type::String | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/customer.md b/documentation/site/reference/quickbooks_online/resources/customer.md deleted file mode 100644 index 80a480a3..00000000 --- a/documentation/site/reference/quickbooks_online/resources/customer.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: customer -weight: 7 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Customer - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| DisplayName | LedgerSync::Type::String | -| PrimaryPhone | LedgerSync::Type::ReferenceOne | -| PrimaryEmailAddr | LedgerSync::Type::ReferenceOne | -| subsidiary | LedgerSync::Type::ReferenceOne | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::Customer::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Customer::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Customer::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::QuickBooksOnline::Customer::Searcher` | diff --git a/documentation/site/reference/quickbooks_online/resources/department.md b/documentation/site/reference/quickbooks_online/resources/department.md deleted file mode 100644 index 31c38aec..00000000 --- a/documentation/site/reference/quickbooks_online/resources/department.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: department -weight: 8 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Department - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| name | LedgerSync::Type::String | -| fully_qualified_name | LedgerSync::Type::String | -| active | LedgerSync::Type::Boolean | -| sub_department | LedgerSync::Type::Boolean | -| parent | LedgerSync::Type::ReferenceOne | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::Department::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Department::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Department::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::QuickBooksOnline::Department::Searcher` | diff --git a/documentation/site/reference/quickbooks_online/resources/deposit.md b/documentation/site/reference/quickbooks_online/resources/deposit.md deleted file mode 100644 index f884fdd8..00000000 --- a/documentation/site/reference/quickbooks_online/resources/deposit.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: deposit -weight: 9 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Deposit - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| memo | LedgerSync::Type::String | -| transaction_date | LedgerSync::Type::Date | -| exchange_rate | LedgerSync::Type::Float | -| account | LedgerSync::Type::ReferenceOne | -| department | LedgerSync::Type::ReferenceOne | -| currency | LedgerSync::Type::ReferenceOne | -| line_items | LedgerSync::Type::ReferenceMany | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::Deposit::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Deposit::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Deposit::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::QuickBooksOnline::Deposit::Searcher` | diff --git a/documentation/site/reference/quickbooks_online/resources/deposit_line_item.md b/documentation/site/reference/quickbooks_online/resources/deposit_line_item.md deleted file mode 100644 index a782744d..00000000 --- a/documentation/site/reference/quickbooks_online/resources/deposit_line_item.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: deposit_line_item -weight: 10 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::DepositLineItem - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| account | LedgerSync::Type::ReferenceOne | -| ledger_class | LedgerSync::Type::ReferenceOne | -| amount | LedgerSync::Type::Integer | -| description | LedgerSync::Type::String | -| entity | LedgerSync::Type::ReferenceOne | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/expense.md b/documentation/site/reference/quickbooks_online/resources/expense.md deleted file mode 100644 index 02152768..00000000 --- a/documentation/site/reference/quickbooks_online/resources/expense.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: expense -weight: 11 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Expense - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| memo | LedgerSync::Type::String | -| payment_type | LedgerSync::Type::StringFromSet | -| transaction_date | LedgerSync::Type::Date | -| exchange_rate | LedgerSync::Type::Float | -| reference_number | LedgerSync::Type::String | -| entity | LedgerSync::Type::ReferenceOne | -| account | LedgerSync::Type::ReferenceOne | -| department | LedgerSync::Type::ReferenceOne | -| currency | LedgerSync::Type::ReferenceOne | -| line_items | LedgerSync::Type::ReferenceMany | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::Expense::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Expense::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Expense::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::QuickBooksOnline::Expense::Searcher` | diff --git a/documentation/site/reference/quickbooks_online/resources/expense_line_item.md b/documentation/site/reference/quickbooks_online/resources/expense_line_item.md deleted file mode 100644 index e4062b51..00000000 --- a/documentation/site/reference/quickbooks_online/resources/expense_line_item.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: expense_line_item -weight: 12 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::ExpenseLineItem - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| account | LedgerSync::Type::ReferenceOne | -| ledger_class | LedgerSync::Type::ReferenceOne | -| amount | LedgerSync::Type::Integer | -| description | LedgerSync::Type::String | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/index.md b/documentation/site/reference/quickbooks_online/resources/index.md deleted file mode 100644 index c0fa2933..00000000 --- a/documentation/site/reference/quickbooks_online/resources/index.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Resources -weight: 0 -layout: reference_quickbooks_online ---- - -- [resource](/reference/quickbooks_online/resources/resource) -- [currency](/reference/quickbooks_online/resources/currency) -- [account](/reference/quickbooks_online/resources/account) -- [subsidiary](/reference/quickbooks_online/resources/subsidiary) -- [primary_phone](/reference/quickbooks_online/resources/primary_phone) -- [primary_email_addr](/reference/quickbooks_online/resources/primary_email_addr) -- [customer](/reference/quickbooks_online/resources/customer) -- [item](/reference/quickbooks_online/resources/item) -- [ledger_class](/reference/quickbooks_online/resources/ledger_class) -- [invoice_sales_line_item](/reference/quickbooks_online/resources/invoice_sales_line_item) -- [invoice](/reference/quickbooks_online/resources/invoice) -- [payment_line_item](/reference/quickbooks_online/resources/payment_line_item) -- [payment](/reference/quickbooks_online/resources/payment) -- [vendor](/reference/quickbooks_online/resources/vendor) -- [deposit_line_item](/reference/quickbooks_online/resources/deposit_line_item) -- [department](/reference/quickbooks_online/resources/department) -- [journal_entry_line_item](/reference/quickbooks_online/resources/journal_entry_line_item) -- [transfer](/reference/quickbooks_online/resources/transfer) -- [bill_line_item](/reference/quickbooks_online/resources/bill_line_item) -- [bill](/reference/quickbooks_online/resources/bill) -- [bill_payment_line_item](/reference/quickbooks_online/resources/bill_payment_line_item) -- [bill_payment](/reference/quickbooks_online/resources/bill_payment) -- [expense_line_item](/reference/quickbooks_online/resources/expense_line_item) -- [preferences](/reference/quickbooks_online/resources/preferences) -- [deposit](/reference/quickbooks_online/resources/deposit) -- [expense](/reference/quickbooks_online/resources/expense) -- [journal_entry](/reference/quickbooks_online/resources/journal_entry) diff --git a/documentation/site/reference/quickbooks_online/resources/invoice.md b/documentation/site/reference/quickbooks_online/resources/invoice.md deleted file mode 100644 index 1ff2d6cb..00000000 --- a/documentation/site/reference/quickbooks_online/resources/invoice.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: invoice -weight: 13 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Invoice - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| memo | LedgerSync::Type::String | -| transaction_date | LedgerSync::Type::Date | -| deposit | LedgerSync::Type::Integer | -| customer | LedgerSync::Type::ReferenceOne | -| account | LedgerSync::Type::ReferenceOne | -| currency | LedgerSync::Type::ReferenceOne | -| line_items | LedgerSync::Type::ReferenceMany | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::Invoice::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Invoice::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Invoice::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/invoice_sales_line_item.md b/documentation/site/reference/quickbooks_online/resources/invoice_sales_line_item.md deleted file mode 100644 index 095f1cd4..00000000 --- a/documentation/site/reference/quickbooks_online/resources/invoice_sales_line_item.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: invoice_sales_line_item -weight: 14 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::InvoiceSalesLineItem - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| item | LedgerSync::Type::ReferenceOne | -| ledger_class | LedgerSync::Type::ReferenceOne | -| amount | LedgerSync::Type::Integer | -| description | LedgerSync::Type::String | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/item.md b/documentation/site/reference/quickbooks_online/resources/item.md deleted file mode 100644 index c79a511e..00000000 --- a/documentation/site/reference/quickbooks_online/resources/item.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: item -weight: 15 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Item - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| name | LedgerSync::Type::String | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/journal_entry.md b/documentation/site/reference/quickbooks_online/resources/journal_entry.md deleted file mode 100644 index 01e9f917..00000000 --- a/documentation/site/reference/quickbooks_online/resources/journal_entry.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: journal_entry -weight: 16 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::JournalEntry - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| memo | LedgerSync::Type::String | -| transaction_date | LedgerSync::Type::Date | -| reference_number | LedgerSync::Type::String | -| currency | LedgerSync::Type::ReferenceOne | -| line_items | LedgerSync::Type::ReferenceMany | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::JournalEntry::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::JournalEntry::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::JournalEntry::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::QuickBooksOnline::JournalEntry::Searcher` | diff --git a/documentation/site/reference/quickbooks_online/resources/journal_entry_line_item.md b/documentation/site/reference/quickbooks_online/resources/journal_entry_line_item.md deleted file mode 100644 index 90baf19d..00000000 --- a/documentation/site/reference/quickbooks_online/resources/journal_entry_line_item.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: journal_entry_line_item -weight: 17 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::JournalEntryLineItem - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| account | LedgerSync::Type::ReferenceOne | -| department | LedgerSync::Type::ReferenceOne | -| ledger_class | LedgerSync::Type::ReferenceOne | -| amount | LedgerSync::Type::Integer | -| description | LedgerSync::Type::String | -| entry_type | LedgerSync::Type::StringFromSet | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/ledger_class.md b/documentation/site/reference/quickbooks_online/resources/ledger_class.md deleted file mode 100644 index f89993dc..00000000 --- a/documentation/site/reference/quickbooks_online/resources/ledger_class.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: ledger_class -weight: 18 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::LedgerClass - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| name | LedgerSync::Type::String | -| fully_qualified_name | LedgerSync::Type::String | -| active | LedgerSync::Type::Boolean | -| sub_class | LedgerSync::Type::Boolean | -| parent | LedgerSync::Type::ReferenceOne | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::LedgerClass::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::LedgerClass::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::LedgerClass::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::QuickBooksOnline::LedgerClass::Searcher` | diff --git a/documentation/site/reference/quickbooks_online/resources/payment.md b/documentation/site/reference/quickbooks_online/resources/payment.md deleted file mode 100644 index 7353e649..00000000 --- a/documentation/site/reference/quickbooks_online/resources/payment.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: payment -weight: 19 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Payment - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| amount | LedgerSync::Type::Integer | -| memo | LedgerSync::Type::String | -| transaction_date | LedgerSync::Type::Date | -| exchange_rate | LedgerSync::Type::Float | -| reference_number | LedgerSync::Type::String | -| customer | LedgerSync::Type::ReferenceOne | -| deposit_account | LedgerSync::Type::ReferenceOne | -| account | LedgerSync::Type::ReferenceOne | -| currency | LedgerSync::Type::ReferenceOne | -| line_items | LedgerSync::Type::ReferenceMany | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::Payment::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Payment::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Payment::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/payment_line_item.md b/documentation/site/reference/quickbooks_online/resources/payment_line_item.md deleted file mode 100644 index c1c3d6d8..00000000 --- a/documentation/site/reference/quickbooks_online/resources/payment_line_item.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: payment_line_item -weight: 20 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::PaymentLineItem - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| amount | LedgerSync::Type::Integer | -| ledger_transactions | LedgerSync::Type::ReferenceMany | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/preferences.md b/documentation/site/reference/quickbooks_online/resources/preferences.md deleted file mode 100644 index 8fd0c1f1..00000000 --- a/documentation/site/reference/quickbooks_online/resources/preferences.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: preferences -weight: 21 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Preferences - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| accounting_info | LedgerSync::Type::Hash | -| product_and_services | LedgerSync::Type::Hash | -| sales_forms | LedgerSync::Type::Hash | -| email_messages | LedgerSync::Type::Hash | -| vendor_and_purchases | LedgerSync::Type::Hash | -| time_tracking | LedgerSync::Type::Hash | -| tax | LedgerSync::Type::Hash | -| currency | LedgerSync::Type::Hash | -| report | LedgerSync::Type::Hash | -| other | LedgerSync::Type::Hash | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::Preferences::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/primary_email_addr.md b/documentation/site/reference/quickbooks_online/resources/primary_email_addr.md deleted file mode 100644 index f1448042..00000000 --- a/documentation/site/reference/quickbooks_online/resources/primary_email_addr.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: primary_email_addr -weight: 22 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::PrimaryEmailAddr - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| Address | LedgerSync::Type::String | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/primary_phone.md b/documentation/site/reference/quickbooks_online/resources/primary_phone.md deleted file mode 100644 index 5ed6c344..00000000 --- a/documentation/site/reference/quickbooks_online/resources/primary_phone.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: primary_phone -weight: 23 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::PrimaryPhone - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| FreeFormNumber | LedgerSync::Type::String | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/resource.md b/documentation/site/reference/quickbooks_online/resources/resource.md deleted file mode 100644 index 906feeed..00000000 --- a/documentation/site/reference/quickbooks_online/resources/resource.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: resource -weight: 24 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Resource - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/subsidiary.md b/documentation/site/reference/quickbooks_online/resources/subsidiary.md deleted file mode 100644 index d3523fd8..00000000 --- a/documentation/site/reference/quickbooks_online/resources/subsidiary.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: subsidiary -weight: 25 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Subsidiary - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| name | LedgerSync::Type::String | -| state | LedgerSync::Type::String | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/transfer.md b/documentation/site/reference/quickbooks_online/resources/transfer.md deleted file mode 100644 index a8950063..00000000 --- a/documentation/site/reference/quickbooks_online/resources/transfer.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: transfer -weight: 26 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Transfer - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| amount | LedgerSync::Type::Integer | -| memo | LedgerSync::Type::String | -| transaction_date | LedgerSync::Type::Date | -| from_account | LedgerSync::Type::ReferenceOne | -| to_account | LedgerSync::Type::ReferenceOne | -| currency | LedgerSync::Type::ReferenceOne | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::Transfer::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Transfer::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Transfer::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/quickbooks_online/resources/vendor.md b/documentation/site/reference/quickbooks_online/resources/vendor.md deleted file mode 100644 index a69c1123..00000000 --- a/documentation/site/reference/quickbooks_online/resources/vendor.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: vendor -weight: 27 -layout: reference_quickbooks_online ---- - -## LedgerSync::Ledgers::QuickBooksOnline::Vendor - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| company_name | LedgerSync::Type::String | -| email | LedgerSync::Type::String | -| display_name | LedgerSync::Type::String | -| first_name | LedgerSync::Type::String | -| last_name | LedgerSync::Type::String | -| phone_number | LedgerSync::Type::String | -| subsidiary | LedgerSync::Type::ReferenceOne | - - -## Operations - -### LedgerSync::Ledgers::QuickBooksOnline::Vendor::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Vendor::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::QuickBooksOnline::Vendor::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -| Name | -| ---- | -| `LedgerSync::Ledgers::QuickBooksOnline::Vendor::Searcher` | diff --git a/documentation/site/reference/quickbooks_online/webhooks/index.md b/documentation/site/reference/quickbooks_online/webhooks/index.md deleted file mode 100644 index e5fca1c4..00000000 --- a/documentation/site/reference/quickbooks_online/webhooks/index.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Webhooks -layout: reference_quickbooks_online -ledger: quickbooks_online ---- - -Reference: [QuickBooks Online Webhook Documentation](https://developer.intuit.com/app/developer/qbo/docs/develop/webhooks/managing-webhooks-notifications#validating-the-notification) - -LedgerSync offers an easy way to validate and parse webhook payloads. It also allows you to easily fetch the resources referenced. You can create and use a webhook with the following: - -```ruby -# Assuming `request` is the webhook request received from Quickbooks Online -webhook = LedgerSync::Ledgers::QuickBooksOnline::Webhook.new( - payload: request.body.read # It accepts a JSON string or hash -) - -verification_token = WEBHOOK_VERIFICATION_TOKEN # You get this token when you create webhooks in the QuickBooks Online dashboard -signature = request.headers['intuit-signature'] -raise 'Not valid' unless webhook.valid?(signature: signature, verification_token: verification_token) - -# Although not yet used, webhooks may include notifications for multiple realms -webhook.notifications.each do |notification| - puts notification.realm_id - - # Multiple events may be referenced. - notification.events.each do |event| - puts event.resource # Returns a LedgerSync resource with the `ledger_id` set - - # Other helpful methods - notification.find_operation_class(client: your_quickbooks_client_instance) # The respective Find class - notification.find_operation(client: your_quickbooks_client_instance) # The initialized respective Find operation - notification.find(client: your_quickbooks_client_instance) # Performs a Find operation for the resource retrieving the latest version from QuickBooks Online - end - - # Other helpful methods - notification.resources # All resources for a given webhook across all events -end - -# Other helpful methods -webhook.events # All events for a given webhook across all realms -webhook.resources # All events for a given webhook across all realms and events -``` \ No newline at end of file diff --git a/documentation/site/reference/stripe/index.md b/documentation/site/reference/stripe/index.md deleted file mode 100644 index ba31c652..00000000 --- a/documentation/site/reference/stripe/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Stripe -layout: reference_stripe -ledger: stripe ---- - diff --git a/documentation/site/reference/stripe/resources/customer.md b/documentation/site/reference/stripe/resources/customer.md deleted file mode 100644 index db90e320..00000000 --- a/documentation/site/reference/stripe/resources/customer.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: customer -weight: 1 -layout: reference_stripe ---- - -## LedgerSync::Ledgers::Stripe::Customer - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | -| email | LedgerSync::Type::String | -| name | LedgerSync::Type::String | -| phone_number | LedgerSync::Type::String | - - -## Operations - -### LedgerSync::Ledgers::Stripe::Customer::Operations::Find - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::Stripe::Customer::Operations::Create - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::Stripe::Customer::Operations::Update - -#### Resource Validations - -| Name | Type | -| ---- | ---- | -### LedgerSync::Ledgers::Stripe::Customer::Operations::Delete - -#### Resource Validations - -| Name | Type | -| ---- | ---- | - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/reference/stripe/resources/index.md b/documentation/site/reference/stripe/resources/index.md deleted file mode 100644 index a06d808d..00000000 --- a/documentation/site/reference/stripe/resources/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Resources -weight: 0 -layout: reference_stripe ---- - -- [resource](/reference/stripe/resources/resource) -- [customer](/reference/stripe/resources/customer) diff --git a/documentation/site/reference/stripe/resources/resource.md b/documentation/site/reference/stripe/resources/resource.md deleted file mode 100644 index b689d185..00000000 --- a/documentation/site/reference/stripe/resources/resource.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: resource -weight: 2 -layout: reference_stripe ---- - -## LedgerSync::Ledgers::Stripe::Resource - -## Attributes - -| Name | Type | -| ---- | ---- | -| external_id | LedgerSync::Type::ID | -| ledger_id | LedgerSync::Type::ID | - - -## Operations - - -## Searchers - -There are no searchers for this resource. diff --git a/documentation/site/style-guide.md b/documentation/site/style-guide.md deleted file mode 100644 index 8d4b1578..00000000 --- a/documentation/site/style-guide.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: Style Guide -subtitle: The style guide provides you with a blueprint of default post and page styles. -image: images/5.jpg -layout: page ---- - -**This is a paragraph**. Pellentesque habitant morbi *tristique senectus et netus et malesuada* fames ac turpis egestas. Vestibulum [tortor quam](https://www.google.com), feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. - -# This is an H1 - -Quisque facilisis erat a dui. Nam malesuada ornare dolor. Cras gravida, this is marked text ornare, erat elit consectetuer erat, id egestas pede nibh eget odio. Proin tincidunt, velit vel porta elementum, magna diam molestie sapien, non aliquet massa pede eu diam. Aliquam iaculis. Fusce et ipsum et nulla tristique facilisis. - -## This is an H2 - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. - -### This is an H3 - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. - -#### This is an H4 - -Quisque facilisis erat a dui. Nam malesuada ornare dolor. Cras gravida, diam sit amet rhoncus ornare, erat elit consectetuer erat, id egestas pede nibh eget odio. Proin tincidunt, velit vel porta elementum, magna diam molestie sapien, non aliquet massa pede eu diam. Aliquam iaculis. - -## Quoting - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. - ->Creativity is allowing yourself to make mistakes. Design is knowing which ones to keep. - Scott Adams - -Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. - -
                      - -## Unordered Lists - -+ Donec non tortor in arcu mollis feugiat -+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit -+ Donec id eros eget quam aliquam gravida -+ Vivamus convallis urna id felis -+ Nulla porta tempus sapien - -## Ordered Lists - -1. Donec non tortor in arcu mollis feugiat -2. Lorem ipsum dolor sit amet, consectetuer adipiscing elit -3. Donec id eros eget quam aliquam gravida -4. Vivamus convallis urna id felis -5. Nulla porta tempus sapien - -## Video Embeds - - - -## Code Blocks - -Blocks of code are either fenced by `lines with three back-ticks`, or are indented with four spaces. - -``` - -body { - color:red; -} -``` - -```javascript -window.$guidesify = { - coverpage: true, - - // Custom file name - coverpage: 'cover.md', - - // mutiple covers - coverpage: ['/', '/zh-cn/'], - - // mutiple covers and custom file name - coverpage: { - '/': 'cover.md', - '/zh-cn/': 'cover.md' - } -}; -``` - -## Tables - -
                      - - - - - - - - - - - - - - - - - - - - -
                      Table with thead, tfoot, and tbody
                      Header content 1Header content 2
                      Body content 1Body content 2
                      Footer content 1Footer content 2
                      -
                      - -
                      - Note: - Both of the features you used above are parts of the Document Object Model (DOM) API, which allows you to manipulate documents. -
                      - -
                      Important: In this article, try entering the example code lines into your JavaScript console to see what happens. For more details on JavaScript consoles, see Discover browser developer tools.
                      - -
                      Info: In this article, try entering the example code lines into your JavaScript console to see what happens. For more details on JavaScript consoles, see Discover browser developer tools.
                      - - -{% capture example_content %} -```ruby -token = LedgerSync::Ledgers::NetSuite::Token.new( - method: method, - consumer_key: consumer_key, - consumer_secret: consumer_secret, - realm: realm, - token_id: token_id, - token_secret: token_secret, - url: url -) - -puts token.signature_data_string -``` -{% endcapture %} - -{% include example.md content=example_content %} \ No newline at end of file