yext-api 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +3 -1
- data/Gemfile.lock +16 -8
- data/PULL_REQUEST_TEMPLATE.md +11 -0
- data/README.md +25 -7
- data/app/controllers/yext/api/agreements/add_request_controller.rb +78 -0
- data/app/controllers/yext/api/application_controller.rb +1 -3
- data/config/initializers/memoist.rb +3 -0
- data/config/routes.rb +3 -0
- data/lib/config/api.yml +95 -230
- data/lib/yext/api/administrative_api/account.rb +37 -27
- data/lib/yext/api/administrative_api/add_request.rb +87 -3
- data/lib/yext/api/administrative_api/service.rb +26 -4
- data/lib/yext/api/concerns/account_child.rb +37 -8
- data/lib/yext/api/concerns/account_relations.rb +16 -1
- data/lib/yext/api/concerns/default_scopes.rb +8 -2
- data/lib/yext/api/concerns/faraday_connection.rb +21 -7
- data/lib/yext/api/concerns/rate_limits.rb +8 -1
- data/lib/yext/api/enumerations/add_request_status.rb +19 -0
- data/lib/yext/api/enumerations/location_type.rb +18 -0
- data/lib/yext/api/knowledge_api/account_settings/account.rb +0 -2
- data/lib/yext/api/knowledge_api/account_settings/role.rb +24 -0
- data/lib/yext/api/knowledge_api/account_settings/user.rb +81 -0
- data/lib/yext/api/knowledge_api/health_check/health.rb +0 -1
- data/lib/yext/api/knowledge_api/knowledge_manager/category.rb +0 -1
- data/lib/yext/api/knowledge_api/knowledge_manager/location.rb +18 -6
- data/lib/yext/api/live_api/location.rb +0 -4
- data/lib/yext/api/utils/api_base.rb +8 -0
- data/lib/yext/api/utils/api_finder.rb +100 -0
- data/lib/yext/api/utils/configuration.rb +93 -0
- data/lib/yext/api/utils/middleware/api_rate_limits.rb +35 -0
- data/lib/yext/api/utils/middleware/default_parameters.rb +138 -0
- data/lib/yext/api/utils/middleware/response_parser.rb +111 -0
- data/lib/yext/api/utils/middleware/uri_cleanup.rb +48 -0
- data/lib/yext/api/utils/params.rb +69 -0
- data/lib/yext/api/version.rb +1 -1
- data/yext-api.gemspec +6 -7
- metadata +56 -31
- data/.travis.yml +0 -5
- data/app/assets/config/yext_api_manifest.js +0 -2
- data/app/assets/images/yext/api/.keep +0 -0
- data/app/assets/javascripts/yext/api/application.js +0 -13
- data/app/assets/stylesheets/yext/api/application.css +0 -15
- data/app/docs/notes.txt +0 -45
- data/app/helpers/yext/api/application_helper.rb +0 -11
- data/app/jobs/yext/api/application_job.rb +0 -8
- data/app/mailers/yext/api/application_mailer.rb +0 -11
- data/app/models/yext/api/application_record.rb +0 -10
- data/app/views/layouts/yext/api/application.html.erb +0 -14
- data/lib/tasks/yext/api_tasks.rake +0 -6
- data/lib/yext/api/concerns/api_finder.rb +0 -61
- data/lib/yext/api/utils/api_rate_limits.rb +0 -36
- data/lib/yext/api/utils/default_parameters.rb +0 -57
- data/lib/yext/api/utils/response_parser.rb +0 -84
| @@ -6,37 +6,12 @@ module Yext | |
| 6 6 | 
             
                  # :administrative_api:
         | 
| 7 7 | 
             
                  #   :account:
         | 
| 8 8 | 
             
                  #     :actions:
         | 
| 9 | 
            -
                  #       - :action: :create
         | 
| 10 | 
            -
                  #         :method: :post
         | 
| 11 | 
            -
                  #         :endpoint: https://api.yext.com/v2/accounts/{accountId}/newlocationaddrequests
         | 
| 12 | 
            -
                  #         :path_regex: v2/accounts/\w+/newlocationaddrequests
         | 
| 13 | 
            -
                  #         :default_version: 20161012
         | 
