Difference between revisions of "Ruby Notes"

From PeformIQ Upgrade
Jump to navigation Jump to search
Line 14: Line 14:
!Name Begins With
!Name Begins With
!Variable Scope
!Variable Scope
|- style="font-style:italic; color:green;"
|-  
|$
|style="font-style:italic; color:green;" |$
|A global variable
|A global variable
|-
|-

Revision as of 11:01, 23 September 2009

References

Variables

Naming Conventions

Name Begins With Variable Scope
$ A global variable
@ An instance variable
[a-z] or _ A local variable
[A-Z] A constant
@@ A class variable

$ Variables

Variable Name Variable Value
$@ The location of latest error
$_ The string last read by gets
$. The line number last read by interpreter
$& The string last matched by regexp
$~ The last regexp match, as an array of subexpressions
$n The nth subexpression in the last match (same as $~[n])
$= The case-insensitivity flag
$/ The input record separator
$\ The output record separator
$0 The name of the ruby script file currently executing
$* The command line arguments used to invoke the script
$$ The Ruby interpreter's process ID
$? The exit status of last executed child process

Class vs. Instance Variables

The definition of the class instance variable is the fragment

class << self; attr_accessor :instances; end.

This defines an instance variable (and getters and setters) on the class that's inherited by its descendents. Unlike class variables these class instance variables will take different values for each class object.

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