Ruby Notes

From PeformIQ Upgrade
Revision as of 10:40, 23 September 2009 by PeterHarding (talk | contribs)
Jump to navigation Jump to search

References

Class vs. Instance Variables

HTTP

Refactor

module Anubis
	module ShardAccess
	
		require "net/http"
		
		LIB_VERSION = 'r1b'
		
		class Read
			
			attr_accessor :path, :body, :headers
			
			def initialize( path_in, body_in, accept='xml', limit=10 )
				self.path = path_in
				self.body = body_in
				self.headers = {  
					'Interface' => 'S1',
					'Accept' => accept,
					'Limit' => limit.to_s,
					'Content-Type' => 'application/x-www-form-urlencoded',
					'User-Agent' => 'RB_SHARD_ACCESS_LIB_' + Anubis::ShardAccess::LIB_VERSION
				}
			end
			
			def call ( host, port )
				http = Net::HTTP.new( host, port )
				resp = http.post2( @path, @body, @headers )
			end
		end
	end
end

host = 'IP.AD.RE.SS'
port = 10001
path = '/message'
body = "query_string"

req = Anubis::ShardAccess::Read.new( path, body, 'csv', 1 )

data = req.call( host, port )

puts data.body

to

# no need to put this within the module body as it will be loaded regardless
require 'net/http'

module Anubis
  module ShardAccess
    
    LIB_VERSION = 'r1b'
    
    class Read
      attr_accessor :path, :body, :headers
      
      #usually past a few args you should provide an options has to make things more readable
      # such as Read.new foo, bar, :accept => :csv, :limit => 1
      def initialize path, body, options = {}
        @path, @body = path, body
        @headers = {  
          'Interface' => 'S1',
          'Accept' => options.fetch(:accept, :xml), # Hash#fetch will use the keys value when found, otherwise the second argument is used (:xml)
          'Limit' => options.fetch(:limit, 10),
          'Content-Type' => 'application/x-www-form-urlencoded',
          'User-Agent' => 'RB_SHARD_ACCESS_LIB_' + LIB_VERSION
        }
      end
      
      def call host, port
        Net::HTTP.new(host, port).post2 path, body, headers
      end
    end
  end
end