| 14 | 
            -
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/createNewLocationAddRequest
         | 
| 15 | 
            -
                  #         :comment: Request that a new location be added and services added to it. The location is created only if the request succeeds.
         | 
| 16 | 
            -
                  #         :sandbox_only: false
         | 
| 17 | 
            -
                  #       - :action: :add_services
         | 
| 18 | 
            -
                  #         :method: :post
         | 
| 19 | 
            -
                  #         :endpoint: https://api.yext.com/v2/accounts/{accountId}/existinglocationaddrequests
         | 
| 20 | 
            -
                  #         :path_regex: v2/accounts/\w+/existinglocationaddrequests
         | 
| 21 | 
            -
                  #         :default_version: 20161012
         | 
| 22 | 
            -
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/createExistingLocationAddRequest
         | 
| 23 | 
            -
                  #         :comment: Request that one or more available services be added to an existing location.
         | 
| 24 | 
            -
                  #         :sandbox_only: false
         | 
| 25 | 
            -
                  #       - :action: :change_status
         | 
| 26 | 
            -
                  #         :method: :post
         | 
| 27 | 
            -
                  #         :endpoint: https://api.yext.com/v2/accounts/{accountId}/processaddrequest
         | 
| 28 | 
            -
                  #         :path_regex: v2/accounts/\w+/processaddrequest
         | 
| 29 | 
            -
                  #         :default_version: 20161012
         | 
| 30 | 
            -
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/createProcessReviewAddRequest
         | 
| 31 | 
            -
                  #         :comment: Request that an add request in REVIEW be processed to COMPLETE, CANCELED, or FAILED.
         | 
| 32 | 
            -
                  #         :sandbox_only: true
         | 
| 33 9 | 
             
                  #       - :action: :index
         | 
| 34 10 | 
             
                  #         :method: :get
         | 
| 35 11 | 
             
                  #         :endpoint: https://api.yext.com/v2/accounts
         | 
| 36 12 | 
             
                  #         :path_regex: v2/accounts
         | 
| 37 13 | 
             
                  #         :default_version: 20161012
         | 
| 38 14 | 
             
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/listAccounts
         | 
| 39 | 
            -
                  #         :comment: List all accounts that you have access to. Unless you are in Partner Portal mode, this will only be your own account.
         | 
| 40 15 | 
             
                  #         :sandbox_only: false
         | 
| 41 16 | 
             
                  #       - :action: :show
         | 
| 42 17 | 
             
                  #         :method: :get
         | 
| @@ -44,7 +19,6 @@ module Yext | |
| 44 19 | 
             
                  #         :path_regex: v2/accounts/\w+
         | 
| 45 20 | 
             
                  #         :default_version: 20161012
         | 
| 46 21 | 
             
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/getAccount
         | 
| 47 | 
            -
                  #         :comment: Get details for an account.
         | 
| 48 22 | 
             
                  #         :sandbox_only: false
         | 
| 49 23 | 
             
                  #       - :action: :update
         | 
| 50 24 | 
             
                  #         :method: :put
         | 
| @@ -52,10 +26,46 @@ module Yext | |
| 52 26 | 
             
                  #         :path_regex: v2/accounts/\w+
         | 
| 53 27 | 
             
                  #         :default_version: 20161012
         | 
| 54 28 | 
             
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/updateAccount
         | 
| 55 | 
            -
                  #         :comment: Update an account's name or ID.
         | 
| 56 29 | 
             
                  #         :sandbox_only: false
         | 
| 57 30 | 
             
                  class Account < Yext::Api::Utils::ApiBase
         | 
| 58 31 | 
             
                    include Yext::Api::Concerns::AccountRelations
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    after_save :save_account_id
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    # The save action only allows the saving of the account_id and the accountName
         | 
| 36 | 
            +
                    #
         | 
| 37 | 
            +
                    # Furthermore, the account_id cannot be changed by the partner, but only by the customer
         | 
| 38 | 
            +
                    # themselves.
         | 
| 39 | 
            +
                    def save
         | 
| 40 | 
            +
                      return unless accountId?
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                      updates             = { account_id: account_id, accountName: accountName }
         | 
| 43 | 
            +
                      updates[:accountId] = accountId if accountId != account_id
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                      scope.with(Yext::Api::Concerns::AccountChild.with_account_path("")).
         | 
