Sha256: 129e60b9d00e18db2b27fc0eb66a5e7489c932910b970b252e97a4b23de125a7

Contents?: true

Size: 1.65 KB

Versions: 2

Compression:

Stored size: 1.65 KB

Contents

module Virility
	class Excitation
		attr_accessor :url, :results, :strategies

		#
		# Initialization
		#

		def initialize url
			@url = encode url
			@strategies = {}
			@results = {}
			collect_strategies
		end

		#
		# Get Virility from all of the Strategies
		#

		def get_virility
			@strategies.each do |name, strategy|
				begin
					@results[symbolize_for_key(strategy)] = strategy.get_virility
				rescue => e
					puts "[virility] #{strategy.class.to_s} => #{e}"
				end
			end
			@results
		end

		def get_response(strategy)
			@strategies[strategy].response if @strategies[strategy]
		end

		#
		# Gather all of the Strategies
		#

		def collect_strategies
			Dir["#{File.dirname(__FILE__)}/strategies/**/*.rb"].each { |klass| @strategies[get_class_string(klass).to_sym] = Virility.const_get(camelize(get_class_string(klass))).new(@url) }
		end

		#
		# URL Encoding / Decoding Methods
		#

		def encode url
			CGI.escape url
		end

		def url
			CGI.unescape @url
		end

		def escaped_url
			@url
		end

		#
		# Camelize
		#

		def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true)
		  if first_letter_in_uppercase
		    lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
		  else
		    lower_case_and_underscored_word.first + camelize(lower_case_and_underscored_word)[1..-1]
		  end
		end

		#
		# Convert Class Name To Appropriate Key Symbol
		#

		def symbolize_for_key(klass)
			klass.class.to_s.gsub(/Virility::/, '').downcase.to_sym
		end

		def get_class_string(klass)
			File.basename(klass).gsub(/\.rb/,'')
		end

		#
		# Reflection
		#

		def attributes
			{:url => @url}
		end

	end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
virility-0.0.2 lib/virility/excitation.rb
virility-0.0.1 lib/virility/excitation.rb