url_resolver 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 +7 -0
- data/lib/url_resolver/cache.rb +15 -0
- data/lib/url_resolver/cache_implementations/nil_class.rb +13 -0
- data/lib/url_resolver/cache_implementations/redis.rb +17 -0
- data/lib/url_resolver/cache_implementations.rb +2 -0
- data/lib/url_resolver/configuration.rb +25 -0
- data/lib/url_resolver/errors.rb +3 -0
- data/lib/url_resolver/resolver.rb +35 -0
- data/lib/url_resolver.rb +12 -0
- metadata +81 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 496aee1fd8a5be5325a8b5187ab7e0b2f05e1af2
         | 
| 4 | 
            +
              data.tar.gz: b486d650731d7e02c03795c93e50b66a5c7ffb49
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 7b69fc06bb00ea31e93a010378d703717d58df98a98a587de3f2bcfaf59e85ec2dc6339bc17070a3b26f831255999dc43842c832c772684d9d6340afa98bcd6c
         | 
| 7 | 
            +
              data.tar.gz: 685481e4f9a5917e5e8dc1841d04daca67f67c2e6bf4c1e4813e4732b46c1e70f2e912407ce82de2179b610cb00b3766da59b4cfee8c3a2abebe2aa24f3f4635
         | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            module UrlResolver
         | 
| 2 | 
            +
              class Cache
         | 
| 3 | 
            +
                def initialize(cache = nil)
         | 
| 4 | 
            +
                  @cache = cache
         | 
| 5 | 
            +
              
         | 
| 6 | 
            +
                  if cache.class.name == 'Redis'
         | 
| 7 | 
            +
                    extend CacheImplementations::RedisCache
         | 
| 8 | 
            +
                  elsif cache.class.name == 'NilClass'
         | 
| 9 | 
            +
                    extend CacheImplementations::NilClassCache
         | 
| 10 | 
            +
                  else
         | 
| 11 | 
            +
                    raise ArgumentError.new("Invalid cache class: #{cache.class}")
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            module UrlResolver
         | 
| 2 | 
            +
              module CacheImplementations
         | 
| 3 | 
            +
                module RedisCache
         | 
| 4 | 
            +
                  def set_url(url, destination, ttl = 86400)
         | 
| 5 | 
            +
                    @cache.setex(url, ttl, destination)
         | 
| 6 | 
            +
                  end
         | 
| 7 | 
            +
                
         | 
| 8 | 
            +
                  def get_url(url)
         | 
| 9 | 
            +
                    @cache.get(url)
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
                  
         | 
| 12 | 
            +
                  def cache_key(url)
         | 
| 13 | 
            +
                    "url_resolver.urls.#{url}"
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            module UrlResolver
         | 
| 2 | 
            +
              class Configuration
         | 
| 3 | 
            +
                attr_accessor :cache_failures
         | 
| 4 | 
            +
                attr_reader :cache, :url_cache
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                def initialize
         | 
| 7 | 
            +
                  @cache_failures = true
         | 
| 8 | 
            +
                  @cache = nil
         | 
| 9 | 
            +
                  @url_cache = Cache.new(@cache)
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
                
         | 
| 12 | 
            +
                def cache=(cache)
         | 
| 13 | 
            +
                  @cache = cache
         | 
| 14 | 
            +
                  @url_cache = Cache.new(@cache)
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
              
         | 
| 18 | 
            +
              def self.configuration
         | 
| 19 | 
            +
                @configuration ||= Configuration.new
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              def self.configure
         | 
| 23 | 
            +
                yield(configuration)
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            require 'rest-client'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module UrlResolver
         | 
| 4 | 
            +
              class Resolver
         | 
| 5 | 
            +
                def cache
         | 
| 6 | 
            +
                  UrlResolver.configuration.url_cache
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def resolve(url)
         | 
| 10 | 
            +
                  url_to_check = URI.escape(url)
         | 
| 11 | 
            +
                  cached_url = cache.get_url(url_to_check)
         | 
| 12 | 
            +
                  return cached_url if cached_url
         | 
| 13 | 
            +
                  
         | 
| 14 | 
            +
                  response = RestClient.head(url_to_check)
         | 
| 15 | 
            +
                  response.args[:url].tap do |final_url|
         | 
| 16 | 
            +
                    cache.set_url(url_to_check, final_url)
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                rescue SocketError,
         | 
| 19 | 
            +
                  Errno::ETIMEDOUT,
         | 
| 20 | 
            +
                  RestClient::InternalServerError,
         | 