| 46 | 
            +
                          where(updates).
         | 
| 47 | 
            +
                          put
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                      save_account_id
         | 
| 50 | 
            +
                    end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                    # rubocop:disable Naming/MethodName
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                    # Yext field names don't match the Ruby naming standard, this is the field name they use.
         | 
| 55 | 
            +
                    # Because I use `account_id` in the route, I need that attribute defined.  Because
         | 
| 56 | 
            +
                    # Yext uses accountId, when it is set, I need to set `account_id` so they will match.
         | 
| 57 | 
            +
                    def accountId=(value)
         | 
| 58 | 
            +
                      super
         | 
| 59 | 
            +
                      attributes[:account_id] ||= value
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                    # rubocop:enable Naming/MethodName
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                    private
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                    def save_account_id
         | 
| 67 | 
            +
                      attributes[:account_id] = accountId
         | 
| 68 | 
            +
                    end
         | 
| 59 69 | 
             
                  end
         | 
| 60 70 | 
             
                end
         | 
| 61 71 | 
             
              end
         | 
| @@ -13,8 +13,6 @@ module Yext | |
| 13 13 | 
             
                  #         :path_regex: v2/accounts/[^/]+?/addrequests
         | 
| 14 14 | 
             
                  #         :default_version: 20161012
         | 
| 15 15 | 
             
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/listAddRequests
         | 
| 16 | 
            -
                  #         :comment: Get all of the add requests in the account. The response includes both New Location
         | 
| 17 | 
            -
                  #                   Add Requests and Existing Location Add Requests.
         | 
| 18 16 | 
             
                  #         :sandbox_only: false
         | 
| 19 17 | 
             
                  #       - :action: :show
         | 
| 20 18 | 
             
                  #         :method: :get
         | 
| @@ -22,12 +20,98 @@ module Yext | |
| 22 20 | 
             
                  #         :path_regex: v2/accounts/[^/]+?/addrequests/[^/]+??
         | 
| 23 21 | 
             
                  #         :default_version: 20161012
         | 
| 24 22 | 
             
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/getAddRequest
         | 
| 25 | 
            -
                  #         : | 
| 23 | 
            +
                  #         :sandbox_only: false
         | 
| 24 | 
            +
                  #       - :action: :create
         | 
| 25 | 
            +
                  #         :method: :post
         | 
| 26 | 
            +
                  #         :endpoint: https://api.yext.com/v2/accounts/{accountId}/newlocationaddrequests
         | 
| 27 | 
            +
                  #         :path_regex: v2/accounts/\w+/newlocationaddrequests
         | 
| 28 | 
            +
                  #         :default_version: 20161012
         | 
| 29 | 
            +
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/createNewLocationAddRequest
         | 
| 30 | 
            +
                  #         :sandbox_only: false
         | 
| 31 | 
            +
                  #       - :action: :update
         | 
| 32 | 
            +
                  #         :method: :post
         | 
| 33 | 
            +
                  #         :endpoint: https://api.yext.com/v2/accounts/{accountId}/processaddrequest
         | 
| 34 | 
            +
                  #         :path_regex: v2/accounts/\w+/processaddrequest
         | 
| 35 | 
            +
                  #         :default_version: 20161012
         | 
| 36 | 
            +
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/createProcessReviewAddRequest
         | 
| 37 | 
            +
                  #         :sandbox_only: true
         | 
| 38 | 
            +
                  #       - :action: :add_services
         | 
| 39 | 
            +
                  #         :method: :post
         | 
| 40 | 
            +
                  #         :endpoint: https://api.yext.com/v2/accounts/{accountId}/existinglocationaddrequests
         | 
| 41 | 
            +
                  #         :path_regex: v2/accounts/\w+/existinglocationaddrequests
         | 
| 42 | 
            +
                  #         :default_version: 20161012
         | 
| 43 | 
            +
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/createExistingLocationAddRequest
         | 
| 26 44 | 
             
                  #         :sandbox_only: false
         | 
| 27 45 | 
             
                  class AddRequest < Yext::Api::Utils::ApiBase
         | 
| 28 46 | 
             
                    uri("addrequests/(:id)")
         | 
