Ruby Notes

From PerformIQ Knowledgebase
Jump to: navigation, search

References

Source of Gems

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

Here are a few reference on the subject...

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.

String Functions

To change case:

capitalize - first character to upper, rest to lower
downcase - all to lower case
swapcase - changes the case of all letters
upcase - all to upper case

To rejustify:

center - add white space padding to center string
ljust - pads string, left justified
rjust - pads string, right justified

To trim:

chop - remove last character
chomp - remove trailing line separators
squeeze - reduces successive equal characters to singles
strip - deletes leading and trailing white space

To examine:

count - return a count of matches
empty? - returns true if empty
include? - is a specified target string present in the source?
index - return the position of one string in another
length or size - return the length of a string
rindex - returns the last position of one string in another
slice - returns a partial string

To encode and alter:

crypt - password encryption
delete - delete an intersection
dump - adds extra \ characters to escape specials
hex - takes string as hex digits and returns number
next or succ - successive or next string (eg ba -> bb)
oct - take string as octal digits and returns number
replace - replace one string with another
reverse - turns the string around
slice! - DELETES a partial string and returns the part deleted
split - returns an array of partial strings exploded at separator
sum - returns a checksum of the string
to_f and to_i - return string converted to float and integer
tr - to map all occurrences of specified char(s) to other char(s)
tr_s - as tr, then squeeze out resultant duplicates
unpack - to extract from a string into an array using a template

To iterate:

each - process each character in turn
each_line - process each line in a string
each_byte - process each byte in turn
upto - iterate through successive strings (see "next" above)

append (<<) versus concat (+)

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

Arrays

Files

Here Documents

A way of handling multi-line text in scripts

Enumerations