| 21 | 
            +
                  RestClient::ServiceUnavailable,
         | 
| 22 | 
            +
                  RestClient::BadRequest,
         | 
| 23 | 
            +
                  RestClient::GatewayTimeout,
         | 
| 24 | 
            +
                  RestClient::RequestTimeout,
         | 
| 25 | 
            +
                  RestClient::ResourceNotFound,
         | 
| 26 | 
            +
                  RestClient::BadGateway,
         | 
| 27 | 
            +
                  RestClient::Forbidden
         | 
| 28 | 
            +
              
         | 
| 29 | 
            +
                  cache.set_url(url_to_check, url) if UrlResolver.configuration.cache_failures
         | 
| 30 | 
            +
                  url
         | 
| 31 | 
            +
                rescue Exception => e
         | 
| 32 | 
            +
                  raise UrlResolverError.new("#{e.class.to_s}: #{url}")
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
            end
         | 
    
        data/lib/url_resolver.rb
    ADDED
    
    | @@ -0,0 +1,12 @@ | |
| 1 | 
            +
            require_relative 'url_resolver/cache.rb'
         | 
| 2 | 
            +
            require_relative 'url_resolver/cache_implementations.rb'
         | 
| 3 | 
            +
            require_relative 'url_resolver/configuration.rb'
         | 
| 4 | 
            +
            require_relative 'url_resolver/errors.rb'
         | 
| 5 | 
            +
            require_relative 'url_resolver/resolver.rb'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module UrlResolver
         | 
| 8 | 
            +
              def self.resolve(url)
         | 
| 9 | 
            +
                @@resolver ||= UrlResolver::Resolver.new
         | 
| 10 | 
            +
                @@resolver.resolve(url)
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,81 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: url_resolver
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Amir Manji
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2014-03-08 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: rest-client
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - '>='
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: 1.6.7
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - '>='
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: 1.6.7
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: rspec
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - '>='
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: 2.14.7
         | 
| 34 | 
            +
              type: :development
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - '>='
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: 2.14.7
         | 
| 41 | 
            +
            description: Simple gem to follow redirects to resolve the destination of a URL. Caches
         | 
| 42 | 
            +
              results sometimes.
         | 
| 43 | 
            +
            email: amanji75@gmail.com
         | 
| 44 | 
            +
            executables: []
         | 
| 45 | 
            +
            extensions: []
         | 
| 46 | 
            +
            extra_rdoc_files: []
         | 
| 47 | 
            +
            files:
         | 
| 48 | 
            +
            - lib/url_resolver/cache.rb
         | 
| 49 | 
            +
            - lib/url_resolver/cache_implementations/nil_class.rb
         | 
| 50 | 
            +
            - lib/url_resolver/cache_implementations/redis.rb
         | 
| 51 | 
            +
            - lib/url_resolver/cache_implementations.rb
         | 
| 52 | 
            +
            - lib/url_resolver/configuration.rb
         | 
| 53 | 
            +
            - lib/url_resolver/errors.rb
         | 
| 54 | 
            +
            - lib/url_resolver/resolver.rb
         | 
| 55 | 
            +
            - lib/url_resolver.rb
         | 
| 56 | 
            +
            homepage: http://www.github.com/amirmanji/url_resolver
         | 
| 57 | 
            +
            licenses:
         | 
| 58 | 
            +
            - MIT
         | 
| 59 | 
            +
            metadata: {}
         | 
| 60 | 
            +
            post_install_message: 
         | 
| 61 | 
            +
            rdoc_options: []
         | 
| 62 | 
            +
            require_paths:
         | 
| 63 | 
            +
            - lib
         | 
| 64 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
              requirements:
         | 
| 66 | 
            +
              - - '>='
         | 
| 67 | 
            +
                - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                  version: '0'
         | 
| 69 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 70 | 
            +
              requirements:
         | 
| 71 | 
            +
              - - '>='
         | 
| 72 | 
            +
                - !ruby/object:Gem::Version
         | 
| 73 | 
            +
                  version: '0'
         | 
| 74 | 
            +
            requirements: []
         | 
| 75 | 
            +
            rubyforge_project: 
         | 
| 76 | 
            +
            rubygems_version: 2.0.3
         | 
| 77 | 
            +
            signing_key: 
         | 
| 78 | 
            +
            specification_version: 4
         | 
| 79 | 
            +
            summary: Url Resolver!
         | 
| 80 | 
            +
            test_files: []
         | 
| 81 | 
            +
            has_rdoc: 
         |