| 29 47 |  | 
| 30 48 | 
             
                    include Yext::Api::Concerns::AccountChild
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                    # This is a helper method to try to simplify changing the status of an AddRequest if you
         | 
| 51 | 
            +
                    # don't have an AddRequest object.
         | 
| 52 | 
            +
                    #
         | 
| 53 | 
            +
                    # Some examples of ways to change a status:
         | 
| 54 | 
            +
                    #   Yext::Api::AdministrativeApi::AddRequest.change_status!(request_id, Yext::Api::Enumerations::AddRequestStatus::COMPLETE)
         | 
| 55 | 
            +
                    #   Yext::Api::AdministrativeApi::AddRequest.new(id: request_id, status: Yext::Api::Enumerations::AddRequestStatus::COMPLETE).save
         | 
| 56 | 
            +
                    #   add_request = Yext::Api::AdministrativeApi::AddRequest.find(request_id)
         | 
| 57 | 
            +
                    #     add_request.status = Yext::Api::Enumerations::AddRequestStatus::COMPLETE)
         | 
| 58 | 
            +
                    #     add_request.save
         | 
| 59 | 
            +
                    def self.change_status!(request_id, new_status)
         | 
| 60 | 
            +
                      raise InvalidArgument "invalid status" unless Yext::Api::Enumerations::AddRequestStatus.all.include?(new_status)
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                      new(id: request_id, status: new_status).save
         | 
| 63 | 
            +
                    end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                    # A method as scope to add services to an AddRequest.  This feature is here because it is documented
         | 
| 66 | 
            +
                    # in the AdministrativeApi as basically a method on the AddRequest concept.
         | 
| 67 | 
            +
                    #
         | 
| 68 | 
            +
                    # The Location contains an instance method to do this without having to pass in the
         | 
| 69 | 
            +
                    # arguments hash:
         | 
| 70 | 
            +
                    #
         | 
| 71 | 
            +
                    # Some examples of ways to add services:
         | 
| 72 | 
            +
                    #   Yext::Api::AdministrativeApi::AddRequest.add_services! existingLocationId:        location_id
         | 
| 73 | 
            +
                    #                                                          existingLocationAccountId: child_account_id,
         | 
| 74 | 
            +
                    #                                                          skus:                      [sku]
         | 
| 75 | 
            +
                    #
         | 
| 76 | 
            +
                    #   location = Yext::KnowledgeApi::KnowledgeManager::Location.account(child_account_id).find(location_id)
         | 
| 77 | 
            +
                    #     location.add_services! skus: [sku]
         | 
| 78 | 
            +
                    #
         | 
| 79 | 
            +
                    #   location = Yext::KnowledgeApi::KnowledgeManager::Location.new(account_id: child_account_id, id: location_id)
         | 
| 80 | 
            +
                    #     location.add_services! skus: [sku]
         | 
| 81 | 
            +
                    scope(:add_services!, lambda do |location_update_hash = {}|
         | 
| 82 | 
            +
                      args = scope_args(true)
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                      args.merge!(location_update_hash)
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                      Yext::Api::AdministrativeApi::Account.
         | 
| 87 | 
            +
                          where(args).
         | 
| 88 | 
            +
                          with(:existinglocationaddrequests).
         | 
| 89 | 
            +
                          post
         | 
| 90 | 
            +
                    end)
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                    def save
         | 
| 93 | 
            +
                      if persisted?
         | 
| 94 | 
            +
                        change_status
         | 
| 95 | 
            +
                      else
         | 
| 96 | 
            +
                        create_new_location
         | 
| 97 | 
            +
                      end
         | 
| 98 | 
            +
                    end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                    private
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                    def create_new_location
         | 
| 103 | 
            +
                      scope.
         | 
| 104 | 
            +
                          with(Yext::Api::Concerns::AccountChild.with_account_path("newlocationaddrequests")).
         | 
| 105 | 
            +
                          where(attributes.reverse_merge(account_id: Yext::Api.configuration.param_account_id)).
         | 
| 106 | 
            +
                          post
         | 
| 107 | 
            +
                    end
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                    def change_status
         | 
| 110 | 
            +
                      scope.
         | 
| 111 | 
            +
                          with(Yext::Api::Concerns::AccountChild.with_account_path("processaddrequest")).
         | 
