Advertisement
Azure

QDB ruby script test 3

Jul 22nd, 2011
398
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.25 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. require 'open-uri'
  4. require 'nokogiri'
  5. require 'cgi'
  6.  
  7. module QDB
  8.     class Base
  9.         attr_accessor :id
  10.         attr_reader :lines
  11.         attr_reader :url
  12.        
  13.         def initialize params={}
  14.             id = params[:id]||nil;
  15.             lines = params[:lines]||4;
  16.            
  17.             if id == nil && return_hash == true
  18.                 raise "You cannot return a hash with a nil ID."
  19.             end
  20.            
  21.             @id = id
  22.             @lines = lines
  23.            
  24.             if !@id.nil?
  25.                 @id = retrieve_latest_quote_id if @id.to_s.to_sym === :latest
  26.                 self.retrieve_quote
  27.                 self.retrieve_meta
  28.             end
  29.         end
  30.        
  31.         def retrieve_latest_quote_id
  32.             raise "retrieve_latest_quote_id must be overridden."
  33.         end
  34.  
  35.         def retrieve_quote params={}
  36.             raise "retrieve_quote must be overridden."
  37.         end
  38.    
  39.         def retrieve_meta params={}
  40.             raise "retrieve_meta must be overridden."
  41.         end
  42.        
  43.         def format lines = 4
  44.             {
  45.                 :id => @id,
  46.                 :quote => self.retrieve_quote(:id => @id, :lines => lines),
  47.                 :meta => self.retrieve_meta(:id => @id),
  48.                 :lines => @lines,
  49.                 :url => @url,
  50.             }
  51.         end
  52.     end
  53.  
  54.     class Bash < Base
  55.         @@_base_url = "http://bash.org/"
  56.        
  57.         def retrieve_latest_quote_id
  58.             url = "#{@@_base_url}?latest"
  59.             o = Nokogiri::HTML(open(url));
  60.             id = CGI.unescape_html o.at(".quote a b").children.to_s.strip.gsub("\r","").gsub("#","")
  61.             id.to_i
  62.         end
  63.    
  64.         def retrieve_quote params={}
  65.             id = params[:id]||:latest;
  66.             lines = params[:lines]||4;
  67.            
  68.             @url = "#{@@_base_url}?#{id}"
  69.             o = Nokogiri::HTML(open(@url))
  70.             quotes = CGI.unescape_html o.at(".qt").children.to_s.gsub(/[\r\n]/,"")
  71.             quotes = quotes.split(/<br *\/?>/i)
  72.             @lines = quotes.size
  73.            
  74.             quotes[0..lines-1]
  75.         end
  76.    
  77.         def retrieve_meta params={}
  78.             id = params[:id]||:latest;
  79.            
  80.             @url = "#{@@_base_url}?#{id}"
  81.             o = Nokogiri::HTML(open(@url))
  82.             rating = o.at(".quote").children.to_s.match(/\((-?\d+)\)/)[1]
  83.            
  84.             "Rating: #{rating}"
  85.         end
  86.     end
  87. end
  88.  
  89. ## Begin testing.
  90.  
  91. bash = QDB::Bash.new(:id => 61129).format
  92.  
  93. output = []
  94. output << "Bash quote ##{bash[:id]} (#{bash[:meta]}):"
  95. output << bash[:quote]
  96.  
  97. footer = ["View"]
  98. footer << (bash[:lines] > bash[:quote].size ? "more from" : nil)
  99. footer << "this quote at #{bash[:url]}."
  100. output << footer.reject(&:nil?).join(" ")
  101.    
  102. puts output.reject(&:nil?).join("\n");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement