faraday-manual-cache 0.0.1 → 0.1.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/README.md +4 -0
- data/faraday-manual-cache.gemspec +3 -1
- data/lib/faraday/manual_cache.rb +29 -12
- metadata +4 -5
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 9908ab5ca8956f133b3371bb8313fc70eefa01e9
         | 
| 4 | 
            +
              data.tar.gz: 71e6b04c0c4bd4f512acab094c09cc4c68f60c41
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c46b3edf75261d00b1c039fa77f03c247b4cbec6acc21421b6a574f308c034937072347d52d9cbbc5f7f234b96d6a5f73d41f89364dbaedef825ff4e50891b4e
         | 
| 7 | 
            +
              data.tar.gz: 254fa5f85405e188bcc66f97275fd0dcd086f418275a79c61c95133c4757b4318342f9b073a9cc211180968c5f90d1f145f3d553def7fa4bc5a1648afe28f6c7
         | 
    
        data/README.md
    CHANGED
    
    | @@ -52,6 +52,10 @@ end | |
| 52 52 |  | 
| 53 53 | 
             
            As with `faraday-http-cache` it's recommended that `faraday-manual-cache` be fairly low in the middleware stack.
         | 
| 54 54 |  | 
| 55 | 
            +
            ## TODO
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              * Additional cache key options.
         | 
| 58 | 
            +
             | 
| 55 59 | 
             
            ## Contributing
         | 