| 112 | 
            +
                          where(addRequestId: id, status: status).
         | 
| 113 | 
            +
                          post
         | 
| 114 | 
            +
                    end
         | 
| 31 115 | 
             
                  end
         | 
| 32 116 | 
             
                end
         | 
| 33 117 | 
             
              end
         | 
| @@ -11,27 +11,49 @@ module Yext | |
| 11 11 | 
             
                  #         :endpoint: https://api.yext.com/v2/accounts/{accountId}/availableservices
         | 
| 12 12 | 
             
                  #         :default_version: 20161012
         | 
| 13 13 | 
             
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/listAvailableServices
         | 
| 14 | 
            -
                  #         :comment: Return list of services available to you under your agreements.
         | 
| 15 14 | 
             
                  #         :sandbox_only: false
         | 
| 16 15 | 
             
                  #       - :action: :index
         | 
| 17 16 | 
             
                  #         :method: :get
         | 
| 18 17 | 
             
                  #         :endpoint: https://api.yext.com/v2/accounts/{accountId}/services
         | 
| 19 18 | 
             
                  #         :default_version: 20161012
         | 
| 20 19 | 
             
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/listServices
         | 
| 21 | 
            -
                  #         :comment: Retrieve a list of all services provisioned through this account.
         | 
| 22 20 | 
             
                  #         :sandbox_only: false
         | 
| 23 21 | 
             
                  #       - :action: :destroy
         | 
| 24 22 | 
             
                  #         :method: :post
         | 
| 25 23 | 
             
                  #         :endpoint: https://api.yext.com/v2/accounts/{accountId}/cancelservices
         | 
| 26 24 | 
             
                  #         :default_version: 20161012
         | 
| 27 25 | 
             
                  #         :documentation: http://developer.yext.com/docs/administrative-api/#operation/cancelServices
         | 
| 28 | 
            -
                  #         :comment: Cancel one or more active services.
         | 
| 29 26 | 
             
                  #         :sandbox_only: false
         | 
| 30 27 | 
             
                  class Service < Yext::Api::Utils::ApiBase
         | 
| 31 28 | 
             
                    include Yext::Api::Concerns::AccountChild
         | 
| 32 29 |  | 
| 33 30 | 
             
                    scope :available, -> { with(Yext::Api::Concerns::AccountChild.with_account_path("availableservices")) }
         | 
| 34 | 
            -
             | 
| 31 | 
            +
             | 
| 32 | 
            +
                    # A method as scope to cancel services for a location.  This feature is here because it is documented
         | 
| 33 | 
            +
                    # in the AdministrativeApi as basically a method on the Service concept.
         | 
| 34 | 
            +
                    #
         | 
| 35 | 
            +
                    # The Location contains an instance method to do this without having to pass in the
         | 
| 36 | 
            +
                    # arguments hash:
         | 
| 37 | 
            +
                    #
         | 
| 38 | 
            +
                    # Some examples of ways to add services:
         | 
| 39 | 
            +
                    #   Yext::Api::AdministrativeApi::Service.cancel_services! locationId: location_id
         | 
| 40 | 
            +
                    #                                                          skus:       [sku]
         | 
| 41 | 
            +
                    #
         | 
| 42 | 
            +
                    #   location = Yext::KnowledgeApi::KnowledgeManager::Location.account(child_account_id).find(location_id)
         | 
| 43 | 
            +
                    #     location.cancel_services! skus: [sku]
         | 
| 44 | 
            +
                    #
         | 
| 45 | 
            +
                    #   location = Yext::KnowledgeApi::KnowledgeManager::Location.new(id: location_id)
         | 
| 46 | 
            +
                    #     location.cancel_services! skus: [sku]
         | 
| 47 | 
            +
                    scope(:cancel_services!, lambda do |cancel_hash|
         | 
| 48 | 
            +
                      args = scope_args(true)
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                      args.merge!(cancel_hash)
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                      Yext::Api::AdministrativeApi::Account.
         | 
| 53 | 
            +
                          where(args).
         | 
| 54 | 
            +
                          with(:cancelservices).
         | 
| 55 | 
            +
                          post
         | 
| 56 | 
            +
                    end)
         | 
