graphql-fragment_cache 1.16.0 → 1.17.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/CHANGELOG.md +4 -0
- data/README.md +3 -7
- data/lib/.rbnext/2.3/graphql/fragment_cache/cache_key_builder.rb +25 -13
- data/lib/.rbnext/2.7/graphql/fragment_cache/cache_key_builder.rb +25 -13
- data/lib/graphql/fragment_cache/cache_key_builder.rb +25 -13
- data/lib/graphql/fragment_cache/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: e2c544bc2742643748c5e36c59b3414def73c22e6f7c4b5080504751ea564ecd
         | 
| 4 | 
            +
              data.tar.gz: b61980525863502ea4f30eeb96fee11dbc11a906ab98b863ed0ece7f9d97d1e9
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: aac16bb6d2541e573796043ebf2da2ffa171918730ad95f4613db1f6b20cb1156a4a1cb3d70b7e0c39be57a6d56d2cfd3a27d95470c0c316f8f95a756bf83377
         | 
| 7 | 
            +
              data.tar.gz: 85349b218d754a716db3aa8165e8de64a92b48c22e4b4b1615e612d041000701a090c643fa6b6e68326bb51a3688df2eb71f84604a1bfd19034eb01201453b26
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -2,6 +2,10 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            ## master
         | 
| 4 4 |  | 
| 5 | 
            +
            ## 1.17.0 (2022-11-09)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            - [PR#92](https://github.com/DmitryTsepelev/graphql-ruby-fragment_cache/pull/92) Make cache keys human-readable ([@jeromedalbert][])
         | 
| 8 | 
            +
             | 
| 5 9 | 
             
            ## 1.16.0 (2022-11-06)
         | 
