publishing_platform_api_adapters 0.6.0 → 0.7.0
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/Rakefile +3 -3
- data/lib/publishing_platform_api/json_client.rb +1 -1
- data/lib/publishing_platform_api/organisations.rb +17 -0
- data/lib/publishing_platform_api/publishing_api/special_route_publisher.rb +51 -0
- data/lib/publishing_platform_api/publishing_api.rb +7 -7
- data/lib/publishing_platform_api/router.rb +1 -1
- data/lib/publishing_platform_api/version.rb +1 -1
- data/lib/publishing_platform_api.rb +12 -0
- metadata +6 -9
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 546721a4d7c247b0de3d3aed7767d8c355b79628b77248fb3624889f751a3f26
         | 
| 4 | 
            +
              data.tar.gz: 664183ea7606c204354531ffb4a69b392e6475a01477af2256074c7608aeeeee
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 89072fe076a7b666ca0b661e2f1ae3c51402c163d1c7a6d91fd80fecfa6bcd8e2fa23a3fe02342156af2389f1b3c5475e37333133f0dca6ba6e22c74b1ac74bf
         | 
| 7 | 
            +
              data.tar.gz: cf14d5aaed20522dea8ebe2d83c1dd87a70fcdb035ea7182181049c9093a8bbbe4bdf7f5dc2a6d18de50322ac9950830deb25806537a2b575cdd271ba22900e4
         | 
    
        data/Rakefile
    CHANGED
    
    
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            require_relative "base"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class PublishingPlatformApi::Organisations < PublishingPlatformApi::Base
         | 
| 4 | 
            +
              def organisations
         | 
| 5 | 
            +
                get_list "#{base_url}/organisations"
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              def organisation(organisation_slug)
         | 
| 9 | 
            +
                get_json "#{base_url}/organisations/#{organisation_slug}"
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            private
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              def base_url
         | 
| 15 | 
            +
                "#{endpoint}/api"
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -0,0 +1,51 @@ | |
| 1 | 
            +
            require "publishing_platform_api/publishing_api"
         | 
| 2 | 
            +
            require "time"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module PublishingPlatformApi
         | 
| 5 | 
            +
              class PublishingApi < PublishingPlatformApi::Base
         | 
| 6 | 
            +
                class SpecialRoutePublisher
         | 
| 7 | 
            +
                  def initialize(options = {})
         | 
| 8 | 
            +
                    @logger = options[:logger] || PublishingPlatformApi::Base.logger
         | 
| 9 | 
            +
                    @publishing_api = options[:publishing_api] || PublishingPlatformApi::PublishingApi.new(PublishingPlatformLocation.find("publishing-api"))
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def publish(options)
         | 
| 13 | 
            +
                    logger.info("Publishing #{options.fetch(:type)} route #{options.fetch(:base_path)}, routing to #{options.fetch(:rendering_app)}")
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    update_type = options.fetch(:update_type, "major")
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    put_content_response = publishing_api.put_content(
         | 
| 18 | 
            +
                      options.fetch(:content_id),
         | 
| 19 | 
            +
                      base_path: options.fetch(:base_path),
         | 
| 20 | 
            +
                      document_type: options.fetch(:document_type, "special_route"),
         | 
| 21 | 
            +
                      schema_name: options.fetch(:schema_name, "special_route"),
         | 
| 22 | 
            +
                      title: options.fetch(:title),
         | 
| 23 | 
            +
                      description: options.fetch(:description, ""),
         | 
| 24 | 
            +
                      details: {},
         | 
| 25 | 
            +
                      routes: [
         | 
| 26 | 
            +
                        {
         | 
| 27 | 
            +
                          path: options.fetch(:base_path),
         | 
| 28 | 
            +
                          type: options.fetch(:type),
         | 
| 29 | 
            +
                        },
         | 
| 30 | 
            +
                      ],
         | 
| 31 | 
            +
                      publishing_app: options.fetch(:publishing_app),
         | 
| 32 | 
            +
                      rendering_app: options.fetch(:rendering_app),
         | 
| 33 | 
            +
                      public_updated_at: time.now.iso8601,
         | 
| 34 | 
            +
                      update_type:,
         | 
| 35 | 
            +
                    )
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    publishing_api.patch_links(options.fetch(:content_id), links: options[:links]) if options[:links]
         | 
| 38 | 
            +
                    publishing_api.publish(options.fetch(:content_id))
         | 
| 39 | 
            +
                    put_content_response
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                private
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  attr_reader :logger, :publishing_api
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  def time
         | 