| 35 57 | 
             
                  end
         | 
| 36 58 | 
             
                end
         | 
| 37 59 | 
             
              end
         | 
| @@ -9,7 +9,7 @@ module Yext | |
| 9 9 | 
             
                  #   * Global configuration:
         | 
| 10 10 | 
             
                  #     * Yext::Api.configuration.account_id = new_account_id
         | 
| 11 11 | 
             
                  #   * For an individual call:
         | 
| 12 | 
            -
                  #     * SpykeClass. | 
| 12 | 
            +
                  #     * SpykeClass.account(new_account_id)
         | 
| 13 13 | 
             
                  #     * SpykeClass.where(account_id: new_account_id)
         | 
| 14 14 | 
             
                  #
         | 
| 15 15 | 
             
                  # NOTE:  This will not work if the DefaultParameters middleware is not being used.
         | 
| @@ -26,7 +26,7 @@ module Yext | |
| 26 26 |  | 
| 27 27 | 
             
                      def ensure_relation(klass)
         | 
| 28 28 | 
             
                        [Yext::Api::KnowledgeApi::AccountSettings::Account, Yext::Api::AdministrativeApi::Account].each do |account_class|
         | 
| 29 | 
            -
                          next if account_class. | 
| 29 | 
            +
                          next if account_class.association?(klass)
         | 
| 30 30 |  | 
| 31 31 | 
             
                          klass_uri = klass.instance_variable_get(:@uri)
         | 
| 32 32 | 
             
                          helper_warnings(account_class, klass, klass_uri)
         | 
| @@ -36,11 +36,17 @@ module Yext | |
| 36 36 | 
             
                        end
         | 
| 37 37 | 
             
                      end
         | 
| 38 38 |  | 
| 39 | 
            +
                      def association_name(klass)
         | 
| 40 | 
            +
                        association_name = klass.parents.include?(Yext::Api::LiveApi) ? "live_" : ""
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                        association_name + klass.model_name.element.pluralize
         | 
| 43 | 
            +
                      end
         | 
| 44 | 
            +
             | 
| 39 45 | 
             
                      private
         | 
| 40 46 |  | 
| 41 47 | 
             
                      def add_has_many_relation(account_class, klass, klass_uri)
         | 
| 42 48 | 
             
                        account_class.class_eval do
         | 
| 43 | 
            -
                          has_many klass. | 
| 49 | 
            +
                          has_many Yext::Api::Concerns::AccountChild.association_name(klass).to_sym,
         | 
| 44 50 | 
             
                                   class_name: klass.name,
         | 
| 45 51 | 
             
                                   uri:        Yext::Api::Concerns::AccountChild.with_account_path(klass_uri)
         | 
| 46 52 | 
             
                        end
         | 
| @@ -48,7 +54,7 @@ module Yext | |
| 48 54 |  | 
| 49 55 | 
             
                      def helper_warnings(account_class, klass, klass_uri)
         | 
| 50 56 | 
             
                        klass_name    = klass.name
         | 
| 51 | 
            -
                        relation_name = klass | 
| 57 | 
            +
                        relation_name = Yext::Api::Concerns::AccountChild.association_name(klass)
         | 
| 52 58 |  | 
| 53 59 | 
             
                        puts "WARNING! #{account_class.name} does not include the relationship for #{klass_name}"
         | 
| 54 60 | 
             
                        puts " Add the following line to Yext::Api::Concerns::AccountRelations:"
         | 
| @@ -63,13 +69,13 @@ module Yext | |
| 63 69 | 
             
                    end
         | 
| 64 70 |  | 
| 65 71 | 
             
                    included do
         | 