| 6 10 |  | 
| 7 11 | 
             
            - [PR#42](https://github.com/DmitryTsepelev/graphql-ruby-fragment_cache/pull/42) Raise helpful errors when write or write_multi fails  ([@DmitryTsepelev][])
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # GraphQL::FragmentCache  
         | 
| 2 2 |  | 
| 3 3 | 
             
            `GraphQL::FragmentCache` powers up [graphql-ruby](https://graphql-ruby.org) with the ability to cache response _fragments_: you can mark any field as cached and it will never be resolved again (at least, while cache is valid). For instance, the following code caches `title` for each post:
         | 
| 4 4 |  | 
| @@ -9,12 +9,6 @@ class PostType < BaseObject | |
| 9 9 | 
             
            end
         | 
| 10 10 | 
             
            ```
         | 
| 11 11 |  | 
| 12 | 
            -
            <p align="center">
         | 
| 13 | 
            -
              <a href="https://evilmartians.com/?utm_source=graphql-ruby-fragment_cache">
         | 
| 14 | 
            -
                <img src="https://evilmartians.com/badges/sponsored-by-evil-martians.svg" alt="Sponsored by Evil Martians" width="236" height="54">
         | 
| 15 | 
            -
              </a>
         | 
| 16 | 
            -
            </p>
         | 
| 17 | 
            -
             | 
| 18 12 | 
             
            ## Getting started
         | 
| 19 13 |  | 
| 20 14 | 
             
            Add the gem to your Gemfile `gem 'graphql-fragment_cache'` and add the plugin to your schema class:
         | 
| @@ -489,6 +483,8 @@ end | |
| 489 483 |  | 
| 490 484 | 
             
            Based on the original [gist](https://gist.github.com/palkan/faad9f6ff1db16fcdb1c071ec50e4190) by [@palkan](https://github.com/palkan) and [@ssnickolay](https://github.com/ssnickolay).
         | 
| 491 485 |  | 
| 486 | 
            +
            Initially sponsored by [Evil Martians](http://evilmartians.com).
         | 
| 487 | 
            +
             | 
| 492 488 | 
             
            ## Contributing
         | 
| 493 489 |  | 
| 494 490 | 
             
            Bug reports and pull requests are welcome on GitHub at [https://github.com/DmitryTsepelev/graphql-ruby-fragment_cache](https://github.com/DmitryTsepelev/graphql-ruby-fragment_cache).
         | 
| @@ -137,11 +137,17 @@ module GraphQL | |
| 137 137 | 
             
                  end
         | 
| 138 138 |  | 
| 139 139 | 
             
                  def build
         | 
| 140 | 
            -
                    [
         | 
| 140 | 
            +
                    key_parts = [
         | 
| 141 141 | 
             
                      GraphQL::FragmentCache.namespace,
         | 
| 142 | 
            +
                      simple_path_cache_key,
         | 
| 142 143 | 
             
                      implicit_cache_key,
         | 
| 143 144 | 
             
                      object_cache_key
         | 
| 144 | 
            -
                    ] | 
| 145 | 
            +
                    ]
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                    key_parts
         | 
| 148 | 
            +
                      .compact
         | 
| 149 | 
            +
                      .map { |key_part| key_part.tr("/", "-") }
         | 
| 150 | 
            +
                      .join("/")
         | 
| 145 151 | 
             
                  end
         | 
| 146 152 |  | 
| 147 153 | 
             
                  private
         | 
| @@ -170,22 +176,28 @@ module GraphQL | |
| 170 176 | 
             
                    current_root.selections.to_selections_key
         | 
| 171 177 | 
             
                  end
         | 
| 172 178 |  | 
| 179 | 
            +
                  def simple_path_cache_key
         | 
| 180 | 
            +
                    path_cache_key.split("(").first
         | 
| 181 | 
            +
                  end
         | 
| 182 | 
            +
             | 
| 173 183 | 
             
                  def path_cache_key
         | 
| 174 | 
            -
                    @ | 
| 175 | 
            -
                       | 
| 184 | 
            +
                    @path_cache_key ||= begin
         | 
| 185 | 
            +
                      @options.fetch(:path_cache_key) do
         | 
| 186 | 
            +
                        lookahead = query.lookahead
         | 
| 176 187 |  | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 188 | 
            +
                        path.map { |field_name|
         | 
| 189 | 
            +
                          # Handle cached fields inside collections:
         | 
| 190 | 
            +
                          next field_name if field_name.is_a?(Integer)
         | 
| 180 191 |  | 
| 181 | 
            -
             | 
| 182 | 
            -
             | 
| 192 | 
            +
                          lookahead = lookahead.selection_with_alias(field_name)
         | 
| 193 | 
            +
                          raise "Failed to look ahead the field: #{field_name}" if lookahead.is_a?(::GraphQL::Execution::Lookahead::NullLookahead)
         | 
| 183 194 |  | 
| 184 | 
            -
             | 
| 195 | 
            +
                          next lookahead.field.name if lookahead.arguments.empty?
         | 
| 185 196 |  | 
| 186 | 
            -
             | 
| 187 | 
            -
             | 
| 188 | 
            -
             | 
| 197 | 
            +
                          args = lookahead.arguments.map { |_1, _2| "#{_1}:#{traverse_argument(_2)}" }.sort.join(",")
         | 
| 198 | 
            +
                          "#{lookahead.field.name}(#{args})"
         | 
| 199 | 
            +
                        }.join("/")
         | 
| 200 | 
            +
                      end
         | 
| 189 201 | 
             
                    end
         | 
| 190 202 | 
             
                  end
         | 
| 191 203 |  | 
| @@ -137,11 +137,17 @@ module GraphQL | |
| 137 137 | 
             
                  end
         | 
| 138 138 |  | 
| 139 139 | 
             
                  def build
         | 
| 140 | 
            -
                    [
         | 
| 140 | 
            +
                    key_parts = [
         | 
| 141 141 | 
             
                      GraphQL::FragmentCache.namespace,
         | 
| 142 | 
            +
                      simple_path_cache_key,
         | 
| 142 143 | 
             
                      implicit_cache_key,
         | 
| 143 144 | 
             
                      object_cache_key
         | 
| 144 | 
            -
                    ] | 
| 145 | 
            +
                    ]
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                    key_parts
         | 
| 148 | 
            +
                      .compact
         | 
| 149 | 
            +
                      .map { |key_part| key_part.tr("/", "-") }
         | 
| 150 | 
            +
                      .join("/")
         | 
| 145 151 | 
             
                  end
         | 
| 146 152 |  | 
| 147 153 | 
             
                  private
         | 
| @@ -170,22 +176,28 @@ module GraphQL | |
| 170 176 | 
             
                    current_root.selections.to_selections_key
         | 
| 171 177 | 
             
                  end
         | 
| 172 178 |  | 
| 179 | 
            +
                  def simple_path_cache_key
         | 
| 180 | 
            +
                    path_cache_key.split("(").first
         | 
| 181 | 
            +
                  end
         | 
| 182 | 
            +
             | 
| 173 183 | 
             
                  def path_cache_key
         | 
| 174 | 
            -
                    @ | 
| 175 | 
            -
                       | 
| 184 | 
            +
                    @path_cache_key ||= begin
         | 
| 185 | 
            +
                      @options.fetch(:path_cache_key) do
         | 
| 186 | 
            +
                        lookahead = query.lookahead
         | 
| 176 187 |  | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 188 | 
            +
                        path.map { |field_name|
         | 
| 189 | 
            +
                          # Handle cached fields inside collections:
         | 
| 190 | 
            +
                          next field_name if field_name.is_a?(Integer)
         | 
| 180 191 |  | 
| 181 | 
            -
             | 
| 182 | 
            -
             | 
| 192 | 
            +
                          lookahead = lookahead.selection_with_alias(field_name)
         | 
| 193 | 
            +
                          raise "Failed to look ahead the field: #{field_name}" if lookahead.is_a?(::GraphQL::Execution::Lookahead::NullLookahead)
         | 
| 183 194 |  | 
| 184 | 
            -
             | 
| 195 | 
            +
                          next lookahead.field.name if lookahead.arguments.empty?
         | 
| 185 196 |  | 
| 186 | 
            -
             | 
| 187 | 
            -
             | 
| 188 | 
            -
             | 
| 197 | 
            +
                          args = lookahead.arguments.map { |_1, _2| "#{_1}:#{traverse_argument(_2)}" }.sort.join(",")
         | 
| 198 | 
            +
                          "#{lookahead.field.name}(#{args})"
         | 
| 199 | 
            +
                        }.join("/")
         | 
| 200 | 
            +
                      end
         | 
| 189 201 | 
             
                    end
         | 
| 190 202 | 
             
                  end
         | 
| 191 203 |  | 
| @@ -137,11 +137,17 @@ module GraphQL | |
| 137 137 | 
             
                  end
         | 
| 138 138 |  | 
| 139 139 | 
             
                  def build
         | 
| 140 | 
            -
                    [
         | 
| 140 | 
            +
                    key_parts = [
         | 
| 141 141 | 
             
                      GraphQL::FragmentCache.namespace,
         | 
| 142 | 
            +
                      simple_path_cache_key,
         | 
| 142 143 | 
             
                      implicit_cache_key,
         | 
| 143 144 | 
             
                      object_cache_key
         | 
| 144 | 
            -
                    ] | 
| 145 | 
            +
                    ]
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                    key_parts
         | 
| 148 | 
            +
                      .compact
         | 
| 149 | 
            +
                      .map { |key_part| key_part.tr("/", "-") }
         | 
| 150 | 
            +
                      .join("/")
         | 
| 145 151 | 
             
                  end
         | 
| 146 152 |  | 
| 147 153 | 
             
                  private
         | 
| @@ -170,22 +176,28 @@ module GraphQL | |
| 170 176 | 
             
                    current_root.selections.to_selections_key
         | 
| 171 177 | 
             
                  end
         | 
| 172 178 |  | 
| 179 | 
            +
                  def simple_path_cache_key
         | 
| 180 | 
            +
                    path_cache_key.split("(").first
         | 
| 181 | 
            +
                  end
         | 
| 182 | 
            +
             | 
| 173 183 | 
             
                  def path_cache_key
         | 
| 174 | 
            -
                    @ | 
| 175 | 
            -
                       | 
| 184 | 
            +
                    @path_cache_key ||= begin
         | 
| 185 | 
            +
                      @options.fetch(:path_cache_key) do
         | 
| 186 | 
            +
                        lookahead = query.lookahead
         | 
| 176 187 |  | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 188 | 
            +
                        path.map { |field_name|
         | 
| 189 | 
            +
                          # Handle cached fields inside collections:
         | 
| 190 | 
            +
                          next field_name if field_name.is_a?(Integer)
         | 
| 180 191 |  | 
| 181 | 
            -
             | 
| 182 | 
            -
             | 
| 192 | 
            +
                          lookahead = lookahead.selection_with_alias(field_name)
         | 
| 193 | 
            +
                          raise "Failed to look ahead the field: #{field_name}" if lookahead.is_a?(::GraphQL::Execution::Lookahead::NullLookahead)
         | 
| 183 194 |  | 
| 184 | 
            -
             | 
| 195 | 
            +
                          next lookahead.field.name if lookahead.arguments.empty?
         | 
| 185 196 |  | 
| 186 | 
            -
             | 
| 187 | 
            -
             | 
| 188 | 
            -
             | 
| 197 | 
            +
                          args = lookahead.arguments.map { "#{_1}:#{traverse_argument(_2)}" }.sort.join(",")
         | 
| 198 | 
            +
                          "#{lookahead.field.name}(#{args})"
         | 
| 199 | 
            +
                        }.join("/")
         | 
| 200 | 
            +
                      end
         | 
| 189 201 | 
             
                    end
         | 
| 190 202 | 
             
                  end
         | 
| 191 203 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: graphql-fragment_cache
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.17.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - DmitryTsepelev
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2022-11- | 
| 11 | 
            +
            date: 2022-11-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: graphql
         |