Ruby Notes
Revision as of 10:40, 23 September 2009 by PeterHarding (talk | contribs)
References
Class vs. Instance Variables
- http://railstips.org/2006/11/18/class-and-instance-variables-in-ruby
- http://sporkmonger.com/2007/2/19/instance-variables-class-variables-and-inheritance-in-ruby
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