| 66 | 
            -
                      scope(: | 
| 72 | 
            +
                      scope(:account, lambda do |account_or_id|
         | 
| 67 73 | 
             
                        if account_or_id.is_a?(Yext::Api::KnowledgeApi::AccountSettings::Account) ||
         | 
| 68 74 | 
             
                            account_or_id.is_a?(Yext::Api::AdministrativeApi::Account)
         | 
| 69 75 | 
             
                          account_or_id
         | 
| 70 76 | 
             
                        else
         | 
| 71 77 | 
             
                          Yext::Api::KnowledgeApi::AccountSettings::Account.new(id: account_or_id)
         | 
| 72 | 
            -
                        end.public_send( | 
| 78 | 
            +
                        end.public_send(Yext::Api::Concerns::AccountChild.association_name(self))
         | 
| 73 79 | 
             
                      end)
         | 
| 74 80 |  | 
| 75 81 | 
             
                      Yext::Api::Concerns::AccountChild.ensure_relation(self)
         | 
| @@ -79,12 +85,35 @@ module Yext | |
| 79 85 | 
             
                      def all
         | 
| 80 86 | 
             
                        if current_scope.nil?
         | 
| 81 87 | 
             
                          Yext::Api::KnowledgeApi::AccountSettings::Account.
         | 
| 82 | 
            -
                              new(id: Yext::Api.configuration. | 
| 83 | 
            -
                              public_send( | 
| 88 | 
            +
                              new(id: Yext::Api.configuration.param_account_id).
         | 
| 89 | 
            +
                              public_send(Yext::Api::Concerns::AccountChild.association_name(self))
         | 
| 84 90 | 
             
                        else
         | 
| 85 91 | 
             
                          current_scope
         | 
| 86 92 | 
             
                        end
         | 
| 87 93 | 
             
                      end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                      def reset_uri
         | 
| 96 | 
            +
                        [Yext::Api::KnowledgeApi::AccountSettings::Account, Yext::Api::AdministrativeApi::Account].each do |account_class|
         | 
| 97 | 
            +
                          next unless account_class.association?(self)
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                          klass_uri = instance_variable_get(:@uri) || default_uri
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                          account_class.
         | 
| 102 | 
            +
                              new.
         | 
| 103 | 
            +
                              send(Yext::Api::Concerns::AccountChild.association_name(self)).
         | 
| 104 | 
            +
                              with(Yext::Api::Concerns::AccountChild.with_account_path(klass_uri))
         | 
| 105 | 
            +
                        end
         | 
| 106 | 
            +
                      end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                      def scope_args(account_scope = false)
         | 
| 109 | 
            +
                        args = current_scope&.params&.dup || {}
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                        args[:account_id] ||= Yext::Api.configuration.param_account_id
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                        args[:id] = args.delete(:account_id) if account_scope
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                        args
         | 
| 116 | 
            +
                      end
         | 
| 88 117 | 
             
                    end
         | 
| 89 118 | 
             
                  end
         | 
| 90 119 | 
             
                end
         | 
| @@ -13,11 +13,26 @@ module Yext | |
| 13 13 | 
             
                    # The module AccountChild will add these relations if they are missing, but if they are
         | 
| 14 14 | 
             
                    # listed explicitly it is more efficient.
         | 
| 15 15 | 
             
                    included do
         | 
| 16 | 
            +
                      # AdministrativeApi
         | 
| 16 17 | 
             
                      has_many :add_requests,
         | 
| 17 18 | 
             
                               class_name: "Yext::Api::AdministrativeApi::AddRequest",
         | 
| 18 19 | 
             
                               uri:        Yext::Api::Concerns::AccountChild.with_account_path("addrequests/(:id)")
         | 
| 19 | 
            -
                      has_many :locations, class_name: "Yext::Api::KnowledgeApi::KnowledgeManager::Location"
         | 
| 20 20 | 
             
                      has_many :services, class_name: "Yext::Api::AdministrativeApi::Service"
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                      # KnowledgeApi::KnowledgeManager
         | 
| 23 | 
            +
                      has_many :locations, class_name: "Yext::Api::KnowledgeApi::KnowledgeManager::Location"
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                      # KnowledgeApi::AccountSettings
         | 
| 26 | 
            +
                      has_many :users, class_name: "Yext::Api::KnowledgeApi::AccountSettings::User"
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                      # LiveApi
         | 
| 29 | 
            +
                      has_many :live_locations, class_name: "Yext::Api::LiveApi::Location"
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                    class_methods do
         | 
| 33 | 
            +
                      def association?(klass)
         | 
| 34 | 
            +
                        associations.key?(Yext::Api::Concerns::AccountChild.association_name(klass).to_sym)
         | 
| 35 | 
            +
                      end
         | 
| 21 36 | 
             
                    end
         | 
| 22 37 | 
             
                  end
         | 
| 23 38 | 
             
                end
         | 
| @@ -12,8 +12,8 @@ module Yext | |
| 12 12 | 
             
                    extend ActiveSupport::Concern
         | 
| 13 13 |  | 
| 14 14 | 
             
                    included do
         | 
| 15 | 
            -
                      scope(: | 
| 16 | 
            -
                      scope(: | 
| 15 | 
            +
                      scope(:version, ->(version) { where(v: version) })
         | 
| 16 | 
            +
                      scope(:application, ->(app_id) { where(api_key: app_id) })
         | 
| 17 17 | 
             
                      scope(:yext_username, ->(username) { where(yext_username: username) })
         | 
| 18 18 | 
             
                      scope(:yext_user_id, ->(user_id) { where(yext_user_id: user_id) })
         | 
| 19 19 |  | 
| @@ -31,6 +31,12 @@ module Yext | |
| 31 31 | 
             
                        where(validation: validation)
         | 
| 32 32 | 
             
                      end)
         | 
| 33 33 | 
             
                    end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    class_methods do
         | 
| 36 | 
            +
                      def reset_uri
         | 
| 37 | 
            +
                        # do nothing.
         | 
| 38 | 
            +
                      end
         | 
| 39 | 
            +
                    end
         | 
| 34 40 | 
             
                  end
         | 
| 35 41 | 
             
                end
         | 
| 36 42 | 
             
              end
         | 
| @@ -28,15 +28,29 @@ module Yext | |
| 28 28 | 
             
                      end
         | 
| 29 29 | 
             
                    end
         | 
| 30 30 |  | 
| 31 | 
            -
                     | 
| 32 | 
            -
                       | 
| 33 | 
            -
                         | 
| 31 | 
            +
                    class << self
         | 
| 32 | 
            +
                      def faraday_connection(url)
         | 
| 33 | 
            +
                        Faraday.new(url: url) do |c|
         | 
| 34 | 
            +
                          c.request :json
         | 
| 35 | 
            +
                          c.request :retry,
         | 
| 36 | 
            +
                                    max:                 2,
         | 
| 37 | 
            +
                                    interval:            0.05,
         | 
| 38 | 
            +
                                    interval_randomness: 0.5,
         | 
| 39 | 
            +
                                    backoff_factor:      2
         | 
| 34 40 |  | 
| 35 | 
            -
             | 
| 36 | 
            -
                        c.use Yext::Api::Utils::DefaultParameters
         | 
| 37 | 
            -
                        c.use Yext::Api::Utils::ApiRateLimits
         | 
| 41 | 
            +
                          add_middleware(c)
         | 
| 38 42 |  | 
| 39 | 
            -
             | 
| 43 | 
            +
                          c.adapter Faraday.default_adapter
         | 
| 44 | 
            +
                        end
         | 
| 45 | 
            +
                      end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                      private
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                      def add_middleware(c)
         | 
| 50 | 
            +
                        c.use Yext::Api::Utils::Middleware::ResponseParser
         | 
| 51 | 
            +
                        c.use Yext::Api::Utils::Middleware::DefaultParameters
         | 
| 52 | 
            +
                        c.use Yext::Api::Utils::Middleware::ApiRateLimits
         | 
| 53 | 
            +
                        c.use Yext::Api::Utils::Middleware::UriCleanup
         | 
| 40 54 | 
             
                      end
         | 
| 41 55 | 
             
                    end
         | 
| 42 56 | 
             
                  end
         | 
| @@ -10,7 +10,14 @@ module Yext | |
| 10 10 | 
             
                                :rate_limit_limit,
         | 
| 11 11 | 
             
                                :rate_limit_reset_at,
         | 
| 12 12 | 
             
                                :last_status,
         | 
| 13 | 
            -
                                :last_meta
         | 
| 13 | 
            +
                                :last_meta,
         | 
| 14 | 
            +
                                :last_data
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    private
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    def last_data=(last_data)
         | 
| 19 | 
            +
                      @last_data = last_data
         | 
| 20 | 
            +
                    end
         | 
| 14 21 |  | 
| 15 22 | 
             
                    def last_status=(last_status)
         | 
| 16 23 | 
             
                      @last_status = last_status
         |