| 56 60 |  | 
| 57 61 | 
             
            1. Fork it ( http://github.com/dobs/faraday-manual-cache/fork )
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            # coding: utf-8
         | 
| 2 2 | 
             
            Gem::Specification.new do |spec|
         | 
| 3 3 | 
             
              spec.name          = 'faraday-manual-cache'
         | 
| 4 | 
            -
              spec.version       = '0.0 | 
| 4 | 
            +
              spec.version       = '0.1.0'
         | 
| 5 5 | 
             
              spec.authors       = ['Daniel O\'Brien']
         | 
| 6 6 | 
             
              spec.email         = ['dan@dobs.org']
         | 
| 7 7 | 
             
              spec.summary       = %q(A super simple Faraday cache implementation.)
         | 
| @@ -14,6 +14,8 @@ Gem::Specification.new do |spec| | |
| 14 14 | 
             
              spec.test_files    = spec.files.grep(/^(test|spec|features)\//)
         | 
| 15 15 | 
             
              spec.require_paths = ['lib']
         | 
| 16 16 |  | 
| 17 | 
            +
              spec.required_ruby_version = '>= 1.9'
         | 
| 18 | 
            +
             | 
| 17 19 | 
             
              spec.add_dependency 'activesupport', '>= 3.0.0'
         | 
| 18 20 | 
             
              spec.add_dependency 'faraday', '~> 0.9'
         | 
| 19 21 |  | 
    
        data/lib/faraday/manual_cache.rb
    CHANGED
    
    | @@ -9,6 +9,7 @@ module Faraday | |
| 9 9 | 
             
              # Currently accepts four arguments:
         | 
| 10 10 | 
             
              #
         | 
| 11 11 | 
             
              #   :expires_in    - Cache expiry, in seconds (default: 30).
         | 
| 12 | 
            +
              #   :logger        - A logger object to send cache hit/miss/write messages.
         | 
| 12 13 | 
             
              #   :store         - An object (or lookup symbol) for an
         | 
| 13 14 | 
             
              #                    ActiveSupport::Cache::Store instance. (default:
         | 
| 14 15 | 
             
              #                    MemoryStore).
         | 
| @@ -19,9 +20,13 @@ module Faraday | |
| 19 20 | 
             
                  super(app)
         | 
| 20 21 | 
             
                  options = args.first || {}
         | 
| 21 22 | 
             
                  @expires_in    = options.fetch(:expires_in, 30)
         | 
| 23 | 
            +
                  @logger        = options.fetch(:logger, nil)
         | 
| 24 | 
            +
                  @namespace     = options.fetch(:namespace, 'faraday-manual-cache')
         | 
| 22 25 | 
             
                  @store         = options.fetch(:store, :memory_store)
         | 
| 23 26 | 
             
                  @store_options = options.fetch(:store_options, {})
         | 
| 24 27 |  | 
| 28 | 
            +
                  @store_options[:namespace] ||= @namespace
         | 
| 29 | 
            +
             | 
| 25 30 | 
             
                  initialize_store
         | 
| 26 31 | 
             
                end
         | 
| 27 32 |  | 
| @@ -32,31 +37,42 @@ module Faraday | |
| 32 37 | 
             
                protected
         | 
| 33 38 |  | 
| 34 39 | 
             
                def call!(env)
         | 
| 35 | 
            -
                   | 
| 36 | 
            -
                    cached_response(env)
         | 
| 40 | 
            +
                  response_env = cached_response(env)
         | 
| 37 41 |  | 
| 38 | 
            -
                   | 
| 39 | 
            -
                     | 
| 42 | 
            +
                  if response_env && !env.request_headers['x-faraday-manual-cache']
         | 
| 43 | 
            +
                    info "Cache HIT: #{key(env)}"
         | 
| 44 | 
            +
                    response_env.response_headers['x-faraday-manual-cache'] = 'HIT'
         | 
| 45 | 
            +
                    to_response(cached_response(env)) 
         | 
| 46 | 
            +
                  else
         | 
| 47 | 
            +
                    info "Cache MISS: #{key(env)}"
         | 
| 48 | 
            +
                    @app.call(env).on_complete do |response_env|
         | 
| 49 | 
            +
                      response_env.response_headers['x-faraday-manual-cache'] = 'MISS'
         | 
| 50 | 
            +
                      cache_response(response_env) if cacheable?(env)
         | 
| 51 | 
            +
                    end
         | 
| 40 52 | 
             
                  end
         | 
| 41 53 | 
             
                end
         | 
| 42 54 |  | 
| 43 | 
            -
                # Cache the env to the store.
         | 
| 44 55 | 
             
                def cache_response(env)
         | 
| 45 | 
            -
                   | 
| 56 | 
            +
                  info "Cache WRITE: #{key(env)}"
         | 
| 57 | 
            +
                  @store.write(key(env), env, expires_in: @expires_in)
         | 
| 46 58 | 
             
                end
         | 
| 47 59 |  | 
| 48 | 
            -
                # Whether or not the env is cacheable.
         | 
| 49 60 | 
             
                def cacheable?(env)
         | 
| 50 61 | 
             
                  env.method == :get || env.method == :head
         | 
| 51 62 | 
             
                end
         | 
| 52 63 |  | 
| 53 | 
            -
                # Retrieve (and memoize) cached response matching current env.
         | 
| 54 64 | 
             
                def cached_response(env)
         | 
| 55 | 
            -
                  @ | 
| 65 | 
            +
                  @store.fetch(key(env)) if cacheable?(env)
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                def info(message)
         | 
| 69 | 
            +
                  @logger.info(message) unless @logger.nil?
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                def key(env)
         | 
| 73 | 
            +
                  env.url
         | 
| 56 74 | 
             
                end
         | 
| 57 75 |  | 
| 58 | 
            -
                # Checks whether the specified store is a symbol, and if so attempts to
         | 
| 59 | 
            -
                # do a lookup against ActiveSupport::Cache.
         | 
| 60 76 | 
             
                def initialize_store
         | 
| 61 77 | 
             
                  return unless @store.is_a? Symbol
         | 
| 62 78 |  | 
| @@ -64,8 +80,9 @@ module Faraday | |
| 64 80 | 
             
                  @store = ActiveSupport::Cache.lookup_store(@store, @store_options)
         | 
| 65 81 | 
             
                end
         | 
| 66 82 |  | 
| 67 | 
            -
                # Massage env into a Response object.
         | 
| 68 83 | 
             
                def to_response(env)
         | 
| 84 | 
            +
                  env = env.dup
         | 
| 85 | 
            +
                  env.response_headers['x-faraday-manual-cache'] = 'HIT'
         | 
| 69 86 | 
             
                  response = Response.new
         | 
| 70 87 | 
             
                  response.finish(env) unless env.parallel?
         | 
| 71 88 | 
             
                  env.response = response
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: faraday-manual-cache
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0 | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Daniel O'Brien
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014-05- | 
| 11 | 
            +
            date: 2014-05-23 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -94,7 +94,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 94 94 | 
             
              requirements:
         | 
| 95 95 | 
             
              - - '>='
         | 
| 96 96 | 
             
                - !ruby/object:Gem::Version
         | 
| 97 | 
            -
                  version: ' | 
| 97 | 
            +
                  version: '1.9'
         | 
| 98 98 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 99 99 | 
             
              requirements:
         | 
| 100 100 | 
             
              - - '>='
         | 
| @@ -102,9 +102,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 102 102 | 
             
                  version: '0'
         | 
| 103 103 | 
             
            requirements: []
         | 
| 104 104 | 
             
            rubyforge_project: 
         | 
| 105 | 
            -
            rubygems_version: 2. | 
| 105 | 
            +
            rubygems_version: 2.0.3
         | 
| 106 106 | 
             
            signing_key: 
         | 
| 107 107 | 
             
            specification_version: 4
         | 
| 108 108 | 
             
            summary: A super simple Faraday cache implementation.
         | 
| 109 109 | 
             
            test_files: []
         | 
| 110 | 
            -
            has_rdoc: 
         |