| 47 | 
            +
                    (Time.respond_to?(:zone) && Time.zone) || Time
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
            end
         | 
| @@ -10,7 +10,7 @@ class PublishingPlatformApi::PublishingApi < PublishingPlatformApi::Base | |
| 10 10 | 
             
              # Put a content item
         | 
| 11 11 | 
             
              #
         | 
| 12 12 | 
             
              # @param content_id [UUID]
         | 
| 13 | 
            -
              # @param payload [Hash] A valid content item | 
| 13 | 
            +
              # @param payload [Hash] A valid content item
         | 
| 14 14 | 
             
              def put_content(content_id, payload)
         | 
| 15 15 | 
             
                put_json(content_url(content_id), payload)
         | 
| 16 16 | 
             
              end
         | 
| @@ -123,13 +123,13 @@ class PublishingPlatformApi::PublishingApi < PublishingPlatformApi::Base | |
| 123 123 | 
             
              #   }
         | 
| 124 124 | 
             
              def get_links(content_id)
         | 
| 125 125 | 
             
                get_json(links_url(content_id))
         | 
| 126 | 
            -
              end | 
| 126 | 
            +
              end
         | 
| 127 127 |  | 
| 128 128 | 
             
              # Get expanded links
         | 
| 129 129 | 
             
              #
         | 
| 130 130 | 
             
              # Return the expanded links of the item.
         | 
| 131 131 | 
             
              #
         | 
| 132 | 
            -
              # @param content_id [UUID] | 
| 132 | 
            +
              # @param content_id [UUID]
         | 
| 133 133 | 
             
              # @param with_drafts [Bool] Whether links to draft-only editions are returned, defaulting to `true`.
         | 
| 134 134 | 
             
              # @param generate [Bool] Whether to require publishing-api to generate the expanded links, which may be slow. Defaults to `false`.
         | 
| 135 135 | 
             
              #
         | 
| @@ -155,14 +155,14 @@ class PublishingPlatformApi::PublishingApi < PublishingPlatformApi::Base | |
| 155 155 | 
             
                query = query_string(params)
         | 
| 156 156 | 
             
                validate_content_id(content_id)
         | 
| 157 157 | 
             
                get_json("#{endpoint}/expanded-links/#{content_id}#{query}")
         | 
| 158 | 
            -
              end | 
| 158 | 
            +
              end
         | 
| 159 159 |  | 
| 160 160 | 
             
              # Patch the links of a content item
         | 
| 161 161 | 
             
              #
         | 
| 162 162 | 
             
              # @param content_id [UUID]
         | 
| 163 163 | 
             
              # @param params [Hash]
         | 
| 164 164 | 
             
              # @option params [Hash] links A "links hash"
         | 
| 165 | 
            -
              # @option params [Integer] previous_version The previous version (returned by `get_links`). If this version is not the current version, the publishing-api will reject the change and return 409 Conflict. (optional) | 
| 165 | 
            +
              # @option params [Integer] previous_version The previous version (returned by `get_links`). If this version is not the current version, the publishing-api will reject the change and return 409 Conflict. (optional)
         | 
| 166 166 | 
             
              # @example
         | 
| 167 167 | 
             
              #
         | 
| 168 168 | 
             
              #   publishing_api.patch_links(
         | 
| @@ -214,7 +214,7 @@ class PublishingPlatformApi::PublishingApi < PublishingPlatformApi::Base | |
| 214 214 | 
             
                end
         | 
| 215 215 |  | 
| 216 216 | 
             
                get_json("#{endpoint}/linkables?document_type=#{document_type}")
         | 
| 217 | 
            -
              end | 
| 217 | 
            +
              end
         | 
| 218 218 |  | 
| 219 219 | 
             
              # Reserves a path for a publishing application
         | 
| 220 220 | 
             
              #
         | 
| @@ -278,4 +278,4 @@ private | |
| 278 278 | 
             
              def validate_content_id(content_id)
         | 
| 279 279 | 
             
                raise ArgumentError, "content_id cannot be nil" unless content_id
         | 
| 280 280 | 
             
              end
         | 
| 281 | 
            -
            end
         | 
| 281 | 
            +
            end
         | 
| @@ -20,6 +20,18 @@ module PublishingPlatformApi | |
| 20 20 | 
             
                )
         | 
| 21 21 | 
             
              end
         | 
| 22 22 |  | 
| 23 | 
            +
              # Creates a PublishingPlatformApi::Organisations adapter for accessing
         | 
