Sha256: 24d17dc59597d3f945d8f86c1e175f920299683fedb7be841c394f2d0c32d039

Contents?: true

Size: 1.25 KB

Versions: 3

Compression:

Stored size: 1.25 KB

Contents

module NetFlix
  class Request < Valuable
 
    RESERVED_CHARACTERS = /[^A-Za-z0-9\-\._~]/

    has_value :http_method, :default => 'GET'
    has_value :url, :default => 'http://api.netflix.com/catalog/titles/index'
    has_value :parameters, :klass => HashWithIndifferentAccess, :default => {}

    def ordered_keys
      parameters.keys.sort
    end

    def parameter_string
      string = ordered_keys.map do |key|
        "#{key}=#{parameters[key]}"
      end.join('&')
    end

    def authenticator
      @auth ||= NetFlix::Authenticator.new(:request => self, :credentials => NetFlix.credentials)
    end

    def target
      URI.parse "#{url}?#{parameter_string}"
    end

    def log
      NetFlix.log(target.to_s)
    end

    def send
      authenticator.sign!
      log
      Net::HTTP.get(target)
    end

    def Request.encode(value)
      URI.escape( value, RESERVED_CHARACTERS ) if value
    end

    # validation stuff
    has_collection :errors

    def valid?
      errors.clear
      validate_http_method
      errors.empty?
    end

    def validate_http_method
      errors << "HTTP method must be POST or GET, but I got #{http_method}" unless ['POST', 'GET'].include? http_method 
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
netflix4r-0.0.2 lib/net_flix/request.rb
netflix4r-0.0.1 lib/net_flix/request.rb
netflix4r-0.0.0 lib/net_flix/request.rb