| 24 | 
            +
              # APIs through the origin, where the requests will be handled by
         | 
| 25 | 
            +
              # Collections frontend.
         | 
| 26 | 
            +
              #
         | 
| 27 | 
            +
              # @return [PublishingPlatformApi::Organisations]
         | 
| 28 | 
            +
              def self.organisations(options = {})
         | 
| 29 | 
            +
                PublishingPlatformApi::Organisations.new(
         | 
| 30 | 
            +
                  PublishingPlatformLocation.new.website_root,
         | 
| 31 | 
            +
                  options,
         | 
| 32 | 
            +
                )
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 23 35 | 
             
              # Creates a PublishingPlatformApi::PublishingApi adapter
         | 
| 24 36 | 
             
              #
         | 
| 25 37 | 
             
              # This will set a bearer token if a PUBLISHING_API_BEARER_TOKEN environment
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: publishing_platform_api_adapters
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.7.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Publishing Platform
         | 
| 8 | 
            -
            autorequire: 
         | 
| 9 8 | 
             
            bindir: bin
         | 
| 10 9 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 10 | 
            +
            date: 2025-02-06 00:00:00.000000000 Z
         | 
| 12 11 | 
             
            dependencies:
         | 
| 13 12 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 13 | 
             
              name: addressable
         | 
| @@ -95,7 +94,6 @@ dependencies: | |
| 95 94 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 95 | 
             
                    version: '0'
         | 
| 97 96 | 
             
            description: Adapters to work with Publishing Platform APIs
         | 
| 98 | 
            -
            email: 
         | 
| 99 97 | 
             
            executables: []
         | 
| 100 98 | 
             
            extensions: []
         | 
| 101 99 | 
             
            extra_rdoc_files: []
         | 
| @@ -109,18 +107,18 @@ files: | |
| 109 107 | 
             
            - lib/publishing_platform_api/json_client.rb
         | 
| 110 108 | 
             
            - lib/publishing_platform_api/list_response.rb
         | 
| 111 109 | 
             
            - lib/publishing_platform_api/middleware/publishing_platform_header_sniffer.rb
         | 
| 110 | 
            +
            - lib/publishing_platform_api/organisations.rb
         | 
| 112 111 | 
             
            - lib/publishing_platform_api/publishing_api.rb
         | 
| 112 | 
            +
            - lib/publishing_platform_api/publishing_api/special_route_publisher.rb
         | 
| 113 113 | 
             
            - lib/publishing_platform_api/publishing_platform_headers.rb
         | 
| 114 114 | 
             
            - lib/publishing_platform_api/railtie.rb
         | 
| 115 115 | 
             
            - lib/publishing_platform_api/response.rb
         | 
| 116 116 | 
             
            - lib/publishing_platform_api/router.rb
         | 
| 117 117 | 
             
            - lib/publishing_platform_api/version.rb
         | 
| 118 118 | 
             
            - lib/publishing_platform_api_adapters.rb
         | 
| 119 | 
            -
            homepage: 
         | 
| 120 119 | 
             
            licenses:
         | 
| 121 120 | 
             
            - MIT
         | 
| 122 121 | 
             
            metadata: {}
         | 
| 123 | 
            -
            post_install_message: 
         | 
| 124 122 | 
             
            rdoc_options: []
         | 
| 125 123 | 
             
            require_paths:
         | 
| 126 124 | 
             
            - lib
         | 
| @@ -128,15 +126,14 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 128 126 | 
             
              requirements:
         | 
| 129 127 | 
             
              - - ">="
         | 
| 130 128 | 
             
                - !ruby/object:Gem::Version
         | 
| 131 | 
            -
                  version: '3. | 
| 129 | 
            +
                  version: '3.1'
         | 
| 132 130 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 133 131 | 
             
              requirements:
         | 
| 134 132 | 
             
              - - ">="
         | 
| 135 133 | 
             
                - !ruby/object:Gem::Version
         | 
| 136 134 | 
             
                  version: '0'
         | 
| 137 135 | 
             
            requirements: []
         | 
| 138 | 
            -
            rubygems_version: 3.3 | 
| 139 | 
            -
            signing_key: 
         | 
| 136 | 
            +
            rubygems_version: 3.6.3
         | 
| 140 137 | 
             
            specification_version: 4
         | 
| 141 138 | 
             
            summary: Adapters to work with Publishing Platform APIs
         | 
| 142 139 | 
             
            test_files: []
         |